Permalink
Browse files

ffmpeg: add option to control copying of frames prior to start.

Normally we discard things prior to the intended start
for stream copy this is not always possible, and its not done by default
this option allows discarding to be enabled

this is primarely usefull when transcoding a video and stream copying an
audio stream.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
  • Loading branch information...
1 parent d370446 commit 65f7aee63b6283a2336d03046faa37f2391d98e0 @michaelni michaelni committed Sep 27, 2012
Showing with 12 additions and 0 deletions.
  1. +4 −0 ffmpeg.c
  2. +3 −0 ffmpeg.h
  3. +5 −0 ffmpeg_opt.c
View
@@ -1340,6 +1340,10 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
!ost->copy_initial_nonkeyframes)
return;
+ if (!ost->frame_number && ist->pts < of->start_time &&
+ !ost->copy_prior_start)
+ return;
+
if (of->recording_time != INT64_MAX &&
ist->pts >= of->recording_time + of->start_time) {
close_output_stream(ost);
View
@@ -157,6 +157,8 @@ typedef struct OptionsContext {
int nb_presets;
SpecifierOpt *copy_initial_nonkeyframes;
int nb_copy_initial_nonkeyframes;
+ SpecifierOpt *copy_prior_start;
+ int nb_copy_prior_start;
SpecifierOpt *filters;
int nb_filters;
SpecifierOpt *fix_sub_duration;
@@ -326,6 +328,7 @@ typedef struct OutputStream {
int stream_copy;
const char *attachment_filename;
int copy_initial_nonkeyframes;
+ int copy_prior_start;
int keep_pix_fmt;
} OutputStream;
View
@@ -960,6 +960,9 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
ost->max_frames = INT64_MAX;
MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
+ ost->copy_prior_start = -1;
+ MATCH_PER_STREAM_OPT(copy_prior_start, i, ost->copy_prior_start, oc ,st);
+
MATCH_PER_STREAM_OPT(bitstream_filters, str, bsf, oc, st);
while (bsf) {
if (next = strchr(bsf, ','))
@@ -2316,6 +2319,8 @@ const OptionDef options[] = {
"exit on error", "error" },
{ "copyinkf", OPT_BOOL | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(copy_initial_nonkeyframes) },
"copy initial non-keyframes" },
+ { "copypriorss", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(copy_prior_start) },
+ "copy or discard frames before start time" },
{ "frames", OPT_INT64 | HAS_ARG | OPT_SPEC, { .off = OFFSET(max_frames) },
"set the number of frames to record", "number" },
{ "tag", OPT_STRING | HAS_ARG | OPT_SPEC | OPT_EXPERT,{ .off = OFFSET(codec_tags) },

0 comments on commit 65f7aee

Please sign in to comment.