mpegvideoparse: Detect interlaced content and set it on outgoing caps.

I also added the parsing of all the other bits in the sequence extension
header in case we need it later.
This commit is contained in:
Edward Hervey 2009-05-20 16:46:49 +02:00
parent e8423da78e
commit 0444aa3374
3 changed files with 10 additions and 0 deletions

View 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;

View file

@ -76,6 +76,8 @@ struct MPEGSeqHdr
gint width, height;
/* Framerate */
gint fps_n, fps_d;
gboolean progressive;
};
struct MPEGPictureHdr

View 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);