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

📄 mpeg2dec.c

📁 一份实用不错的MPEG2的编解码,可以支持在语间,网络,电视的语间压缩,本人已在多个项目中已有应用.
💻 C
📖 第 1 页 / 共 2 页
字号:
      case 'F':        Frame_Store_Flag = 1;        break;      case 'G':        Big_Picture_Flag = 1;        break;      case 'I':#ifdef VERIFY        Stats_Flag = atoi(&argv[i][2]); #else /* VERIFY */        printf("WARNING: This program not compiled for -i option\n");#endif /* VERIFY */             break;          case 'L':  /* spatial scalability flag */        Spatial_Flag = 1;       if(NextArg || LastArg)       {         printf("ERROR: -l must be followed by filename\n");         exit(ERROR);       }       else         Lower_Layer_Picture_Filename = argv[++i];         break;      case 'O':          Output_Type = atoi(&argv[i][2]);           if((Output_Type==4) || (Output_Type==5))          Output_Picture_Filename = "";  /* no need of filename */        else if(NextArg || LastArg)          {          printf("ERROR: -o must be followed by filename\n");          exit(ERROR);        }        else        /* filename is separated by space, so it becomes the next argument */          Output_Picture_Filename = argv[++i]; #ifdef DISPLAY        if (Output_Type==T_X11HIQ)        {          hiQdither = 1;          Output_Type=T_X11;        }#endif /* DISPLAY */        break;      case 'Q':        Quiet_Flag = 1;        break;      case 'R':        Reference_IDCT_Flag = 1;        break;          case 'T':#ifdef TRACE        Trace_Flag = 1;#else /* TRACE */        printf("WARNING: This program not compiled for -t option\n");#endif /* TRACE */        break;      case 'U':        User_Data_Flag = 1;      case 'V':#ifdef VERBOSE        Verbose_Flag = atoi(&argv[i][2]); #else /* VERBOSE */        printf("This program not compiled for -v option\n");#endif /* VERBOSE */        break;      case 'X':        Ersatz_Flag = 1;       if(NextArg || LastArg)       {         printf("ERROR: -x must be followed by filename\n");          exit(ERROR);       }       else        Substitute_Picture_Filename = argv[++i];         break;      default:        fprintf(stderr,"undefined option -%c ignored. Exiting program\n",           argv[i][1]);        exit(ERROR);          } /* switch() */    } /* if argv[i][0] == '-' */        i++;  	/* check for bitstream filename argument (there must always be one, at the very end	   of the command line arguments */  } /* while() */  /* options sense checking */  if(Main_Bitstream_Flag!=1)  {    printf("There must be a main bitstream specified (-b filename)\n");  }  /* force display process to show frame pictures */  if((Output_Type==4 || Output_Type==5) && Frame_Store_Flag)    Display_Progressive_Flag = 1;  else    Display_Progressive_Flag = 0;#ifdef VERIFY  /* parse the bitstream, do not actually decode it completely */  #if 0  if(Output_Type==-1)  {    Decode_Layer = Verify_Flag;    printf("FYI: Decoding bitstream elements up to: %s\n",       Layer_Table[Decode_Layer]);  }  else#endif    Decode_Layer = ALL_LAYERS;#endif /* VERIFY */  /* no output type specified */  if(Output_Type==-1)  {    Output_Type = 9;     Output_Picture_Filename = "";  }#ifdef DISPLAY  if (Output_Type==T_X11)  {    if(Frame_Store_Flag)      Display_Progressive_Flag = 1;    else      Display_Progressive_Flag = 0;    Frame_Store_Flag = 1; /* to avoid calling dither() twice */  }#endif}#ifdef OLD/*    this is an old routine used to convert command line arguments   into integers */static int Get_Val(argv)char *argv[];{  int val;  if (sscanf(argv[1]+2,"%d",&val)!=1)    return 0;  while (isdigit(argv[1][2]))    argv[1]++;  return val;}#endifstatic int Headers(){  int ret;  ld = &base;    /* return when end of sequence (0) or picture     header has been parsed (1) */  ret = Get_Hdr();  if (Two_Streams)  {    ld = &enhan;    if (Get_Hdr()!=ret && !Quiet_Flag)      fprintf(stderr,"streams out of sync\n");    ld = &base;  }  return ret;}static int Decode_Bitstream(){  int ret;  int Bitstream_Framenum;  Bitstream_Framenum = 0;  for(;;)  {#ifdef VERIFY    Clear_Verify_Headers();#endif /* VERIFY */    ret = Headers();        if(ret==1)    {      ret = video_sequence(&Bitstream_Framenum);    }    else      return(ret);  }}static void Deinitialize_Sequence(){  int i;  /* clear flags */  base.MPEG2_Flag=0;  for(i=0;i<3;i++)  {    free(backward_reference_frame[i]);    free(forward_reference_frame[i]);    free(auxframe[i]);    if (base.scalable_mode==SC_SPAT)    {     free(llframe0[i]);     free(llframe1[i]);    }  }  if (base.scalable_mode==SC_SPAT)    free(lltmp);#ifdef DISPLAY  if (Output_Type==T_X11)     Terminate_Display_Process();#endif}static int video_sequence(Bitstream_Framenumber)int *Bitstream_Framenumber;{  int Bitstream_Framenum;  int Sequence_Framenum;  int Return_Value;  Bitstream_Framenum = *Bitstream_Framenumber;  Sequence_Framenum=0;  Initialize_Sequence();  /* decode picture whose header has already been parsed in      Decode_Bitstream() */  Decode_Picture(Bitstream_Framenum, Sequence_Framenum);  /* update picture numbers */  if (!Second_Field)  {    Bitstream_Framenum++;    Sequence_Framenum++;  }  /* loop through the rest of the pictures in the sequence */  while ((Return_Value=Headers()))  {    Decode_Picture(Bitstream_Framenum, Sequence_Framenum);    if (!Second_Field)    {      Bitstream_Framenum++;      Sequence_Framenum++;    }  }  /* put last frame */  if (Sequence_Framenum!=0)  {    Output_Last_Frame_of_Sequence(Bitstream_Framenum);  }  Deinitialize_Sequence();#ifdef VERIFY    Clear_Verify_Headers();#endif /* VERIFY */  *Bitstream_Framenumber = Bitstream_Framenum;  return(Return_Value);}static void Clear_Options(){  Verbose_Flag = 0;  Output_Type = 0;  Output_Picture_Filename = " ";  hiQdither  = 0;  Output_Type = 0;  Frame_Store_Flag = 0;  Spatial_Flag = 0;  Lower_Layer_Picture_Filename = " ";  Reference_IDCT_Flag = 0;  Trace_Flag = 0;  Quiet_Flag = 0;  Ersatz_Flag = 0;  Substitute_Picture_Filename  = " ";  Two_Streams = 0;  Enhancement_Layer_Bitstream_Filename = " ";  Big_Picture_Flag = 0;  Main_Bitstream_Flag = 0;  Main_Bitstream_Filename = " ";  Verify_Flag = 0;  Stats_Flag  = 0;  User_Data_Flag = 0; }#ifdef DEBUGstatic void Print_Options(){    printf("Verbose_Flag                         = %d\n", Verbose_Flag);  printf("Output_Type                          = %d\n", Output_Type);  printf("Output_Picture_Filename              = %s\n", Output_Picture_Filename);  printf("hiQdither                            = %d\n", hiQdither);  printf("Output_Type                          = %d\n", Output_Type);  printf("Frame_Store_Flag                     = %d\n", Frame_Store_Flag);  printf("Spatial_Flag                         = %d\n", Spatial_Flag);  printf("Lower_Layer_Picture_Filename         = %s\n", Lower_Layer_Picture_Filename);  printf("Reference_IDCT_Flag                  = %d\n", Reference_IDCT_Flag);  printf("Trace_Flag                           = %d\n", Trace_Flag);  printf("Quiet_Flag                           = %d\n", Quiet_Flag);  printf("Ersatz_Flag                          = %d\n", Ersatz_Flag);  printf("Substitute_Picture_Filename          = %s\n", Substitute_Picture_Filename);  printf("Two_Streams                          = %d\n", Two_Streams);  printf("Enhancement_Layer_Bitstream_Filename = %s\n", Enhancement_Layer_Bitstream_Filename);  printf("Big_Picture_Flag                     = %d\n", Big_Picture_Flag);  printf("Main_Bitstream_Flag                  = %d\n", Main_Bitstream_Flag);  printf("Main_Bitstream_Filename              = %s\n", Main_Bitstream_Filename);  printf("Verify_Flag                          = %d\n", Verify_Flag);  printf("Stats_Flag                           = %d\n", Stats_Flag);  printf("User_Data_Flag                       = %d\n", User_Data_Flag);}#endif

⌨️ 快捷键说明

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