]> git.sesse.net Git - ffmpeg/blobdiff - ffmpeg.c
add doxygen comments
[ffmpeg] / ffmpeg.c
index f93b4c8eaa5ca1888edd690923b8acb2f6041e0e..105e1134287013943bcc86de4fa19db0cb4d5961 100644 (file)
--- a/ffmpeg.c
+++ b/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);
@@ -915,7 +908,9 @@ static void print_report(AVFormatContext **output_files,
 
     oc = output_files[0];
 
-    total_size = url_ftell(&oc->pb);
+    total_size = url_fsize(&oc->pb);
+    if(total_size<0) // FIXME improve url_fsize() so it works with non seekable output too
+        total_size= url_ftell(&oc->pb);
 
     buf[0] = '\0';
     ti1 = 1e10;
@@ -1195,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:
@@ -1610,9 +1605,10 @@ static int av_encode(AVFormatContext **output_files,
                 if (ost->video_resample) {
                     avcodec_get_frame_defaults(&ost->pict_tmp);
                     if( avpicture_alloc( (AVPicture*)&ost->pict_tmp, codec->pix_fmt,
-                                         codec->width, codec->height ) )
+                                         codec->width, codec->height ) ) {
+                        fprintf(stderr, "Cannot allocate temp picture, check pix fmt\n");
                         exit(1);
-
+                    }
                     ost->img_resample_ctx = sws_getContext(
                             icodec->width - (frame_leftBand + frame_rightBand),
                             icodec->height - (frame_topBand + frame_bottomBand),
@@ -3446,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 '='
@@ -3607,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" },
@@ -3803,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