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: Common functions for parsing VC-1 bitstreams. 10 // 11 */ 12 13 #ifndef _VC1PARSE_H_ 14 #define _VC1PARSE_H_ 15 16 #include "viddec_parser_ops.h" 17 #include "vc1.h" 18 19 /** @weakgroup vc1parse_defs VC-1 Parse Definitions */ 20 /** @ingroup vc1parse_defs */ 21 /*@{*/ 22 23 /* This macro gets the next less-than-nine bits from the bitstream. It is 24 assumed that numBits is less than ten. */ 25 #ifdef VC1_VERBOSE 26 #include <stdio.h> 27 #define AUTO_TRACE OS_INFO("trace: %s\n", __FUNCTION__) 28 #define DEBUGBITS(arg1, args ...) OS_INFO( arg1, ## args) 29 #else 30 #define AUTO_TRACE 31 #define DEBUGBITS(...) 32 #endif 33 34 extern void *memset(void *s, int32_t c, uint32_t n); 35 36 /* This macro gets the next numBits from the bitstream. */ 37 #define VC1_GET_BITS VC1_GET_BITS9 38 #define VC1_GET_BITS9(numBits, value) \ 39 { uint32_t __tmp__; \ 40 viddec_pm_get_bits(ctxt, (uint32_t*)&__tmp__, numBits ); \ 41 value = __tmp__;\ 42 DEBUGBITS("BIT:%40s= 0x%x\tNo. of bits=%d\tbyte = %02x\t%s[%d]\n", #value, value, numBits, 0, __FILE__, __LINE__); \ 43 } 44 45 #define VC1_PEEK_BITS(numBits, value) \ 46 { uint32_t __tmp__; \ 47 viddec_pm_peek_bits(ctxt, (uint32_t*)&__tmp__, numBits ); \ 48 value = __tmp__;\ 49 DEBUGBITS("PEEK%40s= 0x%x\tNo. of bits=%d\tbyte = %02x\t%s[%d]\n", #value, value, numBits, 0, __FILE__, __LINE__); \ 50 } 51 52 /* This macro asserts if the condition is not true. */ 53 #ifdef VC1_VERBOSE 54 #define VC1_ASSERT(condition) \ 55 { \ 56 if (! (condition)) \ 57 OS_INFO("Failed " #condition "!\n"); \ 58 } 59 #else 60 #define VC1_ASSERT(condition) 61 #endif 62 63 /*@}*/ 64 65 /** @weakgroup vc1parse VC-1 Parse Functions */ 66 /** @ingroup vc1parse */ 67 /*@{*/ 68 69 extern const uint8_t VC1_MVMODE_LOW_TBL[]; 70 extern const uint8_t VC1_MVMODE_HIGH_TBL[]; 71 extern const int32_t VC1_BITPLANE_IMODE_TBL[]; 72 extern const int32_t VC1_BITPLANE_K_TBL[]; 73 extern const int32_t VC1_BFRACTION_TBL[]; 74 extern const int32_t VC1_REFDIST_TBL[]; 75 76 void vc1_end_frame(vc1_viddec_parser_t *parser); 77 78 /* Top-level functions to parse bitstream layers for rcv format. */ 79 vc1_Status vc1_ParseRCVSequenceLayer (void* ctxt, vc1_Info *pInfo); 80 81 /* Top-level functions to parse bitstream layers for the various profiles. */ 82 vc1_Status vc1_ParseSequenceLayer(void* ctxt, vc1_Info *pInfo); 83 vc1_Status vc1_ParseEntryPointLayer(void* ctxt, vc1_Info *pInfo); 84 vc1_Status vc1_ParseSliceLayer(void* ctxt, vc1_Info *pInfo); 85 vc1_Status vc1_ParsePictureLayer(void* ctxt, vc1_Info *pInfo); 86 vc1_Status vc1_ParseFieldLayer(void* ctxt, vc1_Info *pInfo); 87 88 /* Top-level functions to parse headers for various picture layers for the 89 simple and main profiles. */ 90 vc1_Status vc1_ParsePictureHeader(void* ctxt, vc1_Info *pInfo); 91 vc1_Status vc1_ParsePictureHeader_ProgressiveIpicture(void* ctxt, vc1_Info *pInfo); 92 vc1_Status vc1_ParsePictureHeader_ProgressivePpicture(void* ctxt, vc1_Info *pInfo); 93 vc1_Status vc1_ParsePictureHeader_ProgressiveBpicture(void* ctxt, vc1_Info *pInfo); 94 95 /* Top-level functions to parse common part of the headers for various picture 96 layers for the advanced profile. */ 97 vc1_Status vc1_ParsePictureHeader_Adv(void* ctxt, vc1_Info *pInfo); 98 vc1_Status vc1_ParseFieldHeader_Adv (void* ctxt, vc1_Info *pInfo); 99 vc1_Status vc1_ParsePictureFieldHeader_Adv(void* ctxt, vc1_Info *pInfo); 100 101 /* Functions to parse remainder part of the headers for various progressive 102 picture layers for the advanced profile. */ 103 vc1_Status vc1_ParsePictureHeader_ProgressiveIpicture_Adv(void* ctxt, vc1_Info *pInfo); 104 vc1_Status vc1_ParsePictureHeader_ProgressivePpicture_Adv(void* ctxt, vc1_Info *pInfo); 105 vc1_Status vc1_ParsePictureHeader_ProgressiveBpicture_Adv(void* ctxt, vc1_Info *pInfo); 106 107 /* Functions to parse remainder part of the headers for various interlace frame 108 layers for the advanced profile. */ 109 vc1_Status vc1_ParsePictureHeader_InterlaceIpicture_Adv(void* ctxt, vc1_Info *pInfo); 110 vc1_Status vc1_ParsePictureHeader_InterlacePpicture_Adv(void* ctxt, vc1_Info *pInfo); 111 vc1_Status vc1_ParsePictureHeader_InterlaceBpicture_Adv(void* ctxt, vc1_Info *pInfo); 112 113 /* Functions to parse remainder part of the headers for various interlace frame 114 layers for the advanced profile. */ 115 vc1_Status vc1_ParseFieldHeader_InterlaceIpicture_Adv(void* ctxt, vc1_Info *pInfo); 116 vc1_Status vc1_ParseFieldHeader_InterlacePpicture_Adv(void* ctxt, vc1_Info *pInfo); 117 vc1_Status vc1_ParseFieldHeader_InterlaceBpicture_Adv(void* ctxt, vc1_Info *pInfo); 118 119 /* Functions to parse syntax element in bitstream. */ 120 vc1_Status vc1_MVRangeDecode(void* ctxt, vc1_Info *pInfo); 121 vc1_Status vc1_DMVRangeDecode(void* ctxt, vc1_Info *pInfo); 122 vc1_Status vc1_CalculatePQuant(vc1_Info *pInfo); 123 vc1_Status vc1_VOPDQuant(void* ctxt, vc1_Info *pInfo); 124 vc1_Status vc1_DecodeBitplane(void* ctxt, vc1_Info *pInfo, uint32_t width, uint32_t height, vc1_bpp_type_t bptype); 125 vc1_Status vc1_DecodeHuffmanOne(void* ctxt, int32_t *pDst, const int32_t *pDecodeTable); 126 vc1_Status vc1_DecodeHuffmanPair(void* ctxt, const int32_t *pDecodeTable, int8_t *pFirst, int16_t *pSecond); 127 128 void vc1_start_new_frame(void *parent, vc1_viddec_parser_t *parser); 129 int32_t vc1_parse_emit_current_frame(void *parent, vc1_viddec_parser_t *parser); 130 131 /* function to handle user data */ 132 vc1_Status vc1_ParseAndAppendUserData(void* ctxt, uint32_t sc); 133 134 /*@}*/ 135 136 #endif /* _VC1PARSE_H_. */ 137