Exemplo n.º 1
0
static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
  int i;
  int vendorlen=oggpack_read(opb,32);
  if(vendorlen<0)goto err_out;
  vc->vendor=(char *)_ogg_calloc(vendorlen+1,1);
  _v_readstring(opb,vc->vendor,vendorlen);
  vc->comments=oggpack_read(opb,32);
  if(vc->comments<0)goto err_out;
  vc->user_comments=(char **)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
  vc->comment_lengths=(int *)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
	    
  for(i=0;i<vc->comments;i++){
    int len=oggpack_read(opb,32);
    if(len<0)goto err_out;
	vc->comment_lengths[i]=len;
    vc->user_comments[i]=(char *)_ogg_calloc(len+1,1);
    _v_readstring(opb,vc->user_comments[i],len);
  }	  
  if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */

  return(0);
 err_out:
  vorbis_comment_clear(vc);
  return(OV_EBADHEADER);
}
static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
  int i;
  int vendorlen;
  vendorlen=oggpack_read(opb,32);
  if(vendorlen<0)goto err_out;
  if(vendorlen>opb->storage-oggpack_bytes(opb))goto err_out;
  vc->vendor=(char *)_ogg_calloc(vendorlen+1,1);
  if(vc->vendor==NULL)goto err_out;
  _v_readstring(opb,vc->vendor,vendorlen);
  i=oggpack_read(opb,32);
  if(i<0||i>=INT_MAX||i>(opb->storage-oggpack_bytes(opb))>>2)goto err_out;
  vc->user_comments=(char **)_ogg_calloc(i+1,sizeof(*vc->user_comments));
  vc->comment_lengths=(int *)_ogg_calloc(i+1, sizeof(*vc->comment_lengths));
  if(vc->user_comments==NULL||vc->comment_lengths==NULL)goto err_out;
  vc->comments=i;

  for(i=0;i<vc->comments;i++){
    int len=oggpack_read(opb,32);
    if(len<0||len>opb->storage-oggpack_bytes(opb))goto err_out;
    vc->comment_lengths[i]=len;
    vc->user_comments[i]=(char *)_ogg_calloc(len+1,1);
    if(vc->user_comments[i]==NULL){
      vc->comments=i;
      goto err_out;
    }
    _v_readstring(opb,vc->user_comments[i],len);
  }
  if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */

  return(0);
 err_out:
  vorbis_comment_clear(vc);
  return(OV_EBADHEADER);
}
Exemplo n.º 3
0
static int BURGERCALL _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
	int i;
	int vendorlen=oggpack_read(opb,32);
	if(vendorlen>=0) {
		vc->vendor=static_cast<char *>(AllocAPointerClear(vendorlen+1));
		_v_readstring(opb,vc->vendor,vendorlen);
		vc->comments=oggpack_read(opb,32);
		if(vc->comments>=0) {
			vc->user_comments=static_cast<char **>(AllocAPointerClear((vc->comments+1)*sizeof(*vc->user_comments)));
			vc->comment_lengths=static_cast<int *>(AllocAPointerClear((vc->comments+1)*sizeof(*vc->comment_lengths)));

			for(i=0;i<vc->comments;i++){
				int len=oggpack_read(opb,32);
				if(len<0)goto err_out;
				vc->comment_lengths[i]=len;
				vc->user_comments[i]=static_cast<char *>(AllocAPointerClear(len+1));
				_v_readstring(opb,vc->user_comments[i],len);
			}	  
			if (oggpack_read1(opb)==1) {/* EOP check */
				return(0);
			}
		}
	}
