sujitha
2011-Jul-08 12:38 UTC
[Vorbis] Destination buffer is always empty when calling acmstreamconvert() for converting OGG to PCM format using vorbis.acm
Hi, I tried to encode from PCM format to OGG format using vorbis.acm. It was working fine. Whereas when trying to convert from OGG to PCM format, call to acmstreamconvert() returns success but the destination buffer is always empty . I used the 0.0.3.6 version of vorbis.acm. Here is the code I am using for conversion. DWORD maxFormatSize = 0; mmr = acmMetrics( NULL, ACM_METRIC_MAX_SIZE_FORMAT, &maxFormatSize ); // define input format LPWAVEFORMATEX waveFormat = (LPWAVEFORMATEX) LocalAlloc( LPTR, maxFormatSize +sizeof( LPWAVEFORMATEX) ); waveFormat->wFormatTag = WAVE_FORMAT_PCM; waveFormat->nChannels =2; waveFormat->nSamplesPerSec = 22050; waveFormat->wBitsPerSample = 16; waveFormat->nBlockAlign =2*16/8; waveFormat->nAvgBytesPerSec = 22050*4 ; waveFormat->cbSize =0; LPWAVEFORMATEX oggFormat = (LPWAVEFORMATEX) LocalAlloc( LPTR, maxFormatSize ); oggFormat->wFormatTag =WAVE_FORMAT_VORBIS2; oggFormat->nChannels = 2; oggFormat->nSamplesPerSec = 22050; oggFormat->wBitsPerSample = 16; oggFormat->nBlockAlign =0; oggFormat->nAvgBytesPerSec =4; oggFormat->cbSize =32776; g_wavstream = NULL; mmr = acmStreamOpen( &g_wavstream, // open an ACM conversion stream driver, // querying all ACM drivers oggFormat, // converting from MP3 /*(LPWAVEFORMATEX)*/ waveFormat , // to WAV NULL, // with no filter NULL, // or async callbacks 0, // (and no data for the callback) 0 // and no flags ); LPCWSTR szFileName = DEFAULT_FILE; BYTE *pSrcData= new BYTE[2500]; char *data = new char[2500]; FILE *outf =fopen("E:\\Bomb.ogg","rb+"); LONG dwSrcBytes = fread(pSrcData,1,2500,outf); DWORD dwDst1Bytes = 0; mmr = acmStreamSize( g_wavstream, dwSrcBytes, &dwDst1Bytes, ACM_STREAMSIZEF_SOURCE); // allocate a buffer for the result of the conversion. BYTE* pDst1Data = new BYTE [dwDst1Bytes]; // fill in the conversion info ACMSTREAMHEADER strhdr; memset(&strhdr, 0, sizeof(strhdr)); strhdr.cbStruct = sizeof(strhdr); strhdr.pbSrc = pSrcData; // the source data to convert strhdr.cbSrcLength = dwSrcBytes; strhdr.pbDst = pDst1Data; strhdr.cbDstLength = dwDst1Bytes; // prep the header mmr = acmStreamPrepareHeader(g_wavstream, &strhdr, 0); // convert the data printf("Converting to intermediate PCM format...\n"); mmr = acmStreamConvert(g_wavstream, &strhdr, 0); if (mmr) { printf("Failed to do PCM to PCM conversion\n"); exit(1); } printf("Converted OK\n"); // close the stream acmStreamClose(g_wavstream, 0); What should be the values for nBlockAlign and cbSize of WAVEFORMATEX? Can I get any samples for decoding OGG format to PCM format with vorbis.acm? Thanks, Sujitha ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/vorbis/attachments/20110708/ca31962f/attachment.htm