omxilvideocomps/omxilgraphicsink/src/omxilgraphicsinkvpb0port.cpp
author hgs
Fri, 08 Oct 2010 22:09:17 +0100
changeset 0 5d29cba61097
permissions -rw-r--r--
2010wk38_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     1
/*
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     3
* All rights reserved.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     8
*
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    11
*
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    12
* Contributors:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    13
*
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    14
* Description:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    15
*
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    16
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    17
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    18
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    19
 @file
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    20
 @internalComponent
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    21
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    22
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    23
#include <e32std.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    24
#include "omxilgraphicsinkvpb0port.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    25
#include <openmax/il/khronos/v1_x/OMX_Component.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    26
#include <openmax/il/shai/OMX_Symbian_ExtensionNames.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    27
#include <w32std.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    28
#include "log.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    29
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    30
#include "omxilgraphicsinkextensionsindexes.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    31
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    32
// Port definition mime type. Mime type is not relevant for uncompressed video frames
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    33
_LIT8(KMimeType, "");
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    34
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    35
// Constant numbers
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    36
static const TUint32 KRefGfxFramerate = 0;   // mandatory
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    37
static const TUint32 KRefGfxMinBufferSize = 1024;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    38
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    39
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    40
Create a new VPB0 port.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    41
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    42
@param 	aCommonPortData The common information of the new VPB0 port.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    43
		aSupportedVideoFormats The list of the supported video formats.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    44
		aSupportedColorFormats The list of the supported color formats.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    45
		aGraphicSinkPF The processing function for the VPB0 port.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    46
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    47
@return A pointer of the VPB0Port to be created.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    48
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    49
COmxILGraphicSinkVPB0Port* COmxILGraphicSinkVPB0Port::NewL(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    50
		const TOmxILCommonPortData& aCommonPortData,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    51
		const RArray<OMX_VIDEO_CODINGTYPE>& aSupportedVideoFormats,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    52
		const RArray<OMX_COLOR_FORMATTYPE>& aSupportedColorFormats,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    53
		COmxILGraphicSinkProcessingFunction& aGraphicSinkPF)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    54
	{	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    55
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::NewL +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    56
	COmxILGraphicSinkVPB0Port* self = new (ELeave)COmxILGraphicSinkVPB0Port(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    57
										aGraphicSinkPF);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    58
	CleanupStack::PushL(self);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    59
	self->ConstructL(aCommonPortData, aSupportedVideoFormats, aSupportedColorFormats);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    60
	CleanupStack::Pop(self);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    61
	return self;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    62
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    63
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    64
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    65
Second phase construction for the class COmxILGraphicSinkVPB0Port. Initializes the param structures and config structures for GraphicSink port. 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    66
Also appends the supported color and video formats to the respective arrays.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    67
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    68
void COmxILGraphicSinkVPB0Port::ConstructL(const TOmxILCommonPortData& aCommonPortData,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    69
                                const RArray<OMX_VIDEO_CODINGTYPE>& aSupportedVideoFormats,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    70
                                const RArray<OMX_COLOR_FORMATTYPE>& aSupportedColorFormats)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    71
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    72
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::ConstructL +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    73
	COmxILVideoPort::ConstructL(aCommonPortData, aSupportedVideoFormats, aSupportedColorFormats);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    74
 	GetParamPortDefinition().eDomain = OMX_PortDomainVideo;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    75
 	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    76
 	iMimeTypeBuf.CreateL(KMimeType(), KMimeType().Length() + 1);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    77
 	TUint8* pTUint = const_cast<TUint8*>(iMimeTypeBuf.PtrZ());
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    78
 	GetParamPortDefinition().format.video.cMIMEType = reinterpret_cast<OMX_STRING>(pTUint);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    79
 	GetParamPortDefinition().format.video.pNativeRender = NULL;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    80
 	GetParamPortDefinition().format.video.pNativeWindow = NULL;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    81
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    82
	GetParamPortDefinition().nBufferSize = KRefGfxMinBufferSize;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    83
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    84
 	GetSupportedVideoFormats().AppendL(OMX_VIDEO_CodingUnused);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    85
	GetSupportedColorFormats().AppendL(OMX_COLOR_FormatCbYCrY);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    86
 	GetSupportedColorFormats().AppendL(OMX_COLOR_FormatYCrYCb); 	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    87
 	GetSupportedColorFormats().AppendL(OMX_COLOR_Format16bitRGB565);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    88
	GetSupportedColorFormats().AppendL(OMX_COLOR_Format32bitARGB8888);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    89
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    90
 	InitParamsAndConfigs();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    91
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    92
 	iSharedChunkMetadataExtensionIndex = OMX_IndexComponentStartUnused;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    93
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    94
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    95
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    96
Constructor of the class.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    97
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    98
@param 	aCommonPortData The common information of the new VPB0 port.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    99
		aSupportedVideoFormats The list of the supported video formats.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   100
		aSupportedColorFormats The list of the supported color formats.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   101
		aGraphicSinkPF The processing function for the VPB0 port.	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   102
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   103
COmxILGraphicSinkVPB0Port::COmxILGraphicSinkVPB0Port(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   104
		COmxILGraphicSinkProcessingFunction& aGraphicSinkPF)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   105
	: iGraphicSinkPF(aGraphicSinkPF)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   106
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   107
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::COmxILGraphicSinkVPB0Port +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   108
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   109
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   110
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   111
Destructor of the class.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   112
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   113
COmxILGraphicSinkVPB0Port::~COmxILGraphicSinkVPB0Port()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   114
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   115
    DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::~COmxILGraphicSinkVPB0Port +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   116
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   117
    CleanUpPort();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   118
	iMimeTypeBuf.Close();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   119
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   120
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   121
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   122
Sets the format field available as part of OMX_PARAM_PORTDEFINITIONTYPE.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   123
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   124
@param 	aPortDefinition structure containing the format field to be updated.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   125
		aUpdateProcessingFunction indicates whether or not processing function needs to be updated.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   126
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   127
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   128
		OMX_ErrorBadParameter if both compression format and color format are unused at the same time, or nStride is invalid;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   129
		OMX_ErrorUnsupportedSetting if unsupported compression format and color format, or bitrate is non-zero;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   130
*/	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   131
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::SetFormatInPortDefinition(const OMX_PARAM_PORTDEFINITIONTYPE& aPortDefinition,TBool& aUpdateProcessingFunction)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   132
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   133
    DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::SetFormatInPortDefinition +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   134
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   135
    // Check settings in input OMX_PARAM_PORTDEFINITIONTYPE.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   136
	if (!UpdateColorFormat(GetParamPortDefinition().format.video.eColorFormat, aPortDefinition.format.video.eColorFormat, aUpdateProcessingFunction))
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   137
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   138
		return OMX_ErrorUnsupportedSetting;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   139
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   140
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   141
	if (!UpdateCodingType(GetParamPortDefinition().format.video.eCompressionFormat, aPortDefinition.format.video.eCompressionFormat, aUpdateProcessingFunction))
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   142
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   143
		return OMX_ErrorUnsupportedSetting;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   144
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   145
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   146
	if(GetParamPortDefinition().format.video.nStride != aPortDefinition.format.video.nStride)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   147
    	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   148
 		// nStride shall not be 0x0
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   149
 		if(0x0 == aPortDefinition.format.video.nStride)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   150
	 		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   151
	 		return OMX_ErrorBadParameter;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   152
	 		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   153
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   154
		GetParamPortDefinition().format.video.nStride = aPortDefinition.format.video.nStride;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   155
		aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   156
    	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   157
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   158
	if (GetParamPortDefinition().format.video.nFrameWidth != aPortDefinition.format.video.nFrameWidth ||
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   159
	    GetParamPortDefinition().format.video.nFrameHeight != aPortDefinition.format.video.nFrameHeight ||
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   160
		GetParamPortDefinition().format.video.nBitrate != aPortDefinition.format.video.nBitrate)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   161
	    {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   162
        GetParamPortDefinition().format.video.nFrameWidth = aPortDefinition.format.video.nFrameWidth;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   163
        GetParamPortDefinition().format.video.nFrameHeight = aPortDefinition.format.video.nFrameHeight;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   164
        // nSliceHeight is a RO attribute. Policy is to set it to the frame height
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   165
        GetParamPortDefinition().format.video.nSliceHeight = aPortDefinition.format.video.nFrameHeight;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   166
        GetParamPortDefinition().format.video.nBitrate = aPortDefinition.format.video.nBitrate;    
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   167
        aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   168
	    }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   169
    return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   170
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   171
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   172
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   173
Insert new indices belonging to the static parameter category.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   174
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   175
@param 	aIndexArray The array of indices for insert.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   176
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   177
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   178
		OMX_ErrorInsufficientResources if fail to insert indexes;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   179
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   180
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::GetLocalOmxParamIndexes(RArray<TUint>& aIndexArray) const
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   181
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   182
    DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::GetLocalOmxParamIndexes +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   183
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   184
	// Always collect param indexes from parents
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   185
	OMX_ERRORTYPE omxRetValue = COmxILVideoPort::GetLocalOmxParamIndexes(aIndexArray);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   186
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   187
	if(OMX_ErrorNone != omxRetValue)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   188
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   189
		return omxRetValue; 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   190
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   191
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   192
	TInt err = aIndexArray.InsertInOrder(OMX_NokiaIndexParamGraphicSurfaceConfig);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   193
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   194
	// Note that index duplication is OK.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   195
	if (KErrNone != err && KErrAlreadyExists != err)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   196
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   197
		return OMX_ErrorInsufficientResources;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   198
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   199
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   200
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   201
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   202
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   203
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   204
Insert new indices belonging to the dynamic configuration category.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   205
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   206
@param 	aIndexArray The array of indices for insert.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   207
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   208
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   209
		OMX_ErrorInsufficientResources if fail to insert indexes;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   210
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   211
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::GetLocalOmxConfigIndexes(RArray<TUint>& aIndexArray) const
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   212
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   213
    DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::GetLocalOmxConfigIndexes +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   214
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   215
	// Always collect local indexes from parent
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   216
	OMX_ERRORTYPE omxRetValue = COmxILVideoPort::GetLocalOmxConfigIndexes(aIndexArray);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   217
	if (omxRetValue != OMX_ErrorNone)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   218
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   219
		return omxRetValue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   220
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   221
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   222
	TInt err = aIndexArray.InsertInOrder(OMX_IndexConfigCommonScale);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   223
	// Note that index duplication is OK.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   224
	if (err == KErrNone || err == KErrAlreadyExists)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   225
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   226
		err = aIndexArray.InsertInOrder(OMX_IndexConfigCommonOutputSize);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   227
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   228
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   229
	if (err == KErrNone || err == KErrAlreadyExists)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   230
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   231
		err = aIndexArray.InsertInOrder(OMX_IndexConfigCommonInputCrop);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   232
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   233
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   234
	if (err == KErrNone || err == KErrAlreadyExists)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   235
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   236
		err = aIndexArray.InsertInOrder(OMX_IndexConfigCommonOutputCrop);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   237
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   238
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   239
	if (err == KErrNone || err == KErrAlreadyExists)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   240
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   241
		err = aIndexArray.InsertInOrder(OMX_IndexConfigCommonExclusionRect);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   242
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   243
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   244
    if (err == KErrNone || err == KErrAlreadyExists)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   245
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   246
        err = aIndexArray.InsertInOrder(OMX_SymbianIndexConfigSharedChunkMetadata);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   247
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   248
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   249
	if (err != KErrNone && err != KErrAlreadyExists)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   250
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   251
		return OMX_ErrorInsufficientResources;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   252
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   253
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   254
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   255
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   256
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   257
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   258
This method provides the current values for the parameters present in the structure represented by the given index.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   259
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   260
@param 	aParamIndex The specific param index for which the current parameter values are required.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   261
		apComponentParameterStructure The pointer to the structure which will be updated to provide the current parameter values.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   262
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   263
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   264
		OMX_ErrorNoMore if no more formats;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   265
		OMX_ErrorUnsupportedSetting if unsupported setting is passed;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   266
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   267
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::GetParameter(OMX_INDEXTYPE aParamIndex,TAny* apComponentParameterStructure) const
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   268
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   269
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::GetParameter +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   270
	switch(aParamIndex)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   271
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   272
		case OMX_NokiaIndexParamGraphicSurfaceConfig:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   273
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   274
			OMX_SYMBIAN_VIDEO_PARAM_SURFACECONFIGURATION* videoSurface = static_cast<OMX_SYMBIAN_VIDEO_PARAM_SURFACECONFIGURATION*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   275
			*videoSurface = iParamVideoSurfaceConfiguration;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   276
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   277
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   278
		case OMX_IndexParamVideoPortFormat:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   279
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   280
			OMX_VIDEO_PARAM_PORTFORMATTYPE* compvideoPortFormat = static_cast<OMX_VIDEO_PARAM_PORTFORMATTYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   281
			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   282
			// framerate should be always zero for GFX otherwise unsupported value
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   283
			if(KRefGfxFramerate != compvideoPortFormat->xFramerate)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   284
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   285
				return OMX_ErrorUnsupportedSetting;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   286
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   287
			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   288
			return COmxILVideoPort::GetParameter(aParamIndex,apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   289
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   290
		default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   291
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   292
			// Try the parent's indexes
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   293
			return COmxILVideoPort::GetParameter(aParamIndex,apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   294
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   295
		};
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   296
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   297
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   298
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   299
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   300
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   301
This method sets the values of the parameters present in the structure represented by the given index.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   302
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   303
@param 	aParamIndex The specific param index for which the parameter values have to be set.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   304
		apComponentParameterStructure The pointer to the structure which will provide the desired parameter values to be set.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   305
		aUpdateProcessingFunction informs whether the processing fucntion needs to be updated.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   306
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   307
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   308
		OMX_ErrorUnsupportedSetting if non-zero framerate value;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   309
		OMX_ErrorUnsupportedIndex if request OMX_NokiaIndexParamGraphicSurfaceConfig index;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   310
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   311
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::SetParameter(OMX_INDEXTYPE aParamIndex,const TAny* apComponentParameterStructure, TBool& aUpdateProcessingFunction)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   312
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   313
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::SetParameter +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   314
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   315
	OMX_ERRORTYPE error = OMX_ErrorNone; 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   316
	switch(aParamIndex)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   317
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   318
		case OMX_IndexParamVideoPortFormat:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   319
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   320
			const OMX_VIDEO_PARAM_PORTFORMATTYPE *componentParameterStructure = static_cast<const OMX_VIDEO_PARAM_PORTFORMATTYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   321
			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   322
			if (GetParamPortDefinition().format.video.xFramerate != componentParameterStructure->xFramerate)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   323
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   324
				if (0 != componentParameterStructure->xFramerate)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   325
					{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   326
					// Known Frame rate is not supported. framerate should be always zero
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   327
					return OMX_ErrorUnsupportedSetting;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   328
					}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   329
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   330
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   331
			error = COmxILVideoPort::SetParameter(aParamIndex, apComponentParameterStructure, aUpdateProcessingFunction);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   332
			if(error != OMX_ErrorNone)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   333
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   334
				return error;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   335
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   336
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   337
			if(aUpdateProcessingFunction)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   338
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   339
				// eColorFormat and/or eCompressionFormat and/or xFramerate is/are changed by OMX_IndexParamVideoPortFormat
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   340
				// Hence change same varibles associated to index OMX_IndexParamPortDefinition.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   341
				// Update their value in OMX_PARAM_PORTDEFINITIONTYPE.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   342
				UpdateParamInPortDefinitionStruct();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   343
				return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   344
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   345
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   346
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   347
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   348
		case OMX_NokiaIndexParamGraphicSurfaceConfig:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   349
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   350
			// IL Client can only query OMX_GetParameter with this index but can not set any value on TSurfaceConfiguration
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   351
			// GFX simply returns OMX_ErrorUnsupportedIndex for the attempt on OMX_GetParameter with this index.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   352
			return OMX_ErrorUnsupportedIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   353
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   354
	    default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   355
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   356
			// Try the parent's indexes
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   357
			return COmxILVideoPort::SetParameter(aParamIndex, apComponentParameterStructure, aUpdateProcessingFunction);			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   358
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   359
		};	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   360
	return error;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   361
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   362
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   363
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   364
This method provides the current values for the configurations present in the structure represented by the given index.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   365
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   366
@param 	aConfigIndex The specific configuration index for which the current configuration values are required.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   367
		apComponentConfigStructure The pointer to the structure which will be updated to provide the current configuration values.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   368
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   369
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   370
		OMX_ErrorUnsupportedIndex if request non-inserted config index;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   371
