void JpegImporter::doOpenData(const Containers::ArrayReference<const unsigned char> data) { _in = Containers::Array<unsigned char>(data.size()); std::copy(data.begin(), data.end(), _in.begin()); }
void WavImporter::doOpenData(Containers::ArrayReference<const unsigned char> data) { /* Check file size */ if(data.size() < sizeof(WavHeader)) { Error() << "Audio::WavImporter::openData(): the file is too short:" << data.size() << "bytes"; return; } /* Get header contents and fix endianness */ WavHeader header(*reinterpret_cast<const WavHeader*>(data.begin())); Utility::Endianness::littleEndianInPlace(header.chunkSize, header.subChunk1Size, header.audioFormat, header.numChannels, header.sampleRate, header.byteRate, header.blockAlign, header.bitsPerSample, header.subChunk2Size); /* Check file signature */ if(std::strncmp(header.chunkId, "RIFF", 4) != 0 || std::strncmp(header.format, "WAVE", 4) != 0 || std::strncmp(header.subChunk1Id, "fmt ", 4) != 0 || std::strncmp(header.subChunk2Id, "data", 4) != 0) { Error() << "Audio::WavImporter::openData(): the file signature is invalid"; return; } /* Check file size */ if(header.chunkSize + 8 != data.size()) { Error() << "Audio::WavImporter::openData(): the file has improper size, expected" << header.chunkSize + 8 << "but got" << data.size(); return; } /* Check PCM format */ if(header.audioFormat != 1) { Error() << "Audio::WavImporter::openData(): unsupported audio format" << header.audioFormat; return; } /* Verify more things */ if(header.subChunk1Size != 16 || header.subChunk2Size + 44 != data.size() || header.blockAlign != header.numChannels*header.bitsPerSample/8 || header.byteRate != header.sampleRate*header.blockAlign) { Error() << "Audio::WavImporter::openData(): the file is corrupted"; return; } /* Decide about format */ if(header.numChannels == 1 && header.bitsPerSample == 8) _format = Buffer::Format::Mono8; else if(header.numChannels == 1 && header.bitsPerSample == 16) _format = Buffer::Format::Mono16; else if(header.numChannels == 2 && header.bitsPerSample == 8) _format = Buffer::Format::Stereo8; else if(header.numChannels == 2 && header.bitsPerSample == 16) _format = Buffer::Format::Stereo16; else { Error() << "Audio::WavImporter::openData(): unsupported channel count" << header.numChannels << "with" << header.bitsPerSample << "bits per sample"; return; } /* Save frequency */ _frequency = header.sampleRate; /** @todo Convert the data from little endian too */ CORRADE_INTERNAL_ASSERT(!Utility::Endianness::isBigEndian()); /* Copy the data */ _data = Containers::Array<unsigned char>(header.subChunk2Size); std::copy(data.begin()+sizeof(WavHeader), data.end(), _data.begin()); return; }
void StbImageImporter::doOpenData(const Containers::ArrayReference<const char> data) { _in = Containers::Array<unsigned char>{data.size()}; std::copy(data.begin(), data.end(), _in.data()); }