wm4 wrote:
On Wed, 20 Jan 2016 09:59:12 +0000 Andy Furniss <adf.li...@gmail.com>
wrote:

wm4 wrote:
On Wed, 20 Jan 2016 00:42:18 +0000 Andy Furniss
<adf.li...@gmail.com> wrote:

Hendrik Leppkes wrote:

I do not agree that it should be a warning. As outlined
in the commit message and this thread, there are serious
flaws with frame threading and hwaccel.

I'm fine with it being an error, but since it is an API
change, it should follow the usual deprecation period to
allow downstream users time to fix it. Meanwhile it can be
a warning so that people notice the problem.

Its fundamentally broken, and making it a warning would
re-introduce known crashes. So no.

So are the flaws in ffmpeg or particular drivers?

It does seem a shame perf wise, I've been testing my AMD UVD
decode recently and for 500 UHD frames in a really high
bitrate h264 file it's like -

ffmpeg threaded = 16 sec.

ffmpeg single thread = 20 sec.

With or without hwaccel?

Both are with hwaccel. ffmpeg 2.8.4 cli

Admittedly a very concocted benchmark with a very high bitrate
sample.

I know on normal x264 stuff my CPU could beat GPU anyway as the
copy back seems to hurt quite a lot/UVD is for playing.

For future GPUs that will do hevc I guess it could be more
relevant.

gstreamer vaapi 14 sec.

gstreamer omx 10 sec.

the omx is a faster as the others do nv12 -> I420 on cpu
(AFAICT)

Maybe -threads 1 hurts perf by limiting the format conversion
as well?

Is there a way to get whatever the h/w spits out (nv12)
directly? Trying to ask for nv12 seemed to get a double
conversion.

Both vdpau and vaapi can retrieve image data as nv12.

With ffmpeg cli?

ffmpeg cli doesn't support vaapi.

I know, but it does do vdpau: so to restate my question in a clearer way -

Is it possible with ffmpeg cli -hwaccel vdpau to avoid nv12 -> I420
conversion?

With what hardware was this? What were the command lines you used?

GPU is AMD R9285 TONGA (drivers are still new/experemental) but results
for this test seem consistent.

Rest of system is older Phenom II x4 3.4GHz (cpufreq forced for tests).
Mobo is PCIE 2.0 *Gig ram @ 1333.

Here's a paste I made a few days ago - includes s/w test (which by
chance for this sample comes out the same as multithread h/w) You can
see from the time cpu use output I really do get h/w decode as requested.

andy [vce-tests]$ time ffmpeg -hwaccel vdpau -i /mnt/ramdisk/x264-otc-2160p60-220M.mkv -f rawvideo /mnt/ramdisk/raw
ffmpeg version 2.8.4 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.3.0 (GCC)
configuration: --prefix=/usr --enable-gpl --enable-version3 --enable-nonfree --disable-static --enable-shared --disable-debug --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-x11grab --docdir=/usr/share/doc/ffmpeg-2.8.4
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from '/mnt/ramdisk/x264-otc-2160p60-220M.mkv':
  Metadata:
    ENCODER         : Lavf57.19.100
  Duration: 00:00:08.33, start: 0.000000, bitrate: 218593 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      ENCODER         : Lavc57.16.101 libx264
      DURATION        : 00:00:08.334000000
Output #0, rawvideo, to '/mnt/ramdisk/raw':
  Metadata:
    encoder         : Lavf56.40.101
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc (default)
    Metadata:
      DURATION        : 00:00:08.334000000
      encoder         : Lavc56.60.100 rawvideo
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
frame= 500 fps= 30 q=-0.0 Lsize= 6075000kB time=00:00:08.33 bitrate=5971968.2kbits/s video:6075000kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

