unique_ptr<uchar8, decltype(&alignedFree)> Buffer::Create(size_type size) { if (!size) ThrowIOE("Trying to allocate 0 bytes sized buffer."); unique_ptr<uchar8, decltype(&alignedFree)> data( alignedMalloc<uchar8, 16>(roundUp(size + BUFFER_PADDING, 16)), &alignedFree); if (!data.get()) ThrowIOE("Failed to allocate %uz bytes memory buffer.", size); assert(!ASAN_REGION_IS_POISONED(data.get(), size)); return data; }
void NefDecoder::readCoolpixMangledRaw(ByteStream &input, iPoint2D& size, iPoint2D& offset, int inputPitch) { uchar8* data = mRaw->getData(); uint32 outPitch = mRaw->pitch; uint32 w = size.x; uint32 h = size.y; uint32 cpp = mRaw->getCpp(); if (input.getRemainSize() < (inputPitch*h)) { if ((int)input.getRemainSize() > inputPitch) h = input.getRemainSize() / inputPitch - 1; else ThrowIOE("readUncompressedRaw: Not enough data to decode a single line. Image file truncated."); } if (offset.y > mRaw->dim.y) ThrowRDE("readUncompressedRaw: Invalid y offset"); if (offset.x + size.x > mRaw->dim.x) ThrowRDE("readUncompressedRaw: Invalid x offset"); uint32 y = offset.y; h = MIN(h + (uint32)offset.y, (uint32)mRaw->dim.y); w *= cpp; BitPumpMSB32 *in = new BitPumpMSB32(&input); for (; y < h; y++) { ushort16* dest = (ushort16*) & data[offset.x*sizeof(ushort16)*cpp+y*outPitch]; for (uint32 x = 0 ; x < w; x++) { dest[x] = in->getBits(12); } } }
Buffer::Buffer(unique_ptr<uchar8, decltype(&alignedFree)> data_, size_type size_) : size(size_) { if (!size) ThrowIOE("Buffer has zero size?"); if (data_.get_deleter() != &alignedFree) ThrowIOE("Wrong deleter. Expected rawspeed::alignedFree()"); data = data_.release(); if (!data) ThrowIOE("Memory buffer is nonexistant"); assert(!ASAN_REGION_IS_POISONED(data, size)); isOwner = true; }
static void skip_input_data (j_decompress_ptr cinfo, long num_bytes) { struct jpeg_source_mgr* src = (struct jpeg_source_mgr*) cinfo->src; if (num_bytes > (int)src->bytes_in_buffer) ThrowIOE("JPEG Decoder - read out of buffer"); if (num_bytes > 0) { src->next_input_byte += (size_t) num_bytes; src->bytes_in_buffer -= (size_t) num_bytes; } }