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

📄 gethdr.c

📁 MPEG-2 has 7 distinct parts as well. The first part is the Systems section which defines the contain
💻 C
📖 第 1 页 / 共 2 页
字号:
/* decode sequence extension */static void sequence_extension(){  int prof_lev;  int horizontal_size_extension, vertical_size_extension;  int bit_rate_extension, vbv_buffer_size_extension;  int frame_rate_extension_n, frame_rate_extension_d;  int pos;  pos = ld->bitcnt;  ld->mpeg2 = 1;  ld->scalable_mode = SC_NONE; /* unless overwritten by seq. scal. ext. */  prof_lev = getbits(8);  prog_seq = getbits(1);  chroma_format = getbits(2);  horizontal_size_extension = getbits(2);  vertical_size_extension = getbits(2);  bit_rate_extension = getbits(12);  flushbits(1);  vbv_buffer_size_extension = getbits(8);  low_delay = getbits(1);  frame_rate_extension_n = getbits(2);  frame_rate_extension_d = getbits(5);  profile = prof_lev >> 4;  /* Profile is upper nibble */  level = prof_lev & 15;    /* Level is lower nibble */  horizontal_size = (horizontal_size_extension<<12) | (horizontal_size&0x0fff);  vertical_size = (vertical_size_extension<<12) | (vertical_size&0x0fff);  bit_rate = (float) ((bit_rate_extension << 18) + bit_rate_value) * 400.0;  if (verbose>0)  {    printf("sequence extension (byte %d)\n",(pos>>3)-4);    if (verbose>1)    {      printf("  profile_and_level_indication=%d\n",prof_lev);      if (prof_lev<128)      {        printf("    profile=%d, level=%d\n",profile,level);      }      printf("  progressive_sequence=%d\n",prog_seq);      printf("  chroma_format=%d\n",chroma_format);      printf("  horizontal_size_extension=%d\n",horizontal_size_extension);      printf("  vertical_size_extension=%d\n",vertical_size_extension);      printf("  bit_rate_extension=%d\n",bit_rate_extension);      printf("  vbv_buffer_size_extension=%d\n",vbv_buffer_size_extension);      printf("  low_delay=%d\n",low_delay);      printf("  frame_rate_extension_n=%d\n",frame_rate_extension_n);      printf("  frame_rate_extension_d=%d\n",frame_rate_extension_d);    }  }}/* decode sequence display extension */static void sequence_display_extension(){  int colour_description;  int pos;  pos = ld->bitcnt;  video_format = getbits(3);  colour_description = getbits(1);  if (colour_description)  {    colour_primaries = getbits(8);    transfer_characteristics = getbits(8);    matrix_coefficients = getbits(8);  }  display_horizontal_size = getbits(14);  flushbits(1);  display_vertical_size = getbits(14);  if (verbose>0)  {    printf("sequence display extension (byte %d)\n",(pos>>3)-4);    if (verbose>1)    {      printf("  video_format=%d\n",video_format);      printf("  colour_description=%d\n",colour_description);      if (colour_description)      {        printf("    colour_primaries=%d\n",colour_primaries);        printf("    transfer_characteristics=%d\n",transfer_characteristics);        printf("    matrix_coefficients=%d\n",matrix_coefficients);      }      printf("  display_horizontal_size=%d\n",display_horizontal_size);      printf("  display_vertical_size=%d\n",display_vertical_size);    }  }}/* decode quant matrix entension */static void quant_matrix_extension(){  int i;  int load_intra_quantiser_matrix, load_non_intra_quantiser_matrix;  int load_chroma_intra_quantiser_matrix;  int load_chroma_non_intra_quantiser_matrix;  int pos;  pos = ld->bitcnt;  if (load_intra_quantiser_matrix = getbits(1))  {    for (i=0; i<64; i++)    {      ld->chroma_intra_quantizer_matrix[zig_zag_scan[i]]      = ld->intra_quantizer_matrix[zig_zag_scan[i]]      = getbits(8);    }  }  if (load_non_intra_quantiser_matrix = getbits(1))  {    for (i=0; i<64; i++)    {      ld->chroma_non_intra_quantizer_matrix[zig_zag_scan[i]]      = ld->non_intra_quantizer_matrix[zig_zag_scan[i]]      = getbits(8);    }  }  if (load_chroma_intra_quantiser_matrix = getbits(1))  {    for (i=0; i<64; i++)      ld->chroma_intra_quantizer_matrix[zig_zag_scan[i]] = getbits(8);  }  if (load_chroma_non_intra_quantiser_matrix = getbits(1))  {    for (i=0; i<64; i++)      ld->chroma_non_intra_quantizer_matrix[zig_zag_scan[i]] = getbits(8);  }  if (verbose>0)  {    printf("quant matrix extension (byte %d)\n",(pos>>3)-4);    printf("  load_intra_quantiser_matrix=%d\n",      load_intra_quantiser_matrix);    printf("  load_non_intra_quantiser_matrix=%d\n",      load_non_intra_quantiser_matrix);    printf("  load_chroma_intra_quantiser_matrix=%d\n",      load_chroma_intra_quantiser_matrix);    printf("  load_chroma_non_intra_quantiser_matrix=%d\n",      load_chroma_non_intra_quantiser_matrix);  }}/* decode sequence scalable extension */static void sequence_scalable_extension(){  int layer_id;  int pos;  pos = ld->bitcnt;  ld->scalable_mode = getbits(2) + 1; /* add 1 to make SC_DP != SC_NONE */  layer_id = getbits(4);  if (ld->scalable_mode==SC_SPAT)  {    llw = getbits(14); /* lower_layer_prediction_horizontal_size */    flushbits(1);    llh = getbits(14); /* lower_layer_prediction_vertical_size */    hm = getbits(5);    hn = getbits(5);    vm = getbits(5);    vn = getbits(5);  }  if (ld->scalable_mode==SC_TEMP)    error("temporal scalability not implemented\n");  if (verbose>0)  {    printf("sequence scalable extension (byte %d)\n",(pos>>3)-4);    if (verbose>1)    {      printf("  scalable_mode=%d\n",ld->scalable_mode-1);      printf("  layer_id=%d\n",layer_id);      if (ld->scalable_mode==SC_SPAT)      {        printf("    lower_layer_prediction_horiontal_size=%d\n",llw);        printf("    lower_layer_prediction_vertical_size=%d\n",llh);        printf("    horizontal_subsampling_factor_m=%d\n",hm);        printf("    horizontal_subsampling_factor_n=%d\n",hn);        printf("    vertical_subsampling_factor_m=%d\n",vm);        printf("    vertical_subsampling_factor_n=%d\n",vn);      }    }  }}/* decode picture display extension */static void picture_display_extension(){  int i,n;  short frame_centre_horizontal_offset[3];  short frame_centre_vertical_offset[3];  int pos;  pos = ld->bitcnt;  if (prog_seq || pict_struct!=FRAME_PICTURE)    n = 1;  else    n = repeatfirst ? 3 : 2;  for (i=0; i<n; i++)  {    frame_centre_horizontal_offset[i] = (short)getbits(16);    flushbits(1);    frame_centre_vertical_offset[i] = (short)getbits(16);    flushbits(1);  }  if (verbose>0)  {    printf("picture display extension (byte %d)\n",(pos>>3)-4);    if (verbose>1)    {      for (i=0; i<n; i++)      {        printf("  frame_centre_horizontal_offset[%d]=%d\n",i,          frame_centre_horizontal_offset[i]);        printf("  frame_centre_vertical_offset[%d]=%d\n",i,          frame_centre_vertical_offset[i]);      }    }  }}/* decode picture coding extension */static void picture_coding_extension(){  int chroma_420_type, composite_display_flag;  int v_axis, field_sequence, sub_carrier, burst_amplitude, sub_carrier_phase;  int pos;  pos = ld->bitcnt;  h_forw_r_size = getbits(4) - 1;  v_forw_r_size = getbits(4) - 1;  h_back_r_size = getbits(4) - 1;  v_back_r_size = getbits(4) - 1;  dc_prec = getbits(2);  pict_struct = getbits(2);  topfirst = getbits(1);  frame_pred_dct = getbits(1);  conceal_mv = getbits(1);  ld->qscale_type = getbits(1);  intravlc = getbits(1);  ld->altscan = getbits(1);  repeatfirst = getbits(1);  chroma_420_type = getbits(1);  prog_frame = getbits(1);  composite_display_flag = getbits(1);  if (composite_display_flag)  {    v_axis = getbits(1);    field_sequence = getbits(3);    sub_carrier = getbits(1);    burst_amplitude = getbits(7);    sub_carrier_phase = getbits(8);  }  if (verbose>0)  {    printf("picture coding extension (byte %d)\n",(pos>>3)-4);    if (verbose>1)    {      printf("  forward_horizontal_f_code=%d\n",h_forw_r_size+1);      printf("  forward_vertical_f_code=%d\n",v_forw_r_size+1);      printf("  backward_horizontal_f_code=%d\n",h_back_r_size+1);      printf("  backward_vertical_f_code=%d\n",v_back_r_size+1);      printf("  intra_dc_precision=%d\n",dc_prec);      printf("  picture_structure=%d\n",pict_struct);      printf("  top_field_first=%d\n",topfirst);      printf("  frame_pred_frame_dct=%d\n",frame_pred_dct);      printf("  concealment_motion_vectors=%d\n",conceal_mv);      printf("  q_scale_type=%d\n",ld->qscale_type);      printf("  intra_vlc_format=%d\n",intravlc);      printf("  alternate_scan=%d\n",ld->altscan);      printf("  repeat_first_field=%d\n",repeatfirst);      printf("  chroma_420_type=%d\n",chroma_420_type);      printf("  progressive_frame=%d\n",prog_frame);      printf("  composite_display_flag=%d\n",composite_display_flag);      if (composite_display_flag)      {        printf("    v_axis=%d\n",v_axis);        printf("    field_sequence=%d\n",field_sequence);        printf("    sub_carrier=%d\n",sub_carrier);        printf("    burst_amplitude=%d\n",burst_amplitude);        printf("    sub_carrier_phase=%d\n",sub_carrier_phase);      }    }  }}/* decode picture spatial scalable extension */static void picture_spatial_scalable_extension(){  int pos;  pos = ld->bitcnt;  ld->pict_scal = 1; /* use spatial scalability in this picture */  lltempref = getbits(10);  flushbits(1);  llx0 = getbits(15);  if (llx0>=16384)    llx0-= 32768;  flushbits(1);  lly0 = getbits(15);  if (lly0>=16384)    lly0-= 32768;  stwc_table_index = getbits(2);  llprog_frame = getbits(1);  llfieldsel = getbits(1);  if (verbose>0)  {    printf("picture spatial scalable extension (byte %d)\n",(pos>>3)-4);    if (verbose>1)    {      printf("  lower_layer_temporal_reference=%d\n",lltempref);      printf("  lower_layer_horizontal_offset=%d\n",llx0);      printf("  lower_layer_vertical_offset=%d\n",lly0);      printf("  spatial_temporal_weight_code_table_index=%d\n",        stwc_table_index);      printf("  lower_layer_progressive_frame=%d\n",llprog_frame);      printf("  lower_layer_deinterlaced_field_select=%d\n",llfieldsel);    }  }}/* decode picture temporal scalable extension * * not implemented */static void picture_temporal_scalable_extension(){  error("temporal scalability not supported\n");}/* decode extra bit information */static void ext_bit_info(){  while (getbits1())    flushbits(8);}

⌨️ 快捷键说明

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