[FFmpeg-devel] [PATCH] avcodec: add new Videotoolbox hwaccel.

Zhang Rui bbcallen at gmail.com
Mon Jul 27 15:29:04 CEST 2015


2015-07-27 19:22 GMT+08:00 wm4 <nfxjfg at googlemail.com>:
> On Mon, 27 Jul 2015 18:13:30 +0800
> Zhang Rui <bbcallen at gmail.com> wrote:
>
>> 2015-07-15 21:51 GMT+08:00 Clément Bœsch <u at pkh.me>:
>> > On Sat, Jun 20, 2015 at 01:33:00PM +0200, Sebastien Zwickert wrote:
>> >> Old videtotoolbox patch rebased and updated to target the new HWAccel API.
>> >> As VDA is a wrapper of VideoToolbox framework, the changes base vda implementation
>> >> upon the videotoolbox implementation to factorize common part of code.
>> >>
>> >> ---
>> >>  Changelog                    |   1 +
>> >>  MAINTAINERS                  |   1 +
>> >>  Makefile                     |   5 +-
>> >>  configure                    |  19 +-
>> >>  ffmpeg.h                     |   2 +
>> >>  ffmpeg_opt.c                 |   5 +-
>> >>  ffmpeg_vda.c                 | 134 --------
>> >>  ffmpeg_videotoolbox.c        | 147 +++++++++
>> >>  libavcodec/Makefile          |  12 +-
>> >>  libavcodec/allcodecs.c       |   5 +
>> >>  libavcodec/h263dec.c         |   3 +
>> >>  libavcodec/h264_slice.c      |   4 +
>> >>  libavcodec/mpeg12dec.c       |   3 +
>> >>  libavcodec/vda.c             |   2 +-
>> >>  libavcodec/vda_h264.c        | 154 +---------
>> >>  libavcodec/vda_internal.h    |  33 --
>> >>  libavcodec/vda_vt_internal.h |  57 ++++
>> >>  libavcodec/version.h         |   2 +-
>> >>  libavcodec/videotoolbox.c    | 705 +++++++++++++++++++++++++++++++++++++++++++
>> >>  libavcodec/videotoolbox.h    | 126 ++++++++
>> >>  libavutil/pixdesc.c          |   4 +
>> >>  libavutil/pixfmt.h           |   2 +
>> >
>> > I tried on iOS (iPhone 6+ so last one unless I'm mistaken) with a 240fps
>> > footage, and it seems the decode calls take more than 5ms, which seems not
>> > enough. Do you have any idea what could cause this? (I'm running a timer
>> > after/before avcodec_decode_video*())
>>
>> 1. kVTDecodeFrame_EnableAsynchronousDecompression can make it faster,
>> but not suitable for sync-style API (avcodec_decode_video*())
>
> Makes me wish lavc had an async API. Multithreading is also async to
> some degree after all. But it's probably not worth the trouble.
>
> Instead, would it be possible to just use the async VT API, and connect
> it to the sync lavc API by doing extra buffering? AFAIK other hw APIs
> like mmal and qsv also do this.

Without async API, I would prefer to call async hw APIs directly in player.
struct Decoder in ffplay is very close to that.

>> 2. memcpy is murder (in av_image_copy()), but zero-copy needs some
>> kind of custom AVFrame.
>
> Isn't this only for the ffmpeg.c wrapper? I wouldn't pay too much
> attention for this. Normally, AV_PIX_FMT_VIDEOTOOLBOX_VLD will be used
> (which can be directly rendered via OpenGL and such without ever
> copying the data to the CPU).

Sorry, I didn't know hwaccel_retrieve_data() only called by ffmpeg.c.


More information about the ffmpeg-devel mailing list