Guess the duration before converting video and write guessed duration
authorJustin Johnson <justin.johnson3@gmail.com>
Tue, 2 Feb 2010 22:23:09 +0000 (22:23 +0000)
committerCarl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at>
Tue, 2 Feb 2010 22:23:09 +0000 (22:23 +0000)
into flv header.

Patch by Justin Johnson, justin D johnson3 A gmail

Originally committed as revision 21615 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffmpeg.c
libavformat/flvenc.c

index 3ffd596..720e11a 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2104,6 +2104,19 @@ static int av_encode(AVFormatContext **output_files,
         ist->is_start = 1;
     }
 
         ist->is_start = 1;
     }
 
+    /* set the duration of the output to the duration of the input
+     * if the output ends up being different, it'll be corrected later */
+    for (i=0;i<nb_output_files;i++) {
+        AVFormatContext *out_file = output_files[i];
+        AVFormatContext *in_file = input_files[i];
+
+        if (recording_time != INT64_MAX) {
+            out_file->duration = recording_time / 1000000 * AV_TIME_BASE;
+        } else {
+            out_file->duration = in_file->duration;
+        }
+    }
+
     /* set meta data information from input file if required */
     for (i=0;i<nb_meta_data_maps;i++) {
         AVFormatContext *out_file;
     /* set meta data information from input file if required */
     for (i=0;i<nb_meta_data_maps;i++) {
         AVFormatContext *out_file;
index c255ff0..cf6b1c5 100644 (file)
@@ -221,7 +221,7 @@ static int flv_write_header(AVFormatContext *s)
 
     put_amf_string(pb, "duration");
     flv->duration_offset= url_ftell(pb);
 
     put_amf_string(pb, "duration");
     flv->duration_offset= url_ftell(pb);
-    put_amf_double(pb, 0); // delayed write
+    put_amf_double(pb, s->duration / AV_TIME_BASE); // fill in the guessed duration, it'll be corrected later if incorrect
 
     if(video_enc){
         put_amf_string(pb, "width");
 
     if(video_enc){
         put_amf_string(pb, "width");