1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ///////////////////////////////////////////////////////////////////////
2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//
3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//               INTEL CORPORATION PROPRIETARY INFORMATION
4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  This software is supplied under the terms of a license agreement or
5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  nondisclosure agreement with Intel Corporation and may not be copied
6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  or disclosed except in accordance with the terms of that agreement.
7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//        Copyright (c) 2008 Intel Corporation. All Rights Reserved.
8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//
9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  Description: Common definitions for parsing VC-1 bitstreams.
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef _VC1PARSE_COMMON_DEFS_H_
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define _VC1PARSE_COMMON_DEFS_H_
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef __cplusplus
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern "C" {
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <stdint.h>
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** @weakgroup vc1parse_common_defs VC-1 Common Definitions */
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** @ingroup vc1parse_common_defs */
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*@{*/
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This defines the maximum number of horizontal macroblocks in a picture. */
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VC1_WIDTH_MB_MAX         ((2048+15)/16)
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This defines the maximum number of vertical macroblocks in a picture. */
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VC1_HEIGHT_MB_MAX        ((1088+15)/16)
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This defines the maximum number of bitplane storage per picture. */
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VC1_MAX_BITPLANE_CHUNKS   3
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This defines the value for an invalid BFRACTION syntax element. */
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VC1_BFRACTION_INVALID    0
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This defines the value for BFRACTION syntax element that defines a BI
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.leepicture. */
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VC1_BFRACTION_BI         9
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the various supported profiles as defined in
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.leePROFILE syntax element. */
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_PROFILE_SIMPLE,
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_PROFILE_MAIN,
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_PROFILE_RESERVED,
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_PROFILE_ADVANCED
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the frame coding mode as defined in FCM syntax
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeelement. */
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_FCM_PROGRESSIVE,
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_FCM_FRAME_INTERLACE = 2,
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_FCM_FIELD_INTERLACE = 3
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the various bitplane types as defined in IMODE
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.leesyntax element. */
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_RAW_MODE,
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_NORM2_MODE,
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_DIFF2_MODE,
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_NORM6_MODE,
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_DIFF6_MODE,
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_ROWSKIP_MODE,
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_BITPLANE_COLSKIP_MODE
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the various motion vector modes as defined in
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMVMODE or MVMODE2 syntax element. */
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_1MV,
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef VBP
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_HPELBI_1MV,
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_HPEL_1MV,
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_HPEL_1MV,
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_HPELBI_1MV,
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_MIXED_MV,
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_MVMODE_INTENSCOMP
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the extended differential motion vector range flag
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeas defined in DMVRANGE syntax element. */
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DMVRANGE_NONE,
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DMVRANGE_HORIZONTAL_RANGE,
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DMVRANGE_VERTICAL_RANGE,
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DMVRANGE_HORIZONTAL_VERTICAL_RANGE
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the intensity compensation field as defined in
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeINTCOMPFIELD syntax element. */
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_INTCOMP_TOP_FIELD    = 1,
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_INTCOMP_BOTTOM_FIELD = 2,
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_INTCOMP_BOTH_FIELD   = 3
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the differential quantizer profiles as defined in
110bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeDQPROFILE syntax element. */
111bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DQPROFILE_ALL4EDGES,
114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DQPROFILE_DBLEDGES,
115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DQPROFILE_SNGLEDGES,
116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_DQPROFILE_ALLMBLKS
117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the conditional overlap flag as defined in CONDOVER
120bd8388b4555645b3d29abc6a94c303638064d69awonjong.leesyntax element. */
121bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_CONDOVER_FLAG_NONE = 0,
124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_CONDOVER_FLAG_ALL  = 2,
125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_CONDOVER_FLAG_SOME = 3
126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This enumeration defines the type of quantizer to be used and is derived
129bd8388b4555645b3d29abc6a94c303638064d69awonjong.leefrom bitstream syntax. */
130bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum
131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_QUANTIZER_NONUNIFORM,
133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    VC1_QUANTIZER_UNIFORM
134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This structure represents the various bitplanes within VC-1 bitstream. */
137bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct
138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t invert;
140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    int32_t imode;
141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint32_t *databits;
142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} vc1_Bitplane;
143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This structure represents all bitstream metadata needed for register programming. */
145bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct
146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // From Sequence Layer for Advanced Profile
148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PROFILE;                   /**  2 bit(s). */
149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef VBP
150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  LEVEL;
151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  POSTPROCFLAG;              /**  1 bit(s). */
153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PULLDOWN;                  /**  1 bit(s). */
154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  INTERLACE;                 /**  1 bit(s). */
155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TFCNTRFLAG;                /**  1 bit(s). */
156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  FINTERPFLAG;               /**  1 bit(s). */
157bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PSF;                       /**  1 bit(s). */
158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  HRD_NUM_LEAKY_BUCKETS;     /**  5 bit(s). */
159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // From STRUCT_C
161bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MAXBFRAMES;                /**  3 bit(s). */
162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MULTIRES;                  /**  1 bit(s). */
163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // From EntryPoint Layer for Advanced Profile
165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t PANSCAN_FLAG;
166bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t REFDIST_FLAG;
167bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t LOOPFILTER;
168bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t FASTUVMC;
169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t EXTENDED_MV;
170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t DQUANT;
171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t VSTRANSFORM;
172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t OVERLAP;
173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t QUANTIZER;
174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t EXTENDED_DMV;
175bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t RANGE_MAPY_FLAG;
176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t RANGE_MAPY;
177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t RANGE_MAPUV_FLAG;
178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t RANGE_MAPUV;
179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // From Picture Header
181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RANGERED;                  /**  1 bit(s). */
182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RNDCTRL;                   /**  1 bit(s), rcv specific. */
183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // REFDIST is present only in field-interlaced mode on I/I, I/P, P/I, P/P frames
185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // From Canmore, looks like this needs to be propagated to following B frames
186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  REFDIST;
187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  INTCOMPFIELD;              /**  ? bit(s)? */
188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  LUMSCALE2;                 /**  6 bit(s). */
189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  LUMSHIFT2;                 /**  6 bit(s). */
190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t bp_raw[VC1_MAX_BITPLANE_CHUNKS];
191bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
192bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // From SequenceLayerHeader, EntryPointHeader or Struct_A
193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint16_t width;
194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint16_t height;
195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint16_t widthMB;
196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint16_t heightMB;
197bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef VBP
199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t CLOSED_ENTRY;
200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t BROKEN_LINK;
201bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t SYNCMARKER;
202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} vc1_metadata_t;
205bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This structure represents the sequence header for advanced profile. */
207bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct
208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
212bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned BITRTQ_POSTPROC:5;
215bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRMRTQ_POSTPROC:3;
216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned COLORDIFF_FORMAT:2;
217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned LEVEL:3;
218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PROFILE:2;
219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:17;
220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_flags;
221bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:17;
225bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PROFILE:2;
226bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned LEVEL:3;
227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned COLORDIFF_FORMAT:2;
228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRMRTQ_POSTPROC:3;
229bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned BITRTQ_POSTPROC:5;
230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_flags;
231bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t flags;
233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
234bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
237bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
239bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DISPLAY_EXT:1;
241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PSF:1;
242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned RESERVED:1;
243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FINTERPFLAG:1;
244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned TFCNTRFLAG:1;
245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned INTERLACE:1;
246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PULLDOWN:1;
247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MAX_CODED_HEIGHT:12;
248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MAX_CODED_WIDTH:12;
249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned POSTPROCFLAG:1;
250bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_max_size;
251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
254bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned POSTPROCFLAG:1;
255bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MAX_CODED_WIDTH:12;
256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MAX_CODED_HEIGHT:12;
257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PULLDOWN:1;
258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned INTERLACE:1;
259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned TFCNTRFLAG:1;
260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FINTERPFLAG:1;
261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned RESERVED:1;
262bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PSF:1;
263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DISPLAY_EXT:1;
264bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_max_size;
265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t max_size;
267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
271bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned ASPECT_RATIO_FLAG:1;
275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DISP_VERT_SIZE:14;
276bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DISP_HORIZ_SIZE:14;
277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:3;
278bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_disp_size;
279bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
282bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:3;
283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DISP_HORIZ_SIZE:14;
284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DISP_VERT_SIZE:14;
285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned ASPECT_RATIO_FLAG:1;
286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_disp_size;
287bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t disp_size;
289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
290bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t ASPECT_RATIO;   // 4 bits
292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
293bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
298bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned ASPECT_VERT_SIZE:8;
299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned ASPECT_HORIZ_SIZE:8;
300bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:16;
301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_aspect_size;
302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
304bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:16;
306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned ASPECT_HORIZ_SIZE:8;
307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned ASPECT_VERT_SIZE:8;
308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_aspect_size;
309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t aspect_size;
311bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t FRAMERATE_FLAG; // 1b
314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t FRAMERATEIND;   // 1b
315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRAMERATEDR:4;
322bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRAMERATENR:8;
323bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:20;
324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_framerate_fraction;
325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:20;
329bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRAMERATENR:8;
330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRAMERATEDR:4;
331bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_framerate_fraction;
332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
333bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t framerate_fraction;
334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint16_t FRAMERATEEXP;      // 16b
337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t COLOR_FORMAT_FLAG; // 1b
338bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
339bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
340bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
341bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
342bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
343bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
344bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MATRIX_COEF:8;
345bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned TRANSFER_CHAR:8;
346bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned COLOR_PRIM:8;
347bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:8;
348bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_color_format;
349bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
350bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
351bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
352bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad:8;
353bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned COLOR_PRIM:8;
354bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned TRANSFER_CHAR:8;
355bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MATRIX_COEF:8;
356bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } seq_color_format;
357bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
358bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t color_format;
359bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
360bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
361bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t HRD_PARAM_FLAG;         // 1b
362bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t HRD_NUM_LEAKY_BUCKETS;  // 5b
363bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // No need to parse remaining items - not needed so far
364bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} vc1_SequenceLayerHeader;
365bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
366bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This structure represents metadata for struct c. */
367bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct
368bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
369bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
370bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
371bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
372bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
373bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
374bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res6:1;
375bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FINTERPFLAG:1;
376bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned QUANTIZER:2;
377bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MAXBFRAMES:3;
378bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned RANGERED:1;
379bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned SYNCMARKER:1;
380bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned OVERLAP:1;
381bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res5:1;
382bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned VSTRANSFORM:1;
383bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DQUANT:2;
384bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned EXTENDED_MV:1;
385bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FASTUVMC:1;
386bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res4:1;
387bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MULTIRES:1;
388bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res3:1;
389bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned LOOPFILTER:1;
390bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned BITRTQ_POSTPROC:5;
391bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRMRTQ_POSTPROC:3;
392bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PROFILE:4;
393bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } struct_c;
394bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
395bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
396bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
397bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PROFILE:4;
398bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FRMRTQ_POSTPROC:3;
399bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned BITRTQ_POSTPROC:5;
400bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned LOOPFILTER:1;
401bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res3:1;
402bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MULTIRES:1;
403bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res4:1;
404bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FASTUVMC:1;
405bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned EXTENDED_MV:1;
406bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DQUANT:2;
407bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned VSTRANSFORM:1;
408bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res5:1;
409bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned OVERLAP:1;
410bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned SYNCMARKER:1;
411bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned RANGERED:1;
412bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned MAXBFRAMES:3;
413bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned QUANTIZER:2;
414bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FINTERPFLAG:1;
415bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned res6:1;
416bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } struct_c;
417bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
418bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t struct_c_rcv;
419bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
420bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
421bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
422bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
423bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
424bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
425bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
426bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned VERT_SIZE:16;
427bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned HORIZ_SIZE:16;
428bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } struct_a;
429bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
430bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
431bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
432bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned HORIZ_SIZE:16;
433bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned VERT_SIZE:16;
434bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } struct_a;
435bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
436bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t struct_a_rcv;
437bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
438bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
439bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} vc1_RcvSequenceHeader;
440bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
441bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This structure represents metadata for entry point layers. */
442bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct
443bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
444bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
445bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
446bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
447bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
448bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
449bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned QUANTIZER:2;
450bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned OVERLAP:1;
451bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned VSTRANSFORM:1;
452bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DQUANT:2;
453bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned EXTENDED_MV:1;
454bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FASTUVMC:1;
455bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned LOOPFILTER:1;
456bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned REFDIST_FLAG:1;
457bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PANSCAN_FLAG:1;
458bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned CLOSED_ENTRY:1;
459bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned BROKEN_LINK:1;
460bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad1:19;
461bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } ep_flags;
462bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
463bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
464bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
465bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad1:19;
466bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned BROKEN_LINK:1;
467bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned CLOSED_ENTRY:1;
468bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned PANSCAN_FLAG:1;
469bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned REFDIST_FLAG:1;
470bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned LOOPFILTER:1;
471bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned FASTUVMC:1;
472bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned EXTENDED_MV:1;
473bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned DQUANT:2;
474bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned VSTRANSFORM:1;
475bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned OVERLAP:1;
476bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned QUANTIZER:2;
477bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } ep_flags;
478bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
479bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t flags;
480bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
481bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
482bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    // Skipping HRD data because it is not needed for our processing
483bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
484bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    union
485bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    {
486bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef MFDBIGENDIAN
487bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
488bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
489bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned CODED_HEIGHT:12;
490bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned CODED_WIDTH:12;
491bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad2:8;
492bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } ep_size;
493bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#else
494bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        struct
495bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        {
496bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned pad2:8;
497bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned CODED_WIDTH:12;
498bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            unsigned CODED_HEIGHT:12;
499bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } ep_size;
500bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
501bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        uint32_t size;
502bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    };
503bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
504bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  CODED_SIZE_FLAG;           /**  1 bit(s). */
505bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  EXTENDED_DMV;              /**  1 bit(s). */
506bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RANGE_MAPY_FLAG;           /**  1 bit(s). */
507bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RANGE_MAPY;                /**  3 bit(s). */
508bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RANGE_MAPUV_FLAG;          /**  1 bit(s). */
509bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RANGE_MAPUV;               /**  3 bit(s). */
510bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} vc1_EntryPointHeader;
511bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
512bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** This structure represents metadata for slice and picture layers. */
513bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct
514bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
515bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /* Slice layer. */
516bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint16_t SLICE_ADDR;                /**  9 bit(s). */
517bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
518bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /* Picture layer for simple or main profile. */
519bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RANGEREDFRM;               /**  1 bit(s). */
520bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PTYPE;                     /**  4 bit(s)? */
521bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    int8_t   BFRACTION_NUM;             /**  ? bit(s). */
522bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    int16_t  BFRACTION_DEN;             /**  ? bit(s). */
523bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PQINDEX;                   /**  5 bit(s). */
524bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  HALFQP;                    /**  1 bit(s). */
525bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PQUANTIZER;                /**  1 bit(s). */
526bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MVRANGE;                   /**  3 bit(s)? */
527bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MVMODE;                    /**  4 bit(s)? */
528bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MVMODE2;                   /**  3 bit(s)? */
529bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  LUMSCALE;                  /**  6 bit(s). */
530bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  LUMSHIFT;                  /**  6 bit(s). */
531bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MVTAB;                     /**  2 bit(s). */
532bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  CBPTAB;                    /**  2 bit(s). */
533bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TTMBF;                     /**  1 bit(s). */
534bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TTFRM;                     /**  2 bit(s). */
535bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TRANSACFRM;                /**  2 bit(s)? */
536bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TRANSACFRM2;               /**  2 bit(s)? */
537bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TRANSDCTAB;                /**  1 bit(s). */
538bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
539bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /* Picture layer for advanced profile. */
540bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  FCM;                       /**  2 bit(s)? */
541bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  FPTYPE;                    /**  3 bit(s). */
542bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TFCNTR;                    /**  8 bit(s) */
543bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RPTFRM;                    /**  2 bit(s) */
544bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  TFF;                       /**  1 bit(s). */
545bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RFF;                    	/**  1 bit(s) */
546bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  RNDCTRL;                   /**  1 bit(s). */
547bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  UVSAMP;                    /**  1 bit(s). */
548bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  POSTPROC;                  /**  2 bit(s). */
549bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  CONDOVER;                  /**  2 bit(s)? */
550bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  DMVRANGE;                  /**  ? bit(s)? */
551bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MV4SWITCH;                 /**  1 bit(s). */
552bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  INTCOMP;                   /**  1 bit(s). */
553bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MBMODETAB;                 /**  2 bit(s). */
554bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MV2BPTAB;                  /**  2 bit(s). */
555bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  MV4BPTAB;                  /**  2 bit(s). */
556bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  NUMREF;                    /**  1 bit(s). */
557bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  REFFIELD;                  /**  1 bit(s). */
558bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
559bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /* PAN SCAN */
560bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PS_PRESENT;                /**  1 bit(s). */
561bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t number_of_pan_scan_window;	/** 4 max. */
562bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    viddec_vc1_pan_scan_window_t PAN_SCAN_WINDOW[VIDDEC_PANSCAN_MAX_OFFSETS];
563bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
564bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /* VOPDQUANT. */
565bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PQDIFF;                    /**  3 bit(s). */
566bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  ABSPQ;                     /**  5 bit(s). */
567bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  DQUANTFRM;                 /**  1 bit(s). */
568bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  DQPROFILE;                 /**  2 bit(s). */
569bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  DQSBEDGE;                  /**  2 bit(s). */
570bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  DQBILEVEL;                 /**  1 bit(s). */
571bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
572bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /* Others. */
573bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PTypeField1;
574bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  PTypeField2;
575bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint32_t PQUANT;
576bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  CurrField;
577bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  BottomField;
578bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint32_t UniformQuant;
579bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
580bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef VBP
581bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_MVTYPEMB;
582bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_DIRECTMB;
583bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_SKIPMB;
584bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_ACPRED;
585bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_FIELDTX;
586bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_OVERFLAGS;
587bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t  raw_FORWARDMB;
588bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
589bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane MVTYPEMB;
590bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane DIRECTMB;
591bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane SKIPMB;
592bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane ACPRED;
593bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane FIELDTX;
594bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane OVERFLAGS;
595bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    vc1_Bitplane FORWARDMB;
596bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint32_t  ALTPQUANT;
597bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    uint8_t		DQDBEDGE;
598bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
599bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
600bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} vc1_PictureLayerHeader;
601bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
602bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*@}*/
603bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
604bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef __cplusplus
605bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
606bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif /* __cplusplus. */
607bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
608bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif /* _VC1PARSE_COMMON_DEFS_H_. */
609