diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-04-06 23:17:32 +0400 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2011-05-12 20:02:27 +0400 |
commit | 5da116a3fde9013846bd7b385cdde5ce2951869c (patch) | |
tree | fd2f200002389594819dace8e04ffaea647c2fe5 /ffmpeg.c | |
parent | bbc572a2c4d6d71b1c43e7853dd8caba3234dff6 (diff) |
ffmpeg: factorize quality calculation
Calculate quality value once per stream in print_report().
Also fix segfault, as coded_frame can be NULL.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r-- | ffmpeg.c | 13 |
1 files changed, 6 insertions, 7 deletions
@@ -1322,26 +1322,25 @@ static void print_report(AVFormatContext **output_files, ti1 = 1e10; vid = 0; for(i=0;i<nb_ostreams;i++) { + float q = -1; ost = ost_table[i]; enc = ost->st->codec; + if (!ost->st->stream_copy && enc->coded_frame) + q = enc->coded_frame->quality/(float)FF_QP2LAMBDA; if (vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) { - snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "q=%2.1f ", - !ost->st->stream_copy ? - enc->coded_frame->quality/(float)FF_QP2LAMBDA : -1); + snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "q=%2.1f ", q); } if (!vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) { float t = (av_gettime()-timer_start) / 1000000.0; frame_number = ost->frame_number; snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "frame=%5d fps=%3d q=%3.1f ", - frame_number, (t>1)?(int)(frame_number/t+0.5) : 0, - !ost->st->stream_copy ? - enc->coded_frame->quality/(float)FF_QP2LAMBDA : -1); + frame_number, (t>1)?(int)(frame_number/t+0.5) : 0, q); if(is_last_report) snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "L"); if(qp_hist){ int j; - int qp= lrintf(enc->coded_frame->quality/(float)FF_QP2LAMBDA); + int qp = lrintf(q); if(qp>=0 && qp<FF_ARRAY_ELEMS(qp_histogram)) qp_histogram[qp]++; for(j=0; j<32; j++) |