*/	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   372
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::GetConfig(OMX_INDEXTYPE aConfigIndex,TAny* apComponentParameterStructure) const
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   373
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   374
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::GetConfig +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   375
	switch(aConfigIndex)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   376
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   377
        case OMX_SymbianIndexConfigSharedChunkMetadata:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   378
            {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   379
            OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE*
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   380
                pSharedChunkMetadata
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   381
                = static_cast<
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   382
                        OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   383
        
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   384
            iGraphicSinkPF.GetSharedChunkMetadata(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   385
                    pSharedChunkMetadata->nHandleId, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   386
                    pSharedChunkMetadata->nOwnerThreadId);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   387
            }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   388
            break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   389
		case OMX_IndexConfigCommonScale:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   390
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   391
			OMX_CONFIG_SCALEFACTORTYPE* scaleFactor = static_cast<OMX_CONFIG_SCALEFACTORTYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   392
			*scaleFactor = iConfigScaleFactor;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   393
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   394
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   395
		case OMX_IndexConfigCommonOutputSize:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   396
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   397
			OMX_FRAMESIZETYPE* frameSize = static_cast<OMX_FRAMESIZETYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   398
			*frameSize = iConfigFrameSize;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   399
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   400
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   401
		case OMX_IndexConfigCommonInputCrop:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   402
		case OMX_IndexConfigCommonOutputCrop:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   403
		case OMX_IndexConfigCommonExclusionRect:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   404
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   405
			OMX_CONFIG_RECTTYPE* rec = static_cast<OMX_CONFIG_RECTTYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   406
			*rec = iConfigRec;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   407
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   408
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   409
		default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   410
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   411
			// Try the parent's indexes
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   412
			return COmxILVideoPort::GetConfig(aConfigIndex,apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   413
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   414
		};
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   415
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   416
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   417
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   418
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   419
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   420
This method sets the values of the configurations present in the structure represented by the given index.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   421
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   422
@param 	aConfigIndex The specific configuration index for which the configuration values have to be set.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   423
		apComponentConfigStructure The pointer to the structure which will be provide the desired configuration values to be set.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   424
		aUpdateProcessingFunction informs whether the processing fucntion needs to be updated.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   425
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   426
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   427
		OMX_ErrorUnsupportedIndex if request OMX_NokiaIndexParamGraphicSurfaceConfig index;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   428
