// uses the local ogg_stream storage in vf; this is important for
// non-streaming input sources
public int fetch_headers(Info vi, Comment vc, int[] serialno, Page og_ptr, VorbisFileInstance instance)
{
//System.err.println("fetch_headers");
Page og=new Page();
Packet op=new Packet();
int ret;
if(og_ptr==null)
{
ret = get_next_page(og, CHUNKSIZE, instance);
if(ret==OV_EREAD)return OV_EREAD;
if(ret<0) return OV_ENOTVORBIS;
og_ptr=og;
}
if(serialno!=null)serialno[0]=og_ptr.serialno();
instance.os.init(og_ptr.serialno());
// extract the initial header from the first page and verify that the
// Ogg bitstream is in fact Vorbis data
vi.init();
vc.init();
int i=0;
while(i<3)
{
instance.os.pagein(og_ptr);
while(i<3)
{
int result = instance.os.packetout(op);
if(result==0)break;
if(result==-1)
{
Console.Error.WriteLine("Corrupt header in logical bitstream.");
//goto bail_header;
vi.clear();
vc.clear();
instance.os.clear();
return -1;
}
if(vi.synthesis_headerin(vc, op)!=0)
{
Console.Error.WriteLine("Illegal header in logical bitstream.");
//goto bail_header;
vi.clear();
vc.clear();
instance.os.clear();
return -1;
}
i++;
}
if(i<3)
if(get_next_page(og_ptr, 1, instance)<0)
{
Console.Error.WriteLine("Missing header in logical bitstream.");
//goto bail_header;
vi.clear();
vc.clear();
instance.os.clear();
return -1;
}
}
return 0;
}