dng_mutex::dng_mutex (const char *mutexName, uint32 mutexLevel) #if qDNGThreadSafe : fPthreadMutex () , fMutexLevel (mutexLevel) , fRecursiveLockCount (0) , fPrevHeldMutex (NULL) , fMutexName (mutexName) #endif { #if qDNGThreadSafe pthread_once (&gInnermostMutexInited, InitInnermostMutex); if (pthread_mutex_init (&fPthreadMutex, NULL) != 0) { ThrowMemoryFull (); } #endif }
void dng_string_list::Insert (uint32 index, const dng_string &s) { Allocate (fCount + 1); dng_string *ss = new dng_string (s); if (!ss) { ThrowMemoryFull (); } fCount++; for (uint32 j = fCount - 1; j > index; j--) { fList [j] = fList [j - 1]; } fList [index] = ss; }
void dng_memory_stream::DoSetLength (uint64 length) { while (length > fPageCount * (uint64) fPageSize) { if (fPageCount == fPagesAllocated) { uint32 newSize = Max_uint32 (fPagesAllocated + 32, fPagesAllocated * 2); dng_memory_block **list = (dng_memory_block **) malloc (newSize * sizeof (dng_memory_block *)); if (!list) { ThrowMemoryFull (); } if (fPageCount) { DoCopyBytes (fPageList, list, fPageCount * (uint32) sizeof (dng_memory_block *)); } if (fPageList) { free (fPageList); } fPageList = list; fPagesAllocated = newSize; } fPageList [fPageCount] = fAllocator.Allocate (fPageSize); fPageCount++; } fMemoryStreamLength = length; }
dng_xmp_sdk::dng_xmp_sdk () : fPrivate (NULL) { fPrivate = new dng_xmp_private; if (!fPrivate) { ThrowMemoryFull (); } }
dng_xmp_sdk::dng_xmp_sdk (const dng_xmp_sdk &sdk) : fPrivate (NULL) { fPrivate = new dng_xmp_private (*sdk.fPrivate); if (!fPrivate) { ThrowMemoryFull (); } }
dng_memory_block * dng_memory_allocator::Allocate (uint32 size) { dng_memory_block *result = new dng_malloc_block (size); if (!result) { ThrowMemoryFull (); } return result; }
dng_xmp * dng_host::Make_dng_xmp () { dng_xmp *result = new dng_xmp (Allocator ()); if (!result) { ThrowMemoryFull (); } return result; }
uint32 ComputeBufferSize(uint32 pixelType, const dng_point &tileSize, uint32 numPlanes, PaddingType paddingType) { // Convert tile size to uint32. if (tileSize.h < 0 || tileSize.v < 0) { ThrowMemoryFull("Negative tile size"); } const uint32 tileSizeH = static_cast<uint32>(tileSize.h); const uint32 tileSizeV = static_cast<uint32>(tileSize.v); const uint32 pixelSize = TagTypeSize(pixelType); // Add padding to width if necessary. uint32 paddedWidth = tileSizeH; if (paddingType == pad16Bytes) { if (!RoundUpForPixelSize(paddedWidth, pixelSize, &paddedWidth)) { ThrowMemoryFull("Arithmetic overflow computing buffer size"); } } // Compute buffer size. uint32 bufferSize; if (!SafeUint32Mult(paddedWidth, tileSizeV, &bufferSize) || !SafeUint32Mult(bufferSize, pixelSize, &bufferSize) || !SafeUint32Mult(bufferSize, numPlanes, &bufferSize)) { ThrowMemoryFull("Arithmetic overflow computing buffer size"); } return bufferSize; }
dng_ifd * dng_host::Make_dng_ifd () { dng_ifd *result = new dng_ifd (); if (!result) { ThrowMemoryFull (); } return result; }
dng_makernotes * dng_host::Make_dng_makernotes () { dng_makernotes *result = new dng_makernotes (); if (!result) { ThrowMemoryFull (); } return result; }
dng_xmp_private::dng_xmp_private (const dng_xmp_private &xmp) : fMeta (NULL) { if (xmp.fMeta) { fMeta = new SXMPMeta (*xmp.fMeta); if (!fMeta) { ThrowMemoryFull (); } } }
dng_image * dng_host::Make_dng_image (const dng_rect &bounds, uint32 planes, uint32 pixelType) { dng_image *result = new dng_simple_image (bounds, planes, pixelType, Allocator ()); if (!result) { ThrowMemoryFull (); } return result; }
dng_malloc_block::dng_malloc_block (uint32 logicalSize) : dng_memory_block (logicalSize) , fMalloc (NULL) { fMalloc = malloc (PhysicalSize ()); if (!fMalloc) { ThrowMemoryFull (); } SetBuffer (fMalloc); }
void dng_memory_data::Allocate (uint32 size) { Clear (); if (size) { fBuffer = malloc (size); if (!fBuffer) { ThrowMemoryFull (); } } }
void dng_string_list::Allocate (uint32 minSize) { if (fAllocated < minSize) { uint32 newSize = Max_uint32 (minSize, fAllocated * 2); dng_string **list = (dng_string **) malloc (newSize * sizeof (dng_string *)); if (!list) { ThrowMemoryFull (); } if (fCount) { DoCopyBytes (fList, list, fCount * sizeof (dng_string *)); } if (fList) { free (fList); } fList = list; fAllocated = newSize; } }
void dng_xmp_sdk::MakeMeta () { ClearMeta (); InitializeSDK (); try { fPrivate->fMeta = new SXMPMeta; if (!fPrivate->fMeta) { ThrowMemoryFull (); } } CATCH_XMP ("MakeMeta", true) }
dng_opcode * dng_host::Make_dng_opcode (uint32 opcodeID, dng_stream &stream) { dng_opcode *result = NULL; switch (opcodeID) { case dngOpcode_WarpRectilinear: { result = new dng_opcode_WarpRectilinear (stream); break; } case dngOpcode_WarpFisheye: { result = new dng_opcode_WarpFisheye (stream); break; } case dngOpcode_FixVignetteRadial: { result = new dng_opcode_FixVignetteRadial (stream); break; } case dngOpcode_FixBadPixelsConstant: { result = new dng_opcode_FixBadPixelsConstant (stream); break; } case dngOpcode_FixBadPixelsList: { result = new dng_opcode_FixBadPixelsList (stream); break; } case dngOpcode_TrimBounds: { result = new dng_opcode_TrimBounds (stream); break; } case dngOpcode_MapTable: { result = new dng_opcode_MapTable (*this, stream); break; } case dngOpcode_MapPolynomial: { result = new dng_opcode_MapPolynomial (stream); break; } case dngOpcode_GainMap: { result = new dng_opcode_GainMap (*this, stream); break; } case dngOpcode_DeltaPerRow: { result = new dng_opcode_DeltaPerRow (*this, stream); break; } case dngOpcode_DeltaPerColumn: { result = new dng_opcode_DeltaPerColumn (*this, stream); break; } case dngOpcode_ScalePerRow: { result = new dng_opcode_ScalePerRow (*this, stream); break; } case dngOpcode_ScalePerColumn: { result = new dng_opcode_ScalePerColumn (*this, stream); break; } default: { result = new dng_opcode_Unknown (*this, opcodeID, stream); } } if (!result) { ThrowMemoryFull (); } return result; }