JPEGImageReader(JPEGImageDecoder* decoder) : m_decoder(decoder) , m_bufferLength(0) , m_bytesToSkip(0) , m_state(JPEG_HEADER) , m_samples(0) { memset(&m_info, 0, sizeof(jpeg_decompress_struct)); /* We set up the normal JPEG error routines, then override error_exit. */ m_info.err = jpeg_std_error(&m_err.pub); m_err.pub.error_exit = error_exit; /* Allocate and initialize JPEG decompression object */ jpeg_create_decompress(&m_info); decoder_source_mgr* src = NULL; if (!m_info.src) { src = (decoder_source_mgr*)fastCalloc(sizeof(decoder_source_mgr), 1); if (!src) { m_state = JPEG_ERROR; return; } } m_info.src = (jpeg_source_mgr*)src; /* Set up callback functions. */ src->pub.init_source = init_source; src->pub.fill_input_buffer = fill_input_buffer; src->pub.skip_input_data = skip_input_data; src->pub.resync_to_restart = jpeg_resync_to_restart; src->pub.term_source = term_source; src->decoder = this; }
auto_ptr<ImageBuffer> ImageBuffer::create(const IntSize& size, bool grayScale) { if (size.width() < 0 || size.height() < 0) return auto_ptr<ImageBuffer>(); unsigned int bytesPerRow = size.width(); if (!grayScale) { // Protect against overflow if (bytesPerRow > 0x3FFFFFFF) return auto_ptr<ImageBuffer>(); bytesPerRow *= 4; } void* imageBuffer = fastCalloc(size.height(), bytesPerRow); if (!imageBuffer) return auto_ptr<ImageBuffer>(); CGColorSpaceRef colorSpace = grayScale ? CGColorSpaceCreateDeviceGray() : CGColorSpaceCreateDeviceRGB(); CGContextRef cgContext = CGBitmapContextCreate(imageBuffer, size.width(), size.height(), 8, bytesPerRow, colorSpace, grayScale ? kCGImageAlphaNone : kCGImageAlphaPremultipliedLast); CGColorSpaceRelease(colorSpace); if (!cgContext) { fastFree(imageBuffer); return auto_ptr<ImageBuffer>(); } auto_ptr<GraphicsContext> context(new GraphicsContext(cgContext)); context->scale(FloatSize(1, -1)); context->translate(0, -size.height()); CGContextRelease(cgContext); return auto_ptr<ImageBuffer>(new ImageBuffer(imageBuffer, size, context)); }
JPEGImageReader(JPEGImageDecoder* decoder) : m_decoder(decoder) , m_bufferLength(0) , m_bytesToSkip(0) , m_state(JPEG_HEADER) , m_samples(0) #if USE(QCMSLIB) , m_transform(0) #endif { memset(&m_info, 0, sizeof(jpeg_decompress_struct)); // We set up the normal JPEG error routines, then override error_exit. m_info.err = jpeg_std_error(&m_err.pub); m_err.pub.error_exit = error_exit; // Allocate and initialize JPEG decompression object. jpeg_create_decompress(&m_info); decoder_source_mgr* src = 0; if (!m_info.src) { src = (decoder_source_mgr*)fastCalloc(sizeof(decoder_source_mgr), 1); if (!src) { m_state = JPEG_ERROR; return; } } m_info.src = (jpeg_source_mgr*)src; // Set up callback functions. src->pub.init_source = init_source; src->pub.fill_input_buffer = fill_input_buffer; src->pub.skip_input_data = skip_input_data; src->pub.resync_to_restart = jpeg_resync_to_restart; src->pub.term_source = term_source; src->decoder = this; #if USE(ICCJPEG) // Retain ICC color profile markers for color management. setup_read_icc_profile(&m_info); #endif // Keep APP1 blocks, for obtaining exif data. jpeg_save_markers(&m_info, exifMarker, 0xFFFF); }
void PropertyMap::rehash(int newTableSize) { checkConsistency(); Table *oldTable = _table; int oldTableSize = oldTable ? oldTable->size : 0; int oldTableKeyCount = oldTable ? oldTable->keyCount : 0; _table = (Table *)fastCalloc(1, sizeof(Table) + (newTableSize - 1) * sizeof(Entry) ); _table->size = newTableSize; _table->sizeMask = newTableSize - 1; _table->keyCount = oldTableKeyCount; #if USE_SINGLE_ENTRY UString::Rep *key = _singleEntry.key; if (key) { insert(key, _singleEntry.value, _singleEntry.attributes, 0); _singleEntry.key = 0; // update the count, because single entries don't count towards // the table key count ++_table->keyCount; assert(_table->keyCount == 1); } #endif int lastIndexUsed = 0; for (int i = 0; i != oldTableSize; ++i) { Entry &entry = oldTable->entries[i]; UString::Rep *key = entry.key; if (isValid(key)) { int index = entry.index; lastIndexUsed = max(index, lastIndexUsed); insert(key, entry.value, entry.attributes, index); } } _table->lastIndexUsed = lastIndexUsed; fastFree(oldTable); checkConsistency(); }
JPEGImageReader(JPEGImageDecoder* decoder) : m_decoder(decoder) , m_bufferLength(0) , m_bytesToSkip(0) , m_state(JPEG_HEADER) , m_samples(0) { memset(&m_info, 0, sizeof(jpeg_decompress_struct)); // We set up the normal JPEG error routines, then override error_exit. m_info.err = jpeg_std_error(&m_err.pub); m_err.pub.error_exit = error_exit; // Allocate and initialize JPEG decompression object. jpeg_create_decompress(&m_info); decoder_source_mgr* src = 0; if (!m_info.src) { src = (decoder_source_mgr*)fastCalloc(sizeof(decoder_source_mgr), 1); if (!src) { m_state = JPEG_ERROR; return; } } m_info.src = (jpeg_source_mgr*)src; // Set up callback functions. src->pub.init_source = init_source; src->pub.fill_input_buffer = fill_input_buffer; src->pub.skip_input_data = skip_input_data; src->pub.resync_to_restart = jpeg_resync_to_restart; src->pub.term_source = term_source; src->decoder = this; // Enable these markers for the ICC color profile. // Apparently there are 16 of these markers. I don't see anywhere in the header with this constant. for (unsigned i = 0; i < 0xF; ++i) jpeg_save_markers(&m_info, JPEG_APP0 + i, 0xFFFF); }
void* tryFastCalloc(size_t n_elements, size_t element_size) { MemoryAllocationCanFail canFail; return fastCalloc(n_elements, element_size); }