>From 075aa47700727020b28695bf3a29b7dbf180bf29 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jind=C5=99ich=20Makovi=C4=8Dka?= <makovick@gmail.com>
Date: Sat, 26 Nov 2011 14:40:25 +0100
Subject: [PATCH 1/2] check for decoding timestamp monotonicity

---
 librtmp/rtmp.c |   11 +++++++++++
 librtmp/rtmp.h |    2 ++
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/librtmp/rtmp.c b/librtmp/rtmp.c
index 52d0254..62ede41 100644
--- a/librtmp/rtmp.c
+++ b/librtmp/rtmp.c
@@ -4320,6 +4320,8 @@ fail:
 	  r->m_read.bufpos = mybuf;
 	}
       r->m_read.flags |= RTMP_READ_HEADER;
+      r->m_read.last_video_ts = 0;
+      r->m_read.last_audio_ts = 0;
     }
 
   if ((r->m_read.flags & RTMP_READ_SEEKING) && r->m_read.buf)
@@ -4357,6 +4359,15 @@ fail:
   while (size > 0 && (nRead = Read_1_Packet(r, buf, size)) >= 0)
     {
       if (!nRead) continue;
+      if (*buf == RTMP_PACKET_TYPE_VIDEO) {
+          if (r->m_read.last_video_ts && r->m_read.timestamp <= r->m_read.last_video_ts)
+              continue;
+          r->m_read.last_video_ts = r->m_read.timestamp;
+      } else if (*buf == RTMP_PACKET_TYPE_AUDIO) {
+          if (r->m_read.last_audio_ts && r->m_read.timestamp <= r->m_read.last_audio_ts)
+              continue;
+          r->m_read.last_audio_ts = r->m_read.timestamp;
+      }
       buf += nRead;
       total += nRead;
       size -= nRead;
diff --git a/librtmp/rtmp.h b/librtmp/rtmp.h
index 6b2ae5b..6b68126 100644
--- a/librtmp/rtmp.h
+++ b/librtmp/rtmp.h
@@ -198,6 +198,8 @@ extern "C"
     char *bufpos;
     unsigned int buflen;
     uint32_t timestamp;
+    uint32_t last_video_ts;
+    uint32_t last_audio_ts;
     uint8_t dataType;
     uint8_t flags;
 #define RTMP_READ_HEADER	0x01
-- 
1.7.7.6

