//-------------------------------------------------------------------------- void VeAudioSampleData::ParseWave(VeBinaryIStream& kInput) { VeWaveFileHeader kHeader; VE_ASSERT_EQ(kInput.Read(&kHeader, 12), 12); VE_ASSERT((!VeStrnicmp(kHeader.m_ac8Riff, "RIFF", 4)) && (!VeStrnicmp(kHeader.m_ac8Wave, "WAVE", 4))); VeRiffChunk kChunk; while(kInput.Read(&kChunk, 8) == 8) { if(!VeStrnicmp(kChunk.m_ac8ChunkName, "fmt ", 4)) { VeWaveFormat kFormat; VE_ASSERT_EQ(kInput.Read(&kFormat, kChunk.m_u32ChunkSize), VeInt32(kChunk.m_u32ChunkSize)); VE_ASSERT(kFormat.m_u16FormatTag == 1); m_u32ChannelNum = kFormat.m_u16Channels; m_u32SampleRate = kFormat.m_u32SamplesPerSec; m_u32BitsPerSample = kFormat.m_u16BitsPerSample; } else if(!VeStrnicmp(kChunk.m_ac8ChunkName, "data", 4)) { m_spData = VE_NEW VeBlob(kChunk.m_u32ChunkSize); VE_ASSERT_EQ(kInput.Read(*m_spData, kChunk.m_u32ChunkSize), VeInt32(kChunk.m_u32ChunkSize)); } else { kInput.Skip(kChunk.m_u32ChunkSize); } if (kChunk.m_u32ChunkSize & 1) { kInput.Skip(1); } } }
//-------------------------------------------------------------------------- static void VePngRead(png_structp pkPngPtr, png_bytep pbyData, png_size_t stLength) { VeBinaryIStream& kStream = *(VeBinaryIStream*)png_get_io_ptr(pkPngPtr); VE_ASSERT_EQ(kStream.Read(pbyData, VeInt32(stLength)), VeInt32(stLength)); }