Exemple #1
0
/****************************************************************************
  Non static functions
****************************************************************************/
int32_t get_next_nal_unit(nal_unit * nalu)
{
  int32_t i, segment_start;
  int32_t nalu_size = 0;

  // search for the next NALU start
  for (;;) {
    if (input_remain <= 4)
      return 0;		//scan the ring BUF
    
    if ((!ring_buf[ring_pos]) &&
	(!ring_buf[(ring_pos + 1) & RING_MOD]) &&
	(!ring_buf[(ring_pos + 2) & RING_MOD]) &&
	(ring_buf[(ring_pos + 3) & RING_MOD] == 1))
      break;
    gnn_advance();
  }

  for (i = 0; i < 4; ++i)
    gnn_advance();
  
  // add bytes to the NALU until the end is found
  segment_start = ring_pos;

  while (input_remain) {
    if ((!ring_buf[ring_pos]) &&
	(!ring_buf[(ring_pos + 1) & RING_MOD]) &&
	(!ring_buf[(ring_pos + 2) & RING_MOD]))
      break;
    
    ring_pos = (ring_pos + 1) & RING_MOD;
    --input_remain;
    if (ring_pos == 0) {
      gnn_add_segment(RING_BUF_SIZE);
      input_read(&ring_buf[HALF_RING], HALF_RING);
    }
    if (ring_pos == HALF_RING) {
      gnn_add_segment(HALF_RING);
      input_read(&ring_buf[0], HALF_RING);
    }
  }
  gnn_add_segment(ring_pos);

  if (!nalu_size)
    return 0;

  // read the NAL unit
  nal_pos[0] = 0;
  nal_bit[0] = 0;
  nalu->forbidden_zero_bit = input_get_bits(1);
  nalu->nal_ref_idc = input_get_bits(2);
  nalu->nal_unit_type = input_get_bits(5);
  nalu->last_rbsp_byte = &nal_buf[0][nalu_size - 1];
  nalu->NumBytesInNALunit = nalu_size;
    
  EBSPtoRBSP(nal_buf[0],nalu_size,0);

  return 1;
}
Exemple #2
0
Fichier : nalu.c Projet : VVer/JM86
int NALUtoRBSP (NALU_t *nalu)
{
  assert (nalu != NULL);

  nalu->len = EBSPtoRBSP (nalu->buf, nalu->len, 1) ; 

  return nalu->len ;
}
unsigned char *remove_03emu(unsigned char *from, unsigned char *to)
{
	int num=to-from;
	int newsize = EBSPtoRBSP (from,num,0); //TODO: Do something if newsize == -1 (broken NAL)
	if (newsize==-1)
		return NULL;
	return from+newsize;
}
int NALUtoRBSP (NALU_t *nalu)
{
  assert (nalu != NULL);	//++ È·±£nalu²»Îª¿Õ

  nalu->len = EBSPtoRBSP (nalu->buf, nalu->len, 1) ; 

  return nalu->len ;
}
AVCDec_Status BitstreamInit(AVCDecBitstream *stream, uint8 *buffer, int size)
{
    EBSPtoRBSP(buffer, &size);

    stream->incnt = 0;
    stream->incnt_next = 0;
    stream->bitcnt = 0;
    stream->curr_word = stream->next_word = 0;
    stream->read_pos = 0;

    stream->bitstreamBuffer = buffer;

    stream->data_end_pos = size;

    stream->nal_size = size;

    return AVCDEC_SUCCESS;
}