From f3b73b824f849f7c1280a59ddb67f5c3d187a5af Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 3 Feb 2009 21:55:28 +0100 Subject: ffmpeg: check if the time stamp is valid When ffmpeg cannot estimate the elapsed time, it sets AVPacket.pts=AV_NOPTS_VALUE. Our ffmpeg decoder plugin did not check for that special value. --- NEWS | 1 + src/decoder/ffmpeg_plugin.c | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index d0d94f221..c3980302e 100644 --- a/NEWS +++ b/NEWS @@ -38,6 +38,7 @@ ver 0.14.2 (2009/??/??) * decoders: - ffmpeg: added support for the tags comment, genre, year - ffmpeg: don't warn of empty packet output + - ffmpeg: check if the time stamp is valid - wavpack: pass NULL if the .wvc file fails to open - mikmod: call MikMod_Exit() only in the finish() method * audio outputs: diff --git a/src/decoder/ffmpeg_plugin.c b/src/decoder/ffmpeg_plugin.c index 80cc00a5e..c48918067 100644 --- a/src/decoder/ffmpeg_plugin.c +++ b/src/decoder/ffmpeg_plugin.c @@ -230,10 +230,6 @@ ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is, &audio_size, packet_data, packet_size); - - position = av_rescale_q(packet->pts, *time_base, - (AVRational){1, 1}); - if (len < 0) { /* if error, we skip the frame */ g_message("decoding failed\n"); @@ -246,6 +242,11 @@ ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is, if (audio_size <= 0) continue; + position = packet->pts != (int64_t)AV_NOPTS_VALUE + ? av_rescale_q(packet->pts, *time_base, + (AVRational){1, 1}) + : 0; + cmd = decoder_data(decoder, is, audio_buf, audio_size, position, -- cgit v1.2.3