From 2c3fab848a048d6b1cdb80a3dbf98df57b5e9921 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
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 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,
-- 
cgit v1.2.3