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

📄 mpeg2enc.c

📁 MPEG2解编码程序源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  }

  repeatfirst = !!repeatfirst;

  prog_frame = !!prog_frame;



  /* make sure MPEG specific parameters are valid */

  range_checks();



  frame_rate = ratetab[frame_rate_code-1];



  /* timecode -> frame number */

  tc0 = h;

  tc0 = 60*tc0 + m;

  tc0 = 60*tc0 + s;

  tc0 = (int)(frame_rate+0.5)*tc0 + f;



  if (!mpeg1)

  {

    profile_and_level_checks();

  }

  else

  {

    /* MPEG-1 */

    if (constrparms)

    {

      if (horizontal_size>768

          || vertical_size>576

          || ((horizontal_size+15)/16)*((vertical_size+15)/16)>396

          || ((horizontal_size+15)/16)*((vertical_size+15)/16)*frame_rate>396*25.0

          || frame_rate>30.0)

      {

        if (!quiet)

          fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");

        constrparms = 0;

      }

    }



    if (constrparms)

    {

      for (i=0; i<M; i++)

      {

        if (motion_data[i].forw_hor_f_code>4)

        {

          if (!quiet)

            fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");

          constrparms = 0;

          break;

        }



        if (motion_data[i].forw_vert_f_code>4)

        {

          if (!quiet)

            fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");

          constrparms = 0;

          break;

        }



        if (i!=0)

        {

          if (motion_data[i].back_hor_f_code>4)

          {

            if (!quiet)

              fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");

            constrparms = 0;

            break;

          }



          if (motion_data[i].back_vert_f_code>4)

          {

            if (!quiet)

              fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");

            constrparms = 0;

            break;

          }

        }

      }

    }

  }



  /* relational checks */



  if (mpeg1)

  {

    if (!prog_seq)

    {

      if (!quiet)

        fprintf(stderr,"Warning: setting progressive_sequence = 1\n");

      prog_seq = 1;

    }



    if (chroma_format!=CHROMA420)

    {

      if (!quiet)

        fprintf(stderr,"Warning: setting chroma_format = 1 (4:2:0)\n");

      chroma_format = CHROMA420;

    }



    if (dc_prec!=0)

    {

      if (!quiet)

        fprintf(stderr,"Warning: setting intra_dc_precision = 0\n");

      dc_prec = 0;

    }



    for (i=0; i<3; i++)

      if (qscale_tab[i])

      {

        if (!quiet)

          fprintf(stderr,"Warning: setting qscale_tab[%d] = 0\n",i);

        qscale_tab[i] = 0;

      }



    for (i=0; i<3; i++)

      if (intravlc_tab[i])

      {

        if (!quiet)

          fprintf(stderr,"Warning: setting intravlc_tab[%d] = 0\n",i);

        intravlc_tab[i] = 0;

      }



    for (i=0; i<3; i++)

      if (altscan_tab[i])

      {

        if (!quiet)

          fprintf(stderr,"Warning: setting altscan_tab[%d] = 0\n",i);

        altscan_tab[i] = 0;

      }

  }



  if (!mpeg1 && constrparms)

  {

    if (!quiet)

      fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");

    constrparms = 0;

  }



  if (prog_seq && !prog_frame)

  {

    if (!quiet)

      fprintf(stderr,"Warning: setting progressive_frame = 1\n");

    prog_frame = 1;

  }



  if (prog_frame && fieldpic)

  {

    if (!quiet)

      fprintf(stderr,"Warning: setting field_pictures = 0\n");

    fieldpic = 0;

  }



  if (!prog_frame && repeatfirst)

  {

    if (!quiet)

      fprintf(stderr,"Warning: setting repeat_first_field = 0\n");

    repeatfirst = 0;

  }



  if (prog_frame)

  {

    for (i=0; i<3; i++)

      if (!frame_pred_dct_tab[i])

      {

        if (!quiet)

          fprintf(stderr,"Warning: setting frame_pred_frame_dct[%d] = 1\n",i);

        frame_pred_dct_tab[i] = 1;

      }

  }



  if (prog_seq && !repeatfirst && topfirst)

  {

    if (!quiet)

      fprintf(stderr,"Warning: setting top_field_first = 0\n");

    topfirst = 0;

  }



  /* search windows */

  for (i=0; i<M; i++)

  {

    if (motion_data[i].sxf > (4<<motion_data[i].forw_hor_f_code)-1)

    {

      if (!quiet)

        fprintf(stderr,

          "Warning: reducing forward horizontal search width to %d\n",

          (4<<motion_data[i].forw_hor_f_code)-1);

      motion_data[i].sxf = (4<<motion_data[i].forw_hor_f_code)-1;

    }



    if (motion_data[i].syf > (4<<motion_data[i].forw_vert_f_code)-1)

    {

      if (!quiet)

        fprintf(stderr,

          "Warning: reducing forward vertical search width to %d\n",

          (4<<motion_data[i].forw_vert_f_code)-1);

      motion_data[i].syf = (4<<motion_data[i].forw_vert_f_code)-1;

    }



    if (i!=0)

    {

      if (motion_data[i].sxb > (4<<motion_data[i].back_hor_f_code)-1)

      {

        if (!quiet)

          fprintf(stderr,

            "Warning: reducing backward horizontal search width to %d\n",

            (4<<motion_data[i].back_hor_f_code)-1);

        motion_data[i].sxb = (4<<motion_data[i].back_hor_f_code)-1;

      }



      if (motion_data[i].syb > (4<<motion_data[i].back_vert_f_code)-1)

      {

        if (!quiet)

          fprintf(stderr,

            "Warning: reducing backward vertical search width to %d\n",

            (4<<motion_data[i].back_vert_f_code)-1);

        motion_data[i].syb = (4<<motion_data[i].back_vert_f_code)-1;

      }

    }

  }



}



static void readquantmat()

{

  int i,v;

  FILE *fd;



  if (iqname[0]=='-')

  {

    /* use default intra matrix */

    load_iquant = 0;

    for (i=0; i<64; i++)

      intra_q[i] = default_intra_quantizer_matrix[i];

  }

  else

  {

    /* read customized intra matrix */

    load_iquant = 1;

    if (!(fd = fopen(iqname,"r")))

    {

      sprintf(errortext,"Couldn't open quant matrix file %s",iqname);

      error(errortext);

    }



    for (i=0; i<64; i++)

    {

      fscanf(fd,"%d",&v);

      if (v<1 || v>255)

        error("invalid value in quant matrix");

      intra_q[i] = v;

    }



    fclose(fd);

  }



  if (niqname[0]=='-')

  {

    /* use default non-intra matrix */

    load_niquant = 0;

    for (i=0; i<64; i++)

      inter_q[i] = 16;

  }

  else

  {

    /* read customized non-intra matrix */

    load_niquant = 1;

    if (!(fd = fopen(niqname,"r")))

    {

      sprintf(errortext,"Couldn't open quant matrix file %s",niqname);

      error(errortext);

    }



    for (i=0; i<64; i++)

    {

      fscanf(fd,"%d",&v);

      if (v<1 || v>255)

        error("invalid value in quant matrix");

      inter_q[i] = v;

    }



    fclose(fd);

  }

}

⌨️ 快捷键说明

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