Example #1
0
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
	
	}
Example #2
0
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;
	
	}
Example #3
0
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;
	
	}
Example #4
0
dng_xmp_sdk::dng_xmp_sdk ()

	:	fPrivate (NULL)
	
	{
	
	fPrivate = new dng_xmp_private;
	
	if (!fPrivate)
		{
		ThrowMemoryFull ();
		}
			
	}
Example #5
0
dng_xmp_sdk::dng_xmp_sdk (const dng_xmp_sdk &sdk)

	:	fPrivate (NULL)
	
	{
	
	fPrivate = new dng_xmp_private (*sdk.fPrivate);
	
	if (!fPrivate)
		{
		ThrowMemoryFull ();
		}
	
	}
Example #6
0
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;
}
Example #9
0
dng_ifd * dng_host::Make_dng_ifd ()
	{
	
	dng_ifd *result = new dng_ifd ();
	
	if (!result)
		{
		
		ThrowMemoryFull ();

		}
	
	return result;
	
	}
Example #10
0
dng_makernotes * dng_host::Make_dng_makernotes ()
	{
	
	dng_makernotes *result = new dng_makernotes ();
	
	if (!result)
		{
		
		ThrowMemoryFull ();

		}
	
	return result;
	
	}
Example #11
0
dng_xmp_private::dng_xmp_private (const dng_xmp_private &xmp)

	:	fMeta (NULL)

	{
	
	if (xmp.fMeta)
		{
		
		fMeta = new SXMPMeta (*xmp.fMeta);
		
		if (!fMeta)
			{
			ThrowMemoryFull ();
			}
		
		}
		
	}
Example #12
0
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;
	
	}
Example #13
0
dng_malloc_block::dng_malloc_block (uint32 logicalSize)

	:	dng_memory_block (logicalSize)

	,	fMalloc (NULL)

	{

	fMalloc = malloc (PhysicalSize ());

	if (!fMalloc)
		{

		ThrowMemoryFull ();

		}

	SetBuffer (fMalloc);

	}
Example #14
0
void dng_memory_data::Allocate (uint32 size)
	{

	Clear ();

	if (size)
		{

		fBuffer = malloc (size);

		if (!fBuffer)
			{

			ThrowMemoryFull ();

			}

		}

	}
Example #15
0
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;
		
		}
	
	}
Example #16
0
void dng_xmp_sdk::MakeMeta ()
	{
	
	ClearMeta ();
	
	InitializeSDK ();
	
	try
		{
		
		fPrivate->fMeta = new SXMPMeta;
	
		if (!fPrivate->fMeta)
			{
			
			ThrowMemoryFull ();
			
			}
		
		}
	
	CATCH_XMP ("MakeMeta", true)
	
	}
Example #17
0
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;
	
	}