[FFmpeg-trac] #9599(undetermined:new): VideoToolbox VP9 hwaccel freezes ffmpeg

FFmpeg trac at avcodec.org
Sat Jan 15 22:48:16 EET 2022


#9599: VideoToolbox VP9 hwaccel freezes ffmpeg
-------------------------------------+-------------------------------------
             Reporter:  Eric Karnes  |                    Owner:  (none)
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:
                                     |  undetermined
              Version:  git-master   |               Resolution:
             Keywords:               |               Blocked By:
  videotoolbox vp9                   |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Description changed by Eric Karnes:

Old description:

> Summary of the bug:
>
> When testing the new videotoolbox VP9 decoder support I ran into an issue
> on my machine where ffmpeg freezes.
>
> ffmpeg doesn't respond to [q] or [?] however I'm able to hard exit.
>
> I'm using a 2017 iMac, imac18,3.
>
> How to reproduce:
> {{{
> % ffmpeg -v 9 -loglevel 99 -hwaccel videotoolbox -threads 1 -i
> /Users/eric/Downloads/test.webm -f null - -benchmark -report
> ffmpeg version N-105288-g45e45a6060
> built on 01/15/2022
> }}}
>
> Here is my output
>
> {{{
> ffmpeg started on 2022-01-15 at 15:34:58
> Report written to "ffmpeg-20220115-153458.log"
> Log level: 99
> Command line:
> ./ffmpeg -v 9 -loglevel 99 -hwaccel videotoolbox -threads 1 -i
> /Users/eric/Downloads/test.webm -f null - -benchmark -report
> ffmpeg version N-105288-g45e45a6060 Copyright (c) 2000-2022 the FFmpeg
> developers
>   built with Apple clang version 13.0.0 (clang-1300.0.29.30)
>   configuration: --enable-gpl --enable-libaom --enable-libdav1d --enable-
> libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora
> --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libx264
> --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-
> frei0r --enable-libass --enable-demuxer=dash --enable-opencl --enable-
> videotoolbox --disable-htmlpages --enable-libfdk-aac --enable-librav1e
> --enable-librubberband --enable-libspeex --enable-libwebp --enable-
> nonfree
>   libavutil      57. 18.100 / 57. 18.100
>   libavcodec     59. 20.100 / 59. 20.100
>   libavformat    59. 17.101 / 59. 17.101
>   libavdevice    59.  5.100 / 59.  5.100
>   libavfilter     8. 25.100 /  8. 25.100
>   libswscale      6.  5.100 /  6.  5.100
>   libswresample   4.  4.100 /  4.  4.100
>   libpostproc    56.  4.100 / 56.  4.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 '-hwaccel' ... matched as option 'hwaccel' (use HW
> accelerated decoding) with argument 'videotoolbox'.
> Reading option '-threads' ... matched as AVOption 'threads' with argument
> '1'.
> Reading option '-i' ... matched as input url with argument
> '/Users/eric/Downloads/test.webm'.
> Reading option '-f' ... matched as option 'f' (force format) with
> argument 'null'.
> Reading option '-' ... matched as output url.
> Reading option '-benchmark' ... matched as option 'benchmark' (add
> timings for benchmarking) with argument '1'.
> 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 v (set logging level) with argument 9.
> Applying option loglevel (set logging level) with argument 99.
> Applying option benchmark (add timings for benchmarking) with argument 1.
> Applying option report (generate a report) with argument 1.
> Successfully parsed a group of options.
> Parsing a group of options: input url /Users/eric/Downloads/test.webm.
> Applying option hwaccel (use HW accelerated decoding) with argument
> videotoolbox.
> Successfully parsed a group of options.
> Opening an input file: /Users/eric/Downloads/test.webm.
> [NULL @ 0x7faf14704100] Opening '/Users/eric/Downloads/test.webm' for
> reading
> [file @ 0x7faf247046c0] Setting default whitelist 'file,crypto,data'
> Probing matroska,webm score:100 size:2048
> [matroska,webm @ 0x7faf14704100] Format matroska,webm probed with
> size=2048 and score=100
> st:0 removing common factor 1000000 from timebase
> st:1 removing common factor 1000000 from timebase
> [matroska,webm @ 0x7faf14704100] Before avformat_find_stream_info() pos:
> 636 bytes read:32768 seeks:0 nb_streams:2
> [vp9 @ 0x7faf24705580] Format yuv420p chosen by get_format().
> [opus @ 0x7faf24705e80] skip 312/960 samples
> [matroska,webm @ 0x7faf14704100] All info found
> [matroska,webm @ 0x7faf14704100] stream 0: start_time: 0 duration: NOPTS
> [matroska,webm @ 0x7faf14704100] stream 1: start_time: -0.007 duration:
> NOPTS
> [matroska,webm @ 0x7faf14704100] format: start_time: -0.007 duration:
> 15.021 (estimate from stream) bitrate=1336 kb/s
> [matroska,webm @ 0x7faf14704100] After avformat_find_stream_info() pos:
> 1483 bytes read:32768 seeks:0 frames:2
> Input #0, matroska,webm, from '/Users/eric/Downloads/test.webm':
>   Metadata:
>     ENCODER         : Lavf58.76.100
>   Duration: 00:00:15.02, start: -0.007000, bitrate: 1336 kb/s
>   Stream #0:0(eng), 1, 1/1000: Video: vp9 (Profile 0), 1 reference frame,
> yuv420p(tv, bt709), 720x1280, 0/1, SAR 1:1 DAR 9:16, 30 fps, 30 tbr, 1k
> tbn (default)
>     Metadata:
>       DURATION        : 00:00:14.999000000
>   Stream #0:1(eng), 1, 1/1000: Audio: opus, 48000 Hz, stereo, fltp, delay
> 312 (default)
>     Metadata:
>       DURATION        : 00:00:15.021000000
> Successfully opened the file.
> Parsing a group of options: output url -.
> Applying option f (force format) with argument null.
> Successfully parsed a group of options.
> Opening an output file: -.
> Successfully opened the file.
> Stream mapping:
>   Stream #0:0 -> #0:0 (vp9 (native) -> wrapped_avframe (native))
>   Stream #0:1 -> #0:1 (opus (native) -> pcm_s16le (native))
> 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)
> [vp9 @ 0x7faf04704100] Format videotoolbox_vld chosen by get_format().
> [vp9 @ 0x7faf04704100] Format videotoolbox_vld requires hwaccel
> initialisation.
> detected 8 logical cores
> [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'video_size' to
> value '720x1280'
> [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'pix_fmt' to
> value '23'
> [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'time_base' to
> value '1/1000'
> [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'pixel_aspect'
> to value '1/1'
> [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'frame_rate' to
> value '30/1'
> [graph 0 input from stream 0:0 @ 0x7faf24723e40] w:720 h:1280 pixfmt:nv12
> tb:1/1000 fr:30/1 sar:1/1
> [AVFilterGraph @ 0x7faf247198c0] query_formats: 3 queried, 2 merged, 0
> already done, 0 delayed
> cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless
> if it occurs once at the start per stream)
> cur_dts is invalid st:1 (0) [init:0 i_done:0 finish:0] (this is harmless
> if it occurs once at the start per stream)
> [opus @ 0x7faf04704980] skip 312/960 samples
> [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'time_base' to value '1/48000'
> [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'sample_rate' to value '48000'
> [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'sample_fmt' to value 'fltp'
> [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'channel_layout' to value '0x3'
> [graph_1_in_0_1 @ 0x7faf247258c0] tb:1/48000 samplefmt:fltp
> samplerate:48000 chlayout:0x3
> [format_out_0_1 @ 0x7faf24725e80] Setting 'sample_fmts' to value 's16'
> [format_out_0_1 @ 0x7faf24725e80] auto-inserting filter
> 'auto_aresample_0' between the filter 'Parsed_anull_0' and the filter
> 'format_out_0_1'
> [AVFilterGraph @ 0x7faf247253c0] query_formats: 4 queried, 6 merged, 3
> already done, 0 delayed
> [auto_aresample_0 @ 0x7faf24726540] [SWR @ 0x7faef8050000] Using fltp
> internally between filters
> [auto_aresample_0 @ 0x7faf24726540] ch:2 chl:stereo fmt:fltp r:48000Hz ->
> ch:2 chl:stereo fmt:s16 r:48000Hz
> Output #0, null, to 'pipe:':
>   Metadata:
>     encoder         : Lavf59.17.101
>   Stream #0:0(eng), 0, 1/30: Video: wrapped_avframe, 1 reference frame,
> nv12(tv, bt709, progressive), 720x1280 (0x0) [SAR 1:1 DAR 9:16], 0/1,
> q=2-31, 200 kb/s, 30 fps, 30 tbn (default)
>     Metadata:
>       DURATION        : 00:00:14.999000000
>       encoder         : Lavc59.20.100 wrapped_avframe
>   Stream #0:1(eng), 0, 1/48000: Audio: pcm_s16le, 48000 Hz, stereo, s16,
> 1536 kb/s (default)
>     Metadata:
>       DURATION        : 00:00:15.021000000
>       encoder         : Lavc59.20.100 pcm_s16le
> frame=    1 fps=0.0 q=-0.0 size=N/A time=00:00:00.03 bitrate=N/A
> speed=0.383x
> }}}

New description:

 Summary of the bug:

 When testing the new videotoolbox VP9 decoder support I ran into an issue
 on my machine where ffmpeg freezes.

 ffmpeg doesn't respond to [q] or [?] however I'm able to hard exit.

 I'm using a 2017 iMac, imac18,3.

 The input is a VP9 YouTube video, I've observed this issue with every VP9
 YouTube video I've tried.

 How to reproduce:
 {{{
 % ffmpeg -v 9 -loglevel 99 -hwaccel videotoolbox -threads 1 -i
 /Users/eric/Downloads/test.webm -f null - -benchmark -report
 ffmpeg version N-105288-g45e45a6060
 built on 01/15/2022
 }}}

 Here is my output

 {{{
 ffmpeg started on 2022-01-15 at 15:34:58
 Report written to "ffmpeg-20220115-153458.log"
 Log level: 99
 Command line:
 ./ffmpeg -v 9 -loglevel 99 -hwaccel videotoolbox -threads 1 -i
 /Users/eric/Downloads/test.webm -f null - -benchmark -report
 ffmpeg version N-105288-g45e45a6060 Copyright (c) 2000-2022 the FFmpeg
 developers
   built with Apple clang version 13.0.0 (clang-1300.0.29.30)
   configuration: --enable-gpl --enable-libaom --enable-libdav1d --enable-
 libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora
 --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libx264
 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-
 frei0r --enable-libass --enable-demuxer=dash --enable-opencl --enable-
 videotoolbox --disable-htmlpages --enable-libfdk-aac --enable-librav1e
 --enable-librubberband --enable-libspeex --enable-libwebp --enable-nonfree
   libavutil      57. 18.100 / 57. 18.100
   libavcodec     59. 20.100 / 59. 20.100
   libavformat    59. 17.101 / 59. 17.101
   libavdevice    59.  5.100 / 59.  5.100
   libavfilter     8. 25.100 /  8. 25.100
   libswscale      6.  5.100 /  6.  5.100
   libswresample   4.  4.100 /  4.  4.100
   libpostproc    56.  4.100 / 56.  4.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 '-hwaccel' ... matched as option 'hwaccel' (use HW
 accelerated decoding) with argument 'videotoolbox'.
 Reading option '-threads' ... matched as AVOption 'threads' with argument
 '1'.
 Reading option '-i' ... matched as input url with argument
 '/Users/eric/Downloads/test.webm'.
 Reading option '-f' ... matched as option 'f' (force format) with argument
 'null'.
 Reading option '-' ... matched as output url.
 Reading option '-benchmark' ... matched as option 'benchmark' (add timings
 for benchmarking) with argument '1'.
 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 v (set logging level) with argument 9.
 Applying option loglevel (set logging level) with argument 99.
 Applying option benchmark (add timings for benchmarking) with argument 1.
 Applying option report (generate a report) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input url /Users/eric/Downloads/test.webm.
 Applying option hwaccel (use HW accelerated decoding) with argument
 videotoolbox.
 Successfully parsed a group of options.
 Opening an input file: /Users/eric/Downloads/test.webm.
 [NULL @ 0x7faf14704100] Opening '/Users/eric/Downloads/test.webm' for
 reading
 [file @ 0x7faf247046c0] Setting default whitelist 'file,crypto,data'
 Probing matroska,webm score:100 size:2048
 [matroska,webm @ 0x7faf14704100] Format matroska,webm probed with
 size=2048 and score=100
 st:0 removing common factor 1000000 from timebase
 st:1 removing common factor 1000000 from timebase
 [matroska,webm @ 0x7faf14704100] Before avformat_find_stream_info() pos:
 636 bytes read:32768 seeks:0 nb_streams:2
 [vp9 @ 0x7faf24705580] Format yuv420p chosen by get_format().
 [opus @ 0x7faf24705e80] skip 312/960 samples
 [matroska,webm @ 0x7faf14704100] All info found
 [matroska,webm @ 0x7faf14704100] stream 0: start_time: 0 duration: NOPTS
 [matroska,webm @ 0x7faf14704100] stream 1: start_time: -0.007 duration:
 NOPTS
 [matroska,webm @ 0x7faf14704100] format: start_time: -0.007 duration:
 15.021 (estimate from stream) bitrate=1336 kb/s
 [matroska,webm @ 0x7faf14704100] After avformat_find_stream_info() pos:
 1483 bytes read:32768 seeks:0 frames:2
 Input #0, matroska,webm, from '/Users/eric/Downloads/test.webm':
   Metadata:
     ENCODER         : Lavf58.76.100
   Duration: 00:00:15.02, start: -0.007000, bitrate: 1336 kb/s
   Stream #0:0(eng), 1, 1/1000: Video: vp9 (Profile 0), 1 reference frame,
 yuv420p(tv, bt709), 720x1280, 0/1, SAR 1:1 DAR 9:16, 30 fps, 30 tbr, 1k
 tbn (default)
     Metadata:
       DURATION        : 00:00:14.999000000
   Stream #0:1(eng), 1, 1/1000: Audio: opus, 48000 Hz, stereo, fltp, delay
 312 (default)
     Metadata:
       DURATION        : 00:00:15.021000000
 Successfully opened the file.
 Parsing a group of options: output url -.
 Applying option f (force format) with argument null.
 Successfully parsed a group of options.
 Opening an output file: -.
 Successfully opened the file.
 Stream mapping:
   Stream #0:0 -> #0:0 (vp9 (native) -> wrapped_avframe (native))
   Stream #0:1 -> #0:1 (opus (native) -> pcm_s16le (native))
 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)
 [vp9 @ 0x7faf04704100] Format videotoolbox_vld chosen by get_format().
 [vp9 @ 0x7faf04704100] Format videotoolbox_vld requires hwaccel
 initialisation.
 detected 8 logical cores
 [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'video_size' to
 value '720x1280'
 [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'pix_fmt' to
 value '23'
 [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'time_base' to
 value '1/1000'
 [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'pixel_aspect' to
 value '1/1'
 [graph 0 input from stream 0:0 @ 0x7faf24723e40] Setting 'frame_rate' to
 value '30/1'
 [graph 0 input from stream 0:0 @ 0x7faf24723e40] w:720 h:1280 pixfmt:nv12
 tb:1/1000 fr:30/1 sar:1/1
 [AVFilterGraph @ 0x7faf247198c0] query_formats: 3 queried, 2 merged, 0
 already done, 0 delayed
 cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless
 if it occurs once at the start per stream)
 cur_dts is invalid st:1 (0) [init:0 i_done:0 finish:0] (this is harmless
 if it occurs once at the start per stream)
 [opus @ 0x7faf04704980] skip 312/960 samples
 [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'time_base' to value '1/48000'
 [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'sample_rate' to value '48000'
 [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'sample_fmt' to value 'fltp'
 [graph_1_in_0_1 @ 0x7faf247258c0] Setting 'channel_layout' to value '0x3'
 [graph_1_in_0_1 @ 0x7faf247258c0] tb:1/48000 samplefmt:fltp
 samplerate:48000 chlayout:0x3
 [format_out_0_1 @ 0x7faf24725e80] Setting 'sample_fmts' to value 's16'
 [format_out_0_1 @ 0x7faf24725e80] auto-inserting filter 'auto_aresample_0'
 between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'
 [AVFilterGraph @ 0x7faf247253c0] query_formats: 4 queried, 6 merged, 3
 already done, 0 delayed
 [auto_aresample_0 @ 0x7faf24726540] [SWR @ 0x7faef8050000] Using fltp
 internally between filters
 [auto_aresample_0 @ 0x7faf24726540] ch:2 chl:stereo fmt:fltp r:48000Hz ->
 ch:2 chl:stereo fmt:s16 r:48000Hz
 Output #0, null, to 'pipe:':
   Metadata:
     encoder         : Lavf59.17.101
   Stream #0:0(eng), 0, 1/30: Video: wrapped_avframe, 1 reference frame,
 nv12(tv, bt709, progressive), 720x1280 (0x0) [SAR 1:1 DAR 9:16], 0/1,
 q=2-31, 200 kb/s, 30 fps, 30 tbn (default)
     Metadata:
       DURATION        : 00:00:14.999000000
       encoder         : Lavc59.20.100 wrapped_avframe
   Stream #0:1(eng), 0, 1/48000: Audio: pcm_s16le, 48000 Hz, stereo, s16,
 1536 kb/s (default)
     Metadata:
       DURATION        : 00:00:15.021000000
       encoder         : Lavc59.20.100 pcm_s16le
 frame=    1 fps=0.0 q=-0.0 size=N/A time=00:00:00.03 bitrate=N/A
 speed=0.383x
 }}}

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9599#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list