omxilvideocomps/omxilgraphicsink/tsrc/src/omxilmmbuffer.cpp
author hgs
Fri, 08 Oct 2010 22:09:17 +0100
changeset 0 5d29cba61097
permissions -rw-r--r--
2010wk38_02

// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//


/**
 @file
 @internalComponent
*/

#include "omxilmmbuffer.h"

EXPORT_C COmxILMMBuffer* COmxILMMBuffer::NewL(const RChunk& aChunk)
	{
	COmxILMMBuffer* self = new (ELeave) COmxILMMBuffer(aChunk);
	return self;
	}
	
EXPORT_C COmxILMMBuffer* COmxILMMBuffer::CreateL(const COmxILMMBuffer& aCamBuf)
	{
	COmxILMMBuffer* self = new (ELeave) COmxILMMBuffer(aCamBuf);
	return self;
	}

EXPORT_C COmxILMMBuffer::~COmxILMMBuffer()
	{	
	iArrayOffsets.Close();
	}
	
COmxILMMBuffer::COmxILMMBuffer(const RChunk& aChunk) 
  : iChunk(const_cast<RChunk&>(aChunk)),
  iChunkOwnerThreadId(RThread().Id())
	{
	// reset offsets
	iArrayOffsets.Reset();
	}

COmxILMMBuffer::COmxILMMBuffer(const COmxILMMBuffer& aCamBuf)
: iSurfaceId(aCamBuf.iSurfaceId),
  iSurfaceInfo(aCamBuf.iSurfaceInfo),
  iChunk(aCamBuf.iChunk),
  iChunkOwnerThreadId(aCamBuf.iChunkOwnerThreadId)
	{
	// reset offsets
	iArrayOffsets.Reset();
	
	// deep copy
	for (TInt i = 0 ; i < aCamBuf.iArrayOffsets.Count() ; i++)
		{
		iArrayOffsets.Append(aCamBuf.iArrayOffsets[i]);
		}
	}
		
EXPORT_C RChunk& COmxILMMBuffer::Chunk()
	{
	return iChunk;
	}

EXPORT_C TSurfaceId& COmxILMMBuffer::SurfaceId()
	{
	return iSurfaceId;
	}

EXPORT_C TThreadId& COmxILMMBuffer::ChunkOwnerThreadId()
	{
	return iChunkOwnerThreadId;
	}

EXPORT_C RSurfaceManager::TSurfaceInfoV01& COmxILMMBuffer::SurfaceInfoV01()
	{
	return iSurfaceInfo;
	}

//EXPORT_C void COmxILMMBuffer::SetChunk(RChunk* aChunk) {iChunk = *aChunk;}
//EXPORT_C void COmxILMMBuffer::SetSurfaceId(TSurfaceId* aSurfaceId) {iSurfaceId = &aSurfacdId;}