real    0m16.958s
user    0m7.333s
sys     0m3.062s
andy [vce-tests]$ rm /mnt/ramdisk/raw
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$ time ffmpeg -threads 1 -hwaccel vdpau -i /mnt/ramdisk/x264-otc-2160p60-220M.mkv -f rawvideo /mnt/ramdisk/raw
ffmpeg version 2.8.4 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.3.0 (GCC)
configuration: --prefix=/usr --enable-gpl --enable-version3 --enable-nonfree --disable-static --enable-shared --disable-debug --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-x11grab --docdir=/usr/share/doc/ffmpeg-2.8.4
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from '/mnt/ramdisk/x264-otc-2160p60-220M.mkv':
  Metadata:
    ENCODER         : Lavf57.19.100
  Duration: 00:00:08.33, start: 0.000000, bitrate: 218593 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      ENCODER         : Lavc57.16.101 libx264
      DURATION        : 00:00:08.334000000
Output #0, rawvideo, to '/mnt/ramdisk/raw':
  Metadata:
    encoder         : Lavf56.40.101
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc (default)
    Metadata:
      DURATION        : 00:00:08.334000000
      encoder         : Lavc56.60.100 rawvideo
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
frame= 500 fps= 24 q=-0.0 Lsize= 6075000kB time=00:00:08.33 bitrate=5971968.2kbits/s video:6075000kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

real    0m20.743s
user    0m6.938s
sys     0m3.013s
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$ rm /mnt/ramdisk/raw
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$ time ffmpeg -i /mnt/ramdisk/x264-otc-2160p60-220M.mkv -f rawvideo /mnt/ramdisk/raw
ffmpeg version 2.8.4 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.3.0 (GCC)
configuration: --prefix=/usr --enable-gpl --enable-version3 --enable-nonfree --disable-static --enable-shared --disable-debug --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-x11grab --docdir=/usr/share/doc/ffmpeg-2.8.4
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from '/mnt/ramdisk/x264-otc-2160p60-220M.mkv':
  Metadata:
    ENCODER         : Lavf57.19.100
  Duration: 00:00:08.33, start: 0.000000, bitrate: 218593 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      ENCODER         : Lavc57.16.101 libx264
      DURATION        : 00:00:08.334000000
Output #0, rawvideo, to '/mnt/ramdisk/raw':
  Metadata:
    encoder         : Lavf56.40.101
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc (default)
    Metadata:
      DURATION        : 00:00:08.334000000
      encoder         : Lavc56.60.100 rawvideo
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
frame= 500 fps= 31 q=-0.0 Lsize= 6075000kB time=00:00:08.33 bitrate=5971968.2kbits/s video:6075000kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

real    0m16.528s
user    1m1.201s
sys     0m2.659s
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$ rm /mnt/ramdisk/raw
andy [vce-tests]$
andy [vce-tests]$ time gst-launch-1.0 -f filesrc location=/mnt/ramdisk/x264-otc-2160p60-220M.mkv ! matroskademux ! h264parse ! vaapidecode ! filesink location=/mnt/ramdisk/raw
Setting pipeline to PAUSED ...
error: XDG_RUNTIME_DIR not set in the environment.
libva info: VA-API version 0.38.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
Pipeline is PREROLLING ...
Got context from element 'vaapidecode0': gst.vaapi.Display=context, gst.vaapi.Display=(GstVaapiDisplay)NULL;
Redistribute latency...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:13.822498897
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

real    0m14.301s
user    0m3.153s
sys     0m3.232s
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$ rm /mnt/ramdisk/raw
andy [vce-tests]$
andy [vce-tests]$
andy [vce-tests]$ time gst-launch-1.0 -f filesrc location=/mnt/ramdisk/x264-otc-2160p60-220M.mkv ! matroskademux ! h264parse ! omxh264dec ! filesink location=/mnt/ramdisk/raw
Setting pipeline to PAUSED ...
OMX-library /usr/lib/omxloaders/libomxdynamicloader.so dlopen error: /usr/lib/omxloaders/libomxdynamicloader.so: undefined symbol: RM_Deinit
Pipeline is PREROLLING ...
OMX-In RM_getResource No resource to be handled
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:09.786770762
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
OMX-In RM_releaseResource No resource to be handled
Setting pipeline to NULL ...
Freeing pipeline ...

real    0m10.803s
user    0m3.198s
sys     0m5.325s
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to