summaryrefslogtreecommitdiff
path: root/avconv.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2015-04-02 06:09:05 +0200
committerAnton Khirnov <anton@khirnov.net>2015-04-03 13:10:03 +0200
commit3892bdab9b652eb003ab95e167f1765e0b0ea035 (patch)
tree8b1f19cab8e11cee9e7b46a4a34d2328ecefb5a8 /avconv.c
parentb2965ec7761c99e8ef9c217a28a517e37f010480 (diff)
avconv: do not overwrite the stream codec context for streamcopy
Since we are not doing encoding, there is no point in ever touching the separate encoding context. Always use the stream codec context. Fixes writing attachments. CC:libav-devel@libav.org
Diffstat (limited to 'avconv.c')
-rw-r--r--avconv.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/avconv.c b/avconv.c
index da9bc939b0..fc02c05055 100644
--- a/avconv.c
+++ b/avconv.c
@@ -318,7 +318,7 @@ static void update_sample_fmt(AVCodecContext *dec, AVCodec *dec_codec,
static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
{
AVBitStreamFilterContext *bsfc = ost->bitstream_filters;
- AVCodecContext *avctx = ost->enc_ctx;
+ AVCodecContext *avctx = ost->encoding_needed ? ost->enc_ctx : ost->st->codec;
int ret;
/*
@@ -1706,7 +1706,7 @@ static int transcode_init(void)
if (ost->attachment_filename)
continue;
- enc_ctx = ost->enc_ctx;
+ enc_ctx = ost->stream_copy ? ost->st->codec : ost->enc_ctx;
if (ist) {
dec_ctx = ist->dec_ctx;
@@ -1985,20 +1985,21 @@ static int transcode_init(void)
if (ost->enc_ctx->bit_rate && ost->enc_ctx->bit_rate < 1000)
av_log(NULL, AV_LOG_WARNING, "The bitrate parameter is set too low."
"It takes bits/s as argument, not kbits/s\n");
+
+ ret = avcodec_copy_context(ost->st->codec, ost->enc_ctx);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_FATAL,
+ "Error initializing the output stream codec context.\n");
+ exit_program(1);
+ }
+
+ ost->st->time_base = ost->enc_ctx->time_base;
} else {
ret = av_opt_set_dict(ost->enc_ctx, &ost->encoder_opts);
if (ret < 0)
return ret;
+ ost->st->time_base = ost->st->codec->time_base;
}
-
- ret = avcodec_copy_context(ost->st->codec, ost->enc_ctx);
- if (ret < 0) {
- av_log(NULL, AV_LOG_FATAL,
- "Error initializing the output stream codec context.\n");
- exit_program(1);
- }
-
- ost->st->time_base = ost->enc_ctx->time_base;
}
/* init input streams */