rtph263depay: Don't drop mode b packets with picture start code
authorStian Selnes <stian.selnes@gmail.com>
Mon, 16 Jun 2014 15:20:32 +0000 (17:20 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 1 Nov 2016 18:21:40 +0000 (20:21 +0200)
Some buggy payloaders, e.g. rtph263pay, may use mode B for packets
that starts with a picture (or GOB) start code although it's not
allowed. Let's be nice and not drop these packets/frames.

https://bugzilla.gnome.org/show_bug.cgi?id=773516

gst/rtp/gstrtph263depay.c

index 0f1bed7..c45639a 100644 (file)
@@ -310,9 +310,10 @@ gst_rtp_h263_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
   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");
+    /* only mode A should be used when there is a picture start code, but
+     * buggy payloaders may send mode B/C in start of frame */
+    if (payload_len > 4 && (GST_READ_UINT32_BE (payload) >> 10 == 0x20)) {
+      GST_DEBUG ("Mode %c with PSC => frame start", "ABC"[F+P]);
       rtph263depay->start = TRUE;
       if ((! !(payload[4] & 0x02)) != I) {
         GST_DEBUG ("Wrong Picture Coding Type Flag in rtp header");