From 890972be037a2deab8a39680087bf0c9ad533e90 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 29 Dec 2003 23:08:30 +0000 Subject: [PATCH] nicer looking PSNR stats (YUV seperate and print the whole file PSNR at the end instead of the last frame's) Originally committed as revision 2635 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index a3f4bbd..ff782d2 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -764,8 +764,29 @@ static void print_report(AVFormatContext **output_files, frame_number = ost->frame_number; sprintf(buf + strlen(buf), "frame=%5d q=%2.1f ", frame_number, enc->coded_frame ? enc->coded_frame->quality/(float)FF_QP2LAMBDA : 0); - if (enc->flags&CODEC_FLAG_PSNR) - sprintf(buf + strlen(buf), "PSNR= %6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0))); + if(is_last_report) + sprintf(buf + strlen(buf), "L"); + if (enc->flags&CODEC_FLAG_PSNR){ + int j; + double error, error_sum=0; + double scale, scale_sum=0; + char type[3]= {'Y','U','V'}; + sprintf(buf + strlen(buf), "PSNR="); + for(j=0; j<3; j++){ + if(is_last_report){ + error= enc->error[j]; + scale= enc->width*enc->height*255.0*255.0*frame_number; + }else{ + error= enc->coded_frame->error[j]; + scale= enc->width*enc->height*255.0*255.0; + } + if(j) scale/=4; + error_sum += error; + scale_sum += scale; + sprintf(buf + strlen(buf), "%c:%2.2f ", type[j], psnr(error/scale)); + } + sprintf(buf + strlen(buf), "*:%2.2f ", psnr(error_sum/scale_sum)); + } vid = 1; } /* compute min output value */ -- 2.7.4