diff --git a/gst/mpegvideoparse/mpegpacketiser.c b/gst/mpegvideoparse/mpegpacketiser.c index b22b51f684..5b4381c9fe 100644 --- a/gst/mpegvideoparse/mpegpacketiser.c +++ b/gst/mpegvideoparse/mpegpacketiser.c @@ -562,6 +562,15 @@ mpeg_util_parse_sequence_hdr (MPEGSeqHdr * hdr, guint8 * data, guint8 * end) fps_idx = code & 0xf; set_fps_from_code (hdr, fps_idx); + hdr->bitrate = ((data[6] >> 6) | (data[5] << 2) | (data[4] << 10)); + if (hdr->bitrate == 0x3ffff) { + /* VBR stream */ + hdr->bitrate = 0; + } else { + /* Value in header is in units of 400 bps */ + hdr->bitrate *= 400; + } + constrained_flag = (data[7] >> 2) & 0x01; load_intra_flag = (data[7] >> 1) & 0x01; if (load_intra_flag) { diff --git a/gst/mpegvideoparse/mpegpacketiser.h b/gst/mpegvideoparse/mpegpacketiser.h index 549ca621c2..72f6fd3b8f 100644 --- a/gst/mpegvideoparse/mpegpacketiser.h +++ b/gst/mpegvideoparse/mpegpacketiser.h @@ -76,6 +76,8 @@ struct MPEGSeqHdr gint width, height; /* Framerate */ gint fps_n, fps_d; + /* Bitrate */ + guint bitrate; gboolean progressive; }; diff --git a/gst/mpegvideoparse/mpegvideoparse.c b/gst/mpegvideoparse/mpegvideoparse.c index 442183813a..e3a665db6c 100644 --- a/gst/mpegvideoparse/mpegvideoparse.c +++ b/gst/mpegvideoparse/mpegvideoparse.c @@ -275,6 +275,14 @@ mpegvideoparse_handle_sequence (MpegVideoParse * mpegvideoparse, } gst_caps_unref (caps); + if (new_hdr.bitrate > 0) { + GstTagList *taglist; + + taglist = gst_tag_list_new_full (GST_TAG_BITRATE, new_hdr.bitrate, NULL); + gst_element_found_tags_for_pad (GST_ELEMENT_CAST (mpegvideoparse), + mpegvideoparse->srcpad, taglist); + } + /* And update the new_hdr into our stored version */ mpegvideoparse->seq_hdr = new_hdr; }