aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder')
-rw-r--r--src/decoder/FfmpegDecoderPlugin.cxx10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx
index a14b04510..01b551bb1 100644
--- a/src/decoder/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/FfmpegDecoderPlugin.cxx
@@ -250,13 +250,14 @@ static DecoderCommand
ffmpeg_send_packet(Decoder &decoder, InputStream &is,
const AVPacket *packet,
AVCodecContext *codec_context,
- const AVRational *time_base,
+ const AVStream *stream,
AVFrame *frame,
uint8_t **buffer, int *buffer_size)
{
if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE)
decoder_timestamp(decoder,
- time_from_ffmpeg(packet->pts, *time_base));
+ time_from_ffmpeg(packet->pts - stream->start_time,
+ stream->time_base));
AVPacket packet2 = *packet;
@@ -469,7 +470,7 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
if (packet.stream_index == audio_stream)
cmd = ffmpeg_send_packet(decoder, input,
&packet, codec_context,
- &av_stream->time_base,
+ av_stream,
frame,
&interleaved_buffer, &interleaved_buffer_size);
else
@@ -480,7 +481,8 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
if (cmd == DecoderCommand::SEEK) {
int64_t where =
time_to_ffmpeg(decoder_seek_where(decoder),
- av_stream->time_base);
+ av_stream->time_base) +
+ av_stream->start_time;
if (av_seek_frame(format_context, audio_stream, where,
AV_TIME_BASE) < 0)