[Libav-user] Using Video Toolbox hardware decoding

Jean-Yves Avenard jyavenard at gmail.com
Tue Nov 3 07:59:40 CET 2015


Le lundi 2 novembre 2015, Info || Non-Lethal Applications <
info at non-lethal-applications.com> a écrit :

>
> On 02 Nov 2015, at 11:22, Jean-Yves Avenard <jyavenard at gmail.com
> <javascript:_e(%7B%7D,'cvml','jyavenard at gmail.com');>> wrote:
>
>
>
> Le vendredi 23 octobre 2015, Isaksson Jörgen <jogga at bitfield.se
> <javascript:_e(%7B%7D,'cvml','jogga at bitfield.se');>> a écrit :
>
>> Hi all,
>>
>> I’m new to this list so forgive me if this has been answered before.
>>
>> With version 2.8 of the libraries I saw the addition of Video Toolbox
>> hardware decoding support (on Mac OS X that is).
>>
>> But I can’t find much documentation on how to use it. There are some
>> clues in the header files on how to set it up, but there’s no docs on how
>> to do the actual decoding.
>>
>> I have compiled version 2.8.1 of the libraries and I can confirm that the
>> Video Toolbox hwaccels are there:
>>
>> Enabled hwaccels:
>> h263_videotoolbox       mpeg1_videotoolbox      mpeg4_videotoolbox
>> h264_videotoolbox       mpeg2_videotoolbox
>>
>> In my player app I have setup an AVVideotoolboxContext like described in
>> the headers.
>>
>> if (self.codecContext->codec_id == AV_CODEC_ID_H264) {
>>         _videoToolboxContext = av_videotoolbox_alloc_context();
>>         int result = av_videotoolbox_default_init2(self.codecContext,
>> self.videoToolboxContext);
>>         if (result != 0) {
>>             NSLog(@"Failed to init video toolbox");
>>             _videoToolboxContext = NULL;
>>         }
>>  }
>>
>> _codec = avcodec_find_decoder(self.codecContext->codec_id);
>>
>> Everything seems to work fine and the _videoToolboxContext is properly
>> allocated.
>>
>> But how do I go about actually decoding using it?
>>
>> Anyone with any experience from this?
>>
>> VideoToolbox is for decoding only, just like VDA
>
> From 10.9; to get HW decoding the only thing that needs to be set is a
> constant. And this is just a hint. Vat won't use HW for vertical resolution
> < 300 typically.
>
> Note that ffmpeg doesn't enable async decoding, so the performance are
> poor, nowhere near as fast as what it could be.
>
>
> And what is the constant that needs to be set and where?
>

kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder

Looking at the 2.8 ffmpeg source code, this constant is set. The decoder
will use HW acceleration if available...
Note that ffmpeg code will crash if used on OSX < 10.9 (where that constant
was introduced)



Do you know if it’s still worth using it?
> Will the decoding be faster than FFmpeg’s standard software decoding?
>
>
Faster I don't know. Using less CPU certainly.

However, in my experience, the bottleneck will be in not using async decode.

There's a good 100% performance increase with that mode set !

Too bad it isn't set

>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20151103/35b20352/attachment.html>


More information about the Libav-user mailing list