EXPORT_C TInt COmxILMMBuffer::BytesPerPixel(OMX_COLOR_FORMATTYPE aPixelFormat)
	{
	switch (aPixelFormat)
		{
		//fall through
		
		//case EUidPixelFormatRGB_565:
		case OMX_COLOR_Format16bitRGB565:
    	//case EUidPixelFormatBGR_565:
    	case OMX_COLOR_Format16bitBGR565:		
		//case EUidPixelFormatARGB_1555:
		case OMX_COLOR_Format16bitARGB1555:
		//case EUidPixelFormatXRGB_1555:
		//case EUidPixelFormatARGB_4444:
		case OMX_COLOR_Format16bitARGB4444:
		//case EUidPixelFormatARGB_8332:
		case OMX_COLOR_Format8bitRGB332:
		//case EUidPixelFormatBGRX_5551:
		//case EUidPixelFormatBGRA_5551:
		//case EUidPixelFormatBGRA_4444:
		//case EUidPixelFormatBGRX_4444:
		//case EUidPixelFormatAP_88:
		//case EUidPixelFormatXRGB_4444:
		//case EUidPixelFormatXBGR_4444:
		//case EUidPixelFormatYUV_422Interleaved:
		//case EUidPixelFormatYUV_422Planar:
		case OMX_COLOR_FormatYUV422Planar:
		//case EUidPixelFormatYUV_422Reversed:
		case OMX_COLOR_FormatYCrYCb:
		//case EUidPixelFormatYUV_422SemiPlanar:
		case OMX_COLOR_FormatYUV422SemiPlanar:
		//case EUidPixelFormatYUV_422InterleavedReversed:
		//case EUidPixelFormatYYUV_422Interleaved:
		case OMX_COLOR_FormatCbYCrY:
		case OMX_COLOR_FormatYCbYCr:
		case OMX_COLOR_FormatRawBayer10bit:
		   	{
			return 2;
			}
			
		//fall through
		//case EUidPixelFormatXRGB_8888:
		//case EUidPixelFormatBGRX_8888:
		//case EUidPixelFormatXBGR_8888:
		//case EUidPixelFormatBGRA_8888:
		case OMX_COLOR_Format32bitBGRA8888:
    	//case EUidPixelFormatARGB_8888:
		case OMX_COLOR_Format32bitARGB8888:
		//case EUidPixelFormatABGR_8888:
		//case EUidPixelFormatARGB_8888_PRE:
		//case EUidPixelFormatABGR_8888_PRE:
		//case EUidPixelFormatBGRA_8888_PRE:
		//case EUidPixelFormatARGB_2101010:
		//case EUidPixelFormatABGR_2101010:
			{
			return 4;
			}
			
		//fall through	
		//case EUidPixelFormatBGR_888:
		case OMX_COLOR_Format24bitBGR888:
		//case EUidPixelFormatRGB_888:
		case OMX_COLOR_Format24bitRGB888:
			{
			return 3;	
			}
			
		default:
			return 0;
		}
	}

EXPORT_C TInt COmxILMMBuffer::BytesPerPixel(TUidPixelFormat aPixelFormat)
	{
	switch (aPixelFormat)
		{
		//fall through
		
		case EUidPixelFormatRGB_565:
    	case EUidPixelFormatBGR_565:
		case EUidPixelFormatARGB_1555:
		case EUidPixelFormatXRGB_1555:
		case EUidPixelFormatARGB_4444:
		case EUidPixelFormatARGB_8332:
		case EUidPixelFormatBGRX_5551:
		case EUidPixelFormatBGRA_5551:
		case EUidPixelFormatBGRA_4444:
		case EUidPixelFormatBGRX_4444:
		case EUidPixelFormatAP_88:
		case EUidPixelFormatXRGB_4444:
		case EUidPixelFormatXBGR_4444:
		case EUidPixelFormatYUV_422Interleaved:
		case EUidPixelFormatYUV_422Planar:
		case EUidPixelFormatYUV_422Reversed:
		case EUidPixelFormatYUV_422SemiPlanar:
		case EUidPixelFormatYUV_422InterleavedReversed:
		case EUidPixelFormatRawBayer10bit:
		   	{
			return 2;
			}
			
		//fall through
		case EUidPixelFormatXRGB_8888:
		case EUidPixelFormatBGRX_8888:
		case EUidPixelFormatXBGR_8888:
		case EUidPixelFormatBGRA_8888:
		case EUidPixelFormatARGB_8888:
		case EUidPixelFormatABGR_8888:
		case EUidPixelFormatARGB_8888_PRE:
		case EUidPixelFormatABGR_8888_PRE:
		case EUidPixelFormatBGRA_8888_PRE:
		case EUidPixelFormatARGB_2101010:
		case EUidPixelFormatABGR_2101010:
			{
			return 4;
			}
			
		//fall through	
		case EUidPixelFormatBGR_888:
		case EUidPixelFormatRGB_888:
			{
			return 3;	
			}
			
		default:
			return 0;
		}
	}

EXPORT_C RArray<TInt>& COmxILMMBuffer::OffsetInfoArray()
	{
	return iArrayOffsets;
	}