示例#1
0
void slice()
{
  slice_vertical_position = getbits(8);
  zprintf(3, "\nslice_start_code = 0x000001%02X\n", slice_vertical_position);
  if (vertical_size > 2800)
  {
    slice_vertical_position_extension = getbits(3);
    zprintf(3, "  slice_vertical_position_extension = %d\n", slice_vertical_position_extension);
	 mb_row = (slice_vertical_position_extension << 7) + slice_vertical_position - 1;
  }
  else
	 mb_row = slice_vertical_position - 1;
  previous_macroblock_address = (mb_row * mb_width) - 1;

  if (sequence_scalable_extension_present == 1)
    if (scalable_mode == DATA_PARTITIONING)
      zprintf(3, "  priority_breakpoint = %d\n", getbits(7));
  zprintf(3, "  quantiser_scale_code = %d\n", getbits(5));
  if (nextbits(1) == 1)
  {
    zprintf(3, "  intra_slice_flag = %d\n", get1bit());
    zprintf(3, "  intra_slice = %d\n", get1bit());
    zprintf(3, "  reserve_bits = %d\n", getbits(7));
    while (nextbits(1) == 1)
    {
      zprintf(3, "  extra_bit_slice = %d\n", get1bit());
      zprintf(3, "  extra_information_slice = %d\n", getbits(8));
    }
  }
  zprintf(3, "  extra_bit_slice = %d\n", get1bit());
//  do
//    macroblock();
//  while (nextbits(23) != 0);
  next_start_code();
}
示例#2
0
void picture_data()
{
  do
    slice();
  while (nextbits(8) > 0 && nextbits(8) < 0xB0);
//  next_start_code();
}
static int FUNC(slice_header)(CodedBitstreamContext *ctx, RWContext *rw,
                              MPEG2RawSliceHeader *current)
{
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
    int err;

    HEADER("Slice Header");

    ui(8, slice_vertical_position);

    if (mpeg2->vertical_size > 2800)
        ui(3, slice_vertical_position_extension);
    if (mpeg2->scalable) {
        if (mpeg2->scalable_mode == 0)
            ui(7, priority_breakpoint);
    }

    ui(5, quantiser_scale_code);

    if (nextbits(1, 1, current->slice_extension_flag)) {
        ui(1, slice_extension_flag);
        ui(1, intra_slice);
        ui(1, slice_picture_id_enable);
        ui(6, slice_picture_id);

        {
            size_t k;
#ifdef READ
            GetBitContext start;
            uint8_t bit;
            start = *rw;
            for (k = 0; nextbits(1, 1, bit); k++)
                skip_bits(rw, 8);
            current->extra_information_length = k;
            if (k > 0) {
                *rw = start;
                current->extra_information =
                    av_malloc(current->extra_information_length);
                if (!current->extra_information)
                    return AVERROR(ENOMEM);
                for (k = 0; k < current->extra_information_length; k++) {
                    xui(1, extra_bit_slice, bit, 0);
                    xui(8, extra_information_slice[k],
                        current->extra_information[k], 1, k);
                }
            }
#else
            for (k = 0; k < current->extra_information_length; k++) {
                xui(1, extra_bit_slice, 1, 0);
                xui(8, extra_information_slice[k],
                    current->extra_information[k], 1, k);
            }
#endif
        }
    }
    ui(1, extra_bit_slice);

    return 0;
}
示例#4
0
void extension_and_user_data(int i)
{
  while ((nextbits(8) == EXTENSION_START_CODE) ||
         (nextbits(8) == USER_DATA_START_CODE))
  {
    if (i != 1)
      if (nextbits(8) == EXTENSION_START_CODE)
        extension_data(i);
    if (nextbits(8) == USER_DATA_START_CODE)
      user_data();
  }
}
示例#5
0
void picture_header()
{
  int i;

  zprintf(1, "\npicture_header = 0x000001%02X\n", getbits(8));
  zprintf(2, "  temporal_reference = %d\n", getbits(10));
  i = getbits(3);
  zprintf(2, "  picture_coding_type = %d\n", i);
  zprintf(2, "  vbv_delay = %d\n", getbits(16));
  if (i == 2 || i == 3)
  {
    zprintf(2, "  full_pel_forward_vector = %d\n", get1bit());
    zprintf(2, "  forward_f_code = %d\n", getbits(3));
  }
  if (i == 3)
  {
    zprintf(2, "  full_pel_backward_vector = %d\n", get1bit());
    zprintf(2, "  backward_f_code = %d\n", getbits(3));
  }
  while (nextbits(1) == 1)
  {
    zprintf(2, "  extra_bit_picture = %d\n", get1bit());
    zprintf(2, "  extra_information_picture = %d\n", getbits(8));
  }
  zprintf(2, "  extra_bit_picture = %d\n", get1bit());
  next_start_code();
}
示例#6
0
文件: bits.c 项目: anthcp/evalvid-2.7
int mark_not_coded(unsigned char *p, unsigned n, unsigned nti)
{
  unsigned sc;

  resetbits(0);

  if ((sc = nextbits(p, 32)) == SC_GVOP) {
    while (currentpos() < n - 4) {
      if (nextbits(p, 32) == SC_VOP) goto VOP;
      resetbits(currentpos() - 3);
    }
    goto NO_VOP;
  }
  if (sc != SC_VOP) goto X;
VOP:
  nextbits(p, 2);               /* VOP type */
  skipbits(p, 1);               /* modulo_time_base */
  if (!nextbits(p, 1)) goto X;  /* marker bit */
  nextbits(p, nti);             /* vop_time_increment */
  if (!nextbits(p, 1)) goto X;  /* marker bit */
  CLRBIT(p[pos_], bit_ - 1);    /* set VOP not coded */
  if (nextbits(p, 1)) goto X;   /* VOP coded ? */
NO_VOP:
  return currentpos();

X: return 0;
}
示例#7
0
void extension_data(int i)
{
  while (nextbits(8) == EXTENSION_START_CODE)
  {
    zprintf(1, "\nextension_start_code = 0x000001%02X\n", getbits(8));
    if (i == 0)
    {
      if (nextbits(4) == SEQUENCE_DISPLAY_EXTENSION_ID)
        sequence_display_extension();
      if (nextbits(4) == SEQUENCE_SCALABLE_EXTENSION_ID)
        sequence_scalable_extension();
    }
    if (i == 2)
    {
      if (nextbits(4) == QUANT_MATRIX_EXTENSION_ID)
        quant_matrix_extension();
      if (nextbits(4) == PICTURE_DISPLAY_EXTENSION_ID)
        picture_display_extension();
      if (nextbits(4) == PICTURE_SPATIAL_SCALABLE_EXTENSION_ID)
        picture_spatial_scalable_extension();
      if (nextbits(4) == PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID)
        picture_temporal_scalable_extension();
    }
  }
}
示例#8
0
void user_data()
{
  zprintf(1, "\nuser_data_start_code = 0x000001%02X\n", getbits(8));
  while (nextbits(24) != START_CODE_PREFIX)
  {
    getbits(8);
    user_data_bytes++;
  }
  next_start_code();
}
示例#9
0
int main(int argc, char* argv[])
{
  char tmpStr[256];

  col = 0;
  verbose_level = 1;
  sequence_headers = 0;
  sequence_extensions = 0;
  user_data_bytes = 0;
  sequence_scalable_extension_present = 0;
  printf("bbVINFO - version 1.7, by Brent Beyeler ([email protected])\n");
  printf("   speed increases by, Apachez and Christian Vogelgsang\n\n");
  if (argc < 2)
  {
    printf("\nbbVINFO is an MPEG video stream analyzer\n\n");
    printf("Usage: bbVINFO  MPEG video filename  <verbose level 1..3, default = 1>\n\n");
    printf("Examples:\n");
    printf("  To list all packet start codes (excluding slice codes) to file test.txt\n");
    printf("     bbVINFO test.mpg 1 > test.txt\n\n");
    printf("  To list all packets (excluding slice packets) in detail\n");
    printf("     bbVINFO test.vob 2\n\n");
    printf("  To list all packets (including slice packets) in detail to file test.txt\n");
    printf("     bbVINFO test.mpg 3 > test.txt\n\n");
	 exit (1);
  }

  init_getbits(argv[1]);
  strcpy(tmpStr, argv[1]);
//  strlwr(tmpStr);
  if (argc > 2)
  {
    sscanf(argv[2], "%d", &verbose_level);

    if (verbose_level < 1)
      verbose_level = 1;
    if (verbose_level > 3)
      verbose_level = 3;
  }

  next_start_code();
  if (getbits(8) != SEQUENCE_HEADER_CODE)
  {
    printf("\nFile is not an MPEG Video Stream\n");
    exit(1);
  }

  next_start_code();

  if (getbits(8) != EXTENSION_START_CODE)
    mpeg2 = 0;
  else
    mpeg2 = 1;

  printf("\nFile %s is an MPEG-%d video stream\n", argv[1], mpeg2 + 1);

  finish_getbits();
  init_getbits(argv[1]);

  next_start_code();
  sequence_header();

  if (mpeg2)
    sequence_extension();

  do
  {
    extension_and_user_data(0);
    do
    {
      if (nextbits(8) == GROUP_START_CODE)
      {
        group_of_pictures_header();
        extension_and_user_data(1);
      }
      picture_header();
      if (mpeg2)
        picture_coding_extension();
      extension_and_user_data(2);
      picture_data();
    } while ((nextbits(8) == PICTURE_START_CODE) ||
             (nextbits(8) == GROUP_START_CODE));
    if (nextbits(8) != SEQUENCE_END_CODE)
    {
      sequence_header();
      if (mpeg2)
        sequence_extension();
    }
  } while (nextbits(8) != SEQUENCE_END_CODE);
  zprintf(1, "\nsequence_end_code = 0x000001%02X\n", getbits(8));

  finish_getbits();
  return (0);
}
示例#10
0
int main(int argc, char* argv[])
{
  char tmpStr[256];

  col = 0;
  verbose_level = 1;
  syncwords = 0;
  printf("bbAINFO - version 1.7, by Brent Beyeler ([email protected])\n");
  printf("   speed increases by, Apachez and Christian Vogelgsang\n\n");
  if (argc < 2)
  {
    printf("\nbbAINFO is an MPEG audio stream analyzer\n");
    printf("All it realy does is list the sync word headers\n\n");
    printf("Usage: bbAINFO  MPEG audio filename\n\n");
    printf("Examples:\n");
    printf("  To list all frames to file test.txt\n");
    printf("     bbAINFO test.mpg > test.txt\n\n");
	 exit (1);
  }

  init_getbits(argv[1]);
  strcpy(tmpStr, argv[1]);
//  strlwr(tmpStr);
  if (argc > 2)
  {
    sscanf(argv[2], "%d", &verbose_level);

    if (verbose_level < 1)
      verbose_level = 1;
    if (verbose_level > 3)
      verbose_level = 3;
  }

  if (nextbits(12) != SYNCWORD)
  {
    printf("\nFile is not an MPEG Audio Stream\n");
    exit(1);
  }

  do
  {
    header();
    error_check();
    audio_data();
    ancillary_data();
  } while (!end_bs());

  printf("\nFound %u sync words\n", syncwords);
  printf("\nHeader info summary:\n");
  switch (layer)
  {
    case 0:
      printf("  layer = reserved\n");
      break;
    case LAYER_1:
      printf("  layer = 1\n");
      break;
    case LAYER_2:
      printf("  layer = 2\n");
      break;
    case LAYER_3:
      printf("  layer = 3\n");
      break;
  }
  printf("  bitrate = %d Kbps\n", bitrate_index[3 - layer][bit_rate]);
  printf("  frequency = %.1f kHz\n", frequency[freq]);
  if (protection)
    printf("  error protection = disabled\n");
  else
    printf("  error protection = enabled\n");
  printf("  private flag = %d\n", private_bit);
  switch (mode)
  {
    case 0:
      printf("  mode = stereo\n");
      break;
    case 1:
	   printf("  mode = joint_stereo (intensity_stereo and/or ms_stereo)\n");
      break;
    case 2:
	   printf("  mode = dual_channel\n");
      break;
    case 3:
	   printf("  mode = single_channel\n");
  }
  if (layer == LAYER_3)
  {
    switch (mode_ext)
    {
      case 0:
        printf("  mode ext = intensity stereo is off, ms stereo is off\n");
        break;
      case 1:
        printf("  mode ext = intensity stereo is on, ms stereo is off\n");
        break;
      case 2:
        printf("  mode ext = intensity stereo is off, ms stereo is on\n");
        break;
      case 3:
        printf("  mode ext = intensity stereo is on, ms stereo is on\n");
    }
  }
  else
  {
    if (mode == 1)
    {
      switch (mode_ext)
      {
        case 0:
          printf("  mode ext = subbands  4-31 in intensity_stereo, bound==4\n");
          break;
        case 1:
          printf("  mode ext = subbands  8-31 in intensity_stereo, bound==8\n");
          break;
        case 2:
          printf("  mode ext = subbands 12-31 in intensity_stereo, bound==12\n");
          break;
        case 3:
          printf("  mode ext = subbands 16-31 in intensity_stereo, bound==16\n");
      }
    }
  }
  printf("  copyright flag = %d\n", copyright);
  printf("  original flag = %d\n", original);
  switch (emphasis)
  {
    case 0:
      printf("  emphasis = none\n");
      break;
    case 1:
      printf("  emphasis = 50/15 microsec. emphasis\n");
      break;
    case 2:
      printf("  emphasis = reserved\n");
      break;
    case 3:
      printf("  emphasis = CCITT J.17\n");
  }
  finish_getbits();
  return (0);
}
示例#11
0
void ancillary_data()
{
  if ((layer == 1) || (layer == 2))
    while ((nextbits(12) != SYNCWORD) && !end_bs())
      get1bit();
}