[FFmpeg-devel] [PATCH 7/9] pthread_frame: do not run hwaccel decoding asynchronously unless it's safe

Michael Niedermayer michael at niedermayer.cc
Sun Mar 26 02:23:39 EET 2017


On Sat, Mar 18, 2017 at 09:56:04AM +0100, wm4 wrote:
> From: Anton Khirnov <anton at khirnov.net>
> 
> Certain hardware decoding APIs are not guaranteed to be thread-safe, so
> having the user access decoded hardware surfaces while the decoder is
> running in another thread can cause failures (this is mainly known to
> happen with DXVA2).
> 
> For such hwaccels, only allow the decoding thread to run while the user
> is inside a lavc decode call (avcodec_send_packet/receive_frame).
> 
> Merges Libav commit d4a91e65.
> 
> Signed-off-by: wm4 <nfxjfg at googlemail.com>
> ---
>  libavcodec/avcodec.h       |  5 +++++
>  libavcodec/hwaccel.h       | 24 +++++++++++++++++++++
>  libavcodec/pthread_frame.c | 52 ++++++++++++++++++++++++++++++++++++++++------
>  libavcodec/vaapi_h264.c    |  2 ++
>  libavcodec/vaapi_mpeg2.c   |  2 ++
>  libavcodec/vaapi_mpeg4.c   |  3 +++
>  libavcodec/vaapi_vc1.c     |  3 +++
>  libavcodec/vdpau_h264.c    |  2 ++
>  libavcodec/vdpau_hevc.c    |  2 ++
>  libavcodec/vdpau_mpeg12.c  |  3 +++
>  libavcodec/vdpau_mpeg4.c   |  2 ++
>  libavcodec/vdpau_vc1.c     |  3 +++
>  libavcodec/version.h       |  2 +-
>  13 files changed, 98 insertions(+), 7 deletions(-)
>  create mode 100644 libavcodec/hwaccel.h
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 1923c9648d..dbbe4febcd 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -3904,6 +3904,11 @@ typedef struct AVHWAccel {
>       * AVCodecInternal.hwaccel_priv_data.
>       */
>      int priv_data_size;
> +
> +    /**
> +     * Internal hwaccel capabilities.
> +     */
> +    int caps_internal;
>  } AVHWAccel;
>  
>  /**
> diff --git a/libavcodec/hwaccel.h b/libavcodec/hwaccel.h
> new file mode 100644
> index 0000000000..17af43707c
> --- /dev/null
> +++ b/libavcodec/hwaccel.h
> @@ -0,0 +1,24 @@
> +/*

> + * This file is part of FFmpeg and was stolen from Libav.

hmm

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Democracy is the form of government in which you can choose your dictator
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170326/8ccc9cb3/attachment.sig>


More information about the ffmpeg-devel mailing list