On Sun, 20 Dec 2015 20:59:29 +0100
Anton Khirnov <[email protected]> wrote:

> ---
>  libavcodec/avcodec.h | 20 ++++++++++++++++++++
>  libavcodec/utils.c   |  3 +++
>  2 files changed, 23 insertions(+)
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 8083111..79aa3b7 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -35,6 +35,7 @@
>  #include "libavutil/cpu.h"
>  #include "libavutil/dict.h"
>  #include "libavutil/frame.h"
> +#include "libavutil/hwframe.h"
>  #include "libavutil/log.h"
>  #include "libavutil/pixfmt.h"
>  #include "libavutil/rational.h"
> @@ -2996,6 +2997,23 @@ typedef struct AVCodecContext {
>      AVPacketSideData *coded_side_data;
>      int            nb_coded_side_data;
>  
> +    /**
> +     * Hwaccel decoding only. If the internal get_buffer2() implementation 
> gets
> +     * used to allocate hardware frames (either because the caller did not
> +     * override get_buffer2() or because the custom get_buffer2() calls
> +     * avcodec_default_get_buffer2()) then this callback needs to be set by 
> the
> +     * caller at latest in get_format().
> +     *
> +     * This callback will be used as the free() callback in creating an
> +     * AVHWFramesContext that will be attached to the allocated frames.
> +     */
> +    void (*hwframe_ctx_free)(AVHWFramesContext *ctx);
> +
> +    /**
> +     * See the hwframe_ctx_free documentation for details. This field will be
> +     * used as the user_opaque field in the AVHWFramesContext.
> +     */
> +    void *hwframe_ctx_opaque;

I don't understand what these fields are for.

>  } AVCodecContext;
>  
>  /**
> @@ -3231,6 +3249,8 @@ typedef struct AVHWAccel {
>       */
>      int (*uninit)(AVCodecContext *avctx);
>  
> +    int (*get_buffer)(AVCodecContext *avctx, AVFrame *frame);
> +
>      /**
>       * Size of the private data to allocate in
>       * AVCodecInternal.hwaccel_priv_data.
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 29ba85f..620b3e6 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -512,6 +512,9 @@ int avcodec_default_get_buffer2(AVCodecContext *avctx, 
> AVFrame *frame, int flags
>  {
>      int ret;
>  
> +    if (avctx->hwaccel && avctx->hwaccel->get_buffer)
> +        return avctx->hwaccel->get_buffer(avctx, frame);
> +
>      if ((ret = update_frame_pool(avctx, frame)) < 0)
>          return ret;
>  

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to