*/	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   429
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::SetConfig(OMX_INDEXTYPE aConfigIndex,const TAny* apComponentParameterStructure, TBool& aUpdateProcessingFunction)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   430
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   431
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::SetConfig +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   432
	switch(aConfigIndex)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   433
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   434
	    case OMX_SymbianIndexConfigSharedChunkMetadata:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   435
	        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   436
	        aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   437
	        break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   438
	        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   439
		case OMX_IndexConfigCommonScale:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   440
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   441
			const OMX_CONFIG_SCALEFACTORTYPE* scaleFactor = static_cast<const OMX_CONFIG_SCALEFACTORTYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   442
			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   443
			if(iConfigScaleFactor.xWidth != scaleFactor->xWidth)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   444
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   445
				iConfigScaleFactor.xWidth = scaleFactor->xWidth;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   446
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   447
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   448
			if(iConfigScaleFactor.xHeight != scaleFactor->xHeight)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   449
				{	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   450
				iConfigScaleFactor.xHeight = scaleFactor->xHeight;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   451
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   452
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   453
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   454
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   455
		case OMX_IndexConfigCommonOutputSize:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   456
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   457
			const OMX_FRAMESIZETYPE* frameSize = static_cast<const OMX_FRAMESIZETYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   458
			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   459
			if(iConfigFrameSize.nWidth != frameSize->nWidth)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   460
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   461
				iConfigFrameSize.nWidth = frameSize->nWidth;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   462
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   463
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   464
			if(iConfigFrameSize.nHeight != frameSize->nHeight)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   465
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   466
				iConfigFrameSize.nHeight = frameSize->nHeight;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   467
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   468
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   469
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   470
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   471
		case OMX_IndexConfigCommonInputCrop:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   472
		case OMX_IndexConfigCommonOutputCrop:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   473
		case OMX_IndexConfigCommonExclusionRect:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   474
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   475
			const OMX_CONFIG_RECTTYPE* rec = static_cast<const OMX_CONFIG_RECTTYPE*>(apComponentParameterStructure);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   476
			
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   477
			if(iConfigRec.nTop != rec->nTop)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   478
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   479
				iConfigRec.nTop = rec->nTop;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   480
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   481
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   482
			if(iConfigRec.nLeft != rec->nLeft)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   483
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   484
				iConfigRec.nLeft = rec->nLeft;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   485
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   486
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   487
			if(iConfigRec.nWidth != rec->nWidth)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   488
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   489
				iConfigRec.nWidth = rec->nWidth;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   490
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   491
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   492
			if(iConfigRec.nHeight != rec->nHeight)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   493
				{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   494
				iConfigRec.nHeight = rec->nHeight;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   495
				aUpdateProcessingFunction = ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   496
				}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   497
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   498
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   499
	    default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   500
			{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   501
			// Try the parent's indexes
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   502
			return COmxILVideoPort::SetConfig(aConfigIndex, apComponentParameterStructure, aUpdateProcessingFunction);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   503
			}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   504
		};
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   505
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   506
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   507
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   508
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   509
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   510
This method provides the index type represented by the given parameter name.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   511
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   512
@param 	aParameterName The name of extention parameter to be retrieved.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   513
		apIndexType The pointer which will retrieve the required index.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   514
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   515
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   516
		OMX_ErrorUnsupportedIndex if unsupported parameter name is passed;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   517