err_out:
	vorbis_comment_clear(vc);
	return(OV_EBADHEADER);
}
Exemplo n.º 4
0
TarkinError
tarkin_synthesis_headerin (TarkinInfo * vi, TarkinComment * vc, ogg_packet * op)
{
  oggpack_buffer opb;

  if (op) {
    oggpack_readinit (&opb, op->packet, op->bytes);

    /* Which of the three types of header is this? */
    /* Also verify header-ness, tarkin */
    {
      char buffer[6];
      int packtype = oggpack_read (&opb, 8);

      memset (buffer, 0, 6);
      _v_readstring (&opb, buffer, 6);
      if (memcmp (buffer, "tarkin", 6)) {
        /* not a tarkin header */
        return (-TARKIN_NOT_TARKIN);
      }
      switch (packtype) {
        case 0x01:             /* least significant *bit* is read first */
          if (!op->b_o_s) {
            /* Not the initial packet */
            return (-TARKIN_BAD_HEADER);
          }
          if (vi->inter.numerator != 0) {
            /* previously initialized info header */
            return (-TARKIN_BAD_HEADER);
          }

          return (_tarkin_unpack_info (vi, &opb));

        case 0x03:             /* least significant *bit* is read first */
          if (vi->inter.denominator == 0) {
            /* um... we didn't get the initial header */
            return (-TARKIN_BAD_HEADER);
          }

          return (_tarkin_unpack_comment (vc, &opb));

        case 0x05:             /* least significant *bit* is read first */
          if (vi->inter.numerator == 0 || vc->vendor == NULL) {
            /* um... we didn;t get the initial header or comments yet */
            return (-TARKIN_BAD_HEADER);
          }

          return (_tarkin_unpack_layer_desc (vi, &opb));

        default:
          /* Not a valid tarkin header type */
          return (-TARKIN_BAD_HEADER);
          break;
      }
    }
  }
  return (-TARKIN_BAD_HEADER);
}
Exemplo n.º 5
0
static int
_tarkin_unpack_comment (TarkinComment * vc, oggpack_buffer * opb)
{
  int i;
  int vendorlen = oggpack_read (opb, 32);

#ifdef DBG_OGG
  printf ("dbg_ogg: Decoding comment: ");
#endif
  if (vendorlen < 0)
    goto err_out;
  vc->vendor = _ogg_calloc (vendorlen + 1, 1);
  _v_readstring (opb, vc->vendor, vendorlen);
  vc->comments = oggpack_read (opb, 32);
  if (vc->comments < 0)
    goto err_out;
  vc->user_comments =
      _ogg_calloc (vc->comments + 1, sizeof (*vc->user_comments));
  vc->comment_lengths =
      _ogg_calloc (vc->comments + 1, sizeof (*vc->comment_lengths));

  for (i = 0; i < vc->comments; i++) {
    int len = oggpack_read (opb, 32);

    if (len < 0)
      goto err_out;
    vc->comment_lengths[i] = len;
    vc->user_comments[i] = _ogg_calloc (len + 1, 1);
    _v_readstring (opb, vc->user_comments[i], len);
  }
  if (oggpack_read (opb, 1) != 1)
    goto err_out;               /* EOP check */

#ifdef DBG_OGG
  printf ("Success, read %d comments\n", vc->comments);
#endif
  return (0);
err_out:
#ifdef DBG_OGG
  printf ("Failed\n");
#endif
  tarkin_comment_clear (vc);
  return (-TARKIN_BAD_HEADER);
}
Exemplo n.º 6
0
int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
  oggpack_buffer opb;
  
  if(op){
    oggpack_readinit(&opb,op->packet);

    /* Which of the three types of header is this? */
    /* Also verify header-ness, vorbis */
    {
      char buffer[6];
      int packtype=oggpack_read(&opb,8);
      memset(buffer,0,6);
      _v_readstring(&opb,buffer,6);
      if(memcmp(buffer,"vorbis",6)){
	/* not a vorbis header */
	return(OV_ENOTVORBIS);
      }
      switch(packtype){
      case 0x01: /* least significant *bit* is read first */
	if(!op->b_o_s){
	  /* Not the initial packet */
	  return(OV_EBADHEADER);
	}
	if(vi->rate!=0){
	  /* previously initialized info header */
	  return(OV_EBADHEADER);
	}

	return(_vorbis_unpack_info(vi,&opb));

      case 0x03: /* least significant *bit* is read first */
	if(vi->rate==0){
	  /* um... we didn't get the initial header */
	  return(OV_EBADHEADER);
	}

	return(_vorbis_unpack_comment(vc,&opb));

      case 0x05: /* least significant *bit* is read first */
	if(vi->rate==0 || vc->vendor==NULL){
	  /* um... we didn;t get the initial header or comments yet */
	  return(OV_EBADHEADER);
	}

	return(_vorbis_unpack_books(vi,&opb));

      default:
	/* Not a valid vorbis header type */
	return(OV_EBADHEADER);
	break;
      }
    }
  }
  return(OV_EBADHEADER);
}
Exemplo n.º 7
0
int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op,unsigned int newpack)
{
 int packtype;
 oggpack_buffer opb;
 char buffer[6];

 if(op){
  if(newpack)
   oggpack_readinit(&opb,op->packet,op->bytes);

  packtype=oggpack_read24(&opb,8);
  _v_readstring(&opb,buffer,6);
  if(memcmp(buffer,"vorbis",6)!=0)
   return(OV_ENOTVORBIS);

  switch(packtype){
   case 0x01:
	if(!op->b_o_s)
	  return(OV_EBADHEADER);
	if(vi->rate!=0)
	  return(OV_EBADHEADER);

	return(_vorbis_unpack_info(vi,&opb));

   case 0x03:
	if(vi->rate==0)
	  return(OV_EBADHEADER);

#ifdef MPXPLAY
        if(!newpack)
         _vorbis_skip_comment(&opb);
        return(0); // comments are readed at Ogg demuxing in Mpxplay
#else
	return(_vorbis_unpack_comment(vc,&opb));
#endif

   case 0x05:
	if(vi->rate==0)
	  return(OV_EBADHEADER);
#ifndef MPXPLAY
        if(vc->vendor==NULL)
	  return(OV_EBADHEADER);
#endif

	return(_vorbis_unpack_books(vi,&opb));

   default:
	return(OV_EBADHEADER);
	break;
  }
 }
 return(OV_EBADHEADER);
}
Exemplo n.º 8
0
static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
  int vendorlen;
  vendorlen=oggpack_read(opb,32);
  if(vendorlen<0)goto err_out;
  if(vendorlen>opb->storage-oggpack_bytes(opb))goto err_out;
  vc->vendor=(char *)_ogg_calloc(vendorlen+1,1);
  if(vc->vendor==NULL)goto err_out;
  _v_readstring(opb,vc->vendor,vendorlen);
  vc->comments=0;
  /* ROCKBOX: the meat of this function was deleted as we don't need it */
  return(0);
 err_out:
  vorbis_comment_clear(vc);
  return(OV_EBADHEADER);
}
Exemplo n.º 9
0
Arquivo: info.c Projeto: vvs-/OpenTomb
/* Is this packet a vorbis ID header? */
int vorbis_synthesis_idheader(ogg_packet *op){
  oggpack_buffer opb;
  char buffer[6];

  if(op){
    oggpack_readinit(&opb,op->packet,op->bytes);

    if(!op->b_o_s)
      return(0); /* Not the initial packet */

    if(oggpack_read(&opb,8) != 1)
      return 0; /* not an ID header */

    memset(buffer,0,6);
    _v_readstring(&opb,buffer,6);
    if(memcmp(buffer,"vorbis",6))
      return 0; /* not vorbis */

    return 1;
  }

  return 0;
}