mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 20:42:49 +08:00 
			
		
		
		
	fftools/ffmpeg: move do_video_stats() to avoid a forward declaration
This commit is contained in:
		| @@ -127,7 +127,6 @@ typedef struct BenchmarkTimeStamps { | ||||
|     int64_t sys_usec; | ||||
| } BenchmarkTimeStamps; | ||||
|  | ||||
| static void do_video_stats(OutputStream *ost, int frame_size); | ||||
| static BenchmarkTimeStamps get_benchmark_time_stamps(void); | ||||
| static int64_t getmaxrss(void); | ||||
| static int ifilter_has_all_input_formats(FilterGraph *fg); | ||||
| @@ -831,6 +830,52 @@ static int init_output_stream_wrapper(OutputStream *ost, AVFrame *frame, | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static double psnr(double d) | ||||
| { | ||||
|     return -10.0 * log10(d); | ||||
| } | ||||
|  | ||||
| static void do_video_stats(OutputStream *ost, int frame_size) | ||||
| { | ||||
|     AVCodecContext *enc; | ||||
|     int frame_number; | ||||
|     double ti1, bitrate, avg_bitrate; | ||||
|  | ||||
|     /* this is executed just the first time do_video_stats is called */ | ||||
|     if (!vstats_file) { | ||||
|         vstats_file = fopen(vstats_filename, "w"); | ||||
|         if (!vstats_file) { | ||||
|             perror("fopen"); | ||||
|             exit_program(1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     enc = ost->enc_ctx; | ||||
|     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))); | ||||
|  | ||||
|     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)); | ||||
| } | ||||
|  | ||||
| static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame) | ||||
| { | ||||
|     AVCodecContext   *enc = ost->enc_ctx; | ||||
| @@ -1231,52 +1276,6 @@ static void do_video_out(OutputFile *of, | ||||
|         av_frame_move_ref(ost->last_frame, next_picture); | ||||
| } | ||||
|  | ||||
| static double psnr(double d) | ||||
| { | ||||
|     return -10.0 * log10(d); | ||||
| } | ||||
|  | ||||
| static void do_video_stats(OutputStream *ost, int frame_size) | ||||
| { | ||||
|     AVCodecContext *enc; | ||||
|     int frame_number; | ||||
|     double ti1, bitrate, avg_bitrate; | ||||
|  | ||||
|     /* this is executed just the first time do_video_stats is called */ | ||||
|     if (!vstats_file) { | ||||
|         vstats_file = fopen(vstats_filename, "w"); | ||||
|         if (!vstats_file) { | ||||
|             perror("fopen"); | ||||
|             exit_program(1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     enc = ost->enc_ctx; | ||||
|     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))); | ||||
|  | ||||
|     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)); | ||||
| } | ||||
|  | ||||
| static void finish_output_stream(OutputStream *ost) | ||||
| { | ||||
|     OutputFile *of = output_files[ost->file_index]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Anton Khirnov
					Anton Khirnov