mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-24 03:39:45 +00:00
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>
This commit is contained in:
parent
bbc572a2c4
commit
5da116a3fd
13
ffmpeg.c
13
ffmpeg.c
@ -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++)
|
||||
|
Loading…
Reference in New Issue
Block a user