On Sun, Nov 8, 2015 at 8:57 PM, Anton Khirnov <[email protected]> wrote:
> ---
> 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 500511d..24d28e2 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_sd(AVCodecContext *avctx);
> +
That function name seems rather obscure. Maybe something a little more
verbose wouldn't hurt?
> #endif /* AVCODEC_INTERNAL_H */
> diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
> index 0671c6f..f5e5f93 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_sd(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..685d260 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_sd(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;
> +}
> --
> 2.0.0
>
> _______________________________________________
> libav-devel mailing list
> [email protected]
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel