Intentionez sa suprascriu functiile de citire din fisier a informatiilor ce urmeaza a fi decodate de libraria vorbis. Pentru asta folosesc ov_open_callbacks pusa la dispozitie de vorbis. Initial am folosit o structura de tip FILE,a mers like charmed, insa acum vreau sa folosesc un obiect de tip ifstream pentru citirea informatiilor. Am definit functiile ce mi le cere vorbis astfel:
Cod sursă:
size_t COggStream::VorbisRead(void *ptr,
size_t byteSize,
size_t sizeToRead,
void *datasource)
{
COggStream *pOggStream = (COggStream*)datasource;
pOggStream->oggFile.read((char*)ptr, byteSize*sizeToRead);
int actuallyRead = pOggStream->oggFile.gcount();
return actuallyRead;
}
int COggStream::VorbisSeek(void *datasource,
ogg_int64_t offset,
int whence)
{
COggStream *pOggStream = (COggStream*)datasource;
pOggStream->oggFile.seekg(offset, whence);
return 0;
}
int COggStream::VorbisClose(void *datasource)
{
COggStream *pOggStream = (COggStream*)datasource;
pOggStream->oggFile.close();
return 1;
}
long COggStream::VorbisTell(void *datasource)
{
COggStream *pOggStream = (COggStream*)datasource;
long currentPos = pOggStream->oggFile.tellg();
return currentPos;
}
Insa codul nu pare sa functioneze. ov_open_callbacks se blocheaza functia VorbisRead fiind apelata continuu. Ce imi scapa de nu functioneaza codul?