From 2092bd7531f30b07f1188b2a28cf67a42d4bd8e4 Mon Sep 17 00:00:00 2001
From: Gildas Bazin <gbazi@altern.org>
Date: Fri, 20 Feb 2004 14:39:15 +0000
Subject: [PATCH] avsync patch by (Gildas Bazin <gbazin at altern dot org>)

Originally committed as revision 2805 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/mpegts.c |  1 +
 libavformat/utils.c  | 10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 2ad5aa5c76..f74916f9b7 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -836,6 +836,7 @@ static void mpegts_push_data(void *opaque,
                     memcpy(pkt->data, p, len);
                     pkt->stream_index = pes->st->index;
                     pkt->pts = pes->pts;
+                    pkt->dts = pes->dts;
                     /* reset pts values */
                     pes->pts = AV_NOPTS_VALUE;
                     pes->dts = AV_NOPTS_VALUE;
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 2f60c77c74..8f9b97e7b0 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -625,8 +625,14 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
     } else {
         /* presentation is not delayed : PTS and DTS are the same */
         if (pkt->pts == AV_NOPTS_VALUE) {
-            pkt->pts = st->cur_dts;
-            pkt->dts = st->cur_dts;
+            if (pkt->dts == AV_NOPTS_VALUE) {
+                pkt->pts = st->cur_dts;
+                pkt->dts = st->cur_dts;
+            }
+            else {
+                st->cur_dts = pkt->dts;
+                pkt->pts = pkt->dts;
+            }
         } else {
             st->cur_dts = pkt->pts;
             pkt->dts = pkt->pts;