[FFmpeg-cvslog] hwaccel: Support specific frame allocators
Luca Barbato
git at videolan.org
Mon May 12 00:15:14 CEST 2014
ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Thu May 8 14:43:23 2014 +0200| [ebc29519d1634bfeb386c20a5d8a52837aae2436] | committer: Luca Barbato
hwaccel: Support specific frame allocators
It would reduce the boilerplate code users have to write.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ebc29519d1634bfeb386c20a5d8a52837aae2436
---
libavcodec/avcodec.h | 5 +++++
libavcodec/utils.c | 7 +++++++
2 files changed, 12 insertions(+)
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index df061c1..65c7da4 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2947,6 +2947,11 @@ typedef struct AVHWAccel {
struct AVHWAccel *next;
/**
+ * Allocate a custom buffer
+ */
+ int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame);
+
+ /**
* Called at the beginning of each frame or field picture.
*
* Meaningful frame information (codec specific) is guaranteed to
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 95aaa6e..c002c9c 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -604,6 +604,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
{
+ const AVHWAccel *hwaccel = avctx->hwaccel;
int override_dimensions = 1;
int ret;
@@ -657,6 +658,11 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
if (ret < 0)
return ret;
+ if (hwaccel && hwaccel->alloc_frame) {
+ ret = hwaccel->alloc_frame(avctx, frame);
+ goto end;
+ }
+
#if FF_API_GET_BUFFER
FF_DISABLE_DEPRECATION_WARNINGS
/*
@@ -775,6 +781,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
ret = avctx->get_buffer2(avctx, frame, flags);
+end:
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions) {
frame->width = avctx->width;
frame->height = avctx->height;
More information about the ffmpeg-cvslog
mailing list