|
|
/* *************************************************************************
** INTEL Corporation Proprietary Information ** ** This listing is supplied under the terms of a license ** agreement with INTEL Corporation and may not be copied ** nor disclosed except in accordance with the terms of ** that agreement. ** ** Copyright (c) 1995 Intel Corporation. ** All Rights Reserved. ** ** ************************************************************************* */
/*
* d3gob.cpp * * Description: * This modules contains the GOB header support routines * * Routines: * H263SetGOBHeaderInfo * * Data: */
/* $Header: S:\h26x\src\dec\d1gob.cpv 1.15 10 Sep 1996 15:50:52 RHAZRA $
*/
#include "precomp.h"
/* BIT field Constants
*/ const int BITS_GOB_STARTCODE = 16; const int BITS_GROUP_NUMBER = 4; const int BITS_GFID = 2; const int BITS_GQUANT = 5; const int MAX_GBSC_LOOKAHEAD_NUMBER = 7; const int BITS_GSPARE = 8; // not including the following GEI
/* GBSC_VALUE - 0000 0000 0000 0001 xxxx xxxx xxxx xxxx
*/ const U32 GBSC_VALUE = (0x00010000 >> (32-BITS_GOB_STARTCODE)); /*****************************************************************************
* * H263DecodeGOBHeader * * Set the GOB header information in the decoder catalog. GOB numbers 2 thru * N may have a GOB header. Look for one if it is there read it storing the * information in the catalog. If a GOB header is not there set the information * to default values. * * Returns an ICERR_STATUS */ #pragma code_seg("IACODE1")
extern I32 H263DecodeGOBHeader( T_H263DecoderCatalog FAR * DC, BITSTREAM_STATE FAR * fpbsState, U32 uAssumedGroupNumber) { U8 FAR * fpu8; U32 uBitsReady; U32 uWork; I32 iReturn; U32 uResult; U16 bFoundStartCode = 0; int iSpareCount; #ifndef RING0
char buf120[120]; int iLength; #endif
GET_BITS_RESTORE_STATE(fpu8, uWork, uBitsReady, fpbsState) /* GNum */ GET_FIXED_BITS((U32) BITS_GROUP_NUMBER, fpu8, uWork, uBitsReady, uResult); DC->uGroupNumber = uResult;
//#ifndef LOSS_RECOVERY
#if 0
if (DC->uGroupNumber <= 0) { DBOUT("Bad GOB number"); iReturn = ICERR_ERROR; goto done;
/* took out ASSERT so that can try and catch
** invalid bit streams and return error */ //ASSERT(DC->uGroupNumber > 0);
} #else
if (DC->uGroupNumber <= 0) { DBOUT("Detected packet fault in GOB number"); DBOUT("Returning PACKET_FAULT_AT_MB_OR_GOB"); iReturn = PACKET_FAULT_AT_MB_OR_GOB; goto done; } #endif
/* GQUANT */ GET_FIXED_BITS((U32) BITS_GQUANT, fpu8, uWork, uBitsReady, uResult);
//#ifndef LOSS_RECOVERY
#if 0
if (uResult < 1) { iReturn = ICERR_ERROR; goto done; } DC->uGQuant = uResult; DC->uMQuant = uResult; #else
if (uResult < 1) { DBOUT("Detected packet fault in GOB quant"); DBOUT("Returning PACKET_FAULT_AT_PSC"); iReturn = PACKET_FAULT_AT_PSC; GET_BITS_SAVE_STATE(fpu8, uWork, uBitsReady, fpbsState) goto done; } DC->uGQuant = uResult; DC->uMQuant = uResult; #endif
/* skip spare bits */ iSpareCount = 0; GET_ONE_BIT(fpu8, uWork, uBitsReady, uResult); while(uResult) { GET_FIXED_BITS((U32)BITS_GSPARE, fpu8, uWork, uBitsReady, uResult); GET_ONE_BIT(fpu8, uWork, uBitsReady, uResult); iSpareCount += BITS_GSPARE; } /* Save the modified bitstream state */ GET_BITS_SAVE_STATE(fpu8, uWork, uBitsReady, fpbsState)
#ifndef RING0
iLength = wsprintf(buf120,"GOB: HeaderPresent=%d GN=%ld GQ=%ld", bFoundStartCode, DC->uGroupNumber, DC->uGQuant); DBOUT(buf120); ASSERT(iLength < 120); #endif
iReturn = ICERR_OK;
done: return iReturn; } /* end H263DecodeGOBHeader() */ #pragma code_seg()
/* ******************************************** */ #pragma code_seg("IACODE1")
extern I32 H263DecodeGOBStartCode( T_H263DecoderCatalog FAR * DC, BITSTREAM_STATE FAR * fpbsState) { U8 FAR * fpu8; U32 uBitsReady; U32 uWork; I32 iReturn; U32 uResult;
/* Look for the GOB header Start Code */ GET_BITS_RESTORE_STATE(fpu8, uWork, uBitsReady, fpbsState) GET_FIXED_BITS((U32) BITS_GOB_STARTCODE, fpu8, uWork, uBitsReady, uResult); if (uResult != 1) { iReturn = ICERR_ERROR; goto done; } GET_BITS_SAVE_STATE(fpu8, uWork, uBitsReady, fpbsState)
iReturn = ICERR_OK; done: return iReturn;
} /* end H263DecodeGOBStartCode() */
#pragma code_seg()
|