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

📄 avi2mpg.cpp

📁 视频音频编码程序 视频音频编码程序 视频音频编码程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      Xi = 0;
      Xp = 0;
      Xb = 0;
      d0i = 0;
      d0p = 0;
      d0b = 0;

      motion_data = (struct motion_data *)malloc(M*sizeof(struct motion_data));
      if (!motion_data)
          error("malloc failed\n");

      switch (m_search_size)
	  {
	  case 0:
			motion_data[0].forw_hor_f_code = motion_data[0].forw_vert_f_code = 2;
			motion_data[0].sxf = motion_data[0].syf = 11;

			motion_data[1].forw_hor_f_code = motion_data[1].forw_vert_f_code = 1;
			motion_data[1].sxf = motion_data[1].syf = 3;

			motion_data[1].back_hor_f_code = motion_data[1].back_vert_f_code = 1;
			motion_data[1].sxb = motion_data[1].syb = 7;

			motion_data[2].forw_hor_f_code = motion_data[2].forw_vert_f_code = 1;
			motion_data[2].sxf = motion_data[2].syf = 7;

			motion_data[2].back_hor_f_code = motion_data[2].back_vert_f_code = 1;
			motion_data[2].sxb = motion_data[2].syb = 3;
	  break;

	  case 1:
			motion_data[0].forw_hor_f_code = motion_data[0].forw_vert_f_code = 2;
			motion_data[0].sxf = motion_data[0].syf = 15;

			motion_data[1].forw_hor_f_code = motion_data[1].forw_vert_f_code = 1;
			motion_data[1].sxf = motion_data[1].syf = 7;

			motion_data[1].back_hor_f_code = motion_data[1].back_vert_f_code = 2;
			motion_data[1].sxb = motion_data[1].syb = 15;

			motion_data[2].forw_hor_f_code = motion_data[2].forw_vert_f_code = 2;
			motion_data[2].sxf = motion_data[2].syf = 15;

			motion_data[2].back_hor_f_code = motion_data[2].back_vert_f_code = 1;
			motion_data[2].sxb = motion_data[2].syb = 7;
	  break;

	  case 2:
			motion_data[0].forw_hor_f_code = motion_data[0].forw_vert_f_code = 3;
			motion_data[0].sxf = motion_data[0].syf = 31;

			motion_data[1].forw_hor_f_code = motion_data[1].forw_vert_f_code = 2;
			motion_data[1].sxf = motion_data[1].syf = 15;

			motion_data[1].back_hor_f_code = motion_data[1].back_vert_f_code = 3;
			motion_data[1].sxb = motion_data[1].syb = 31;

			motion_data[2].forw_hor_f_code = motion_data[2].forw_vert_f_code = 3;
			motion_data[2].sxf = motion_data[2].syf = 31;

			motion_data[2].back_hor_f_code = motion_data[2].back_vert_f_code = 2;
			motion_data[2].sxb = motion_data[2].syb = 15;
	  break;

	  case 3:
			motion_data[0].forw_hor_f_code = motion_data[0].forw_vert_f_code = 4;
			motion_data[0].sxf = motion_data[0].syf = 63;

			motion_data[1].forw_hor_f_code = motion_data[1].forw_vert_f_code = 3;
			motion_data[1].sxf = motion_data[1].syf = 31;

			motion_data[1].back_hor_f_code = motion_data[1].back_vert_f_code = 4;
			motion_data[1].sxb = motion_data[1].syb = 63;

			motion_data[2].forw_hor_f_code = motion_data[2].forw_vert_f_code = 4;
			motion_data[2].sxf = motion_data[2].syf = 63;

			motion_data[2].back_hor_f_code = motion_data[2].back_vert_f_code = 3;
			motion_data[2].sxb = motion_data[2].syb = 31;
	  break;

	  case 4:
			motion_data[0].forw_hor_f_code = motion_data[0].forw_vert_f_code = 4;
			motion_data[0].sxf = motion_data[0].syf = 63;

			motion_data[1].forw_hor_f_code = motion_data[1].forw_vert_f_code = 4;
			motion_data[1].sxf = motion_data[1].syf = 63;

			motion_data[1].back_hor_f_code = motion_data[1].back_vert_f_code = 4;
			motion_data[1].sxb = motion_data[1].syb = 63;

			motion_data[2].forw_hor_f_code = motion_data[2].forw_vert_f_code = 4;
			motion_data[2].sxf = motion_data[2].syf = 63;

			motion_data[2].back_hor_f_code = motion_data[2].back_vert_f_code = 4;
			motion_data[2].sxb = motion_data[2].syb = 63;
	  break;
	  }
  }

  if(vcd_parm)
  {
	vbv_buffer_size = 20;
	aspectratio = 14;
  }

  /* make flags boolean (x!=0 -> x=1) */
  fieldpic = !!fieldpic;
  low_delay = !!low_delay;
  constrparms = !!constrparms;
  prog_seq = !!prog_seq;
  topfirst = !!topfirst;

  for (i=0; i<3; i++)
  {
	frame_pred_dct_tab[i] = !!frame_pred_dct_tab[i];
    conceal_tab[i] = !!conceal_tab[i];
    qscale_tab[i] = !!qscale_tab[i];
    intravlc_tab[i] = !!intravlc_tab[i];
    altscan_tab[i] = !!altscan_tab[i];
  }
  repeatfirst = !!repeatfirst;
  prog_frame = !!prog_frame;

  /* 确认MPEG的特定参数是有效的*/
  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;

    /* 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,"\n*** WARNING: VIDEO EXCEEDS CPB STANDARD!\n");
        constrparms = 0;
      }
    }

    if (constrparms)
    {
      for (i=0; i<M; i++)
      {
        if (motion_data[i].forw_hor_f_code>4)
        {
          if (!quiet)
            fprintf(stderr,"\n*** WARNING: VIDEO EXCEEDS CPB STANDARD!\n");
          constrparms = 0;
          break;
        }

        if (motion_data[i].forw_vert_f_code>4)
        {
          if (!quiet)
            fprintf(stderr,"\n*** WARNING: VIDEO EXCEEDS CPB STANDARD!\n");
          constrparms = 0;
          break;
        }

        if (i!=0)
        {
          if (motion_data[i].back_hor_f_code>4)
          {
            if (!quiet)
              fprintf(stderr,"\n*** WARNING: VIDEO EXCEEDS CPB STANDARD!\n");
            constrparms = 0;
            break;
          }

          if (motion_data[i].back_vert_f_code>4)
          {
            if (!quiet)
              fprintf(stderr,"\n*** WARNING: VIDEO EXCEEDS CPB STANDARD!\n");
            constrparms = 0;
            break;
          }
        }
      }
    }


    if (!prog_seq)
    {
      if (!quiet)
        fprintf(stderr,"\nWarning: setting progressive_sequence = 1\n");
      prog_seq = 1;
    }

    if (chroma_format!=CHROMA420)
    {
      if (!quiet)
        fprintf(stderr,"\nWarning: setting chroma_format = 1 (4:2:0)\n");
      chroma_format = CHROMA420;
    }

    if (dc_prec!=0)
    {
      if (!quiet)
        fprintf(stderr,"\nWarning: setting intra_dc_precision = 0\n");
      dc_prec = 0;
    }

    for (i=0; i<3; i++)
      if (qscale_tab[i])
      {
        if (!quiet)
          fprintf(stderr,"\nWarning: 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,"\nWarning: 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,"\nWarning: setting altscan_tab[%d] = 0\n",i);
        altscan_tab[i] = 0;
      }

  if (prog_seq && !prog_frame)
  {
    if (!quiet)
      fprintf(stderr,"\nWarning: setting progressive_frame = 1\n");
    prog_frame = 1;
  }

  if (prog_frame && fieldpic)
  {
    if (!quiet)
      fprintf(stderr,"\nWarning: setting field_pictures = 0\n");
    fieldpic = 0;
  }

  if (!prog_frame && repeatfirst)
  {
    if (!quiet)
      fprintf(stderr,"\nWarning: 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,"\nWarning: setting frame_pred_frame_dct[%d] = 1\n",i);
        frame_pred_dct_tab[i] = 1;
      }
  }

  if (prog_seq && !repeatfirst && topfirst)
  {
    if (!quiet)
      fprintf(stderr,"\nWarning: 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,
          "\nWarning: 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,
          "\nWarning: 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,
            "\nWarning: 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,
            "\nWarning: 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 initquantmat()
{
  int i,v;
  FILE *fd;

  if (iqname[0]=='-')
  {
    load_iquant = 0;
    for (i=0; i<64; i++)
	{
      intra_q[i] = default_intra_quantizer_matrix[i];
	  recip_intra_q[i] = (unsigned short)((16384.0 + (double) intra_q[i]/2.0)/intra_q[i]);
	}
  }
  else
  {
    load_iquant = 1;
    if (!(fd = fopen(iqname,"r")))
    {
      sprintf(errortext,"Couldn't open quant intra 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;
	  recip_intra_q[i] = (unsigned short)((16384.0 + (double) intra_q[i]/2.0)/intra_q[i]);
    }

    fclose(fd);
  }

  if (niqname[0]=='-')
  {
    load_niquant = 0;
    for (i=0; i<64; i++)
	{
      inter_q[i] = 16;
	  recip_inter_q[i] = (unsigned short)((16384.0 + (double) inter_q[i]/2.0)/inter_q[i]);
	}
  }
  else
  {
    load_niquant = 1;
    if (!(fd = fopen(niqname,"r")))
    {
      sprintf(errortext,"Couldn't open quant non-intra 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;

	  recip_inter_q[i] = (unsigned short)((16384.0 + (double) inter_q[i]/2.0)/inter_q[i]);
    }

    fclose(fd);
  }
}

⌨️ 快捷键说明

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