omxilvideocomps/omxil3gpdemuxer/src/comxil3gpdemuxer.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 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
/**
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    20
@file
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    21
@internalComponent
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    22
*/
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    23
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    24
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    25
#include <openmax/il/common/omxilspecversion.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    26
#include <openmax/il/loader/omxilcomponentif.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    27
#include <openmax/il/loader/omxilsymbiancomponentif.h>
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    28
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    29
#include "comxil3gpdemuxer.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    30
#include "comxil3gpdemuxertimeinputport.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    31
#include "comxil3gpdemuxeraudiooutputport.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    32
#include "comxil3gpdemuxervideooutputport.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    33
#include "comxil3gpdemuxerprocessingfunction.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    34
#include "comxil3gpdemuxerconfigmanager.h"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    35
#include "omxil3gpdemuxer.hrh"
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    36
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    37
_LIT8(KSymbianOmxIL3gpDemuxerName, "OMX.SYMBIAN.OTHER.CONTAINER_DEMUXER.3GP");
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    38
_LIT8(KSymbianOmxIL3gpDemuxerRole, "container_demuxer");
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    39
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    40
OMXIL_COMPONENT_ECOM_ENTRYPOINT(KUidSymbianOmxIL3gpDemuxer);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    41
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    42
OMX_ERRORTYPE SymbianErrorToOmx(TInt aError);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    43
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    44
// Component Entry Point
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    45
OMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE aComponent)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    46
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    47
	TInt err = COmxIL3GPDemuxer::CreateComponent(aComponent);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    48
	return SymbianErrorToOmx(err);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    49
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    50
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    51
TInt COmxIL3GPDemuxer::CreateComponent(OMX_HANDLETYPE hComponent)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    52
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    53
	COmxIL3GPDemuxer* self = new COmxIL3GPDemuxer();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    54
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    55
	if (!self)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    56
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    57
		return KErrNoMemory;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    58
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    59
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    60
	TRAPD(err, self->ConstructL(hComponent));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    61
	if(err)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    62
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    63
		delete self;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    64
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    65
	return err;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    66
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    67
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    68
COmxIL3GPDemuxer::COmxIL3GPDemuxer()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    69
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    70
	// nothing to do
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    71
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    72
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    73
void COmxIL3GPDemuxer::ConstructL(OMX_HANDLETYPE hComponent)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    74
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    75
	COmxILComponent::ConstructL(hComponent);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    76
	MOmxILCallbackNotificationIf* callbackNotificationIf=CreateCallbackManagerL(COmxILComponent::EOutofContext);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    77
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    78
	COmxIL3GPDemuxerProcessingFunction* pProcessingFunction = COmxIL3GPDemuxerProcessingFunction::NewL(*callbackNotificationIf);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    79
	RegisterProcessingFunction(pProcessingFunction);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    80
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    81
	CreatePortManagerL(COmxILComponent::ENonBufferSharingPortManager,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    82
					TOmxILSpecVersion(),         // Component's OMX Version
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    83
					1,					         // The number of audio ports in this component
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    84
					0, 							 // The starting audio port index
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    85
					0,					         // The number of image ports in this component
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    86
					0,					         // The starting image port index
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    87
					1,					         // The number of video ports in this component
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    88
					1,					         // The starting video port index
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    89
					1,					         // The number of other ports in this component
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    90
					2							 // The starting other port index
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    91
					);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    92
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    93
	RPointerArray<TDesC8> roleList;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    94
	CleanupClosePushL(roleList);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    95
	roleList.AppendL(&KSymbianOmxIL3gpDemuxerRole);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    96
	COmxIL3GPDemuxerConfigManager* configManager = COmxIL3GPDemuxerConfigManager::NewL(KSymbianOmxIL3gpDemuxerName, TOmxILSpecVersion(), roleList, *(static_cast<COmxIL3GPDemuxerProcessingFunction*>(pProcessingFunction)));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    97
	RegisterConfigurationManager(configManager);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    98
	CleanupStack::PopAndDestroy(&roleList);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
    99
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   100
	static_cast<COmxIL3GPDemuxerProcessingFunction*>(pProcessingFunction)->SetConfigManager(*configManager);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   101
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   102
	AddAudioOutputPortL();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   103
	AddVideoOutputPortL();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   104
	AddTimeInputPortL();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   105
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   106
	InitComponentL();
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   107
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   108
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   109
COmxIL3GPDemuxer::~COmxIL3GPDemuxer()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   110
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   111
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   112
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   113
void COmxIL3GPDemuxer::AddTimeInputPortL()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   114
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   115
	TOmxILSpecVersion specVersion;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   116
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   117
	TOmxILCommonPortData portData(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   118
			specVersion, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   119
			EPortIndexTimeInput, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   120
			OMX_DirInput, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   121
			1,													// minimum number of buffers
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   122
			0,													// minimum buffer size, in bytes
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   123
			OMX_PortDomainOther, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   124
			OMX_TRUE,											// contigious buffers
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   125
			4,													// 4-byte alignment
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   126
			OMX_BufferSupplyUnspecified, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   127
			COmxILPort::KBufferMarkPropagationPortNotNeeded
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   128
			);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   129
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   130
	RArray<OMX_OTHER_FORMATTYPE> supportedOtherFormats;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   131
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   132
	CleanupClosePushL(supportedOtherFormats);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   133
	supportedOtherFormats.Append(OMX_OTHER_FormatTime);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   134
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   135
	COmxIL3GPDemuxerTimeInputPort* timeInputPort = COmxIL3GPDemuxerTimeInputPort::NewL(portData, supportedOtherFormats,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   136
														*(static_cast<COmxIL3GPDemuxerProcessingFunction*>(GetProcessingFunction())));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   137
	
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   138
	CleanupStack::PopAndDestroy(&supportedOtherFormats);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   139
	CleanupStack::PushL(timeInputPort);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   140
	User::LeaveIfError(AddPort(timeInputPort, OMX_DirInput));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   141
	CleanupStack::Pop();//timeInputPort
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   142
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   143
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   144
void COmxIL3GPDemuxer::AddAudioOutputPortL()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   145
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   146
	TOmxILSpecVersion specVersion;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   147
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   148
	TOmxILCommonPortData portData(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   149
			specVersion,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   150
			EPortIndexAudioOutput, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   151
			OMX_DirOutput, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   152
			1,													// minimum number of buffers
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   153
			1600,												// minimum buffer size, in bytes
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   154
			OMX_PortDomainAudio, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   155
			OMX_FALSE,											// do not need contigious buffers
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   156
			4,													// 4-byte alignment
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   157
			OMX_BufferSupplyUnspecified, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   158
			EPortIndexAudioOutput
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   159
			);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   160
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   161
	COmxIL3GPDemuxerAudioOutputPort* audioOutputPort = COmxIL3GPDemuxerAudioOutputPort::NewL(portData, *(static_cast<COmxIL3GPDemuxerProcessingFunction*>(GetProcessingFunction())));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   162
	CleanupStack::PushL(audioOutputPort);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   163
	User::LeaveIfError(AddPort(audioOutputPort, OMX_DirOutput));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   164
	CleanupStack::Pop();//audioOutputPort
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   165
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   166
	static_cast<COmxIL3GPDemuxerProcessingFunction*>(GetProcessingFunction())->SetAudioPort(*audioOutputPort);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   167
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   168
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   169
void COmxIL3GPDemuxer::AddVideoOutputPortL()
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   170
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   171
	TOmxILSpecVersion specVersion;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   172
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   173
	TOmxILCommonPortData portData(
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   174
			specVersion, 
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   175
			EPortIndexVideoOutput,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   176
			OMX_DirOutput,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   177
			1,													// minimum number of buffers, we don't need buffers for format detection
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   178
			62400,												// minimum buffer size, in bytes, TODO autodetect this
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   179
			OMX_PortDomainVideo,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   180
			OMX_FALSE,											// do not need contigious buffers
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   181
			4,													// 4-byte alignment
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   182
			OMX_BufferSupplyUnspecified,
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   183
			EPortIndexVideoOutput
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   184
			);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   185
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   186
	COmxIL3GPDemuxerVideoOutputPort* videoOutputPort = COmxIL3GPDemuxerVideoOutputPort::NewL(portData, *(static_cast<COmxIL3GPDemuxerProcessingFunction*>(GetProcessingFunction())));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   187
	CleanupStack::PushL(videoOutputPort);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   188
	User::LeaveIfError(AddPort(videoOutputPort, OMX_DirOutput));
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   189
	CleanupStack::Pop();//videoOutputPort
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   190
	static_cast<COmxIL3GPDemuxerProcessingFunction*>(GetProcessingFunction())->SetVideoPort(*videoOutputPort);
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   191
	}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   192
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   193
OMX_ERRORTYPE SymbianErrorToOmx(TInt aError)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   194
	{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   195
	switch(aError)
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   196
		{
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   197
	case KErrNone:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   198
		return OMX_ErrorNone;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   199
	case KErrNoMemory:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   200
		return OMX_ErrorInsufficientResources;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   201
	default:
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   202
		return OMX_ErrorUndefined;
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   203
		}
5d29cba61097 2010wk38_02
hgs
parents:
diff changeset
   204
	}