[FFmpeg-devel] libavc/libx264: add support to propagate SSE values through encoder stats
Anton Khirnov
anton at khirnov.net
Tue Oct 10 13:54:41 EEST 2023
Quoting Carotti, Elias via ffmpeg-devel (2023-10-02 19:35:09)
> diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
> index 77a9f173b4..4c643c9066 100644
> --- a/libavcodec/libx264.c
> +++ b/libavcodec/libx264.c
> @@ -129,6 +129,8 @@ typedef struct X264Context {
> int roi_warned;
>
> int mb_info;
> +
> + int64_t sse[3];
The values don't need to be preserved across frames, so might as well
put this on stack in the block calling ff_side_data_set_encoder_stats().
> } X264Context;
>
> static void X264_log(void *p, int level, const char *fmt, va_list args)
> @@ -726,7 +728,40 @@ FF_ENABLE_DEPRECATION_WARNINGS
>
> pkt->flags |= AV_PKT_FLAG_KEY*pic_out.b_keyframe;
> if (ret) {
> - ff_side_data_set_encoder_stats(pkt, (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA, NULL, 0, pict_type);
> + const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(csp_to_pixfmt(pic_out.img.i_csp));
> + int error_count = 0;
> + int64_t *errors = NULL;
> +
> + if (ctx->flags & AV_CODEC_FLAG_PSNR) {
> + double scale[3] = { 1,
> + (1 << pix_desc->log2_chroma_h) * (double)(1 << pix_desc->log2_chroma_w),
> + (1 << pix_desc->log2_chroma_h) * (double)(1 << pix_desc->log2_chroma_w),
Any particular reason the cast is on the second value? It looks strange.
> + };
> + double mse;
> + int i;
> +
> + error_count = pix_desc->nb_components;
> +
> + av_log(ctx, AV_LOG_DEBUG, "PSNR values from libx264: %.3f %.3f %.3f.\n",
> + pic_out.prop.f_psnr[0], pic_out.prop.f_psnr[1], pic_out.prop.f_psnr[2]);
> +
> + for (i = 0; i < pix_desc->nb_components; ++i) {
for (int i ....
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list