[Libav-user] VA-API decoding on Android [ffmpeg-2.1]
Michael Goffioul
michael.goffioul at gmail.com
Sat Nov 19 04:50:46 EET 2016
Hi,
I'm investigating the possibility to use VA-API for H264 decoding on
Android, using Android-x86. At the moment, I'm using Android-4.4-r5 (from
android-x86), which is based on ffmpeg-2.1. I realize this is not the
current ffmpeg version, nervertheless I understand that 2.1 should support
VA-API decoding.
I've recompiled libavcodec with support for libva (1.7.1) and I've added
the intel driver (i965). Running vainfo on the device yields the following,
so I assume everything is ok on that front:
vainfo: VA-API version: 0.39 (libva 1.1.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Bay Trail -
1.0.16.pre1 ()
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
My problem is that it seems ffmpeg's h264 decoder never uses VA-API. I've
added log statements at various places to trace the code execution:
https://github.com/FFmpeg/FFmpeg/blob/release/2.1/libavcodec/h264.c#L3270
https://github.com/FFmpeg/FFmpeg/blob/release/2.1/libavcodec/h264.c#L3200
https://github.com/FFmpeg/FFmpeg/blob/release/2.1/libavcodec/utils.c#L3204
https://github.com/FFmpeg/FFmpeg/blob/release/2.1/libavcodec/utils.c#L3218
The log I see is below. It appears ff_find_hwaccel returns NULL, as it
tries to match the pix_fmt. The given pix_fmt is AV_PIX_FMT_YUV420P, and it
should be AV_PIX_FMT_VAAPI_VLD for the hwaccel object to be detected. And I
can't figure out how the pix_fmt could be set to AV_PIX_FMT_VAAPI_VLD.
Any pointer or suggestion?
I/FFMPEG ( 2708): register hwaccel: h264_vaapi
I/FFMPEG ( 2708): register hwaccel: mpeg2_vaapi
I/FFMPEG ( 2708): register hwaccel: mpeg4_vaapi
D/FFMPEG ( 2708): android source begin open
D/FFMPEG ( 2708): android open, url: android-source:0x416b9df0
D/FFMPEG ( 2708): ffmpeg open android data source success, source ptr:
0x416b9df0
D/FFMPEG ( 2708): android source open success
I/FFMPEG ( 2708): get_pixel_format: i=0, pix_fmt=-1, fmt=53,
force_callback=0
I/FFMPEG ( 2708): get_pixel_format: i=1, pix_fmt=-1, fmt=0,
force_callback=0
I/FFMPEG ( 2708): get_pixel_format: i=0, pix_fmt=-1, fmt=53,
force_callback=1
I/FFMPEG ( 2708): get_pixel_format: i=1, pix_fmt=-1, fmt=0,
force_callback=1
I/FFMPEG ( 2708): ff_find_hwaccel: codec=0000001c, pix_fmt=0
I/FFMPEG ( 2708): ff_find_hwaccel: hwaccel=h264_vaapi
I/FFMPEG ( 2708): ff_find_hwaccel: hwaccel=mpeg2_vaapi
I/FFMPEG ( 2708): ff_find_hwaccel: hwaccel=mpeg4_vaapi
I/FFMPEG ( 2708): [h264 @ 0x42dfdd00] hwaccel: (null)
I/FFMPEG ( 2708): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'android-source:0x416b9df0':
I/FFMPEG ( 2708): Metadata:
I/FFMPEG ( 2708): major_brand : mp42
I/FFMPEG ( 2708): minor_version : 0
I/FFMPEG ( 2708): compatible_brands: isomavc1mp42
I/FFMPEG ( 2708): creation_time : 2010-06-07 20:19:05
I/FFMPEG ( 2708): Duration: 00:04:06.71, start: 0.000000, bitrate: 3606
kb/s
I/FFMPEG ( 2708): Stream #0:0(und): Audio: aac (mp4a / 0x6134706D),
44100 Hz, stereo, fltp, 125 kb/s (default)
I/FFMPEG ( 2708): Metadata:
I/FFMPEG ( 2708): creation_time : 2010-06-07 20:19:05
I/FFMPEG ( 2708): handler_name : (C) 2007 Google Inc. v08.13.2007.
I/FFMPEG ( 2708): Stream #0:1(und): Video: h264 (High) (avc1 /
0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3478 kb/s, 24 fps, 24
tbr, 24k tbn, 48 tbc (default)
I/FFMPEG ( 2708): Metadata:
I/FFMPEG ( 2708): creation_time : 2010-06-07 20:19:05
I/FFMPEG ( 2708): handler_name : (C) 2007 Google Inc. v08.13.2007.
D/FFMPEG ( 2708): android source close
I/FFMPEG ( 2708): get_pixel_format: i=0, pix_fmt=-1, fmt=53,
force_callback=0
I/FFMPEG ( 2708): get_pixel_format: i=1, pix_fmt=-1, fmt=0,
force_callback=0
I/FFMPEG ( 2708): get_pixel_format: i=0, pix_fmt=-1, fmt=53,
force_callback=1
I/FFMPEG ( 2708): get_pixel_format: i=1, pix_fmt=-1, fmt=0,
force_callback=1
I/FFMPEG ( 2708): ff_find_hwaccel: codec=0000001c, pix_fmt=0
I/FFMPEG ( 2708): ff_find_hwaccel: hwaccel=h264_vaapi
I/FFMPEG ( 2708): ff_find_hwaccel: hwaccel=mpeg2_vaapi
I/FFMPEG ( 2708): ff_find_hwaccel: hwaccel=mpeg4_vaapi
I/FFMPEG ( 2708): [h264 @ 0x42dfe320] hwaccel: (null)
Thanks,
Michael.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20161118/48dd4c14/attachment.html>
More information about the Libav-user
mailing list