You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	add a vstats_file command line option
patch by Stefano Sabatini stefano sabatini-lala poste it Originally committed as revision 8810 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
				
					committed by
					
						 Benoit Fouet
						Benoit Fouet
					
				
			
			
				
	
			
			
			
						parent
						
							4bd0c2b1d5
						
					
				
				
					commit
					b60d13799d
				
			| @@ -585,6 +585,8 @@ The alternative is to deinterlace the input stream with | ||||
| Calculate PSNR of compressed frames. | ||||
| @item -vstats | ||||
| Dump video coding statistics to @file{vstats_HHMMSS.log}. | ||||
| @item -vstats_file file | ||||
| Dump video coding statistics to @var{file}. | ||||
| @item -vhook module | ||||
| Insert video processing @var{module}. @var{module} contains the module | ||||
| name and its parameters separated by spaces. | ||||
|   | ||||
							
								
								
									
										42
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -166,7 +166,6 @@ static int do_benchmark = 0; | ||||
| static int do_hex_dump = 0; | ||||
| static int do_pkt_dump = 0; | ||||
| static int do_psnr = 0; | ||||
| static int do_vstats = 0; | ||||
| static int do_pass = 0; | ||||
| static char *pass_logfilename = NULL; | ||||
| static int audio_stream_copy = 0; | ||||
| @@ -177,6 +176,8 @@ static int audio_sync_method= 0; | ||||
| static int copy_ts= 0; | ||||
| static int opt_shortest = 0; // | ||||
| static int video_global_header = 0; | ||||
| static char *vstats_filename; | ||||
| static FILE *fvstats; | ||||
|  | ||||
| static int rate_emu = 0; | ||||
|  | ||||
| @@ -841,22 +842,14 @@ static double psnr(double d){ | ||||
| static void do_video_stats(AVFormatContext *os, AVOutputStream *ost, | ||||
|                            int frame_size) | ||||
| { | ||||
|     static FILE *fvstats=NULL; | ||||
|     char filename[40]; | ||||
|     time_t today2; | ||||
|     struct tm *today; | ||||
|     AVCodecContext *enc; | ||||
|     int frame_number; | ||||
|     int64_t ti; | ||||
|     double ti1, bitrate, avg_bitrate; | ||||
|  | ||||
|     /* this is executed just the first time do_video_stats is called */ | ||||
|     if (!fvstats) { | ||||
|         today2 = time(NULL); | ||||
|         today = localtime(&today2); | ||||
|         snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, | ||||
|                                                today->tm_min, | ||||
|                                                today->tm_sec); | ||||
|         fvstats = fopen(filename,"w"); | ||||
|         fvstats = fopen(vstats_filename, "w"); | ||||
|         if (!fvstats) { | ||||
|             perror("fopen"); | ||||
|             exit(1); | ||||
| @@ -1197,7 +1190,7 @@ static int output_packet(AVInputStream *ist, int ist_index, | ||||
|                         case CODEC_TYPE_VIDEO: | ||||
|                             do_video_out(os, ost, ist, &picture, &frame_size); | ||||
|                             video_size += frame_size; | ||||
|                             if (do_vstats && frame_size) | ||||
|                             if (vstats_filename && frame_size) | ||||
|                                 do_video_stats(os, ost, frame_size); | ||||
|                             break; | ||||
|                         case CODEC_TYPE_SUBTITLE: | ||||
| @@ -3449,6 +3442,23 @@ static void opt_target(const char *arg) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void opt_vstats_file (const char *arg) | ||||
| { | ||||
|     av_free (vstats_filename); | ||||
|     vstats_filename=av_strdup (arg); | ||||
| } | ||||
|  | ||||
| static void opt_vstats (void) | ||||
| { | ||||
|     char filename[40]; | ||||
|     time_t today2 = time(NULL); | ||||
|     struct tm *today = localtime(&today2); | ||||
|  | ||||
|     snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min, | ||||
|              today->tm_sec); | ||||
|     opt_vstats_file(filename); | ||||
| } | ||||
|  | ||||
| static void opt_video_bsf(const char *arg) | ||||
| { | ||||
|     AVBitStreamFilterContext *bsfc= av_bitstream_filter_init(arg); //FIXME split name and args for filter at '=' | ||||
| @@ -3610,7 +3620,8 @@ const OptionDef options[] = { | ||||
|     { "deinterlace", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_deinterlace}, | ||||
|       "deinterlace pictures" }, | ||||
|     { "psnr", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_psnr}, "calculate PSNR of compressed frames" }, | ||||
|     { "vstats", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_vstats}, "dump video coding statistics to file" }, | ||||
|     { "vstats", OPT_EXPERT | OPT_VIDEO, {(void*)&opt_vstats}, "dump video coding statistics to file" }, | ||||
|     { "vstats_file", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_vstats_file}, "dump video coding statistics to file", "file" }, | ||||
|     { "vhook", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)add_frame_hooker}, "insert video processing module", "module" }, | ||||
|     { "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_intra_matrix}, "specify intra matrix coeffs", "matrix" }, | ||||
|     { "inter_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_inter_matrix}, "specify inter matrix coeffs", "matrix" }, | ||||
| @@ -3806,6 +3817,11 @@ int main(int argc, char **argv) | ||||
|  | ||||
|     av_free(intra_matrix); | ||||
|     av_free(inter_matrix); | ||||
|  | ||||
|     if (fvstats) | ||||
|         fclose(fvstats); | ||||
|     av_free(vstats_filename); | ||||
|  | ||||
|     av_free(opt_names); | ||||
|  | ||||
| #ifdef CONFIG_POWERPC_PERF | ||||
|   | ||||
		Reference in New Issue
	
	Block a user