From 890972be037a2deab8a39680087bf0c9ad533e90 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
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 a3f4bbdc007..ff782d285e2 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 */
-- 
GitLab