mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
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:
parent
e7903311f5
commit
84ac277add
1 changed files with 11 additions and 5 deletions
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue