[Matroska-devel] Halli Coreparser lib and vorbis audio
Drpark
drpark at wanadoo.fr
Sun Jul 30 16:44:32 CEST 2006
Hello everybody,
I'm new to the list,
I'm trying as an exercise to retrieve mp3 and vorbis datas from a mkv file,
for the mp3 everything is working ok, but for vorbis
I don't really know how to get the three vorbis headers sizes easily
here is my code, I don't have any problem at compile time, but my graph
can't connect,
this code is inspired from the matroska directshow filter,
this is part of the GetMediaType method
BYTE *codecPrivate = (unsigned char*)trackinf->CodecPrivate;
VORBISFORMAT2* pvf2 =
(VORBISFORMAT2*)m_mt.AllocFormatBuffer(sizeof(VORBISFORMAT2) +
tinf->CodecPrivateSize - 3);
memcpy((BYTE *)pvf2+sizeof(VORBISFORMAT2),codecPrivate+3,
trackinf->CodecPrivateSize-3);
unsigned int lastHeaderSize = trackinf->CodecPrivateSize-1;
unsigned int nbHeaders = 2;//*((unsigned int *)codecPrivate);
codecPrivate++; // 3 headers for vorbis
FILE* f;
f=fopen("salutaudio.txt","w");
fprintf(f,"salut %i",nbHeaders);
fclose(f);
while(nbHeaders)
{
unsigned int currentHeaderSize = 0;
do{
currentHeaderSize += *(unsigned int *)codecPrivate;
lastHeaderSize--;
} while((*codecPrivate++) == 0xFF);
lastHeaderSize -= currentHeaderSize;
pvf2->HeaderSize[2-nbHeaders] = currentHeaderSize;
nbHeaders--;
} //pvf2->HeaderSize[0] =
trackinf->CodecPrivate;
//pvf2->HeaderSize[1] = trackinf->CodecPrivate;
//pvf2->HeaderSize[2] = trackinf->CodecPrivateSize-1;
pvf2->HeaderSize[2-nbHeaders] = lastHeaderSize;
pvf2->Channels = trackinf->AV.Audio.Channels;
pvf2->SamplesPerSec = trackinf->AV.Audio.SamplingFreq;
pvf2->BitsPerSample = trackinf->AV.Audio.BitDepth;
m_mt.SetSampleSize(1);
Many thanks for your help
More information about the Matroska-devel
mailing list