[FFmpeg-trac] #10430(swscale:new): Wrong yuv420p to rgb24 result on macOS m1 arm64
FFmpeg
trac at avcodec.org
Thu Jun 22 17:39:40 EEST 2023
#10430: Wrong yuv420p to rgb24 result on macOS m1 arm64
---------------------------------+----------------------------------
Reporter: lja | Type: defect
Status: new | Priority: normal
Component: swscale | Version: 6.0
Keywords: yuv2rgb | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
---------------------------------+----------------------------------
Hi
__Summary of the bug:__
For some unit tests on a project I ended up seeing different results when
decoding a constant gray sample video from mpeg4 to rgb24 depending if I'm
on macOS x86_64 or arm64.
I generated the sample video `sample_gray_100.avi` from a constant gray
value RGB[100,100,100] (0x646464 in hex). I first confirmed that playing
the video on VLC for both architectures display the same correct output of
the expected constant gray `0x646464` value.
Here is how to reproduce, testing on a single gray frame of size 2x2:
{{{
% ffmpeg -v 9 -loglevel 99 -i sample_gray_100.avi -vf
select='eq(n\,1)',showinfo -f rawvideo -pix_fmt rgb24 -sws_flags
print_info - | hexdump
}}}
Below are the two outputs on macOS x86_64 and arm64
macOS **x86_64**:
{{{
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with Apple clang version 14.0.0 (clang-1400.0.29.202)
configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0 --enable-shared
--enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom
--enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-
libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-
librubberband --enable-libsnappy --enable-libsrt --enable-libsvtav1
--enable-libtesseract --enable-libtheora --enable-libvidstab --enable-
libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-
libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma
--enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-
libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-
libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
--enable-audiotoolbox
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with
argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument '99'.
Reading option '-i' ... matched as input url with argument
'sample_gray_100.avi'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with
argument 'select=eq(n\,1),showinfo'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'rawvideo'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel
format) with argument 'rgb24'.
Reading option '-sws_flags' ... matched as AVOption 'sws_flags' with
argument 'print_info'.
Reading option '-' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Successfully parsed a group of options.
Parsing a group of options: input url sample_gray_100.avi.
Successfully parsed a group of options.
Opening an input file: sample_gray_100.avi.
[NULL @ 0x7f85d87054c0] Opening 'sample_gray_100.avi' for reading
[file @ 0x7f85d87057c0] Setting default whitelist 'file,crypto,data'
Probing avi score:100 size:2048
[avi @ 0x7f85d87054c0] Format avi probed with size=2048 and score=100
[avi @ 0x7f85d9004080] use odml:1
[avi @ 0x7f85d87054c0] pos:14 tag: tag=LIST size=0x11ec
[avi @ 0x7f85d87054c0] pos:18 list: tag=hdrl size=0x0
[avi @ 0x7f85d87054c0] pos:20 tag: tag=avih size=0x38
[avi @ 0x7f85d87054c0] pos:60 tag: tag=LIST size=0x1094
[avi @ 0x7f85d87054c0] pos:64 list: tag=strl size=0x0
[avi @ 0x7f85d87054c0] pos:6C tag: tag=strh size=0x38
[avi @ 0x7f85d87054c0] pos:74 strh: tag=vids size=0xffffffff
[avi @ 0x7f85d87054c0] 30 1 0
[avi @ 0x7f85d87054c0] pos:AC tag: tag=strf size=0x28
[avi @ 0x7f85d87054c0] pos:D4 video: tag=DIVX size=0x0
[avi @ 0x7f85d87054c0] pos:DC tag: tag=JUNK size=0x1018
[avi @ 0x7f85d87054c0] pos:10FC tag: tag=JUNK size=0x104
[avi @ 0x7f85d87054c0] pos:1208 tag: tag=LIST size=0x1a
[avi @ 0x7f85d87054c0] pos:120C list: tag=INFO size=0x0
[avi @ 0x7f85d87054c0] pos:122A tag: tag=JUNK size=0x3f8
[avi @ 0x7f85d87054c0] pos:162A tag: tag=LIST size=0x28c
[avi @ 0x7f85d87054c0] pos:162E list: tag=movi size=0x0
[avi @ 0x7f85d87054c0] movi end=18b6
[avi @ 0x7f85d87054c0] movi_end=0x18b6
[avi @ 0x7f85d87054c0] 0: tag=0x63643030 flags=0x10 pos=0x4 len=64/64
cum_len=0
[avi @ 0x7f85d87054c0] 1: tag=0x63643030 flags=0x0 pos=0x4c len=8/8
cum_len=1
[avi @ 0x7f85d87054c0] 2: tag=0x63643030 flags=0x0 pos=0x5c len=8/8
cum_len=2
[avi @ 0x7f85d87054c0] 3: tag=0x63643030 flags=0x0 pos=0x6c len=8/8
cum_len=3
[avi @ 0x7f85d87054c0] 4: tag=0x63643030 flags=0x0 pos=0x7c len=8/8
cum_len=4
[avi @ 0x7f85d87054c0] 5: tag=0x63643030 flags=0x0 pos=0x8c len=8/8
cum_len=5
[avi @ 0x7f85d87054c0] 6: tag=0x63643030 flags=0x0 pos=0x9c len=8/8
cum_len=6
[avi @ 0x7f85d87054c0] 7: tag=0x63643030 flags=0x0 pos=0xac len=8/8
cum_len=7
[avi @ 0x7f85d87054c0] 8: tag=0x63643030 flags=0x0 pos=0xbc len=8/8
cum_len=8
[avi @ 0x7f85d87054c0] 9: tag=0x63643030 flags=0x0 pos=0xcc len=8/8
cum_len=9
[avi @ 0x7f85d87054c0] 10: tag=0x63643030 flags=0x0 pos=0xdc len=8/8
cum_len=10
[avi @ 0x7f85d87054c0] 11: tag=0x63643030 flags=0x0 pos=0xec len=8/8
cum_len=11
[avi @ 0x7f85d87054c0] 12: tag=0x63643030 flags=0x10 pos=0xfc len=64/64
cum_len=12
[avi @ 0x7f85d87054c0] 13: tag=0x63643030 flags=0x0 pos=0x144 len=8/8
cum_len=13
[avi @ 0x7f85d87054c0] 14: tag=0x63643030 flags=0x0 pos=0x154 len=8/8
cum_len=14
[avi @ 0x7f85d87054c0] 15: tag=0x63643030 flags=0x0 pos=0x164 len=8/8
cum_len=15
[avi @ 0x7f85d87054c0] 16: tag=0x63643030 flags=0x0 pos=0x174 len=8/8
cum_len=16
[avi @ 0x7f85d87054c0] 17: tag=0x63643030 flags=0x0 pos=0x184 len=8/8
cum_len=17
[avi @ 0x7f85d87054c0] 18: tag=0x63643030 flags=0x0 pos=0x194 len=8/8
cum_len=18
[avi @ 0x7f85d87054c0] 19: tag=0x63643030 flags=0x0 pos=0x1a4 len=8/8
cum_len=19
[avi @ 0x7f85d87054c0] 20: tag=0x63643030 flags=0x0 pos=0x1b4 len=8/8
cum_len=20
[avi @ 0x7f85d87054c0] 21: tag=0x63643030 flags=0x0 pos=0x1c4 len=8/8
cum_len=21
[avi @ 0x7f85d87054c0] 22: tag=0x63643030 flags=0x0 pos=0x1d4 len=8/8
cum_len=22
[avi @ 0x7f85d87054c0] 23: tag=0x63643030 flags=0x0 pos=0x1e4 len=8/8
cum_len=23
[avi @ 0x7f85d87054c0] 24: tag=0x63643030 flags=0x10 pos=0x1f4 len=64/64
cum_len=24
[avi @ 0x7f85d87054c0] 25: tag=0x63643030 flags=0x0 pos=0x23c len=8/8
cum_len=25
[avi @ 0x7f85d87054c0] 26: tag=0x63643030 flags=0x0 pos=0x24c len=8/8
cum_len=26
[avi @ 0x7f85d87054c0] 27: tag=0x63643030 flags=0x0 pos=0x25c len=8/8
cum_len=27
[avi @ 0x7f85d87054c0] 28: tag=0x63643030 flags=0x0 pos=0x26c len=8/8
cum_len=28
[avi @ 0x7f85d87054c0] 29: tag=0x63643030 flags=0x0 pos=0x27c len=8/8
cum_len=29
[avi @ 0x7f85d87054c0] Before avformat_find_stream_info() pos: 5678 bytes
read:6814 seeks:0 nb_streams:1
[mpeg4 @ 0x7f85d9004640] Format yuv420p chosen by get_format().
[avi @ 0x7f85d87054c0] All info found
[avi @ 0x7f85d87054c0] stream 0: start_time: 0 duration: 1
[avi @ 0x7f85d87054c0] format: start_time: 0 duration: 1 (estimate from
stream) bitrate=54 kb/s
[avi @ 0x7f85d87054c0] After avformat_find_stream_info() pos: 5750 bytes
read:6814 seeks:0 frames:1
Input #0, avi, from 'sample_gray_100.avi':
Metadata:
software : Lavf59.27.100
Duration: 00:00:01.00, start: 0.000000, bitrate: 54 kb/s
Stream #0:0, 1, 1/30: Video: mpeg4 (Simple Profile), 1 reference frame
(DIVX / 0x58564944), yuv420p(left), 2x2 [SAR 1:1 DAR 1:1], 0/1, 30 fps, 30
tbr, 30 tbn
Successfully opened the file.
Parsing a group of options: output url -.
Applying option vf (set video filters) with argument
select=eq(n\,1),showinfo.
Applying option f (force format) with argument rawvideo.
Applying option pix_fmt (set pixel format) with argument rgb24.
Successfully parsed a group of options.
Opening an output file: -.
[pipe @ 0x7f85d91069c0] Setting default whitelist 'crypto,data'
Successfully opened the file.
detected 8 logical cores
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[vost#0:0/rawvideo @ 0x7f85d9105cc0] cur_dts is invalid [init:0 i_done:0
finish:0] (this is harmless if it occurs once at the start per stream)
Last message repeated 1 times
[mpeg4 @ 0x7f85d9107500] Format yuv420p chosen by get_format().
[vost#0:0/rawvideo @ 0x7f85d9105cc0] cur_dts is invalid [init:0 i_done:0
finish:0] (this is harmless if it occurs once at the start per stream)
Last message repeated 6 times
[AVFilterGraph @ 0x7f85d9118400] Setting 'expr' to value 'eq(n,1)'
[graph 0 input from stream 0:0 @ 0x7f85d9119040] Setting 'video_size' to
value '2x2'
[graph 0 input from stream 0:0 @ 0x7f85d9119040] Setting 'pix_fmt' to
value '0'
[graph 0 input from stream 0:0 @ 0x7f85d9119040] Setting 'time_base' to
value '1/30'
[graph 0 input from stream 0:0 @ 0x7f85d9119040] Setting 'pixel_aspect' to
value '1/1'
[graph 0 input from stream 0:0 @ 0x7f85d9119040] Setting 'frame_rate' to
value '30/1'
[graph 0 input from stream 0:0 @ 0x7f85d9119040] w:2 h:2 pixfmt:yuv420p
tb:1/30 fr:30/1 sar:1/1
[format @ 0x7f85d9119480] Setting 'pix_fmts' to value 'rgb24'
[auto_scale_0 @ 0x7f85d9006280] Setting 'sws_flags' to value 'print_info'
[auto_scale_0 @ 0x7f85d9006280] w:iw h:ih flags:'' interl:0
[format @ 0x7f85d9119480] auto-inserting filter 'auto_scale_0' between the
filter 'Parsed_showinfo_1' and the filter 'format'
[AVFilterGraph @ 0x7f85d9118400] query_formats: 5 queried, 4 merged, 1
already done, 0 delayed
[Parsed_showinfo_1 @ 0x7f85d9118a00] config in time_base: 1/30,
frame_rate: 30/1
[Parsed_showinfo_1 @ 0x7f85d9118a00] config out time_base: 0/0,
frame_rate: 0/0
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d9499000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d94a6000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d94b3000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d94c0000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d94cd000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d94da000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85d94e7000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85dc800000] using unscaled
yuv420p -> rgb24 special converter
[swscaler @ 0x7f85d948c000] [swscaler @ 0x7f85dc80d000] using unscaled
yuv420p -> rgb24 special converter
[auto_scale_0 @ 0x7f85d9006280] w:2 h:2 fmt:yuv420p sar:1/1 -> w:2 h:2
fmt:rgb24 sar:1/1 flags:0x00001000
[Parsed_select_0 @ 0x7f85d9118680] n:0.000000 pts:0.000000 t:0.000000
key:1 interlace_type:P pict_type:I scene:nan -> select:0.000000
select_out:-1
[vost#0:0/rawvideo @ 0x7f85d9105cc0] cur_dts is invalid [init:0 i_done:0
finish:0] (this is harmless if it occurs once at the start per stream)
[Parsed_select_0 @ 0x7f85d9118680] n:1.000000 pts:1.000000 t:0.033333
key:0 interlace_type:P pict_type:P scene:nan -> select:1.000000
select_out:0
[Parsed_showinfo_1 @ 0x7f85d9118a00] n: 0 pts: 1 pts_time:0.0333333
duration: 1 duration_time:0.0333333 pos: 5758 fmt:yuv420p sar:1/1
s:2x2 i:P iskey:0 type:P checksum:08AC0298 plane_checksum:[03FC0198
00800080 00800080] mean:[102 128 128] stdev:[0.0 0.0 0.0]
[Parsed_showinfo_1 @ 0x7f85d9118a00] color_range:unknown
color_space:unknown color_primaries:unknown color_trc:unknown
Output #0, rawvideo, to 'pipe:':
Metadata:
software : Lavf59.27.100
encoder : Lavf60.3.100
Stream #0:0, 0, 1/30: Video: rawvideo, 1 reference frame (RGB[24] /
0x18424752), rgb24(pc, gbr/unknown/unknown, progressive, left), 2x2 (0x0)
[SAR 1:1 DAR 1:1], 0/1, q=2-31, 2 kb/s, 30 fps, 30 tbn
Metadata:
encoder : Lavc60.3.100 rawvideo
[vost#0:0/rawvideo @ 0x7f85d9105cc0] Not duplicating 1 initial frames
[Parsed_select_0 @ 0x7f85d9118680] n:2.000000 pts:2.000000 t:0.066667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:3.000000 pts:3.000000 t:0.100000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:4.000000 pts:4.000000 t:0.133333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:5.000000 pts:5.000000 t:0.166667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:6.000000 pts:6.000000 t:0.200000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:7.000000 pts:7.000000 t:0.233333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:8.000000 pts:8.000000 t:0.266667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:9.000000 pts:9.000000 t:0.300000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:10.000000 pts:10.000000 t:0.333333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:11.000000 pts:11.000000 t:0.366667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:12.000000 pts:12.000000 t:0.400000
key:1 interlace_type:P pict_type:I scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:13.000000 pts:13.000000 t:0.433333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:14.000000 pts:14.000000 t:0.466667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:15.000000 pts:15.000000 t:0.500000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:16.000000 pts:16.000000 t:0.533333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:17.000000 pts:17.000000 t:0.566667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:18.000000 pts:18.000000 t:0.600000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:19.000000 pts:19.000000 t:0.633333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
EOF in input file 0
Terminating demuxer thread 0
[Parsed_select_0 @ 0x7f85d9118680] n:20.000000 pts:20.000000 t:0.666667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:21.000000 pts:21.000000 t:0.700000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:22.000000 pts:22.000000 t:0.733333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:23.000000 pts:23.000000 t:0.766667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:24.000000 pts:24.000000 t:0.800000
key:1 interlace_type:P pict_type:I scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:25.000000 pts:25.000000 t:0.833333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:26.000000 pts:26.000000 t:0.866667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:27.000000 pts:27.000000 t:0.900000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:28.000000 pts:28.000000 t:0.933333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x7f85d9118680] n:29.000000 pts:29.000000 t:0.966667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[out_0_0 @ 0x7f85d9118f80] EOF on sink link out_0_0:default.
No more output streams to write to, finishing.
[out#0/rawvideo @ 0x7f85d9104700] All streams finished
[out#0/rawvideo @ 0x7f85d9104700] Terminating muxer thread
[AVIOContext @ 0x7f85d9106a80] Statistics: 12 bytes written, 0 seeks, 1
writeouts
frame= 1 fps=0.0 q=-0.0 Lsize= 0kB time=00:00:00.03 bitrate=
2.9kbits/s speed=3.27x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.000000%
Input file #0 (sample_gray_100.avi):
Input stream #0:0 (video): 30 packets read (408 bytes); 30 frames
decoded;
Total: 30 packets (408 bytes) demuxed
Output file #0 (pipe:):
Output stream #0:0 (video): 1 frames encoded; 1 packets muxed (12
bytes);
Total: 1 packets (12 bytes) muxed
30 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x7f85d8705980] Statistics: 6814 bytes read, 0 seeks
0000000 6464 6464 6464 6464 6464 6464
000000c
}}}
macOS **arm64**:
{{{
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with Apple clang version 14.0.3 (clang-1403.0.22.14.1)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/6.0 --enable-shared
--enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom
--enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-
libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-
librubberband --enable-libsnappy --enable-libsrt --enable-libsvtav1
--enable-libtesseract --enable-libtheora --enable-libvidstab --enable-
libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-
libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma
--enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-
libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-
libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
--enable-audiotoolbox --enable-neon
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with
argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument '99'.
Reading option '-i' ... matched as input url with argument
'sample_gray_100.avi'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with
argument 'select=eq(n\,1),showinfo'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'rawvideo'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel
format) with argument 'rgb24'.
Reading option '-sws_flags' ... matched as AVOption 'sws_flags' with
argument 'print_info'.
Reading option '-' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Successfully parsed a group of options.
Parsing a group of options: input url sample_gray_100.avi.
Successfully parsed a group of options.
Opening an input file: sample_gray_100.avi.
[NULL @ 0x143e05430] Opening 'sample_gray_100.avi' for reading
[file @ 0x600003292780] Setting default whitelist 'file,crypto,data'
Probing avi score:100 size:2048
[avi @ 0x143e05430] Format avi probed with size=2048 and score=100
[avi @ 0x600003292800] use odml:1
[avi @ 0x143e05430] pos:14 tag: tag=LIST size=0x11ec
[avi @ 0x143e05430] pos:18 list: tag=hdrl size=0x0
[avi @ 0x143e05430] pos:20 tag: tag=avih size=0x38
[avi @ 0x143e05430] pos:60 tag: tag=LIST size=0x1094
[avi @ 0x143e05430] pos:64 list: tag=strl size=0x0
[avi @ 0x143e05430] pos:6C tag: tag=strh size=0x38
[avi @ 0x143e05430] pos:74 strh: tag=vids size=0xffffffff
[avi @ 0x143e05430] 30 1 0
[avi @ 0x143e05430] pos:AC tag: tag=strf size=0x28
[avi @ 0x143e05430] pos:D4 video: tag=DIVX size=0x0
[avi @ 0x143e05430] pos:DC tag: tag=JUNK size=0x1018
[avi @ 0x143e05430] pos:10FC tag: tag=JUNK size=0x104
[avi @ 0x143e05430] pos:1208 tag: tag=LIST size=0x1a
[avi @ 0x143e05430] pos:120C list: tag=INFO size=0x0
[avi @ 0x143e05430] pos:122A tag: tag=JUNK size=0x3f8
[avi @ 0x143e05430] pos:162A tag: tag=LIST size=0x28c
[avi @ 0x143e05430] pos:162E list: tag=movi size=0x0
[avi @ 0x143e05430] movi end=18b6
[avi @ 0x143e05430] movi_end=0x18b6
[avi @ 0x143e05430] 0: tag=0x63643030 flags=0x10 pos=0x4 len=64/64
cum_len=0
[avi @ 0x143e05430] 1: tag=0x63643030 flags=0x0 pos=0x4c len=8/8 cum_len=1
[avi @ 0x143e05430] 2: tag=0x63643030 flags=0x0 pos=0x5c len=8/8 cum_len=2
[avi @ 0x143e05430] 3: tag=0x63643030 flags=0x0 pos=0x6c len=8/8 cum_len=3
[avi @ 0x143e05430] 4: tag=0x63643030 flags=0x0 pos=0x7c len=8/8 cum_len=4
[avi @ 0x143e05430] 5: tag=0x63643030 flags=0x0 pos=0x8c len=8/8 cum_len=5
[avi @ 0x143e05430] 6: tag=0x63643030 flags=0x0 pos=0x9c len=8/8 cum_len=6
[avi @ 0x143e05430] 7: tag=0x63643030 flags=0x0 pos=0xac len=8/8 cum_len=7
[avi @ 0x143e05430] 8: tag=0x63643030 flags=0x0 pos=0xbc len=8/8 cum_len=8
[avi @ 0x143e05430] 9: tag=0x63643030 flags=0x0 pos=0xcc len=8/8 cum_len=9
[avi @ 0x143e05430] 10: tag=0x63643030 flags=0x0 pos=0xdc len=8/8
cum_len=10
[avi @ 0x143e05430] 11: tag=0x63643030 flags=0x0 pos=0xec len=8/8
cum_len=11
[avi @ 0x143e05430] 12: tag=0x63643030 flags=0x10 pos=0xfc len=64/64
cum_len=12
[avi @ 0x143e05430] 13: tag=0x63643030 flags=0x0 pos=0x144 len=8/8
cum_len=13
[avi @ 0x143e05430] 14: tag=0x63643030 flags=0x0 pos=0x154 len=8/8
cum_len=14
[avi @ 0x143e05430] 15: tag=0x63643030 flags=0x0 pos=0x164 len=8/8
cum_len=15
[avi @ 0x143e05430] 16: tag=0x63643030 flags=0x0 pos=0x174 len=8/8
cum_len=16
[avi @ 0x143e05430] 17: tag=0x63643030 flags=0x0 pos=0x184 len=8/8
cum_len=17
[avi @ 0x143e05430] 18: tag=0x63643030 flags=0x0 pos=0x194 len=8/8
cum_len=18
[avi @ 0x143e05430] 19: tag=0x63643030 flags=0x0 pos=0x1a4 len=8/8
cum_len=19
[avi @ 0x143e05430] 20: tag=0x63643030 flags=0x0 pos=0x1b4 len=8/8
cum_len=20
[avi @ 0x143e05430] 21: tag=0x63643030 flags=0x0 pos=0x1c4 len=8/8
cum_len=21
[avi @ 0x143e05430] 22: tag=0x63643030 flags=0x0 pos=0x1d4 len=8/8
cum_len=22
[avi @ 0x143e05430] 23: tag=0x63643030 flags=0x0 pos=0x1e4 len=8/8
cum_len=23
[avi @ 0x143e05430] 24: tag=0x63643030 flags=0x10 pos=0x1f4 len=64/64
cum_len=24
[avi @ 0x143e05430] 25: tag=0x63643030 flags=0x0 pos=0x23c len=8/8
cum_len=25
[avi @ 0x143e05430] 26: tag=0x63643030 flags=0x0 pos=0x24c len=8/8
cum_len=26
[avi @ 0x143e05430] 27: tag=0x63643030 flags=0x0 pos=0x25c len=8/8
cum_len=27
[avi @ 0x143e05430] 28: tag=0x63643030 flags=0x0 pos=0x26c len=8/8
cum_len=28
[avi @ 0x143e05430] 29: tag=0x63643030 flags=0x0 pos=0x27c len=8/8
cum_len=29
[avi @ 0x143e05430] Before avformat_find_stream_info() pos: 5678 bytes
read:6814 seeks:0 nb_streams:1
[mpeg4 @ 0x143e059f0] Format yuv420p chosen by get_format().
[avi @ 0x143e05430] All info found
[avi @ 0x143e05430] stream 0: start_time: 0 duration: 1
[avi @ 0x143e05430] format: start_time: 0 duration: 1 (estimate from
stream) bitrate=54 kb/s
[avi @ 0x143e05430] After avformat_find_stream_info() pos: 5750 bytes
read:6814 seeks:0 frames:1
Input #0, avi, from 'sample_gray_100.avi':
Metadata:
software : Lavf59.27.100
Duration: 00:00:01.00, start: 0.000000, bitrate: 54 kb/s
Stream #0:0, 1, 1/30: Video: mpeg4 (Simple Profile), 1 reference frame
(DIVX / 0x58564944), yuv420p(left), 2x2 [SAR 1:1 DAR 1:1], 0/1, 30 fps, 30
tbr, 30 tbn
Successfully opened the file.
Parsing a group of options: output url -.
Applying option vf (set video filters) with argument
select=eq(n\,1),showinfo.
Applying option f (force format) with argument rawvideo.
Applying option pix_fmt (set pixel format) with argument rgb24.
Successfully parsed a group of options.
Opening an output file: -.
[pipe @ 0x6000037917a0] Setting default whitelist 'crypto,data'
Successfully opened the file.
detected 8 logical cores
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[vost#0:0/rawvideo @ 0x143e07160] cur_dts is invalid [init:0 i_done:0
finish:0] (this is harmless if it occurs once at the start per stream)
Last message repeated 1 times
[mpeg4 @ 0x143e07fd0] Format yuv420p chosen by get_format().
[vost#0:0/rawvideo @ 0x143e07160] cur_dts is invalid [init:0 i_done:0
finish:0] (this is harmless if it occurs once at the start per stream)
Last message repeated 6 times
[AVFilterGraph @ 0x600003894180] Setting 'expr' to value 'eq(n,1)'
[graph 0 input from stream 0:0 @ 0x600002b94210] Setting 'video_size' to
value '2x2'
[graph 0 input from stream 0:0 @ 0x600002b94210] Setting 'pix_fmt' to
value '0'
[graph 0 input from stream 0:0 @ 0x600002b94210] Setting 'time_base' to
value '1/30'
[graph 0 input from stream 0:0 @ 0x600002b94210] Setting 'pixel_aspect' to
value '1/1'
[graph 0 input from stream 0:0 @ 0x600002b94210] Setting 'frame_rate' to
value '30/1'
[graph 0 input from stream 0:0 @ 0x600002b94210] w:2 h:2 pixfmt:yuv420p
tb:1/30 fr:30/1 sar:1/1
[format @ 0x600002b94370] Setting 'pix_fmts' to value 'rgb24'
[auto_scale_0 @ 0x600002b94420] Setting 'sws_flags' to value 'print_info'
[auto_scale_0 @ 0x600002b94420] w:iw h:ih flags:'' interl:0
[format @ 0x600002b94370] auto-inserting filter 'auto_scale_0' between the
filter 'Parsed_showinfo_1' and the filter 'format'
[AVFilterGraph @ 0x600003894180] query_formats: 5 queried, 4 merged, 1
already done, 0 delayed
[Parsed_showinfo_1 @ 0x600002b94160] config in time_base: 1/30,
frame_rate: 30/1
[Parsed_showinfo_1 @ 0x600002b94160] config out time_base: 0/0,
frame_rate: 0/0
[swscaler @ 0x148018000] [swscaler @ 0x148028000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148028000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148038000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148038000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148048000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148048000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148058000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148058000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148068000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148068000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148078000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148078000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148088000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148088000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x148098000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x148098000] using unscaled yuv420p
-> rgb24 special converter
[swscaler @ 0x148018000] [swscaler @ 0x1480a8000] No accelerated
colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x148018000] [swscaler @ 0x1480a8000] using unscaled yuv420p
-> rgb24 special converter
[auto_scale_0 @ 0x600002b94420] w:2 h:2 fmt:yuv420p sar:1/1 -> w:2 h:2
fmt:rgb24 sar:1/1 flags:0x00001000
[Parsed_select_0 @ 0x600002b940b0] n:0.000000 pts:0.000000 t:0.000000
key:1 interlace_type:P pict_type:I scene:nan -> select:0.000000
select_out:-1
[vost#0:0/rawvideo @ 0x143e07160] cur_dts is invalid [init:0 i_done:0
finish:0] (this is harmless if it occurs once at the start per stream)
[Parsed_select_0 @ 0x600002b940b0] n:1.000000 pts:1.000000 t:0.033333
key:0 interlace_type:P pict_type:P scene:nan -> select:1.000000
select_out:0
[Parsed_showinfo_1 @ 0x600002b94160] n: 0 pts: 1 pts_time:0.0333333
duration: 1 duration_time:0.0333333 pos: 5758 fmt:yuv420p sar:1/1
s:2x2 i:P iskey:0 type:P checksum:08AC0298 plane_checksum:[03FC0198
00800080 00800080] mean:[102 128 128] stdev:[0.0 0.0 0.0]
[Parsed_showinfo_1 @ 0x600002b94160] color_range:unknown
color_space:unknown color_primaries:unknown color_trc:unknown
Output #0, rawvideo, to 'pipe:':
Metadata:
software : Lavf59.27.100
encoder : Lavf60.3.100
Stream #0:0, 0, 1/30: Video: rawvideo, 1 reference frame (RGB[24] /
0x18424752), rgb24(pc, gbr/unknown/unknown, progressive, left), 2x2 (0x0)
[SAR 1:1 DAR 1:1], 0/1, q=2-31, 2 kb/s, 30 fps, 30 tbn
Metadata:
encoder : Lavc60.3.100 rawvideo
[vost#0:0/rawvideo @ 0x143e07160] Not duplicating 1 initial frames
[Parsed_select_0 @ 0x600002b940b0] n:2.000000 pts:2.000000 t:0.066667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:3.000000 pts:3.000000 t:0.100000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:4.000000 pts:4.000000 t:0.133333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:5.000000 pts:5.000000 t:0.166667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:6.000000 pts:6.000000 t:0.200000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:7.000000 pts:7.000000 t:0.233333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:8.000000 pts:8.000000 t:0.266667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:9.000000 pts:9.000000 t:0.300000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:10.000000 pts:10.000000 t:0.333333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:11.000000 pts:11.000000 t:0.366667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:12.000000 pts:12.000000 t:0.400000
key:1 interlace_type:P pict_type:I scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:13.000000 pts:13.000000 t:0.433333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:14.000000 pts:14.000000 t:0.466667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:15.000000 pts:15.000000 t:0.500000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:16.000000 pts:16.000000 t:0.533333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:17.000000 pts:17.000000 t:0.566667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:18.000000 pts:18.000000 t:0.600000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:19.000000 pts:19.000000 t:0.633333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
EOF in input file 0
Terminating demuxer thread 0
[Parsed_select_0 @ 0x600002b940b0] n:20.000000 pts:20.000000 t:0.666667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:21.000000 pts:21.000000 t:0.700000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:22.000000 pts:22.000000 t:0.733333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:23.000000 pts:23.000000 t:0.766667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:24.000000 pts:24.000000 t:0.800000
key:1 interlace_type:P pict_type:I scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:25.000000 pts:25.000000 t:0.833333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:26.000000 pts:26.000000 t:0.866667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:27.000000 pts:27.000000 t:0.900000
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:28.000000 pts:28.000000 t:0.933333
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[Parsed_select_0 @ 0x600002b940b0] n:29.000000 pts:29.000000 t:0.966667
key:0 interlace_type:P pict_type:P scene:nan -> select:0.000000
select_out:-1
[out_0_0 @ 0x600002b942c0] EOF on sink link out_0_0:default.
No more output streams to write to, finishing.
[out#0/rawvideo @ 0x6000029903c0] All streams finished
[out#0/rawvideo @ 0x6000029903c0] Terminating muxer thread
[AVIOContext @ 0x143e07ba0] Statistics: 12 bytes written, 0 seeks, 1
writeouts
frame= 1 fps=0.0 q=-0.0 Lsize= 0kB time=00:00:00.03 bitrate=
2.9kbits/s speed=13.8x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.000000%
Input file #0 (sample_gray_100.avi):
Input stream #0:0 (video): 30 packets read (408 bytes); 30 frames
decoded;
Total: 30 packets (408 bytes) demuxed
Output file #0 (pipe:):
Output stream #0:0 (video): 1 frames encoded; 1 packets muxed (12
bytes);
Total: 1 packets (12 bytes) muxed
30 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x143e05230] Statistics: 6814 bytes read, 0 seeks
0000000 6262 6262 6262 6262 6262 6262
000000c
}}}
I can see that for both archs the frame YUV value is the same {{{[102 128
128]}}}, but the RGB output differs: on x86_64 I get the expected
{{{0x64}}} values, but {{{0x62}}} on arm64. I also confirmed the "wrong"
behaviour on arm64 is observed on both {{{n6.0}}} and {{{n6.1-dev}}}
The default chosen swscale converter for the 2 archs seems different, but
are these results above normal/expected ?
Also, reading [https://stackoverflow.com/a/70893503/12544140 this answer],
adding `full_chroma_int+accurate_rnd` to the swscale options fix the
output to the right `0x64` gray value on arm64, but this is not the
default behaviour.
P.S: Could this be related to #979 ?
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10430>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list