2

I am developing a multimedia player using ffmpeg. I am trying hard to get hardware acceleration through ffmpeg using vdpau hardware accelerator. I didn't get any success so far. Below I have mentioned details of my system specs, software and the error of the ffmpeg command line tool. Please feel free to comment if you need further information. Any quick suggestions will be greatly helpful.

Here is my system hardware specification:
Processor: Intel® Core™ i5-4570 CPU @ 3.20GHz × 4 
Graphis: GeForce GTX 750 Ti/PCIe/SSE2
Os: Ubuntu-14.04 64bit
Memory: 8GiB

Software: ffmpeg-2.8.1

other useful logs: 1. Find enable hw accelerator in ffmpeg

./ffmpeg -hwaccels

ffmpeg version 2.8.1 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --enable-shared
  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
Hardware acceleration methods:
vdpau

2. Hw accel decoding using ffmpeg

./ffmpeg -hwaccel vdpau -i /tmp/test.mp4 /tmp/test.ts

Error log:

libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so
libva info: va_openDriver() returns -1

3.Command: lspci -vnn | grep -i VGA -A 12

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] [10de:1380] (rev a2) (prog-if 00 [VGA controller])
    Subsystem: ZOTAC International (MCO) Ltd. Device [19da:288a]
    Flags: bus master, fast devsel, latency 0, IRQ 48
    Memory at f6000000 (32-bit, non-prefetchable) [size=16M]
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    Memory at f0000000 (64-bit, prefetchable) [size=32M]
    I/O ports at e000 [size=128]
    [virtual] Expansion ROM at f7000000 [disabled] [size=512K]
    Capabilities: 
    Kernel driver in use: nvidia

01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbc] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. Device [19da:288a]
0

According to the documentation here,

To enable this you typically need the libvdpau development package in your distribution, and a compatible graphic card.

Note that VDPAU cannot be used to decode frames in memory, the compressed frames are sent by libavcodec to the GPU device supported by VDPAU and then the decoded image can be accessed using the VDPAU API. This is not done automatically by FFmpeg, but must be done at the application level (check for example the ffmpeg_vdpau.c file used by ffmpeg.c). Also, note that with this API it is not possible to move the decoded frame back to RAM, for example in case you need to encode again the decoded frame (e.g. when doing transcoding on a server).

Several decoders are currently supported through VDPAU API in libavcodec, in particular H.264, MPEG-1/2/4, and VC-1.

The output of mediainfo videofile should shed some light on whether the codec in use is supported, however the FFMpeg IMplementations table in the aforementioned documentation indicates that VDPAU is deprecated for technical reasons and should not be used.

I have nothing further to add, but hope this information is useful all the same.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.