Beispiel #1
0
void next_start_code()
{
  /* byte align */
  Flush_Buffer(ld->Incnt&7);
  while (Show_Bits(24)!=0x01L)
    Flush_Buffer(8);
}
Beispiel #2
0
int
Get_motion_code ()
{
  int code;

  if (Get_Bits1 ())
    {
      return 0;
    }

  if ((code = Show_Bits (9)) >= 64)
    {
      code >>= 6;
      Flush_Buffer (MVtab0[code][1]);

      return Get_Bits1 ()? -MVtab0[code][0] : MVtab0[code][0];
    }
Beispiel #3
0
static int Get_P_macroblock_type()

{

  int code;



#ifdef TRACE

  if (Trace_Flag)

    printf("macroblock_type(P) (");

#endif /* TRACE */



  if ((code = Show_Bits(6))>=8)

  {

    code >>= 3;

    Flush_Buffer(PMBtab0[code].len);

#ifdef TRACE

    if (Trace_Flag)

    {

      Print_Bits(code,3,PMBtab0[code].len);

      printf("): %s (%d)\n",MBdescr[PMBtab0[code].val],PMBtab0[code].val);

    }

#endif /* TRACE */

    return PMBtab0[code].val;

  }
Beispiel #4
0
int DecDCTvlc(u_short *mdec_bs,u_short *mdec_rl)
{
//	u_short *mdec_bs = mdecbs,*mdec_rl = mdecrl
	u_short *rl_end;
	u_long bitbuf;
	int incnt; /* 16-有効bit数 x86=char risc = long */
	int q_code;
	int type,n;
	int last_dc[3];

/* BS_HDR  u_short rlsize,magic,ver,q_scale */

	//printf("%04x,%04x,",mdec_bs[0],mdec_bs[1]);
	*(long*)mdec_rl=*(long*)mdec_bs;
	mdec_rl+=2;
	rl_end = mdec_rl+(int)mdec_bs[0]*2;
	q_code = (mdec_bs[2]<<10); /* code = q */
	type = mdec_bs[3];
	mdec_bs+=4;

	Init_Buffer();

	n = 0;
	last_dc[0]=last_dc[1]=last_dc[2] = 0;
	while(mdec_rl<rl_end) {
	  u_long code2;
		/* DC */
	  if (type==2) {
		code2 = Show_Bits(10)|(10<<16); /* DC code */
	  } else {
		code2 = Show_Bits(6);
		if (n>=2) {
			/* Y */
			if (code2<48) {
				code2 = DC_Ytab0[code2];
				code2 = (code2&0xffff0000)|((last_dc[2]+=VALOF(code2)*4)&0x3ff);
			} else {
				int nbit,val;
				int bit = 3;
				while(Show_Bits(bit)&1) { bit++;}
				bit++;
				nbit = bit*2-1;
				val = Show_Bits(nbit)&((1<<bit)-1);
				if ((val&(1<<(bit-1)))==0)
					val -= (1<<bit)-1;
				val = (last_dc[2]+=val*4);
				code2 = (nbit<<16) | (val&0x3ff);
			}
			//printf("%d ",last_dc[2]);
		} else {
			/* U,V */
			if (code2<56) {
				code2 = DC_UVtab0[code2];
				code2 = (code2&0xffff0000)|((last_dc[n]+=VALOF(code2)*4)&0x3ff);
			} else {
				int nbit,val;
				int bit = 4;
				while(Show_Bits(bit)&1) { bit++;}
				nbit = bit*2;
				val = Show_Bits(nbit)&((1<<bit)-1);
				if ((val&(1<<(bit-1)))==0)
					val -= (1<<bit)-1;
				val = (last_dc[n]+=val*4);
				code2 = (nbit<<16) | (val&0x3ff);
			}
			//printf("%d ",last_dc[n]);
		}
		if (++n==6) n=0;
	  }
	//	printf("%d ",VALOF(code2));
	  code2 |= q_code;

		/* AC */
	  for(;;){
//		u_long code;
#define	code code2
#define	SBIT	17
		*mdec_rl++=code2;
		Flush_Buffer(BITOF(code2));
		code = Show_Bits(SBIT);
		if      (code>=1<<(SBIT- 2)) {
			code2 = VLCtabnext[(code>>12)-8];
			if (code2==EOB_CODE) break;
		}
		else if (code>=1<<(SBIT- 6)) {
			code2 = VLCtab0[(code>>8)-8];
			if (code2==ESCAPE_CODE) {
				Flush_Buffer(6); /* ESCAPE len */
				code2 = Show_Bits(16)| (16<<16);
			}
		}