⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getvlc.c

📁 VC下MPEG2的视频编解码源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    {      Print_Bits(code,3,MVtab0[code].len);      printf("%d): %d\n",        Show_Bits(1),Show_Bits(1)?-MVtab0[code].val:MVtab0[code].val);    }#endif /* TRACE */    return Get_Bits1()?-MVtab0[code].val:MVtab0[code].val;  }  if (code>=24)  {    code >>= 3;    Flush_Buffer(MVtab1[code].len);#ifdef TRACE    if (Trace_Flag)    {      Print_Bits(code,6,MVtab1[code].len);      printf("%d): %d\n",        Show_Bits(1),Show_Bits(1)?-MVtab1[code].val:MVtab1[code].val);    }#endif /* TRACE */    return Get_Bits1()?-MVtab1[code].val:MVtab1[code].val;  }  if ((code-=12)<0)  {    if (!Quiet_Flag)/* HACK */      printf("Invalid motion_vector code (MBA %d, pic %d)\n", global_MBA, global_pic);    Fault_Flag=1;    return 0;  }  Flush_Buffer(MVtab2[code].len);#ifdef TRACE  if (Trace_Flag)  {    Print_Bits(code+12,9,MVtab2[code].len);    printf("%d): %d\n",      Show_Bits(1),Show_Bits(1)?-MVtab2[code].val:MVtab2[code].val);  }#endif /* TRACE */  return Get_Bits1() ? -MVtab2[code].val : MVtab2[code].val;}/* get differential motion vector (for dual prime prediction) */int Get_dmvector(){#ifdef TRACE  if (Trace_Flag)    printf("dmvector (");#endif /* TRACE */  if (Get_Bits(1))  {#ifdef TRACE    if (Trace_Flag)      printf(Show_Bits(1) ? "11): -1\n" : "10): 1\n");#endif /* TRACE */    return Get_Bits(1) ? -1 : 1;  }  else  {#ifdef TRACE    if (Trace_Flag)      printf("0): 0\n");#endif /* TRACE */    return 0;  }}int Get_coded_block_pattern(){  int code;#ifdef TRACE  if (Trace_Flag)    printf("coded_block_pattern_420 (");#endif /* TRACE */  if ((code = Show_Bits(9))>=128)  {    code >>= 4;    Flush_Buffer(CBPtab0[code].len);#ifdef TRACE    if (Trace_Flag)    {      Print_Bits(code,5,CBPtab0[code].len);      printf("): ");      Print_Bits(CBPtab0[code].val,6,6);      printf(" (%d)\n",CBPtab0[code].val);    }#endif /* TRACE */    return CBPtab0[code].val;  }  if (code>=8)  {    code >>= 1;    Flush_Buffer(CBPtab1[code].len);#ifdef TRACE    if (Trace_Flag)    {      Print_Bits(code,8,CBPtab1[code].len);      printf("): ");      Print_Bits(CBPtab1[code].val,6,6);      printf(" (%d)\n",CBPtab1[code].val);    }#endif /* TRACE */    return CBPtab1[code].val;  }  if (code<1)  {    if (!Quiet_Flag)      printf("Invalid coded_block_pattern code\n");    Fault_Flag = 1;    return 0;  }  Flush_Buffer(CBPtab2[code].len);#ifdef TRACE  if (Trace_Flag)  {    Print_Bits(code,9,CBPtab2[code].len);    printf("): ");    Print_Bits(CBPtab2[code].val,6,6);    printf(" (%d)\n",CBPtab2[code].val);  }#endif /* TRACE */  return CBPtab2[code].val;}int Get_macroblock_address_increment(){  int code, val;#ifdef TRACE  if (Trace_Flag)    printf("macroblock_address_increment (");#endif /* TRACE */  val = 0;  while ((code = Show_Bits(11))<24)  {    if (code!=15) /* if not macroblock_stuffing */    {      if (code==8) /* if macroblock_escape */      {#ifdef TRACE        if (Trace_Flag)          printf("00000001000 ");#endif /* TRACE */        val+= 33;      }      else      {        if (!Quiet_Flag)          printf("Invalid macroblock_address_increment code\n");        Fault_Flag = 1;        return 1;      }    }    else /* macroblock suffing */    {#ifdef TRACE      if (Trace_Flag)        printf("00000001111 ");#endif /* TRACE */    }    Flush_Buffer(11);  }  /* macroblock_address_increment == 1 */  /* ('1' is in the MSB position of the lookahead) */  if (code>=1024)  {    Flush_Buffer(1);#ifdef TRACE    if (Trace_Flag)      printf("1): %d\n",val+1);#endif /* TRACE */    return val + 1;  }  /* codes 00010 ... 011xx */  if (code>=128)  {    /* remove leading zeros */    code >>= 6;    Flush_Buffer(MBAtab1[code].len);#ifdef TRACE    if (Trace_Flag)    {      Print_Bits(code,5,MBAtab1[code].len);      printf("): %d\n",val+MBAtab1[code].val);    }#endif /* TRACE */        return val + MBAtab1[code].val;  }    /* codes 00000011000 ... 0000111xxxx */  code-= 24; /* remove common base */  Flush_Buffer(MBAtab2[code].len);#ifdef TRACE  if (Trace_Flag)  {    Print_Bits(code+24,11,MBAtab2[code].len);    printf("): %d\n",val+MBAtab2[code].val);  }#endif /* TRACE */  return val + MBAtab2[code].val;}/* combined MPEG-1 and MPEG-2 stage. parse VLC and    perform dct_diff arithmetic.   MPEG-1:  ISO/IEC 11172-2 section   MPEG-2:  ISO/IEC 13818-2 section 7.2.1       Note: the arithmetic here is presented more elegantly than   the spec, yet the results, dct_diff, are the same.*/int Get_Luma_DC_dct_diff(){  int code, size, dct_diff;#ifdef TRACE/*  if (Trace_Flag)    printf("dct_dc_size_luminance: (");*/#endif /* TRACE */  /* decode length */  code = Show_Bits(5);  if (code<31)  {    size = DClumtab0[code].val;    Flush_Buffer(DClumtab0[code].len);#ifdef TRACE/*    if (Trace_Flag)    {      Print_Bits(code,5,DClumtab0[code].len);      printf("): %d",size);    }*/#endif /* TRACE */  }  else  {    code = Show_Bits(9) - 0x1f0;    size = DClumtab1[code].val;    Flush_Buffer(DClumtab1[code].len);#ifdef TRACE/*    if (Trace_Flag)    {      Print_Bits(code+0x1f0,9,DClumtab1[code].len);      printf("): %d",size);    }*/#endif /* TRACE */  }#ifdef TRACE/*  if (Trace_Flag)    printf(", dct_dc_differential (");*/#endif /* TRACE */  if (size==0)    dct_diff = 0;  else  {    dct_diff = Get_Bits(size);#ifdef TRACE/*    if (Trace_Flag)      Print_Bits(dct_diff,size,size);*/#endif /* TRACE */    if ((dct_diff & (1<<(size-1)))==0)      dct_diff-= (1<<size) - 1;  }#ifdef TRACE/*  if (Trace_Flag)    printf("): %d\n",dct_diff);*/#endif /* TRACE */  return dct_diff;}int Get_Chroma_DC_dct_diff(){  int code, size, dct_diff;#ifdef TRACE/*  if (Trace_Flag)    printf("dct_dc_size_chrominance: (");*/#endif /* TRACE */  /* decode length */  code = Show_Bits(5);  if (code<31)  {    size = DCchromtab0[code].val;    Flush_Buffer(DCchromtab0[code].len);#ifdef TRACE/*    if (Trace_Flag)    {      Print_Bits(code,5,DCchromtab0[code].len);      printf("): %d",size);    }*/#endif /* TRACE */  }  else  {    code = Show_Bits(10) - 0x3e0;    size = DCchromtab1[code].val;    Flush_Buffer(DCchromtab1[code].len);#ifdef TRACE/*    if (Trace_Flag)    {      Print_Bits(code+0x3e0,10,DCchromtab1[code].len);      printf("): %d",size);    }*/#endif /* TRACE */  }#ifdef TRACE/*   if (Trace_Flag)    printf(", dct_dc_differential (");*/#endif /* TRACE */  if (size==0)    dct_diff = 0;  else  {    dct_diff = Get_Bits(size);#ifdef TRACE/*    if (Trace_Flag)      Print_Bits(dct_diff,size,size);*/#endif /* TRACE */    if ((dct_diff & (1<<(size-1)))==0)      dct_diff-= (1<<size) - 1;  }#ifdef TRACE/*  if (Trace_Flag)    printf("): %d\n",dct_diff);*/#endif /* TRACE */  return dct_diff;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -