Opened 2 years ago

Last modified 2 years ago

#8776 new defect

ffmpeg pad filter in_w constant is wrong

Reported by: abdullah2993 Owned by:
Priority: normal Component: ffmpeg
Version: 4.2 Keywords: pad
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
with some images when using

-filter_complex "[0:v]pad=iw:ih+10:0:0"

the padded area is less then the input image eventhough we are using iw to set the width of the padding
Sample Image: https://i.imgur.com/e0ZQdcp.jpg
How to reproduce:

ffmpeg.exe -i in.jpg -filter_complex "[0:v]pad=iw:ih+10:0:0" out.jpg

Report log:

ffmpeg started on 2020-07-06 at 20:03:30
Report written to "ffmpeg-20200706-200330.log"
Command line:
"C:\\ProgramData\\chocolatey\\lib\\ffmpeg\\tools\\ffmpeg\\bin\\ffmpeg.exe" -i e0ZQdcp.jpg -filter_complex "[0:v]pad=iw:ih+10:0:0" _tmp__1594044405775090000_c2769cf415c601ed85d2583664c62104.jpg -report
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.1.1 (GCC) 20190807
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Splitting the commandline.
Reading option '-i' ... matched as input url with argument 'e0ZQdcp.jpg'.
Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument '[0:v]pad=iw:ih+10:0:0'.
Reading option '_tmp__1594044405775090000_c2769cf415c601ed85d2583664c62104.jpg' ... matched as output url.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option filter_complex (create a complex filtergraph) with argument [0:v]pad=iw:ih+10:0:0.
Applying option report (generate a report) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url e0ZQdcp.jpg.
Successfully parsed a group of options.
Opening an input file: e0ZQdcp.jpg.
[NULL @ 000001b4fba4a500] Opening 'e0ZQdcp.jpg' for reading
[file @ 000001b4fba4b580] Setting default whitelist 'file,crypto'
[image2 @ 000001b4fba4a500] Format image2 probed with size=2048 and score=50
[image2 @ 000001b4fba4a500] Before avformat_find_stream_info() pos: 0 bytes read:12276 seeks:0 nb_streams:1
[mjpeg @ 000001b4fba5c840] marker=d8 avail_size_in_buf=12274
[mjpeg @ 000001b4fba5c840] marker parser used 0 bytes (0 bits)
[mjpeg @ 000001b4fba5c840] marker=db avail_size_in_buf=12272
[mjpeg @ 000001b4fba5c840] index=0
[mjpeg @ 000001b4fba5c840] qscale[0]: 1
[mjpeg @ 000001b4fba5c840] marker parser used 67 bytes (536 bits)
[mjpeg @ 000001b4fba5c840] marker=db avail_size_in_buf=12203
[mjpeg @ 000001b4fba5c840] index=1
[mjpeg @ 000001b4fba5c840] qscale[1]: 1
[mjpeg @ 000001b4fba5c840] marker parser used 67 bytes (536 bits)
[mjpeg @ 000001b4fba5c840] marker=c0 avail_size_in_buf=12134
[mjpeg @ 000001b4fba5c840] Changing bps from 0 to 8
[mjpeg @ 000001b4fba5c840] sof0: picture: 623x640
[mjpeg @ 000001b4fba5c840] component 0 2:2 id: 0 quant:0
[mjpeg @ 000001b4fba5c840] component 1 1:1 id: 1 quant:1
[mjpeg @ 000001b4fba5c840] component 2 1:1 id: 2 quant:1
[mjpeg @ 000001b4fba5c840] pix fmt id 22111100
[mjpeg @ 000001b4fba5c840] Format yuvj420p chosen by get_format().
[mjpeg @ 000001b4fba5c840] marker parser used 17 bytes (136 bits)
[mjpeg @ 000001b4fba5c840] marker=c4 avail_size_in_buf=12115
[mjpeg @ 000001b4fba5c840] marker parser used 0 bytes (0 bits)
[mjpeg @ 000001b4fba5c840] marker=c4 avail_size_in_buf=12083
[mjpeg @ 000001b4fba5c840] marker parser used 0 bytes (0 bits)
[mjpeg @ 000001b4fba5c840] marker=c4 avail_size_in_buf=11988
[mjpeg @ 000001b4fba5c840] marker parser used 0 bytes (0 bits)
[mjpeg @ 000001b4fba5c840] marker=c4 avail_size_in_buf=11960
[mjpeg @ 000001b4fba5c840] marker parser used 0 bytes (0 bits)
[mjpeg @ 000001b4fba5c840] escaping removed 74 bytes
[mjpeg @ 000001b4fba5c840] marker=da avail_size_in_buf=11921
[mjpeg @ 000001b4fba5c840] marker parser used 11847 bytes (94776 bits)
[mjpeg @ 000001b4fba5c840] marker=d9 avail_size_in_buf=0
[mjpeg @ 000001b4fba5c840] decode frame unused 0 bytes
[image2 @ 000001b4fba4a500] After avformat_find_stream_info() pos: 12276 bytes read:12276 seeks:0 frames:1
Input #0, image2, from 'e0ZQdcp.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 2455 kb/s
    Stream #0:0, 1, 1/25: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 623x640, 25 tbr, 25 tbn, 25 tbc
