mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
libopenh264enc: export CPB props side data
This commit is contained in:
parent
f0b769c16d
commit
11c9bd633f
@ -240,4 +240,9 @@ 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);
|
||||||
|
|
||||||
#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:
|
||||||
|
@ -2383,3 +2383,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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user