aboutsummaryrefslogtreecommitdiffstats
path: root/avconv.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-06-30 11:26:11 +0300
committerMartin Storsjö <martin@martin.st>2012-07-05 09:57:04 +0300
commit715129cdc409499245fc9519da3db1436b660d3d (patch)
treeca6bf41ccce8d83400c830ee4e4593691d93bd77 /avconv.c
parent07eeeb1d4fa6dea0fb3ad7cd11859db760a76528 (diff)
downloadffmpeg-715129cdc409499245fc9519da3db1436b660d3d.tar.gz
avconv: Set audio filter time base to the sample rate
If the output frame size is smaller than the input sample rate, and the input stream time base corresponds exactly to the input frame size (getting input packet timestamps like 0, 1, 2, 3, 4 etc), the output timestamps from the filter will be like 0, 1, 2, 3, 4, 4, 5 ..., leadning to non-monotone timestamps later. A concrete example is input mp3 data having frame sizes of 1152 samples, transcoded to aac with 1024 sample frames. By setting the audio filter time base to the sample rate, we will get sensible timestamps for all output packets, regardless of the ratio between the input and output frame sizes. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'avconv.c')
-rw-r--r--avconv.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/avconv.c b/avconv.c
index 3a7cebfc95..961356752a 100644
--- a/avconv.c
+++ b/avconv.c
@@ -853,7 +853,7 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
snprintf(args, sizeof(args), "time_base=%d/%d:sample_rate=%d:sample_fmt=%s"
":channel_layout=0x%"PRIx64,
- ist->st->time_base.num, ist->st->time_base.den,
+ 1, ist->st->codec->sample_rate,
ist->st->codec->sample_rate,
av_get_sample_fmt_name(ist->st->codec->sample_fmt),
ist->st->codec->channel_layout);
@@ -2029,6 +2029,10 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
}
}
+ if (decoded_frame->pts != AV_NOPTS_VALUE)
+ decoded_frame->pts = av_rescale_q(decoded_frame->pts,
+ ist->st->time_base,
+ (AVRational){1, ist->st->codec->sample_rate});
for (i = 0; i < ist->nb_filters; i++)
av_buffersrc_write_frame(ist->filters[i]->filter, decoded_frame);