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 25vc1_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