static int _commentheader_out(vcedit_state *state, ogg_packet *op) { vorbis_comment *vc = state->vc; char *vendor = state->vendor; oggpack_buffer opb; oggpack_writeinit(&opb); if (state->oggtype == VCEDIT_IS_OGGVORBIS) { /* preamble */ oggpack_write(&opb,0x03,8); _v_writestring(&opb,"vorbis", 6); } /* vendor */ oggpack_write(&opb,strlen(vendor),32); _v_writestring(&opb,vendor, strlen(vendor)); /* comments */ oggpack_write(&opb,vc->comments,32); if(vc->comments){ int i; for(i=0;i<vc->comments;i++){ if(vc->user_comments[i]){ oggpack_write(&opb,vc->comment_lengths[i],32); _v_writestring(&opb,vc->user_comments[i], vc->comment_lengths[i]); }else{ oggpack_write(&opb,0,32); } } } oggpack_write(&opb,1,1); op->packet = _ogg_malloc(oggpack_bytes(&opb)); memcpy(op->packet, opb.buffer, oggpack_bytes(&opb)); op->bytes=oggpack_bytes(&opb); op->b_o_s=0; op->e_o_s=0; op->granulepos=0; if (state->oggtype == VCEDIT_IS_OGGVORBIS) { op->packetno = 1; } oggpack_writeclear(&opb); return 0; }
int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op){ oggpack_buffer opb; oggpack_writeinit(&opb); if(_vorbis_pack_comment(&opb,vc)){ oggpack_writeclear(&opb); return OV_EIMPL; } op->packet = _ogg_malloc(oggpack_bytes(&opb)); memcpy(op->packet, opb.buffer, oggpack_bytes(&opb)); op->bytes=oggpack_bytes(&opb); op->b_o_s=0; op->e_o_s=0; op->granulepos=0; op->packetno=1; oggpack_writeclear(&opb); return 0; }
int vorbis_block_clear(vorbis_block *vb){ int i; vorbis_block_internal *vbi=vb->internal; _vorbis_block_ripcord(vb); if(vb->localstore)_ogg_free(vb->localstore); if(vbi){ for(i=0;i<PACKETBLOBS;i++){ oggpack_writeclear(vbi->packetblob[i]); if(i!=PACKETBLOBS/2)_ogg_free(vbi->packetblob[i]); } _ogg_free(vbi); } memset(vb,0,sizeof(*vb)); return(0); }
int vorbis_block_clear(vorbis_block *vb){ if(vb->vd) if(vb->vd->analysisp) oggpack_writeclear(&vb->opb); _vorbis_block_ripcord(vb); if(vb->localstore)_ogg_free(vb->localstore); if(vb->internal){ vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal; if(vbi->packet_markers)_ogg_free(vbi->packet_markers); _ogg_free(vb->internal); } memset(vb,0,sizeof(*vb)); return(0); }
static bool write_comments (vcedit_state *s, ogg_packet *packet) { oggpack_buffer opb; size_t len; int i; ogg_packet_init (packet, NULL, 0); oggpack_writeinit (&opb); /* preamble */ oggpack_write (&opb, 0x03, 8); _v_writestring (&opb, "vorbis", 6); /* vendor */ len = strlen (s->vendor); oggpack_write (&opb, len, 32); _v_writestring (&opb, s->vendor, len); /* comments */ oggpack_write (&opb, s->vc.comments, 32); for (i = 0; i < s->vc.comments; i++) if (!s->vc.user_comments[i]) oggpack_write (&opb, 0, 32); else { oggpack_write (&opb, s->vc.comment_lengths[i], 32); _v_writestring (&opb, s->vc.user_comments[i], s->vc.comment_lengths[i]); } oggpack_write (&opb, 1, 1); packet->bytes = oggpack_bytes (&opb); packet->packet = _ogg_malloc (packet->bytes); if (!packet->packet) return false; memcpy (packet->packet, opb.buffer, packet->bytes); oggpack_writeclear (&opb); return true; }
/* build the comment header packet from the passed metadata */ int theora_encode_comment(theora_comment *tc, ogg_packet *op) { const char *vendor = theora_version_string(); const int vendor_length = strlen(vendor); oggpack_buffer *opb; opb = _ogg_malloc(sizeof(oggpack_buffer)); oggpackB_writeinit(opb); oggpackB_write(opb, 0x81, 8); _tp_writebuffer(opb, "theora", 6); _tp_writelsbint(opb, vendor_length); _tp_writebuffer(opb, vendor, vendor_length); _tp_writelsbint(opb, tc->comments); if(tc->comments){ int i; for(i=0;i<tc->comments;i++){ if(tc->user_comments[i]){ _tp_writelsbint(opb,tc->comment_lengths[i]); _tp_writebuffer(opb,tc->user_comments[i],tc->comment_lengths[i]); }else{ oggpackB_write(opb,0,32); } } } op->bytes=oggpack_bytes(opb); /* So we're expecting the application will free this? */ op->packet=_ogg_malloc(oggpack_bytes(opb)); memcpy(op->packet, oggpack_get_buffer(opb), oggpack_bytes(opb)); oggpack_writeclear(opb); _ogg_free(opb); op->b_o_s=0; op->e_o_s=0; op->packetno=0; op->granulepos=0; return (0); }
static int _commentheader_out(vorbis_comment *vc, char *vendor, ogg_packet *op) { oggpack_buffer opb; oggpack_writeinit(&opb); /* preamble */ oggpack_write(&opb,0x03,8); _v_writestring(&opb,"vorbis", 6); /* vendor */ oggpack_write(&opb,strlen(vendor),32); _v_writestring(&opb,vendor, strlen(vendor)); /* comments */ oggpack_write(&opb,vc->comments,32); if(vc->comments){ int i; for(i=0;i<vc->comments;i++){ if(vc->user_comments[i]){ oggpack_write(&opb,vc->comment_lengths[i],32); _v_writestring(&opb,vc->user_comments[i], vc->comment_lengths[i]); }else{ oggpack_write(&opb,0,32); } } } oggpack_write(&opb,1,1); op->packet = malloc(oggpack_bytes(&opb)); memcpy(op->packet, opb.buffer, oggpack_bytes(&opb)); op->bytes=oggpack_bytes(&opb); op->b_o_s=0; op->e_o_s=0; op->granulepos=0; oggpack_writeclear(&opb); return 0; }
void rebuilder::rebuild_id_header( int channels, int rate, int blocksize_short, int blocksize_long, ogg_packet_holder & packet) { // Identification header oggpack_buffer opb; oggpack_writeinit(&opb); // Preamble oggpack_write(&opb, 0x01, 8); oggpack_write_string(&opb, "vorbis"); // Basic information about the stream. oggpack_write(&opb, 0x00, 32); oggpack_write(&opb, channels, 8); oggpack_write(&opb, rate, 32); // Bitrate upper, nominal and lower. // All are optional and we do not provide them. oggpack_write(&opb, 0, 32); oggpack_write(&opb, 0, 32); oggpack_write(&opb, 0, 32); oggpack_write(&opb, ilog2(blocksize_short), 4); oggpack_write(&opb, ilog2(blocksize_long), 4); oggpack_write(&opb, 1, 1); CHECK(oggpack_writecheck(&opb) == 0); packet.assign(opb.buffer, oggpack_bytes(&opb)); packet->b_o_s = 1; packet->e_o_s = 0; packet->granulepos = 0; packet->packetno = 0; oggpack_writeclear(&opb); }
int BURGERCALL vorbis_analysis_headerout(vorbis_dsp_state *v, vorbis_comment *vc, ogg_packet *op, ogg_packet *op_comm, ogg_packet *op_code){ int ret=OV_EIMPL; vorbis_info *vi=v->vi; oggpack_buffer opb; backend_lookup_state *b=static_cast<backend_lookup_state *>(v->backend_state); if(!b){ ret=OV_EFAULT; goto err_out; } /* first header packet **********************************************/ oggpack_writeinit(&opb); if(_vorbis_pack_info(&opb,vi))goto err_out; /* build the packet */ if(b->header)DeallocAPointer(b->header); b->header=static_cast<Word8 *>(AllocAPointer(oggpack_bytes(&opb))); FastMemCpy(b->header,opb.buffer,oggpack_bytes(&opb)); op->packet=b->header; op->bytes=oggpack_bytes(&opb); op->b_o_s=1; op->e_o_s=0; op->granulepos=0; /* second header packet (comments) **********************************/ oggpack_reset(&opb); if(_vorbis_pack_comment(&opb,vc))goto err_out; if(b->header1)DeallocAPointer(b->header1); b->header1=static_cast<Word8 *>(AllocAPointer(oggpack_bytes(&opb))); FastMemCpy(b->header1,opb.buffer,oggpack_bytes(&opb)); op_comm->packet=b->header1; op_comm->bytes=oggpack_bytes(&opb); op_comm->b_o_s=0; op_comm->e_o_s=0; op_comm->granulepos=0; /* third header packet (modes/codebooks) ****************************/ oggpack_reset(&opb); if(_vorbis_pack_books(&opb,vi))goto err_out; if(b->header2)DeallocAPointer(b->header2); b->header2=static_cast<Word8 *>(AllocAPointer(oggpack_bytes(&opb))); FastMemCpy(b->header2,opb.buffer,oggpack_bytes(&opb)); op_code->packet=b->header2; op_code->bytes=oggpack_bytes(&opb); op_code->b_o_s=0; op_code->e_o_s=0; op_code->granulepos=0; oggpack_writeclear(&opb); return(0); err_out: oggpack_writeclear(&opb); FastMemSet(op,0,sizeof(*op)); FastMemSet(op_comm,0,sizeof(*op_comm)); FastMemSet(op_code,0,sizeof(*op_code)); if(b->header)DeallocAPointer(b->header); if(b->header1)DeallocAPointer(b->header1); if(b->header2)DeallocAPointer(b->header2); b->header=NULL; b->header1=NULL; b->header2=NULL; return(ret); }
int vorbis_analysis_headerout(vorbis_dsp_state *v, vorbis_comment *vc, ogg_packet *op, ogg_packet *op_comm, ogg_packet *op_code){ int ret=OV_EIMPL; vorbis_info *vi=v->vi; oggpack_buffer opb; private_state *b=v->backend_state; if(!b){ ret=OV_EFAULT; goto err_out; } /* first header packet **********************************************/ oggpack_writeinit(&opb); if(_vorbis_pack_info(&opb,vi))goto err_out; /* build the packet */ if(b->header)_ogg_free(b->header); b->header=_ogg_malloc(oggpack_bytes(&opb)); memcpy(b->header,opb.buffer,oggpack_bytes(&opb)); op->packet=b->header; op->bytes=oggpack_bytes(&opb); op->b_o_s=1; op->e_o_s=0; op->granulepos=0; op->packetno=0; /* second header packet (comments) **********************************/ oggpack_reset(&opb); if(_vorbis_pack_comment(&opb,vc))goto err_out; if(b->header1)_ogg_free(b->header1); b->header1=_ogg_malloc(oggpack_bytes(&opb)); memcpy(b->header1,opb.buffer,oggpack_bytes(&opb)); op_comm->packet=b->header1; op_comm->bytes=oggpack_bytes(&opb); op_comm->b_o_s=0; op_comm->e_o_s=0; op_comm->granulepos=0; op_comm->packetno=1; /* third header packet (modes/codebooks) ****************************/ oggpack_reset(&opb); if(_vorbis_pack_books(&opb,vi))goto err_out; if(b->header2)_ogg_free(b->header2); b->header2=_ogg_malloc(oggpack_bytes(&opb)); memcpy(b->header2,opb.buffer,oggpack_bytes(&opb)); op_code->packet=b->header2; op_code->bytes=oggpack_bytes(&opb); op_code->b_o_s=0; op_code->e_o_s=0; op_code->granulepos=0; op_code->packetno=2; oggpack_writeclear(&opb); return(0); err_out: memset(op,0,sizeof(*op)); memset(op_comm,0,sizeof(*op_comm)); memset(op_code,0,sizeof(*op_code)); if(b){ oggpack_writeclear(&opb); if(b->header)_ogg_free(b->header); if(b->header1)_ogg_free(b->header1); if(b->header2)_ogg_free(b->header2); b->header=NULL; b->header1=NULL; b->header2=NULL; } return(ret); }
TarkinError tarkin_analysis_headerout (TarkinStream * v, TarkinComment * vc, ogg_packet * op, ogg_packet * op_comm, ogg_packet * op_code) { int ret = -TARKIN_NOT_IMPLEMENTED; TarkinInfo *vi; oggpack_buffer opb; tarkin_header_store *b = &v->headers; vi = v->ti; /* first header packet ********************************************* */ oggpack_writeinit (&opb); if (_tarkin_pack_info (&opb, vi)) goto err_out; /* build the packet */ if (b->header) FREE (b->header); b->header = MALLOC (oggpack_bytes (&opb)); memcpy (b->header, opb.buffer, oggpack_bytes (&opb)); op->packet = b->header; op->bytes = oggpack_bytes (&opb); op->b_o_s = 1; op->e_o_s = 0; op->granulepos = 0; /* second header packet (comments) ********************************* */ oggpack_reset (&opb); if (_tarkin_pack_comment (&opb, vc)) goto err_out; if (b->header1) FREE (b->header1); b->header1 = MALLOC (oggpack_bytes (&opb)); memcpy (b->header1, opb.buffer, oggpack_bytes (&opb)); op_comm->packet = b->header1; op_comm->bytes = oggpack_bytes (&opb); op_comm->b_o_s = 0; op_comm->e_o_s = 0; op_comm->granulepos = 0; /* third header packet (modes/codebooks) *************************** */ oggpack_reset (&opb); if (_tarkin_pack_layer_desc (&opb, vi)) goto err_out; if (b->header2) FREE (b->header2); b->header2 = MALLOC (oggpack_bytes (&opb)); memcpy (b->header2, opb.buffer, oggpack_bytes (&opb)); op_code->packet = b->header2; op_code->bytes = oggpack_bytes (&opb); op_code->b_o_s = 0; op_code->e_o_s = 0; op_code->granulepos = 0; oggpack_writeclear (&opb); return (0); err_out: oggpack_writeclear (&opb); memset (op, 0, sizeof (*op)); memset (op_comm, 0, sizeof (*op_comm)); memset (op_code, 0, sizeof (*op_code)); if (b->header) FREE (b->header); if (b->header1) FREE (b->header1); if (b->header2) FREE (b->header2); b->header = NULL; b->header1 = NULL; b->header2 = NULL; return (ret); }
JNIEXPORT void JNICALL Java_org_echocat_jogg_OggPackBufferJNI_writeclear (JNIEnv *env, jclass thisClass, jlong handle) { oggpack_writeclear((oggpack_buffer*) handle); }