* commit '11c9bd633f635f07a762be1ecd672de55daf4edc': libopenh264enc: export CPB props side data Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>tags/n3.0
@@ -323,6 +323,11 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); | |||||
*/ | */ | ||||
int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame); | 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); | |||||
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type); | int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type); | ||||
#endif /* AVCODEC_INTERNAL_H */ | #endif /* AVCODEC_INTERNAL_H */ |
@@ -108,6 +108,7 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) | |||||
int err = AVERROR_UNKNOWN; | int err = AVERROR_UNKNOWN; | ||||
int log_level; | int log_level; | ||||
WelsTraceCallback callback_function; | WelsTraceCallback callback_function; | ||||
AVCPBProperties *props; | |||||
// Mingw GCC < 4.7 on x86_32 uses an incorrect/buggy ABI for the WelsGetCodecVersion | // 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 | // 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); | 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; | return 0; | ||||
fail: | fail: | ||||
@@ -3502,3 +3502,29 @@ AVCPBProperties *av_cpb_properties_alloc(size_t *size) | |||||
return props; | 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; | |||||
} |