aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-02-03 21:55:28 +0100
committerMax Kellermann <max@duempel.org>2009-02-03 21:55:28 +0100
commit2c3fab848a048d6b1cdb80a3dbf98df57b5e9921 (patch)
tree1c820edc0d81c5690d3d2216f43772f5d9f4f484
parente3ca024b0f65e512c738f9acdc56fc371616c9f8 (diff)
downloadmpd-2c3fab848a048d6b1cdb80a3dbf98df57b5e9921.tar.gz
mpd-2c3fab848a048d6b1cdb80a3dbf98df57b5e9921.tar.xz
mpd-2c3fab848a048d6b1cdb80a3dbf98df57b5e9921.zip
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.
-rw-r--r--NEWS1
-rw-r--r--src/decoder/ffmpeg_plugin.c9
2 files changed, 6 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 9d6e546a5..6956f16d7 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,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 127b75c26..68994ac31 100644
--- a/src/decoder/ffmpeg_plugin.c
+++ b/src/decoder/ffmpeg_plugin.c
@@ -228,10 +228,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");
@@ -244,6 +240,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,