X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_psnr.c;h=320f43307ec2dd2b4c71036263d835de24d32efc;hb=4d48add89b2c5124d660b5672f5d2c549cd65bc6;hp=3bec7475738825d9c52b388812a7e0e3b85a9d2b;hpb=bca30ed2b67f095fd31e07319a622ac30ad22978;p=ffmpeg diff --git a/libavfilter/vf_psnr.c b/libavfilter/vf_psnr.c index 3bec7475738..320f43307ec 100644 --- a/libavfilter/vf_psnr.c +++ b/libavfilter/vf_psnr.c @@ -45,6 +45,7 @@ typedef struct PSNRContext { char *stats_file_str; int stats_version; int stats_header_written; + int stats_add_max; int max[4], average_max; int is_rgb; uint8_t rgba_map[4]; @@ -63,6 +64,7 @@ static const AVOption psnr_options[] = { {"stats_file", "Set file where to store per-frame difference information", OFFSET(stats_file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, {"f", "Set file where to store per-frame difference information", OFFSET(stats_file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, {"stats_version", "Set the format version for the stats file.", OFFSET(stats_version), AV_OPT_TYPE_INT, {.i64=1}, 1, 2, FLAGS }, + {"output_max", "Add raw stats (max values) to the output log.", OFFSET(stats_add_max), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, { NULL } }; @@ -182,6 +184,12 @@ static AVFrame *do_psnr(AVFilterContext *ctx, AVFrame *main, for (j = 0; j < s->nb_components; j++) { fprintf(s->stats_file, ",psnr_%c", s->comps[j]); } + if (s->stats_add_max) { + fprintf(s->stats_file, ",max_avg"); + for (j = 0; j < s->nb_components; j++) { + fprintf(s->stats_file, ",max_%c", s->comps[j]); + } + } fprintf(s->stats_file, "\n"); s->stats_header_written = 1; } @@ -196,6 +204,13 @@ static AVFrame *do_psnr(AVFilterContext *ctx, AVFrame *main, fprintf(s->stats_file, "psnr_%c:%0.2f ", s->comps[j], get_psnr(comp_mse[c], 1, s->max[c])); } + if (s->stats_version == 2 && s->stats_add_max) { + fprintf(s->stats_file, "max_avg:%d ", s->average_max); + for (j = 0; j < s->nb_components; j++) { + c = s->is_rgb ? s->rgba_map[j] : j; + fprintf(s->stats_file, "max_%c:%d ", s->comps[j], s->max[c]); + } + } fprintf(s->stats_file, "\n"); } @@ -210,6 +225,11 @@ static av_cold int init(AVFilterContext *ctx) s->max_mse = -INFINITY; if (s->stats_file_str) { + if (s->stats_version < 2 && s->stats_add_max) { + av_log(ctx, AV_LOG_ERROR, + "stats_add_max was specified but stats_version < 2.\n" ); + return AVERROR(EINVAL); + } if (!strcmp(s->stats_file_str, "-")) { s->stats_file = stdout; } else {