[FFmpeg-cvslog] libopenh264enc: export CPB props side data

Anton Khirnov git at videolan.org
Thu Dec 17 13:31:39 CET 2015


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Oct  3 15:19:10 2015 +0200| [11c9bd633f635f07a762be1ecd672de55daf4edc] | committer: Anton Khirnov

libopenh264enc: export CPB props side data

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=11c9bd633f635f07a762be1ecd672de55daf4edc
---

 libavcodec/internal.h       |    5 +++++
 libavcodec/libopenh264enc.c |    9 +++++++++
 libavcodec/utils.c          |   26 ++++++++++++++++++++++++++
 3 files changed, 40 insertions(+)

diff --git a/libavcodec/internal.h b/libavcodec/internal.h
index adec523..7f12344 100644
--- a/libavcodec/internal.h
+++ b/libavcodec/internal.h
@@ -240,4 +240,9 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt);
  */
 int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame);
 
+/**
+ * Add a CPB properties side data to an encoding context.
+ */
+AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx);
+
 #endif /* AVCODEC_INTERNAL_H */
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index 0671c6f..da03b29 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -108,6 +108,7 @@ static av_cold int svc_encode_init(AVCodecContext *avctx)
     int err = AVERROR_UNKNOWN;
     int log_level;
     WelsTraceCallback callback_function;
+    AVCPBProperties *props;
 
     // Mingw GCC < 4.7 on x86_32 uses an incorrect/buggy ABI for the WelsGetCodecVersion
     // function (for functions returning larger structs), thus skip the check in those
@@ -223,6 +224,14 @@ static av_cold int svc_encode_init(AVCodecContext *avctx)
         memcpy(avctx->extradata, fbi.sLayerInfo[0].pBsBuf, size);
     }
 
+    props = ff_add_cpb_side_data(avctx);
+    if (!props) {
+        err = AVERROR(ENOMEM);
+        goto fail;
+    }
+    props->max_bitrate = param.iMaxBitrate;
+    props->avg_bitrate = param.iTargetBitrate;
+
     return 0;
 
 fail:
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index d2f4de7..4f2f951 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -2383,3 +2383,29 @@ AVCPBProperties *av_cpb_properties_alloc(size_t *size)
 
     return props;
 }
+
+AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx)
+{
+    AVPacketSideData *tmp;
+    AVCPBProperties  *props;
+    size_t size;
+
+    props = av_cpb_properties_alloc(&size);
+    if (!props)
+        return NULL;
+
+    tmp = av_realloc_array(avctx->coded_side_data, avctx->nb_coded_side_data + 1, sizeof(*tmp));
+    if (!tmp) {
+        av_freep(&props);
+        return NULL;
+    }
+
+    avctx->coded_side_data = tmp;
+    avctx->nb_coded_side_data++;
+
+    avctx->coded_side_data[avctx->nb_coded_side_data - 1].type = AV_PKT_DATA_CPB_PROPERTIES;
+    avctx->coded_side_data[avctx->nb_coded_side_data - 1].data = (uint8_t*)props;
+    avctx->coded_side_data[avctx->nb_coded_side_data - 1].size = size;
+
+    return props;
+}



More information about the ffmpeg-cvslog mailing list