[FFmpeg-trac] #4087(avformat:new): webp muxer does not write a VP8X header properly

FFmpeg trac at avcodec.org
Thu Nov 6 08:15:55 CET 2014


#4087: webp muxer does not write a VP8X header properly
-------------------------------------+-------------------------------------
               Reporter:  jamal      |                  Owner:
                   Type:  defect     |                 Status:  new
               Priority:  important  |              Component:  avformat
                Version:  git-       |               Keywords:  webp
  master                             |  regression
             Blocked By:             |               Blocking:
Reproduced by developer:  0          |  Analyzed by developer:  0
-------------------------------------+-------------------------------------
 It writes one only when the file is an animation, and when it does it
 apparently doesn't set the corresponding bits based on EXIF, ALPH and
 other chunks presence.

 Take the Exif sample from the FATE suit (Which contains an EXIF chunk and
 the corresponding presence bit in the VP8X chunk set), and copy it to a
 new webp file.
 {{{
 $ ./ffmpeg -i ../samples/exif/image_small.webp -c:v copy image.webp
 ffmpeg version N-67397-g8176638 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Nov  5 2014 23:23:45 with gcc 4.9.2 (Rev2, Built by MSYS2
 project)
   configuration: --enable-gpl --target-os=mingw32 --prefix=/mingw64
   libavutil      54. 11.100 / 54. 11.100
   libavcodec     56. 10.102 / 56. 10.102
   libavformat    56. 12.101 / 56. 12.101
   libavdevice    56.  2.100 / 56.  2.100
   libavfilter     5.  2.103 /  5.  2.103
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 Input #0, webp_pipe, from '../samples/exif/image_small.webp':
   Duration: N/A, bitrate: N/A
     Stream #0:0: Video: webp, yuv420p(tv, bt470bg/unknown/unknown),
 400x225, 25 tbr, 25 tbn, 25 tbc
 Output #0, webp, to 'image.webp':
   Metadata:
     encoder         : Lavf56.12.101
     Stream #0:0: Video: webp, yuv420p, 400x225, q=2-31, 1k tbn, 25 tbc
 Stream mapping:
   Stream #0:0 -> #0:0 (copy)
 Press [q] to stop, [?] for help
 frame=    1 fps=0.0 q=-1.0 Lsize=      38kB time=00:00:00.04
 bitrate=7851.6kbits/s
 video:38kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: unknown
 }}}

 Then try to decode the new file
 {{{
 $ ./ffmpeg -i image.webp -f md5 -
 ffmpeg version N-67397-g8176638 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Nov  5 2014 23:23:45 with gcc 4.9.2 (Rev2, Built by MSYS2
 project)
   configuration: --enable-gpl --target-os=mingw32 --prefix=/mingw64
   libavutil      54. 11.100 / 54. 11.100
   libavcodec     56. 10.102 / 56. 10.102
   libavformat    56. 12.101 / 56. 12.101
   libavdevice    56.  2.100 / 56.  2.100
   libavfilter     5.  2.103 /  5.  2.103
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 [webp @ 0000000001773060] EXIF chunk present, but Exif bit not set in the
 VP8X header
 Input #0, webp_pipe, from 'image.webp':
   Duration: N/A, bitrate: N/A
     Stream #0:0: Video: webp, yuv420p(tv, bt470bg/unknown/unknown),
 400x225, 25 tbr, 25 tbn, 25 tbc
 Output #0, md5, to 'pipe:':
   Metadata:
     encoder         : Lavf56.12.101
     Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 400x225,
 q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
     Metadata:
       encoder         : Lavc56.10.102 rawvideo
 Stream mapping:
   Stream #0:0 -> #0:0 (webp (native) -> rawvideo (native))
 Press [q] to stop, [?] for help
 [webp @ 00000000017ab740] EXIF chunk present, but Exif bit not set in the
 VP8X header
 MD5=2b44bd9cf3f9578c85fc5f76e546d22a
 frame=    1 fps=0.0 q=0.0 Lsize=       0kB time=00:00:00.04 bitrate=
 7.4kbits/s
 video:132kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: unknown
 }}}
 While the warning mentions the VP8X header doesn't have the relevant bit
 set, what really happened is that there's no VP8X header at all (the
 decoder could be changed so it reports as much instead, for that matter,
 but that's not relevant here).

 Example of a file with an ALPH chunk

 {{{
 $ ./ffmpeg -i http://www.gstatic.com/webp/gallery3/5_webp_a.webp -c:v copy
 alph.webp
 ffmpeg version N-67397-g8176638 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Nov  6 2014 03:38:00 with gcc 4.9.2 (Rev2, Built by MSYS2
 project)
   configuration: --enable-gpl --enable-libwebp --target-os=mingw32
 --prefix=/mingw64
   libavutil      54. 11.100 / 54. 11.100
   libavcodec     56. 10.102 / 56. 10.102
   libavformat    56. 12.101 / 56. 12.101
   libavdevice    56.  2.100 / 56.  2.100
   libavfilter     5.  2.103 /  5.  2.103
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 Input #0, webp_pipe, from
 'http://www.gstatic.com/webp/gallery3/5_webp_a.webp':
   Duration: N/A, bitrate: N/A
     Stream #0:0: Video: webp, yuva420p(tv, bt470bg/unknown/unknown),
 300x300, 25 tbr, 25 tbn, 25 tbc
 Output #0, webp, to 'alph.webp':
   Metadata:
     encoder         : Lavf56.12.101
     Stream #0:0: Video: webp, yuva420p, 300x300, q=2-31, 1k tbn, 25 tbc
 Stream mapping:
   Stream #0:0 -> #0:0 (copy)
 Press [q] to stop, [?] for help
 frame=    1 fps=0.0 q=-1.0 Lsize=      68kB time=00:00:00.04
 bitrate=13977.6kbits/s
 video:68kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: unknown
 }}}

 Decode resulting file

 {{{
 ffmpeg version N-67397-g8176638 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Nov  6 2014 03:38:00 with gcc 4.9.2 (Rev2, Built by MSYS2
 project)
   configuration: --enable-gpl --enable-libwebp --target-os=mingw32
 --prefix=/mingw64
   libavutil      54. 11.100 / 54. 11.100
   libavcodec     56. 10.102 / 56. 10.102
   libavformat    56. 12.101 / 56. 12.101
   libavdevice    56.  2.100 / 56.  2.100
   libavfilter     5.  2.103 /  5.  2.103
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 [webp @ 0000000001874f60] ALPHA chunk present, but alpha bit not set in
 the VP8X header
 Input #0, webp_pipe, from 'alph.webp':
   Duration: N/A, bitrate: N/A
     Stream #0:0: Video: webp, yuva420p(tv, bt470bg/unknown/unknown),
 300x300, 25 tbr, 25 tbn, 25 tbc
 Output #0, md5, to 'pipe:':
   Metadata:
     encoder         : Lavf56.12.101
     Stream #0:0: Video: rawvideo (Y4[11][8] / 0x80B3459), yuva420p,
 300x300, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
     Metadata:
       encoder         : Lavc56.10.102 rawvideo
 Stream mapping:
   Stream #0:0 -> #0:0 (webp (native) -> rawvideo (native))
 Press [q] to stop, [?] for help
 [webp @ 0000000001854be0] ALPHA chunk present, but alpha bit not set in
 the VP8X header
 [webp @ 0000000001854be0] A frame threaded decoder did not free the frame
 on failure. This is a bug, please report it.
 MD5=d41d8cd98f00b204e9800998ecf8427e
 frame=    0 fps=0.0 q=0.0 Lsize=       0kB time=00:00:00.00 bitrate=N/A
 video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: unknown
 Output file is empty, nothing was encoded (check -ss / -t / -frames
 parameters if used)
 }}}

 In this case the resulting file is completely broken because the VP8X
 header is needed to handle the alpha channel.

 This is of course a regression since the webp muxer was introduced (or
 rather, since image2 stopped handling the muxing).

--
Ticket URL: <https://trac.ffmpeg.org/ticket/4087>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list