From 7a689b68051b0efb00a3faa63cdb7b428c8494f1 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Fri, 7 Oct 2011 13:11:55 -0300 Subject: [PATCH] codecparsers: VC1: Use enums when possible Add GstVC1FrameCodingMode and use it for the fcm field Use GstVC1PictureType as variable type for ptype Use GstVC1Level as variable type for level --- gst-libs/gst/codecparsers/gstvc1parser.c | 24 ++++++++++++++++++------ gst-libs/gst/codecparsers/gstvc1parser.h | 17 +++++++++++++---- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c index 673dfc167c..3d0b757d78 100644 --- a/gst-libs/gst/codecparsers/gstvc1parser.c +++ b/gst-libs/gst/codecparsers/gstvc1parser.c @@ -770,10 +770,12 @@ static GstVC1ParserResult parse_sequence_header_advanced (GstVC1SeqHdr * seqhdr, GstBitReader * br) { GstVC1AdvancedSeqHdr *advanced = &seqhdr->advanced; + guint8 tmp; GST_DEBUG ("Parsing sequence header in advanced mode"); - READ_UINT8 (br, advanced->level, 3); + READ_UINT8 (br, tmp, 3); + advanced->level = tmp; READ_UINT8 (br, advanced->colordiff_format, 2); READ_UINT8 (br, advanced->frmrtq_postproc, 3); @@ -888,7 +890,7 @@ parse_frame_header_advanced (GstBitReader * br, GstVC1FrameHdr * framehdr, pic->fcm = (guint8) fcm; } - framehdr->ptype = get_unary (br, 0, 4); + framehdr->ptype = (guint8) get_unary (br, 0, 4); if (advhdr->tfcntrflag) { READ_UINT8 (br, pic->tfcntr, 8); @@ -1118,6 +1120,10 @@ parse_frame_header_advanced (GstBitReader * br, GstVC1FrameHdr * framehdr, pic->mvmode, pic->mvtab, pic->cbptab, pic->skipmb); break; + + default: + goto failed; + break; } return GST_VC1_PARSER_OK; @@ -1132,7 +1138,7 @@ static GstVC1ParserResult parse_frame_header (GstBitReader * br, GstVC1FrameHdr * framehdr, GstVC1SeqHdr * seqhdr, GstVC1BitPlanes * bitplanes) { - guint8 mvmodeidx; + guint8 mvmodeidx, tmp; GstVC1PicSimpleMain *pic = &framehdr->pic.simple; GstVC1SeqStructC *structc = &seqhdr->struct_c; @@ -1154,12 +1160,14 @@ parse_frame_header (GstBitReader * br, GstVC1FrameHdr * framehdr, } /* Figuring out the picture type */ - READ_UINT8 (br, framehdr->ptype, 1); + READ_UINT8 (br, tmp, 1); + framehdr->ptype = tmp; + if (structc->maxbframes) { if (!framehdr->ptype) { - READ_UINT8 (br, framehdr->ptype, 1); + READ_UINT8 (br, tmp, 1); - if (framehdr->ptype) + if (tmp) framehdr->ptype = GST_VC1_PICTURE_TYPE_I; else framehdr->ptype = GST_VC1_PICTURE_TYPE_B; @@ -1329,6 +1337,10 @@ parse_frame_header (GstBitReader * br, GstVC1FrameHdr * framehdr, pic->directmb, pic->skipmb); break; + + default: + goto failed; + break; } return GST_VC1_PARSER_OK; diff --git a/gst-libs/gst/codecparsers/gstvc1parser.h b/gst-libs/gst/codecparsers/gstvc1parser.h index dc0dc6f957..8709aa2fde 100644 --- a/gst-libs/gst/codecparsers/gstvc1parser.h +++ b/gst-libs/gst/codecparsers/gstvc1parser.h @@ -130,6 +130,13 @@ typedef enum GST_VC1_MVMODE_INTENSITY_COMP } GstVC1MvMode; +typedef enum +{ + GST_VC1_FRAME_PROGRESSIVE = 0x0, + GST_VC1_FRAME_INTERLACE = 0x10, + GST_VC1_FIELD_INTERLACE = 0x11 +} GstVC1FrameCodingMode; + typedef struct _GstVC1SeqHdr GstVC1SeqHdr; typedef struct _GstVC1AdvancedSeqHdr GstVC1AdvancedSeqHdr; typedef struct _GstVC1HrdParam GstVC1HrdParam; @@ -200,7 +207,8 @@ struct _GstVC1EntryPointHdr */ struct _GstVC1AdvancedSeqHdr { - guint8 level; + GstVC1Level level; + guint8 frmrtq_postproc; guint8 bitrtq_postproc; guint8 postprocflag; @@ -248,7 +256,8 @@ struct _GstVC1SeqStructA struct _GstVC1SeqStructB { - guint8 level; + GstVC1Level level; + guint8 cbr; guint32 framerate; @@ -372,7 +381,7 @@ struct _GstVC1PicSimpleMain */ struct _GstVC1PicAdvanced { - guint8 fcm; + GstVC1FrameCodingMode fcm; guint8 tfcntr; guint8 rptfrm; @@ -477,7 +486,7 @@ struct _GstVC1FrameLayer struct _GstVC1FrameHdr { /* common fields */ - guint8 ptype; + GstVC1PictureType ptype; guint8 interpfrm; guint8 halfqp; guint8 transacfrm;