1 /* ///////////////////////////////////////////////////////////////////////
2 //
3 // INTEL CORPORATION PROPRIETARY INFORMATION
4 // This software is supplied under the terms of a license agreement or
5 // nondisclosure agreement with Intel Corporation and may not be copied
6 // or disclosed except in accordance with the terms of that agreement.
7 // Copyright (c) 2008 Intel Corporation. All Rights Reserved.
8 //
9 // Description: Parses VC-1 picture layer for progressive B picture in simple
10 // or main profile bitstream.
11 //
12 */
13
14 #include "vc1parse.h"
15 #include "viddec_fw_debug.h" // For DEB
16
17 /*------------------------------------------------------------------------------
18 * Parse picture layer. This function parses progressive B picture for main
19 * profile bitstream. This parser starts after PTYPE was parsed but stops
20 * before parsing of macroblock layer.
21 * Table 21 of SMPTE 421M after processing up to PTYPE for B picture.
22 *------------------------------------------------------------------------------
23 */
24
vc1_ParsePictureHeader_ProgressiveBpicture(void * ctxt,vc1_Info * pInfo)25 vc1_Status vc1_ParsePictureHeader_ProgressiveBpicture(void* ctxt, vc1_Info *pInfo)
26 {
27 vc1_Status status = VC1_STATUS_OK;
28 vc1_metadata_t *md = &pInfo->metadata;
29 vc1_PictureLayerHeader *picLayerHeader = &pInfo->picLayerHeader;
30
31 if ((status = vc1_DecodeHuffmanPair(ctxt, VC1_BFRACTION_TBL,
32 &picLayerHeader->BFRACTION_NUM, &picLayerHeader->BFRACTION_DEN)) !=
33 VC1_STATUS_OK)
34 {
35 return status;
36 }
37
38 VC1_GET_BITS9(5, picLayerHeader->PQINDEX);
39 if ((status = vc1_CalculatePQuant(pInfo)) != VC1_STATUS_OK)
40 return status;
41
42 if (picLayerHeader->PQINDEX <= 8)
43 {
44 VC1_GET_BITS9(1, picLayerHeader->HALFQP);
45 }
46 else picLayerHeader->HALFQP=0;
47
48 if (md->QUANTIZER == 1)
49 {
50 VC1_GET_BITS9(1, picLayerHeader->PQUANTIZER);
51 }
52
53 if ((status = vc1_MVRangeDecode(ctxt, pInfo)) != VC1_STATUS_OK)
54 return status;
55
56 VC1_GET_BITS9(1, picLayerHeader->MVMODE);
57 picLayerHeader->MVMODE = (picLayerHeader->MVMODE == 1) ?
58 VC1_MVMODE_1MV : VC1_MVMODE_HPELBI_1MV;
59
60 if ((status = vc1_DecodeBitplane(ctxt, pInfo,
61 md->widthMB, md->heightMB, BPP_DIRECTMB)) != VC1_STATUS_OK)
62 {
63 return VC1_STATUS_OK;
64 }
65
66 if ((status = vc1_DecodeBitplane(ctxt, pInfo,
67 md->widthMB, md->heightMB, BPP_SKIPMB)) != VC1_STATUS_OK)
68 {
69 return status;
70 }
71
72 VC1_GET_BITS9(2, picLayerHeader->MVTAB);
73 VC1_GET_BITS9(2, picLayerHeader->CBPTAB);
74
75 if ((status = vc1_VOPDQuant(ctxt, pInfo)) != VC1_STATUS_OK)
76 return status;
77
78 if (md->VSTRANSFORM == 1)
79 {
80 VC1_GET_BITS9(1, picLayerHeader->TTMBF);
81 if (picLayerHeader->TTMBF)
82 {
83 VC1_GET_BITS9(2, picLayerHeader->TTFRM);
84 }
85 }
86
87 VC1_GET_BITS9(1, picLayerHeader->TRANSACFRM);
88 if (picLayerHeader->TRANSACFRM == 1)
89 {
90 VC1_GET_BITS9(1, picLayerHeader->TRANSACFRM);
91 picLayerHeader->TRANSACFRM += 2;
92 }
93
94 VC1_GET_BITS9(1, picLayerHeader->TRANSDCTAB);
95
96 /* Skip parsing of macroblock layer. */
97
98 return status;
99 }
100
101