mpegvideoparse: Detect interlaced content and set it on outgoing caps.
authorEdward Hervey <bilboed@bilboed.com>
Wed, 20 May 2009 14:46:49 +0000 (16:46 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Fri, 22 May 2009 15:19:26 +0000 (17:19 +0200)
I also added the parsing of all the other bits in the sequence extension
header in case we need it later.

gst/mpegvideoparse/mpegpacketiser.c
gst/mpegvideoparse/mpegpacketiser.h
gst/mpegvideoparse/mpegvideoparse.c

index 447c50a..0312680 100644 (file)
@@ -498,6 +498,9 @@ mpeg_util_parse_extension_packet (MPEGSeqHdr * hdr, guint8 * data, guint8 * end)
     case MPEG_PACKET_EXT_SEQUENCE:
     {
       /* Parse a Sequence Extension */
+      guint8 profile_level;
+      gboolean low_delay;
+      guint8 chroma_format;
       guint8 horiz_size_ext, vert_size_ext;
       guint8 fps_n_ext, fps_d_ext;
 
@@ -505,8 +508,12 @@ mpeg_util_parse_extension_packet (MPEGSeqHdr * hdr, guint8 * data, guint8 * end)
         /* need at least 10 bytes, minus 4 for the start code 000001b5 */
         return FALSE;
 
+      profile_level = ((data[0] << 4) & 0xf0) | ((data[1]) >> 4);
+      hdr->progressive = data[1] & 0x08;
+      chroma_format = (data[1] >> 2) & 0x03;
       horiz_size_ext = ((data[1] << 1) & 0x02) | ((data[2] >> 7) & 0x01);
       vert_size_ext = (data[2] >> 5) & 0x03;
+      low_delay = data[5] >> 7;
       fps_n_ext = (data[5] >> 5) & 0x03;
       fps_d_ext = data[5] & 0x1f;
 
index 426b13a..549ca62 100644 (file)
@@ -76,6 +76,8 @@ struct MPEGSeqHdr
   gint width, height;
   /* Framerate */
   gint fps_n, fps_d;
+
+  gboolean progressive;
 };
 
 struct MPEGPictureHdr
index 3c93017..2a7f915 100644 (file)
@@ -261,6 +261,7 @@ mpegvideoparse_handle_sequence (MpegVideoParse * mpegvideoparse,
         "height", G_TYPE_INT, new_hdr.height,
         "framerate", GST_TYPE_FRACTION, new_hdr.fps_n, new_hdr.fps_d,
         "pixel-aspect-ratio", GST_TYPE_FRACTION, new_hdr.par_w, new_hdr.par_h,
+        "interlaced", G_TYPE_BOOLEAN, !new_hdr.progressive,
         "codec_data", GST_TYPE_BUFFER, seq_buf, NULL);
 
     GST_DEBUG ("New mpegvideoparse caps: %" GST_PTR_FORMAT, caps);