[FFmpeg-cvslog] ffmpeg: fix -force_key_frames

Anton Khirnov git at videolan.org
Mon Feb 18 01:09:39 CET 2013


ffmpeg | branch: release/0.7 | Anton Khirnov <anton at khirnov.net> | Sat Oct  6 09:21:29 2012 +0200| [a60eb6ef12df472554e93916aaeae729b0c8db03] | committer: Anton Khirnov

ffmpeg: fix -force_key_frames

Based on commit 19ad567311b29a42e308317b5329218c590afac8 in master.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a60eb6ef12df472554e93916aaeae729b0c8db03
---

 ffmpeg.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 76d1cf3..30ff538 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -298,6 +298,7 @@ typedef struct AVOutputStream {
 #endif
 
    int sws_flags;
+   char *forced_key_frames;
 } AVOutputStream;
 
 static AVOutputStream **output_streams_for_file[MAX_FILES] = { NULL };
@@ -2254,6 +2255,9 @@ static int transcode(AVFormatContext **output_files,
                 }
                 codec->time_base = (AVRational){ost->frame_rate.den, ost->frame_rate.num};
 
+                if (ost->forced_key_frames)
+                    parse_forced_key_frames(ost->forced_key_frames, ost, codec);
+
 #if CONFIG_AVFILTER
                 if (configure_video_filters(ist, ost)) {
                     fprintf(stderr, "Error opening filters!\n");
@@ -2729,6 +2733,7 @@ static int transcode(AVFormatContext **output_files,
                 av_freep(&ost->st->codec->subtitle_header);
                 av_free(ost->pict_tmp.data[0]);
                 av_free(ost->forced_kf_pts);
+                av_free(ost->forced_key_frames);
                 if (ost->video_resample)
                     sws_freeContext(ost->img_resample_ctx);
                 if (ost->resample)
@@ -3550,8 +3555,10 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
             }
         }
 
-        if (forced_key_frames)
-            parse_forced_key_frames(forced_key_frames, ost, video_enc);
+        if (forced_key_frames) {
+            ost->forced_key_frames = forced_key_frames;
+            forced_key_frames = NULL;
+        }
     }
     if (video_language) {
         av_dict_set(&st->metadata, "language", video_language, 0);
@@ -3561,7 +3568,6 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
     /* reset some key parameters */
     video_disable = 0;
     av_freep(&video_codec_name);
-    av_freep(&forced_key_frames);
     video_stream_copy = 0;
     frame_pix_fmt = PIX_FMT_NONE;
 }



More information about the ffmpeg-cvslog mailing list