static av_cold void uninit(AVFilterContext *ctx) { PSNRContext *s = ctx->priv; if (s->nb_frames > 0) { int j; char buf[256]; buf[0] = 0; for (j = 0; j < s->nb_components; j++) { int c = s->is_rgb ? s->rgba_map[j] : j; av_strlcatf(buf, sizeof(buf), " %c:%f", s->comps[j], get_psnr(s->mse_comp[c], s->nb_frames, s->max[c])); } av_log(ctx, AV_LOG_INFO, "PSNR%s average:%f min:%f max:%f\n", buf, get_psnr(s->mse, s->nb_frames, s->average_max), get_psnr(s->max_mse, 1, s->average_max), get_psnr(s->min_mse, 1, s->average_max)); } ff_dualinput_uninit(&s->dinput); if (s->stats_file && s->stats_file != stdout) fclose(s->stats_file); }
static av_cold void uninit(AVFilterContext *ctx) { PSNRContext *s = ctx->priv; if (s->nb_frames > 0) { av_log(ctx, AV_LOG_INFO, "PSNR average:%0.2f min:%0.2f max:%0.2f\n", get_psnr(s->mse, s->nb_frames, s->average_max), get_psnr(s->max_mse, 1, s->average_max), get_psnr(s->min_mse, 1, s->average_max)); } ff_dualinput_uninit(&s->dinput); if (s->stats_file) fclose(s->stats_file); }
static AVFrame *do_psnr(AVFilterContext *ctx, AVFrame *main, const AVFrame *ref) { PSNRContext *s = ctx->priv; double comp_mse[4], mse = 0; int j, c; AVDictionary **metadata = avpriv_frame_get_metadatap(main); compute_images_mse(s, (const uint8_t **)main->data, main->linesize, (const uint8_t **)ref->data, ref->linesize, main->width, main->height, comp_mse); for (j = 0; j < s->nb_components; j++) mse += comp_mse[j] * s->planeweight[j]; s->min_mse = FFMIN(s->min_mse, mse); s->max_mse = FFMAX(s->max_mse, mse); s->mse += mse; for (j = 0; j < s->nb_components; j++) s->mse_comp[j] += comp_mse[j]; s->nb_frames++; for (j = 0; j < s->nb_components; j++) { c = s->is_rgb ? s->rgba_map[j] : j; set_meta(metadata, "lavfi.psnr.mse.", s->comps[j], comp_mse[c]); set_meta(metadata, "lavfi.psnr.psnr.", s->comps[j], get_psnr(comp_mse[c], 1, s->max[c])); } set_meta(metadata, "lavfi.psnr.mse_avg", 0, mse); set_meta(metadata, "lavfi.psnr.psnr_avg", 0, get_psnr(mse, 1, s->average_max)); if (s->stats_file) { fprintf(s->stats_file, "n:%"PRId64" mse_avg:%0.2f ", s->nb_frames, mse); for (j = 0; j < s->nb_components; j++) { c = s->is_rgb ? s->rgba_map[j] : j; fprintf(s->stats_file, "mse_%c:%0.2f ", s->comps[j], comp_mse[c]); } for (j = 0; j < s->nb_components; j++) { c = s->is_rgb ? s->rgba_map[j] : j; fprintf(s->stats_file, "psnr_%c:%0.2f ", s->comps[j], get_psnr(comp_mse[c], 1, s->max[c])); } fprintf(s->stats_file, "\n"); } return main; }