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