[0.11] gst-plugins-bad: codecparsers: VC1: Compute framerate and bitrate in simple/main profiles
Wim Taymans
wtay at kemper.freedesktop.org
Tue Oct 18 05:32:28 PDT 2011
Module: gst-plugins-bad
Branch: 0.11
Commit: 446e0a521603d2bf1fd51147d027ef5470cd26de
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=446e0a521603d2bf1fd51147d027ef5470cd26de
Author: Thibault Saunier <thibault.saunier at collabora.com>
Date: Wed Oct 5 08:26:31 2011 -0300
codecparsers: VC1: Compute framerate and bitrate in simple/main profiles
---
gst-libs/gst/codecparsers/gstvc1parser.c | 52 ++++++++++++++++-------------
1 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c
index ad726bd..3e82ab5 100644
--- a/gst-libs/gst/codecparsers/gstvc1parser.c
+++ b/gst-libs/gst/codecparsers/gstvc1parser.c
@@ -564,6 +564,33 @@ get_unary (GstBitReader * br, gint stop, gint len)
return i;
}
+static inline void
+calculate_framerate_bitrate (GstVC1SeqHdr * seqhdr)
+{
+ /* Calulate bitrate and framerate */
+ if (seqhdr->frmrtq_postproc == 0 && seqhdr->bitrtq_postproc == 30) {
+ seqhdr->framerate = 0;
+ seqhdr->bitrate = 0;
+ } else if (seqhdr->frmrtq_postproc == 0 && seqhdr->bitrtq_postproc == 30) {
+ seqhdr->framerate = 2;
+ seqhdr->bitrate = 1952;
+ } else if (seqhdr->frmrtq_postproc == 0 && seqhdr->bitrtq_postproc == 31) {
+ seqhdr->framerate = 6;
+ seqhdr->bitrate = 2016;
+ } else {
+ if (seqhdr->frmrtq_postproc == 7) {
+ seqhdr->framerate = 30;
+ } else {
+ seqhdr->framerate = 2 + (seqhdr->frmrtq_postproc * 4);
+ }
+ if (seqhdr->bitrtq_postproc == 31) {
+ seqhdr->bitrate = 2016;
+ } else {
+ seqhdr->bitrate = 32 + (seqhdr->bitrtq_postproc * 64);
+ }
+ }
+}
+
static GstVC1ParserResult
parse_hrd_param_flag (GstBitReader * br, GstVC1HrdParam * hrd_param)
{
@@ -612,34 +639,12 @@ parse_sequence_header_advanced (GstVC1SeqHdr * seqhdr, GstBitReader * br)
READ_UINT8 (br, seqhdr->colordiff_format, 2);
READ_UINT8 (br, seqhdr->frmrtq_postproc, 3);
READ_UINT8 (br, seqhdr->bitrtq_postproc, 5);
+ calculate_framerate_bitrate (seqhdr);
GST_DEBUG ("level %u, colordiff_format %u , frmrtq_postproc %u,"
" bitrtq_postproc %u", advanced->level, seqhdr->colordiff_format,
seqhdr->frmrtq_postproc, seqhdr->bitrtq_postproc);
- /* Calulate bitrate and framerate */
- if (seqhdr->frmrtq_postproc == 0 && seqhdr->bitrtq_postproc == 30) {
- seqhdr->framerate = 0;
- seqhdr->bitrate = 0;
- } else if (seqhdr->frmrtq_postproc == 0 && seqhdr->bitrtq_postproc == 30) {
- seqhdr->framerate = 2;
- seqhdr->bitrate = 1952;
- } else if (seqhdr->frmrtq_postproc == 0 && seqhdr->bitrtq_postproc == 31) {
- seqhdr->framerate = 6;
- seqhdr->bitrate = 2016;
- } else {
- if (seqhdr->frmrtq_postproc == 7) {
- seqhdr->framerate = 30;
- } else {
- seqhdr->framerate = 2 + (seqhdr->frmrtq_postproc * 4);
- }
- if (seqhdr->bitrtq_postproc == 31) {
- seqhdr->bitrate = 2016;
- } else {
- seqhdr->bitrate = 32 + (seqhdr->bitrtq_postproc * 64);
- }
- }
-
if (gst_bit_reader_get_remaining (br) < 32)
goto failed;
@@ -1293,6 +1298,7 @@ gst_vc1_parse_sequence_header (const guint8 * data, gsize size,
seqhdr->frmrtq_postproc = gst_bit_reader_get_bits_uint8_unchecked (&br, 3);
seqhdr->bitrtq_postproc = gst_bit_reader_get_bits_uint8_unchecked (&br, 5);
simplehdr->loop_filter = gst_bit_reader_get_bits_uint8_unchecked (&br, 1);
+ calculate_framerate_bitrate (seqhdr);
/* Skipping reserved3 bit */
gst_bit_reader_skip_unchecked (&br, 1);
More information about the gstreamer-commits
mailing list