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.
This commit is contained in:
Mark Nauwelaerts 2010-04-16 17:06:11 +02:00
parent e7903311f5
commit 84ac277add

View file

@ -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. */