*/	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   518
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::GetExtensionIndex(OMX_STRING aParameterName,	OMX_INDEXTYPE* apIndexType) const
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   519
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   520
    DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::GetExtensionIndex"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   521
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   522
	TPtrC8 requestedParameterNamePtr(const_cast<const TUint8*>(reinterpret_cast<TUint8*>(aParameterName)));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   523
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   524
	// OMX_NokiaIndexParamGraphicSurfaceConfig
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   525
	TPtrC8 parameterNamePtr(reinterpret_cast<const TUint8*>(sOmxSymbianGfxSurfaceConfig));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   526
	if (requestedParameterNamePtr == parameterNamePtr)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   527
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   528
		*apIndexType = static_cast<OMX_INDEXTYPE>(OMX_NokiaIndexParamGraphicSurfaceConfig);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   529
		return OMX_ErrorNone;   
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   530
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   531
	   
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   532
    // OMX_SymbianIndexConfigSharedChunkMetadata
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   533
	TPtrC8 parameterNamePtr2(reinterpret_cast<const TUint8*>(OMX_SYMBIAN_INDEX_CONFIG_SHAREDCHUNKMETADATA_NAME));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   534
	if(requestedParameterNamePtr == parameterNamePtr2)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   535
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   536
        *apIndexType = static_cast<OMX_INDEXTYPE>(OMX_SymbianIndexConfigSharedChunkMetadata);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   537
        return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   538
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   539
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   540
    *apIndexType = OMX_IndexMax;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   541
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   542
	return OMX_ErrorUnsupportedIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   543
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   544
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   545
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   546
Check whether or not the tunnelled ports are compatible.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   547
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   548
@param 	aPortDefinition The port definition parameters to be checked for compatibility.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   549
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   550
@return EFalse if tunnelled ports' parameters are incompatible;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   551
		ETrue otherwise;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   552
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   553
TBool COmxILGraphicSinkVPB0Port::IsTunnelledPortCompatible(const OMX_PARAM_PORTDEFINITIONTYPE& aPortDefinition) const
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   554
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   555
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::IsTunnelledPortCompatible +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   556
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   557
	if(aPortDefinition.eDomain != GetParamPortDefinition().eDomain)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   558
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   559
		return EFalse;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   560
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   561
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   562
	if(OMX_VIDEO_CodingUnused != aPortDefinition.format.video.eCompressionFormat)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   563
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   564
		return EFalse;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   565
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   566
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   567
	if (GetParamPortDefinition().format.video.eColorFormat != aPortDefinition.format.video.eColorFormat)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   568
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   569
		return EFalse;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   570
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   571
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   572
	if (GetParamPortDefinition().format.video.nFrameWidth != aPortDefinition.format.video.nFrameWidth)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   573
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   574
        return EFalse;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   575
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   576
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   577
    if (GetParamPortDefinition().format.video.nFrameHeight != aPortDefinition.format.video.nFrameHeight)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   578
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   579
        return EFalse;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   580
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   581
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   582
    if (GetParamPortDefinition().format.video.nStride != aPortDefinition.format.video.nStride)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   583
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   584
        return EFalse;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   585
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   586
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   587
	return ETrue;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   588
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   589
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   590
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   591
Allocates buffer, creates surface and updates the surface configuration.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   592
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   593
@param 	aSizeBytes The size of buffer.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   594
		apPortSpecificBuffer The address of buffer.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   595
		apPortPrivate The pointer of COmxILMMBuffer.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   596
		apAppPrivate Not used (default = 0).
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   597
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   598
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   599
		OMX_ErrorInsufficientResources if failed to allocate buffer or update the surface configuration;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   600
		OMX_ErrorBadParameter if illegal parameters are passed;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   601
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   602
@see COmxILGraphicSinkProcessingFunction.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   603
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   604
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::DoBufferAllocation(OMX_U32 /*aSizeBytes*/, OMX_U8*& apPortSpecificBuffer, OMX_PTR& apPortPrivate, OMX_PTR& /*apPlatformPrivate*/, OMX_PTR /* apAppPrivate */)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   605
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   606
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::DoBufferAllocation +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   607
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   608
	// Create buffers allocated to be used for other components. 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   609
	TRAPD(error, iGraphicSinkPF.CreateBufferL(apPortSpecificBuffer, apPortPrivate, GetParamPortDefinition().nBufferCountActual));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   610
	switch(error)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   611
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   612
		case KErrNone:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   613
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   614
		case KErrNoMemory:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   615
			return OMX_ErrorInsufficientResources;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   616
		default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   617
			return OMX_ErrorBadParameter;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   618
		};
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   619
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   620
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   621
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   622
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   623
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   624
Utilizes buffer given from allocator component to create surface, and updates the surface configuration.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   625
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   626
@param 	aSizeBytes The size of buffer.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   627
		apPortSpecificBuffer The address of buffer.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   628
		apPortPrivate The pointer of COmxILMMBuffer.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   629
		apAppPrivate Not used (default = 0).
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   630
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   631
@return OMX_ErrorNone if successful;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   632
		OMX_ErrorInsufficientResources if failed to utilize buffer or update the surface configuration;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   633
		OMX_ErrorBadParameter if illegal parameters are passed;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   634
		
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   635
@see COmxILGraphicSinkProcessingFunction.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   636
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   637
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::DoBufferWrapping(OMX_U32 aSizeBytes, OMX_U8* apBuffer, OMX_PTR& /*apPortPrivate*/, OMX_PTR& /*apPlatformPrivate*/, OMX_PTR /*apAppPrivate*/)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   638
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   639
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::DoBufferWrapping +"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   640
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   641
	// Init buffers given from allocator component.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   642
	TRAPD(error, iGraphicSinkPF.InitBufferL(aSizeBytes, apBuffer, GetParamPortDefinition().nBufferCountActual));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   643
	switch(error)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   644
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   645
		case KErrNone:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   646
			break;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   647
		case KErrNoMemory:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   648
			return OMX_ErrorInsufficientResources;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   649
		default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   650
			return OMX_ErrorBadParameter;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   651
		};
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   652
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   653
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   654
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   655
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   656
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   657
Deallocate buffer and deallocates local resources in the processing function.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   658
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   659
@param 	apPortSpecificBuffer Not used.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   660
		apPortPrivate Not used.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   661
		apAppPrivate Not used (default = 0).
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   662
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   663
void COmxILGraphicSinkVPB0Port::DoBufferDeallocation(OMX_PTR /*apPortSpecificBuffer*/, OMX_PTR apPortPrivate, OMX_PTR /*apPlatformPrivate*/, OMX_PTR /* apAppPrivate */)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   664
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   665
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::DoBufferDeallocation"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   666
	iGraphicSinkPF.DestroyBuffer(apPortPrivate);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   667
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   668
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   669
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   670
Deinitialise buffer and deallocates local resources in the processing function.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   671
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   672
@param 	apPortSpecificBuffer Not used.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   673
		apPortPrivate Not used.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   674
		apAppPrivate Not used (default = 0).
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   675
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   676
void COmxILGraphicSinkVPB0Port::DoBufferUnwrapping(OMX_PTR /* apPortSpecificBuffer */, OMX_PTR /* apPortPrivate */, OMX_PTR /*apPlatformPrivate*/, OMX_PTR /* apAppPrivate */)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   677
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   678
	DEBUG_PRINTF(_L8("COmxILGraphicSinkVPB0Port::DoBufferUnwrapping"));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   679
	iGraphicSinkPF.DeInitBuffer();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   680
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   681
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   682
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   683
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   684
Update ParamInPortDefinition struct.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   685
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   686
void COmxILGraphicSinkVPB0Port::UpdateParamInPortDefinitionStruct()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   687
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   688
	// OMX_PARAM_PORTDEFINITION structure needs to be updated with respect to the changes from other OMX_PARAM structures.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   689
	GetParamPortDefinition().format.video.eColorFormat = GetParamVideoPortFormat().eColorFormat;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   690
	GetParamPortDefinition().format.video.xFramerate = GetParamVideoPortFormat().xFramerate;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   691
	GetParamPortDefinition().format.video.eCompressionFormat = GetParamVideoPortFormat().eCompressionFormat;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   692
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   693
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   694
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   695
Initialise all param and config structures for GraphicSink port.	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   696
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   697
void COmxILGraphicSinkVPB0Port::InitParamsAndConfigs()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   698
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   699
 	// init OMX_SYMBIAN_VIDEO_CONFIG_SURFACECONFIGRATION here
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   700
 	iParamVideoSurfaceConfiguration.nSize = sizeof(OMX_SYMBIAN_VIDEO_PARAM_SURFACECONFIGURATION);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   701
 	iParamVideoSurfaceConfiguration.nVersion = TOmxILSpecVersion();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   702
 	iParamVideoSurfaceConfiguration.nPortIndex = GetParamPortDefinition().nPortIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   703
 	iParamVideoSurfaceConfiguration.pSurfaceConfig = &iGraphicSinkPF.GetSurfaceConfiguration(); 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   704
 	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   705
 	// init OMX_CONFIG_SCALEFACTORTYPE
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   706
 	iConfigScaleFactor.nSize = sizeof(OMX_CONFIG_SCALEFACTORTYPE);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   707
 	iConfigScaleFactor.nVersion = TOmxILSpecVersion();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   708
 	iConfigScaleFactor.nPortIndex = GetParamPortDefinition().nPortIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   709
 	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   710
 	// init OMX_FRAMESIZETYPE
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   711
 	iConfigFrameSize.nSize = sizeof(OMX_FRAMESIZETYPE);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   712
 	iConfigFrameSize.nVersion = TOmxILSpecVersion();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   713
 	iConfigFrameSize.nPortIndex = GetParamPortDefinition().nPortIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   714
 	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   715
 	// init OMX_CONFIG_RECTTYPE
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   716
 	iConfigRec.nSize = sizeof(OMX_CONFIG_RECTTYPE);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   717
 	iConfigRec.nVersion = TOmxILSpecVersion();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   718
 	iConfigRec.nPortIndex = GetParamPortDefinition().nPortIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   719
 	iConfigRec.nTop = 0;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   720
 	iConfigRec.nLeft = 0;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   721
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   722
    iSharedChunkBufConfig.iNumBuffers = GetParamPortDefinition().nBufferCountActual;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   723
    iSharedChunkBufConfig.iBufferSizeInBytes = GetParamPortDefinition().nBufferSize; 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   724
    iGraphicSinkPF.SetSharedChunkBufConfig(iSharedChunkBufConfig);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   725
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   726
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   727
TInt BytesPerPixel(OMX_COLOR_FORMATTYPE aPixelFormat)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   728
    {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   729
    switch (aPixelFormat)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   730
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   731
        //fall through
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   732
        
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   733
        //case EUidPixelFormatRGB_565:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   734
        case OMX_COLOR_Format16bitRGB565:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   735
        //case EUidPixelFormatBGR_565:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   736
        case OMX_COLOR_Format16bitBGR565:       
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   737
        //case EUidPixelFormatARGB_1555:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   738
        case OMX_COLOR_Format16bitARGB1555:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   739
        //case EUidPixelFormatXRGB_1555:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   740
        //case EUidPixelFormatARGB_4444:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   741
        case OMX_COLOR_Format16bitARGB4444:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   742
        //case EUidPixelFormatARGB_8332:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   743
        case OMX_COLOR_Format8bitRGB332:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   744
        //case EUidPixelFormatBGRX_5551:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   745
        //case EUidPixelFormatBGRA_5551:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   746
        //case EUidPixelFormatBGRA_4444:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   747
        //case EUidPixelFormatBGRX_4444:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   748
        //case EUidPixelFormatAP_88:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   749
        //case EUidPixelFormatXRGB_4444:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   750
        //case EUidPixelFormatXBGR_4444:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   751
        //case EUidPixelFormatYUV_422Interleaved:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   752
        //case EUidPixelFormatYUV_422Planar:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   753
        case OMX_COLOR_FormatYUV422Planar:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   754
        //case EUidPixelFormatYUV_422Reversed:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   755
        case OMX_COLOR_FormatYCrYCb:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   756
        //case EUidPixelFormatYUV_422SemiPlanar:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   757
        case OMX_COLOR_FormatYUV422SemiPlanar:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   758
        //case EUidPixelFormatYUV_422InterleavedReversed:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   759
        //case EUidPixelFormatYYUV_422Interleaved:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   760
        case OMX_COLOR_FormatCbYCrY:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   761
        case OMX_COLOR_FormatYCbYCr:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   762
        case OMX_COLOR_FormatRawBayer10bit:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   763
            {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   764
            return 2;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   765
            }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   766
            
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   767
        //fall through
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   768
        //case EUidPixelFormatXRGB_8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   769
        //case EUidPixelFormatBGRX_8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   770
        //case EUidPixelFormatXBGR_8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   771
        //case EUidPixelFormatBGRA_8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   772
        case OMX_COLOR_Format32bitBGRA8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   773
        //case EUidPixelFormatARGB_8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   774
        case OMX_COLOR_Format32bitARGB8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   775
        //case EUidPixelFormatABGR_8888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   776
        //case EUidPixelFormatARGB_8888_PRE:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   777
        //case EUidPixelFormatABGR_8888_PRE:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   778
        //case EUidPixelFormatBGRA_8888_PRE:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   779
        //case EUidPixelFormatARGB_2101010:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   780
        //case EUidPixelFormatABGR_2101010:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   781
            {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   782
            return 4;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   783
            }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   784
            
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   785
        //fall through  
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   786
        //case EUidPixelFormatBGR_888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   787
        case OMX_COLOR_Format24bitBGR888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   788
        //case EUidPixelFormatRGB_888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   789
        case OMX_COLOR_Format24bitRGB888:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   790
            {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   791
            return 3;   
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   792
            }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   793
            
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   794
        default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   795
            return 0;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   796
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   797
    }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   798
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   799
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   800
Check the nStride value is valid.	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   801
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   802
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::ValidateStride()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   803
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   804
	if (GetParamPortDefinition().format.video.nStride < GetParamPortDefinition().format.video.nFrameWidth * BytesPerPixel(GetParamPortDefinition().format.video.eColorFormat))
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   805
	    {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   806
		return OMX_ErrorBadParameter;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   807
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   808
	return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   809
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   810
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   811
OMX_ERRORTYPE COmxILGraphicSinkVPB0Port::DoOmxUseBuffer(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   812
    OMX_HANDLETYPE aTunnelledComponent,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   813
    OMX_BUFFERHEADERTYPE** appBufferHdr,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   814
    OMX_U32 aTunnelledPortIndex,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   815
    OMX_PTR apPortPrivate,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   816
    OMX_PTR /* apPlatformPrivate */,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   817
    OMX_U32 aSizeBytes,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   818
    OMX_U8* apBuffer)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   819
    {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   820
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   821
    // Find out if the tunnelled port has support for the
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   822
    // OMX.SYMBIAN.INDEX.CONFIG.SHAREDCHUNKMETADATA extension
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   823
    if (OMX_IndexComponentStartUnused == iSharedChunkMetadataExtensionIndex)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   824
        {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   825
        if (OMX_ErrorNone == OMX_GetExtensionIndex(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   826
                aTunnelledComponent,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   827
                const_cast<char*>(OMX_SYMBIAN_INDEX_CONFIG_SHAREDCHUNKMETADATA_NAME),
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   828
                &iSharedChunkMetadataExtensionIndex))
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   829
            {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   830
            // Communicate the shared chunk metadata to the tunnelled
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   831
            // component
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   832
            OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE configSharedChunkMetadata;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   833
            configSharedChunkMetadata.nSize = sizeof(OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   834
            configSharedChunkMetadata.nVersion = TOmxILSpecVersion();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   835
            configSharedChunkMetadata.nPortIndex = GetParamPortDefinition().nPortIndex;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   836
            iGraphicSinkPF.GetSharedChunkMetadata(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   837
                    configSharedChunkMetadata.nHandleId,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   838
                    configSharedChunkMetadata.nOwnerThreadId);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   839
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   840
            // Ignore any error returned by the tunnelled component
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   841
            (void) OMX_SetConfig(aTunnelledComponent,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   842
                                 iSharedChunkMetadataExtensionIndex,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   843
                                 &configSharedChunkMetadata);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   844
            }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   845
        else
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   846
            {
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   847
            // No support in the tunnelled component.
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   848
            iSharedChunkMetadataExtensionIndex = OMX_IndexMax;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   849
            }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   850
        }
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   851
 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   852
    return OMX_UseBuffer(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   853
        aTunnelledComponent,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   854
        appBufferHdr,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   855
        aTunnelledPortIndex,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   856
        apPortPrivate,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   857
        aSizeBytes,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   858
        apBuffer);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   859
    }