[SCM] libav/experimental: hwaccel: Support specific frame allocators

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Aug 10 16:03:06 UTC 2014


The following commit has been merged in the experimental branch:
commit ebc29519d1634bfeb386c20a5d8a52837aae2436
Author: Luca Barbato <lu_zero at gentoo.org>
Date:   Thu May 8 14:43:23 2014 +0200

    hwaccel: Support specific frame allocators
    
    It would reduce the boilerplate code users have to write.

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;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list