Successfully opened the file.
[Parsed_pad_0 @ 000001b4fba5ce40] Setting 'width' to value 'iw'
[Parsed_pad_0 @ 000001b4fba5ce40] Setting 'height' to value 'ih+10'
[Parsed_pad_0 @ 000001b4fba5ce40] Setting 'x' to value '0'
[Parsed_pad_0 @ 000001b4fba5ce40] Setting 'y' to value '0'
Parsing a group of options: output url _tmp__1594044405775090000_c2769cf415c601ed85d2583664c62104.jpg.
Successfully parsed a group of options.
Opening an output file: _tmp__1594044405775090000_c2769cf415c601ed85d2583664c62104.jpg.
Successfully opened the file.
Stream mapping:
  Stream #0:0 (mjpeg) -> pad
  pad -> Stream #0:0 (mjpeg)
Press [q] to stop, [?] for help
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
[mjpeg @ 000001b4fba54380] marker=d8 avail_size_in_buf=12274
[mjpeg @ 000001b4fba54380] marker parser used 0 bytes (0 bits)
[mjpeg @ 000001b4fba54380] marker=db avail_size_in_buf=12272
[mjpeg @ 000001b4fba54380] index=0
[mjpeg @ 000001b4fba54380] qscale[0]: 1
[mjpeg @ 000001b4fba54380] marker parser used 67 bytes (536 bits)
[mjpeg @ 000001b4fba54380] marker=db avail_size_in_buf=12203
[mjpeg @ 000001b4fba54380] index=1
[mjpeg @ 000001b4fba54380] qscale[1]: 1
[mjpeg @ 000001b4fba54380] marker parser used 67 bytes (536 bits)
[mjpeg @ 000001b4fba54380] marker=c0 avail_size_in_buf=12134
[mjpeg @ 000001b4fba54380] sof0: picture: 623x640
[mjpeg @ 000001b4fba54380] component 0 2:2 id: 0 quant:0
[mjpeg @ 000001b4fba54380] component 1 1:1 id: 1 quant:1
[mjpeg @ 000001b4fba54380] component 2 1:1 id: 2 quant:1
[mjpeg @ 000001b4fba54380] pix fmt id 22111100
[mjpeg @ 000001b4fba54380] Format yuvj420p chosen by get_format().
[mjpeg @ 000001b4fba54380] marker parser used 17 bytes (136 bits)
[mjpeg @ 000001b4fba54380] marker=c4 avail_size_in_buf=12115
[mjpeg @ 000001b4fba54380] class=0 index=0 nb_codes=11
[mjpeg @ 000001b4fba54380] marker parser used 30 bytes (240 bits)
[mjpeg @ 000001b4fba54380] marker=c4 avail_size_in_buf=12083
[mjpeg @ 000001b4fba54380] class=1 index=0 nb_codes=214
[mjpeg @ 000001b4fba54380] marker parser used 93 bytes (744 bits)
[mjpeg @ 000001b4fba54380] marker=c4 avail_size_in_buf=11988
[mjpeg @ 000001b4fba54380] class=0 index=1 nb_codes=8
[mjpeg @ 000001b4fba54380] marker parser used 26 bytes (208 bits)
[mjpeg @ 000001b4fba54380] marker=c4 avail_size_in_buf=11960
[mjpeg @ 000001b4fba54380] class=1 index=1 nb_codes=82
[mjpeg @ 000001b4fba54380] marker parser used 37 bytes (296 bits)
[mjpeg @ 000001b4fba54380] escaping removed 74 bytes
[mjpeg @ 000001b4fba54380] marker=da avail_size_in_buf=11921
[mjpeg @ 000001b4fba54380] component: 0
[mjpeg @ 000001b4fba54380] component: 1
[mjpeg @ 000001b4fba54380] component: 2
[mjpeg @ 000001b4fba54380] marker parser used 11846 bytes (94765 bits)
[mjpeg @ 000001b4fba54380] marker=d9 avail_size_in_buf=0
[mjpeg @ 000001b4fba54380] decode frame unused 0 bytes
detected 12 logical cores
[Parsed_pad_0 @ 000001b4fba59780] Setting 'width' to value 'iw'
[Parsed_pad_0 @ 000001b4fba59780] Setting 'height' to value 'ih+10'
[Parsed_pad_0 @ 000001b4fba59780] Setting 'x' to value '0'
[Parsed_pad_0 @ 000001b4fba59780] Setting 'y' to value '0'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] Setting 'video_size' to value '623x640'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] Setting 'pix_fmt' to value '12'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] Setting 'time_base' to value '1/25'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] Setting 'pixel_aspect' to value '0/1'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] Setting 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 000001b4fba5c0c0] w:623 h:640 pixfmt:yuvj420p tb:1/25 fr:25/1 sar:0/1 sws_param:flags=2
[format @ 000001b4fbb07980] Setting 'pix_fmts' to value 'yuvj420p|yuvj422p|yuvj444p'
[AVFilterGraph @ 000001b4fba59680] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed
[Parsed_pad_0 @ 000001b4fba59780] w:623 h:640 -> w:622 h:650 x:0 y:0 color:0x000000FF
[Parsed_pad_0 @ 000001b4fba59780] Input area 0:0:623:640 not within the padded area 0:0:622:650 or zero-sized
[Parsed_pad_0 @ 000001b4fba59780] Failed to configure input pad on Parsed_pad_0
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
[AVIOContext @ 000001b4fba53800] Statistics: 12276 bytes read, 0 seeks
Conversion failed!

Change History (1)

comment:1 by Elon Musk, 2 years ago

You can not pad subsampled pixel formats at odd boundary.

Note: See TracTickets for help on using tickets.