www.pudn.com > jm50g.zip > golomb_dec.c
/* *********************************************************************** * COPYRIGHT AND WARRANTY INFORMATION * * Copyright 2001, International Telecommunications Union, Geneva * * DISCLAIMER OF WARRANTY * * These software programs are available to the user without any * license fee or royalty on an "as is" basis. The ITU disclaims * any and all warranties, whether express, implied, or * statutory, including any implied warranties of merchantability * or of fitness for a particular purpose. In no event shall the * contributor or the ITU be liable for any incidental, punitive, or * consequential damages of any kind whatsoever arising from the * use of these programs. * * This disclaimer of warranty extends to the user of these programs * and user's customers, employees, agents, transferees, successors, * and assigns. * * The ITU does not represent or warrant that the programs furnished * hereunder are free of infringement of any third-party patents. * Commercial implementations of ITU-T Recommendations, including * shareware, may be subject to royalty fees to patent holders. * Information regarding the ITU-T patent policy is available from * the ITU Web site at http://www.itu.int. * * THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE ITU-T PATENT POLICY. ************************************************************************ */ /* ************************************************************************************* * \file * golomb_dec.c * * \brief * Description * * \author * Main contributors (see contributors.h for copyright, address and affiliation details) * - Achim Dahlhoff* * \date * Fri Mar 8 2002 * * copyright : (C) 2002 Institut und Lehrstuhl für Nachrichtentechnik * RWTH Aachen University * 52072 Aachen * Germany ************************************************************************************* */ #include #include "golomb_dec.h" unsigned int decode_golomb_word(const unsigned char **buffer,unsigned int *bitoff,unsigned int grad0,unsigned int max_levels) { const unsigned char *rd; unsigned int bit,byte,level,databits,t,testbit; rd=*buffer; bit=*bitoff; byte=*rd; level=0UL; while( level+1UL >bit)&1UL) ; bit = (bit-1UL) & 7UL ; if(bit==7UL)byte=*(++rd); } *buffer=rd; *bitoff=bit; return (((1UL< bitstream; frame_bitoffset = currStream->frame_bitoffset; buf = (unsigned char*)currStream->streamBuffer; BitstreamLengthInBytes = currStream->bitstream_length; bit=7UL-(frame_bitoffset&7); read=buf+(frame_bitoffset>>3); if(!( se->golomb_maxlevels&~0xFF )) { se->value1=decode_golomb_word(&read,&bit,se->golomb_grad,se->golomb_maxlevels); }else{ for(i=0UL;i<4UL;i++) { grad[i]=(se->golomb_grad>>(i<<3))&0xFFUL; max_lev[i]=(se->golomb_maxlevels>>(i<<3))&0xFFUL; } se->value1=decode_multilayer_golomb_word(&read,&bit,grad,max_lev); } se->len=(((read-buf)<<3)+(7-bit))-frame_bitoffset; se->value2=0; currStream->frame_bitoffset += se->len; return 1; }