Message ID | 20220111095830.31542-24-anton@khirnov.net |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,01/28] ffmpeg: pass the muxer context explicitly to some functions | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_ppc | success | Make finished |
andriy/make_fate_ppc | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
andriy/make_aarch64_jetson | success | Make finished |
andriy/make_fate_aarch64_jetson | success | Make fate finished |
Anton Khirnov: > do_video_stats() is only ever called for video. > --- > fftools/ffmpeg_mux.c | 42 ++++++++++++++++++++---------------------- > 1 file changed, 20 insertions(+), 22 deletions(-) > > diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c > index 76d9d4b9c4..8a64661c9c 100644 > --- a/fftools/ffmpeg_mux.c > +++ b/fftools/ffmpeg_mux.c > @@ -72,31 +72,29 @@ static void do_video_stats(OutputStream *ost, int frame_size) > } > > enc = ost->enc_ctx; > - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { > - frame_number = ost->st->nb_frames; > - if (vstats_version <= 1) { > - fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, > - ost->quality / (float)FF_QP2LAMBDA); > - } else { > - fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, > - ost->quality / (float)FF_QP2LAMBDA); > - } > + frame_number = ost->st->nb_frames; > + if (vstats_version <= 1) { > + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, > + ost->quality / (float)FF_QP2LAMBDA); > + } else { > + fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, > + ost->quality / (float)FF_QP2LAMBDA); > + } > > - if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) > - fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); > + if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) > + fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); > > - fprintf(vstats_file,"f_size= %6d ", frame_size); > - /* compute pts value */ > - ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); > - if (ti1 < 0.01) > - ti1 = 0.01; > + fprintf(vstats_file,"f_size= %6d ", frame_size); > + /* compute pts value */ > + ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); > + if (ti1 < 0.01) > + ti1 = 0.01; > > - bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; > - avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; > - fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", > - (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); > - fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); > - } > + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; > + avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; > + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", > + (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); > + fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); > } > > static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others) > LGTM to removing the check, but it would be better if you removed the check before moving the code to ffmpeg_mux.c and then fixed the indentation while moving the code to ffmpeg_mux.c. - Andreas
Quoting Andreas Rheinhardt (2022-01-13 11:54:59) > Anton Khirnov: > > do_video_stats() is only ever called for video. > > --- > > fftools/ffmpeg_mux.c | 42 ++++++++++++++++++++---------------------- > > 1 file changed, 20 insertions(+), 22 deletions(-) > > > > diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c > > index 76d9d4b9c4..8a64661c9c 100644 > > --- a/fftools/ffmpeg_mux.c > > +++ b/fftools/ffmpeg_mux.c > > @@ -72,31 +72,29 @@ static void do_video_stats(OutputStream *ost, int frame_size) > > } > > > > enc = ost->enc_ctx; > > - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { > > - frame_number = ost->st->nb_frames; > > - if (vstats_version <= 1) { > > - fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, > > - ost->quality / (float)FF_QP2LAMBDA); > > - } else { > > - fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, > > - ost->quality / (float)FF_QP2LAMBDA); > > - } > > + frame_number = ost->st->nb_frames; > > + if (vstats_version <= 1) { > > + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, > > + ost->quality / (float)FF_QP2LAMBDA); > > + } else { > > + fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, > > + ost->quality / (float)FF_QP2LAMBDA); > > + } > > > > - if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) > > - fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); > > + if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) > > + fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); > > > > - fprintf(vstats_file,"f_size= %6d ", frame_size); > > - /* compute pts value */ > > - ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); > > - if (ti1 < 0.01) > > - ti1 = 0.01; > > + fprintf(vstats_file,"f_size= %6d ", frame_size); > > + /* compute pts value */ > > + ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); > > + if (ti1 < 0.01) > > + ti1 = 0.01; > > > > - bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; > > - avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; > > - fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", > > - (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); > > - fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); > > - } > > + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; > > + avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; > > + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", > > + (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); > > + fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); > > } > > > > static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others) > > > > LGTM to removing the check, but it would be better if you removed the > check before moving the code to ffmpeg_mux.c and then fixed the > indentation while moving the code to ffmpeg_mux.c. Better why? What's the point of essentially re-doing these commits and dealing with rebase conflicts, just to get the same result in the end?
Anton Khirnov: > Quoting Andreas Rheinhardt (2022-01-13 11:54:59) >> Anton Khirnov: >>> do_video_stats() is only ever called for video. >>> --- >>> fftools/ffmpeg_mux.c | 42 ++++++++++++++++++++---------------------- >>> 1 file changed, 20 insertions(+), 22 deletions(-) >>> >>> diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c >>> index 76d9d4b9c4..8a64661c9c 100644 >>> --- a/fftools/ffmpeg_mux.c >>> +++ b/fftools/ffmpeg_mux.c >>> @@ -72,31 +72,29 @@ static void do_video_stats(OutputStream *ost, int frame_size) >>> } >>> >>> enc = ost->enc_ctx; >>> - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { >>> - frame_number = ost->st->nb_frames; >>> - if (vstats_version <= 1) { >>> - fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, >>> - ost->quality / (float)FF_QP2LAMBDA); >>> - } else { >>> - fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, >>> - ost->quality / (float)FF_QP2LAMBDA); >>> - } >>> + frame_number = ost->st->nb_frames; >>> + if (vstats_version <= 1) { >>> + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, >>> + ost->quality / (float)FF_QP2LAMBDA); >>> + } else { >>> + fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, >>> + ost->quality / (float)FF_QP2LAMBDA); >>> + } >>> >>> - if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) >>> - fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); >>> + if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) >>> + fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); >>> >>> - fprintf(vstats_file,"f_size= %6d ", frame_size); >>> - /* compute pts value */ >>> - ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); >>> - if (ti1 < 0.01) >>> - ti1 = 0.01; >>> + fprintf(vstats_file,"f_size= %6d ", frame_size); >>> + /* compute pts value */ >>> + ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); >>> + if (ti1 < 0.01) >>> + ti1 = 0.01; >>> >>> - bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; >>> - avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; >>> - fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", >>> - (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); >>> - fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); >>> - } >>> + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; >>> + avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; >>> + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", >>> + (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); >>> + fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); >>> } >>> >>> static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others) >>> >> >> LGTM to removing the check, but it would be better if you removed the >> check before moving the code to ffmpeg_mux.c and then fixed the >> indentation while moving the code to ffmpeg_mux.c. > > Better why? What's the point of essentially re-doing these commits and > dealing with rebase conflicts, just to get the same result in the end? > A smaller diff. - Andreas
Quoting Andreas Rheinhardt (2022-01-18 11:18:24) > Anton Khirnov: > > Quoting Andreas Rheinhardt (2022-01-13 11:54:59) > >> Anton Khirnov: > >>> do_video_stats() is only ever called for video. > >>> --- > >>> fftools/ffmpeg_mux.c | 42 ++++++++++++++++++++---------------------- > >>> 1 file changed, 20 insertions(+), 22 deletions(-) > >>> > >>> diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c > >>> index 76d9d4b9c4..8a64661c9c 100644 > >>> --- a/fftools/ffmpeg_mux.c > >>> +++ b/fftools/ffmpeg_mux.c > >>> @@ -72,31 +72,29 @@ static void do_video_stats(OutputStream *ost, int frame_size) > >>> } > >>> > >>> enc = ost->enc_ctx; > >>> - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { > >>> - frame_number = ost->st->nb_frames; > >>> - if (vstats_version <= 1) { > >>> - fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, > >>> - ost->quality / (float)FF_QP2LAMBDA); > >>> - } else { > >>> - fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, > >>> - ost->quality / (float)FF_QP2LAMBDA); > >>> - } > >>> + frame_number = ost->st->nb_frames; > >>> + if (vstats_version <= 1) { > >>> + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, > >>> + ost->quality / (float)FF_QP2LAMBDA); > >>> + } else { > >>> + fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, > >>> + ost->quality / (float)FF_QP2LAMBDA); > >>> + } > >>> > >>> - if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) > >>> - fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); > >>> + if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) > >>> + fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); > >>> > >>> - fprintf(vstats_file,"f_size= %6d ", frame_size); > >>> - /* compute pts value */ > >>> - ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); > >>> - if (ti1 < 0.01) > >>> - ti1 = 0.01; > >>> + fprintf(vstats_file,"f_size= %6d ", frame_size); > >>> + /* compute pts value */ > >>> + ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); > >>> + if (ti1 < 0.01) > >>> + ti1 = 0.01; > >>> > >>> - bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; > >>> - avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; > >>> - fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", > >>> - (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); > >>> - fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); > >>> - } > >>> + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; > >>> + avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; > >>> + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", > >>> + (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); > >>> + fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); > >>> } > >>> > >>> static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others) > >>> > >> > >> LGTM to removing the check, but it would be better if you removed the > >> check before moving the code to ffmpeg_mux.c and then fixed the > >> indentation while moving the code to ffmpeg_mux.c. > > > > Better why? What's the point of essentially re-doing these commits and > > dealing with rebase conflicts, just to get the same result in the end? > > > > A smaller diff. Doesn't seem worth the trouble. git show -w is already just two lines.
Anton Khirnov: > Quoting Andreas Rheinhardt (2022-01-18 11:18:24) >> Anton Khirnov: >>> Quoting Andreas Rheinhardt (2022-01-13 11:54:59) >>>> Anton Khirnov: >>>>> do_video_stats() is only ever called for video. >>>>> --- >>>>> fftools/ffmpeg_mux.c | 42 ++++++++++++++++++++---------------------- >>>>> 1 file changed, 20 insertions(+), 22 deletions(-) >>>>> >>>>> diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c >>>>> index 76d9d4b9c4..8a64661c9c 100644 >>>>> --- a/fftools/ffmpeg_mux.c >>>>> +++ b/fftools/ffmpeg_mux.c >>>>> @@ -72,31 +72,29 @@ static void do_video_stats(OutputStream *ost, int frame_size) >>>>> } >>>>> >>>>> enc = ost->enc_ctx; >>>>> - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { >>>>> - frame_number = ost->st->nb_frames; >>>>> - if (vstats_version <= 1) { >>>>> - fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, >>>>> - ost->quality / (float)FF_QP2LAMBDA); >>>>> - } else { >>>>> - fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, >>>>> - ost->quality / (float)FF_QP2LAMBDA); >>>>> - } >>>>> + frame_number = ost->st->nb_frames; >>>>> + if (vstats_version <= 1) { >>>>> + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, >>>>> + ost->quality / (float)FF_QP2LAMBDA); >>>>> + } else { >>>>> + fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, >>>>> + ost->quality / (float)FF_QP2LAMBDA); >>>>> + } >>>>> >>>>> - if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) >>>>> - fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); >>>>> + if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) >>>>> + fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); >>>>> >>>>> - fprintf(vstats_file,"f_size= %6d ", frame_size); >>>>> - /* compute pts value */ >>>>> - ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); >>>>> - if (ti1 < 0.01) >>>>> - ti1 = 0.01; >>>>> + fprintf(vstats_file,"f_size= %6d ", frame_size); >>>>> + /* compute pts value */ >>>>> + ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); >>>>> + if (ti1 < 0.01) >>>>> + ti1 = 0.01; >>>>> >>>>> - bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; >>>>> - avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; >>>>> - fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", >>>>> - (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); >>>>> - fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); >>>>> - } >>>>> + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; >>>>> + avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; >>>>> + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", >>>>> + (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); >>>>> + fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); >>>>> } >>>>> >>>>> static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others) >>>>> >>>> >>>> LGTM to removing the check, but it would be better if you removed the >>>> check before moving the code to ffmpeg_mux.c and then fixed the >>>> indentation while moving the code to ffmpeg_mux.c. >>> >>> Better why? What's the point of essentially re-doing these commits and >>> dealing with rebase conflicts, just to get the same result in the end? >>> >> >> A smaller diff. > > Doesn't seem worth the trouble. git show -w is already just two lines. > And if you swapped the patches it would be only two lines for an ordinary git show; not because of git show functionality, but because the patch only touches two lines. - Andreas
Quoting Andreas Rheinhardt (2022-01-18 11:35:13) > And if you swapped the patches it would be only two lines for an > ordinary git show; not because of git show functionality, but because > the patch only touches two lines. And I would have to spend extra time dealing with rebase conflicts. Not wasting people's time should be a factor in reviews. I wouldn't mind if there was a point to it, but optimizing diff size doesn't seem particularly meaningful to me. Especially since that code would get touched anyway, so it's not making things easier for git blame either.
diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index 76d9d4b9c4..8a64661c9c 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -72,31 +72,29 @@ static void do_video_stats(OutputStream *ost, int frame_size) } enc = ost->enc_ctx; - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { - frame_number = ost->st->nb_frames; - if (vstats_version <= 1) { - fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, - ost->quality / (float)FF_QP2LAMBDA); - } else { - fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, - ost->quality / (float)FF_QP2LAMBDA); - } + frame_number = ost->st->nb_frames; + if (vstats_version <= 1) { + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, + ost->quality / (float)FF_QP2LAMBDA); + } else { + fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number, + ost->quality / (float)FF_QP2LAMBDA); + } - if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) - fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); + if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR)) + fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0))); - fprintf(vstats_file,"f_size= %6d ", frame_size); - /* compute pts value */ - ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); - if (ti1 < 0.01) - ti1 = 0.01; + fprintf(vstats_file,"f_size= %6d ", frame_size); + /* compute pts value */ + ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base); + if (ti1 < 0.01) + ti1 = 0.01; - bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; - avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; - fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", - (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); - fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); - } + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; + avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0; + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", + (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate); + fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type)); } static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others)