Opened 5 years ago
#8605 new defect
DV25 flagged as progressive in AVI vprp chunk
Reported by: | Jérôme Martinez | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avformat |
Version: | git-master | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
DV25 is interlaced (the only progressive DV are "DVCPRO Progressive" format at 50 Mbps, and DVCPRO HD), but is sometimes flagged as progressive when muxed in AVI by FFmpeg.
DV --> MOV: OK (no "fiel" atom written)
DV --> AVI: NOK ("vprp" chunk written with FieldPerFrame set to 1)
DV in MOV with correct "fiel" atom -> AVI: OK ("vprp" chunk written with FieldPerFrame set to 2)
DV in AVI with correct "vprp" chunk -> AVI: NOK ("vprp" chunk written with FieldPerFrame set to 1)
First command is DV in AVI direct creation (wrong "vprp").
Second and third command are transwrapping from DV in MOV (edited for injecting a "fiel" atom, attached) to AVI (this one is OK, correct "vprp"), then AVI to AVI (this one is NOK, wrong "vprp").
How to reproduce:
ffmpeg -f lavfi -i testsrc=size=720x576 -vcodec dvvideo -r 25 -acodec pcm_s16be -ac 2 -vframes 1 dvpp_direct.avi ffmpeg version git-2020-04-03-52523b6 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.1 (GCC) 20200328 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-libsrt --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-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 42.102 / 56. 42.102 libavcodec 58. 77.101 / 58. 77.101 libavformat 58. 42.100 / 58. 42.100 libavdevice 58. 9.103 / 58. 9.103 libavfilter 7. 77.101 / 7. 77.101 libswscale 5. 6.101 / 5. 6.101 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, lavfi, from 'testsrc=size=720x576': Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 720x576 [SAR 1:1 DAR 5:4], 25 tbr, 25 tbn, 25 tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> dvvideo (native)) Press [q] to stop, [?] for help Output #0, avi, to 'dvpp_direct.avi': Metadata: ISFT : Lavf58.42.100 Stream #0:0: Video: dvvideo (dvsd / 0x64737664), yuv420p, 720x576 [SAR 1:1 DAR 5:4], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc Metadata: encoder : Lavc58.77.101 dvvideo frame= 1 fps=0.0 q=-0.0 Lsize= 146kB time=00:00:00.04 bitrate=29957.2kbits/s speed=2.67x video:141kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.018055% If you check the content of "vprp" chunck with an AVI debug tool, you can see e.g.: 010F4 Video properties (76 bytes) 010F4 Header (8 bytes) 010F4 Name: vprp 010F8 Size: 68 (0x00000044) 010FC VideoFormatToken: 0 (0x00000000) 01100 VideoStandard: 0 (0x00000000) 01104 VerticalRefreshRate: 25 (0x00000019) 01108 HTotalInT: 720 (0x000002D0) 0110C VTotalInLines: 576 (0x00000240) 01110 FrameAspectRatio Height: 4 (0x0004) 01112 FrameAspectRatio Width: 5 (0x0005) 01114 FrameWidthInPixels: 720 (0x000002D0) 01118 FrameHeightInLines: 576 (0x00000240) 0111C FieldPerFrame: 1 (0x00000001) 01120 Field (32 bytes) 01120 CompressedBMHeight: 576 (0x00000240) 01124 CompressedBMWidth: 720 (0x000002D0) 01128 ValidBMHeight: 576 (0x00000240) 0112C ValidBMWidth: 720 (0x000002D0) 01130 ValidBMXOffset: 0 (0x00000000) 01134 ValidBMYOffset: 0 (0x00000000) 01138 VideoXOffsetInT: 0 (0x00000000) 0113C VideoYValidStartLine: 0 (0x00000000) *** ffmpeg -i dvpp_fiel.mov -c:v copy dvpp_fiel.avi ffmpeg version git-2020-04-03-52523b6 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.1 (GCC) 20200328 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-libsrt --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-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 42.102 / 56. 42.102 libavcodec 58. 77.101 / 58. 77.101 libavformat 58. 42.100 / 58. 42.100 libavdevice 58. 9.103 / 58. 9.103 libavfilter 7. 77.101 / 7. 77.101 libswscale 5. 6.101 / 5. 6.101 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'dvpp_fiel.mov': Metadata: major_brand : qt minor_version : 512 compatible_brands: qt encoder : Manual edited Duration: 00:00:00.04, start: 0.000000, bitrate: 29085 kb/s Stream #0:0: Video: dvvideo (dvcp / 0x70637664), yuv420p(bottom coded first (swapped)), 720x576 [SAR 16:15 DAR 4:3], 28800 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default) Metadata: handler_name : VideoHandler timecode : 00:00:00:00 Stream #0:1(eng): Data: none (tmcd / 0x64636D74), 0 kb/s Metadata: handler_name : TimeCodeHandler timecode : 00:00:00:00 Output #0, avi, to 'dvpp_fiel.avi': Metadata: major_brand : qt minor_version : 512 compatible_brands: qt ISFT : Lavf58.42.100 Stream #0:0: Video: dvvideo (dvsd / 0x64737664), yuv420p(bottom coded first (swapped)), 720x576 [SAR 16:15 DAR 4:3], q=2-31, 28800 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc (default) Metadata: handler_name : VideoHandler timecode : 00:00:00:00 Stream mapping: Stream #0:0 -> #0:0 (copy) Press [q] to stop, [?] for help frame= 1 fps=0.0 q=-1.0 Lsize= 146kB time=00:00:00.02 bitrate=59936.8kbits/s speed= 20x video:141kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.056944% If you check the content of "vprp" chunck with an AVI debug tool, you can see e.g.: 010F4 Video properties (108 bytes) 010F4 Header (8 bytes) 010F4 Name: vprp 010F8 Size: 100 (0x00000064) 010FC VideoFormatToken: 0 (0x00000000) 01100 VideoStandard: 0 (0x00000000) 01104 VerticalRefreshRate: 50 (0x00000032) 01108 HTotalInT: 720 (0x000002D0) 0110C VTotalInLines: 576 (0x00000240) 01110 FrameAspectRatio Height: 3 (0x0003) 01112 FrameAspectRatio Width: 4 (0x0004) 01114 FrameWidthInPixels: 720 (0x000002D0) 01118 FrameHeightInLines: 576 (0x00000240) 0111C FieldPerFrame: 2 (0x00000002) 01120 Field (32 bytes) 01120 CompressedBMHeight: 288 (0x00000120) 01124 CompressedBMWidth: 720 (0x000002D0) 01128 ValidBMHeight: 288 (0x00000120) 0112C ValidBMWidth: 720 (0x000002D0) 01130 ValidBMXOffset: 0 (0x00000000) 01134 ValidBMYOffset: 0 (0x00000000) 01138 VideoXOffsetInT: 0 (0x00000000) 0113C VideoYValidStartLine: 1 (0x00000001) 01140 Field (32 bytes) 01140 CompressedBMHeight: 288 (0x00000120) 01144 CompressedBMWidth: 720 (0x000002D0) 01148 ValidBMHeight: 288 (0x00000120) 0114C ValidBMWidth: 720 (0x000002D0) 01150 ValidBMXOffset: 0 (0x00000000) 01154 ValidBMYOffset: 0 (0x00000000) 01158 VideoXOffsetInT: 0 (0x00000000) 0115C VideoYValidStartLine: 0 (0x00000000) ffmpeg -i dvpp_fiel.avi -c:v copy dvpp_fiel2.avi ffmpeg version git-2020-04-03-52523b6 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.1 (GCC) 20200328 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-libsrt --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-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 42.102 / 56. 42.102 libavcodec 58. 77.101 / 58. 77.101 libavformat 58. 42.100 / 58. 42.100 libavdevice 58. 9.103 / 58. 9.103 libavfilter 7. 77.101 / 7. 77.101 libswscale 5. 6.101 / 5. 6.101 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, avi, from 'dvpp_fiel.avi': Metadata: encoder : Lavf58.42.100 Duration: 00:00:00.04, start: 0.000000, bitrate: 29968 kb/s Stream #0:0: Video: dvvideo (dvsd / 0x64737664), yuv420p, 720x576 [SAR 16:15 DAR 4:3], 50 fps, 25 tbr, 50 tbn, 25 tbc Output #0, avi, to 'dvpp_fiel2.avi': Metadata: ISFT : Lavf58.42.100 Stream #0:0: Video: dvvideo (dvsd / 0x64737664), yuv420p, 720x576 [SAR 16:15 DAR 4:3], q=2-31, 50 fps, 25 tbr, 50 tbn, 50 tbc Stream mapping: Stream #0:0 -> #0:0 (copy) Press [q] to stop, [?] for help frame= 2 fps=0.0 q=-1.0 Lsize= 146kB time=00:00:00.04 bitrate=29966.8kbits/s speed=N/A video:141kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.051389% If you check the content of "vprp" chunck with an AVI debug tool, you can see e.g.: 010F4 Video properties (76 bytes) 010F4 Header (8 bytes) 010F4 Name: vprp 010F8 Size: 68 (0x00000044) 010FC VideoFormatToken: 0 (0x00000000) 01100 VideoStandard: 0 (0x00000000) 01104 VerticalRefreshRate: 50 (0x00000032) 01108 HTotalInT: 720 (0x000002D0) 0110C VTotalInLines: 576 (0x00000240) 01110 FrameAspectRatio Height: 3 (0x0003) 01112 FrameAspectRatio Width: 4 (0x0004) 01114 FrameWidthInPixels: 720 (0x000002D0) 01118 FrameHeightInLines: 576 (0x00000240) 0111C FieldPerFrame: 1 (0x00000001) 01120 Field (32 bytes) 01120 CompressedBMHeight: 576 (0x00000240) 01124 CompressedBMWidth: 720 (0x000002D0) 01128 ValidBMHeight: 576 (0x00000240) 0112C ValidBMWidth: 720 (0x000002D0) 01130 ValidBMXOffset: 0 (0x00000000) 01134 ValidBMYOffset: 0 (0x00000000) 01138 VideoXOffsetInT: 0 (0x00000000) 0113C VideoYValidStartLine: 0 (0x00000000)
DV25 in MOV with "fiel" atom