From 84ac277add7ba47d0960799b2b08a55dc094d37b Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Fri, 16 Apr 2010 17:06:11 +0200 Subject: rtph263depay: detect frame start using Picture Start Code So we stop dropping fragments as soon as there is a picture start (code). In particular, this prevents dropping the first frame following initial DISCONT. --- gst/rtp/gstrtph263depay.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/gst/rtp/gstrtph263depay.c b/gst/rtp/gstrtph263depay.c index f061e97a6..2f4956770 100644 --- a/gst/rtp/gstrtph263depay.c +++ b/gst/rtp/gstrtph263depay.c @@ -248,15 +248,21 @@ gst_rtp_h263_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf) GST_LOG ("payload_len : %d, header_len : %d , leftover : 0x%x", payload_len, header_len, rtph263depay->leftover); - if (G_UNLIKELY (!rtph263depay->start)) { - GST_DEBUG ("no frame start yet, skipping payload"); - goto skip; - } - /* skip header */ payload += header_len; payload_len -= header_len; + if (!rtph263depay->start) { + /* do not skip this fragment if it is a Mode A with picture start code */ + if (!F && payload_len > 4 && (GST_READ_UINT32_BE (payload) >> 10 == 0x20)) { + GST_DEBUG ("Mode A with PSC => frame start"); + rtph263depay->start = TRUE; + } else { + GST_DEBUG ("no frame start yet, skipping payload"); + goto skip; + } + } + if (SBIT) { /* take the leftover and merge it at the beginning, FIXME make the buffer * data writable. */ -- cgit v1.2.3