/*
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.
*
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002
* by the Xiph.Org Foundation http://www.xiph.org/
*/
package org.xiph.libvorbis;
import org.xiph.libogg.*;
public class vorbis_comment {
// unlimited user comment fields. libvorbis writes 'libvorbis' whatever vendor is set to in encode
public byte[][] user_comments;
public int[] comment_lengths;
public int comments;
public byte[] vendor;
public vorbis_comment() {
vorbis_comment_init();
}
public void vorbis_comment_init() {
user_comments = null;
comments = 0;
vendor = null;
}
public void vorbis_comment_add(String comment) {
add(comment.getBytes());
}
private void add(byte[] comment) {
byte[][] foo = new byte[comments + 2][];
if (user_comments != null) {
System.arraycopy(user_comments, 0, foo, 0, comments);
}
user_comments = foo;
int[] goo = new int[comments + 2];
if (comment_lengths != null) {
System.arraycopy(comment_lengths, 0, goo, 0, comments);
}
comment_lengths = goo;
byte[] bar = new byte[comment.length + 1];
System.arraycopy(comment, 0, bar, 0, comment.length);
user_comments[comments] = bar;
comment_lengths[comments] = comment.length;
comments++;
user_comments[comments] = null;
}
public void vorbis_comment_add_tag(String tag, String contents) {
if (contents == null)
contents = "";
vorbis_comment_add(tag + "=" + contents);
}
public boolean vorbis_commentheader_out(ogg_packet op) {
oggpack_buffer opb = new oggpack_buffer();
if (!opb._vorbis_pack_comment(this))
return false;
// build the packet
op.packet = new byte[opb.oggpack_bytes()];
// memcpy(b->header1,opb.buffer,oggpack_bytes(&opb));
System.arraycopy(opb.buffer, 0, op.packet, 0, opb.oggpack_bytes());
op.bytes = opb.oggpack_bytes();
op.b_o_s = 0;
op.e_o_s = 0;
op.granulepos = 0;
op.packetno = 1;
return true;
}
}