int MediaEngine::getAudioSamples(u8* buffer) { if (!m_demux) { return 0; } u8 *audioFrame = 0; int headerCode1, headerCode2; int frameSize = m_demux->getNextaudioFrame(&audioFrame, &headerCode1, &headerCode2); if (frameSize == 0) { m_noAudioData = true; return 0; } int outbytes = 0; if (m_audioContext != NULL) { if (!AT3Decode(m_audioContext, audioFrame, frameSize, &outbytes, buffer)) { ERROR_LOG(ME, "AT3 decode failed during video playback"); } } if (headerCode1 == 0x24) { // it a mono atrac3plus, convert it to stereo s16 *outbuf = (s16*)buffer; s16 *inbuf = (s16*)buffer; for (int i = 0x800 - 1; i >= 0; i--) { s16 sample = inbuf[i]; outbuf[i * 2] = sample; outbuf[i * 2 + 1] = sample; } } m_audiopts += 4180; m_noAudioData = false; return 0x2000; }
int MediaEngine::getAudioSamples(u32 bufferPtr) { if (!Memory::IsValidAddress(bufferPtr)) { ERROR_LOG_REPORT(ME, "Ignoring bad audio decode address %08x during video playback", bufferPtr); } u8 *buffer = Memory::GetPointer(bufferPtr); if (!m_demux) { return 0; } // Demux now (rather than on add data) so that we select the right stream. m_demux->demux(m_audioStream); u8 *audioFrame = 0; int headerCode1, headerCode2; int frameSize = m_demux->getNextaudioFrame(&audioFrame, &headerCode1, &headerCode2); if (frameSize == 0) { m_noAudioData = true; return 0; } int outbytes = 0; if (m_audioContext != NULL) { if (!AT3Decode(m_audioContext, audioFrame, frameSize, &outbytes, buffer)) { ERROR_LOG(ME, "AT3 decode failed during video playback"); } } if (headerCode1 == 0x24) { // it a mono atrac3plus, convert it to stereo s16 *outbuf = (s16*)buffer; s16 *inbuf = (s16*)buffer; for (int i = 0x800 - 1; i >= 0; i--) { s16 sample = inbuf[i]; outbuf[i * 2] = sample; outbuf[i * 2 + 1] = sample; } } m_audiopts += 4180; m_noAudioData = false; return 0x2000; }