--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omxilvideocomps/omxil3gpdemuxer/src/comxil3gpdemuxeraudiooutputport.cpp Fri Oct 08 22:09:17 2010 +0100
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+/**
+@file
+@internalComponent
+*/
+
+#include "log.h"
+#include "comxil3gpdemuxeraudiooutputport.h"
+#include "comxil3gpdemuxerprocessingfunction.h"
+#include "taudioformat.h"
+
+// TODO: Possibly add other mime types, for now only AAC handled
+_LIT8(KMimeTypeAudioAac, "audio/aac");
+_LIT(K3GPDemuxerAudioPortPanic, "COmxIL3GPDemuxerVideoOutputPort");
+
+
+COmxIL3GPDemuxerAudioOutputPort* COmxIL3GPDemuxerAudioOutputPort::NewL(const TOmxILCommonPortData& aCommonPortData,
+ COmxIL3GPDemuxerProcessingFunction& aProcessingFunction)
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::NewL"));
+ // TODO this array must be left empty, to be removed from the audio port constructor
+
+ COmxIL3GPDemuxerAudioOutputPort* self = new(ELeave) COmxIL3GPDemuxerAudioOutputPort(aProcessingFunction);
+ CleanupStack::PushL(self);
+ self->ConstructL(aCommonPortData);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+void COmxIL3GPDemuxerAudioOutputPort::ConstructL(const TOmxILCommonPortData& aCommonPortData)
+ {
+ RArray<OMX_AUDIO_CODINGTYPE> supportedCodings;
+ CleanupClosePushL(supportedCodings);
+ supportedCodings.AppendL(OMX_AUDIO_CodingAAC);
+ COmxILAudioPort::ConstructL(aCommonPortData, supportedCodings);
+ CleanupStack::PopAndDestroy(&supportedCodings);
+
+ OMX_PARAM_PORTDEFINITIONTYPE& paramPortDefinition=GetParamPortDefinition();
+ // We have to finish with iParamPortDefinition
+ paramPortDefinition.eDomain = OMX_PortDomainAudio;
+ paramPortDefinition.format.audio.pNativeRender = 0;
+
+ // TODO: Possible add in the future other mime types that can be handled by
+ // this audio port... for now only AAC Check
+ // COmxILAudioPort::iParamAudioPortFormat.nIndex and use
+ // COmxILAudioPort::iSupportedAudioFormats[iParamAudioPortFormat.nIndex]
+
+ iMimeTypeBuf.CreateL(KMimeTypeAudioAac(), KMimeTypeAudioAac().Length() + 1);
+
+ TUint8* pTUint = const_cast<TUint8*>(iMimeTypeBuf.PtrZ());
+ paramPortDefinition.format.audio.cMIMEType = reinterpret_cast<OMX_STRING>(pTUint);
+
+ paramPortDefinition.format.audio.bFlagErrorConcealment = OMX_FALSE;
+ paramPortDefinition.format.audio.eEncoding = OMX_AUDIO_CodingAAC;
+ }
+
+COmxIL3GPDemuxerAudioOutputPort::COmxIL3GPDemuxerAudioOutputPort(COmxIL3GPDemuxerProcessingFunction& aProcessingFunction)
+: iProcessingFunction(&aProcessingFunction)
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::COmxIL3GPDemuxerAudioOutputPort"));
+ }
+
+COmxIL3GPDemuxerAudioOutputPort::~COmxIL3GPDemuxerAudioOutputPort()
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::~COmxIL3GPDemuxerAudioOutputPort"));
+ iMimeTypeBuf.Close();
+ }
+
+OMX_ERRORTYPE COmxIL3GPDemuxerAudioOutputPort::GetLocalOmxParamIndexes(RArray<TUint>& aIndexArray) const
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::GetLocalOmxParamIndexes"));
+ OMX_ERRORTYPE omxRetValue = COmxILAudioPort::GetLocalOmxParamIndexes(aIndexArray);
+ if (omxRetValue != OMX_ErrorNone)
+ {
+ return omxRetValue;
+ }
+
+ TInt err = aIndexArray.InsertInOrder(OMX_IndexParamNumAvailableStreams);
+ // Note that index duplication is OK.
+ if (err == KErrNone || err == KErrAlreadyExists)
+ {
+ err = aIndexArray.InsertInOrder(OMX_IndexParamActiveStream);
+ }
+
+ if (err != KErrNone && err != KErrAlreadyExists)
+ {
+ return OMX_ErrorInsufficientResources;
+ }
+
+ return OMX_ErrorNone;
+ }
+
+OMX_ERRORTYPE COmxIL3GPDemuxerAudioOutputPort::GetLocalOmxConfigIndexes(RArray<TUint>& aIndexArray) const
+ {
+ return COmxILAudioPort::GetLocalOmxConfigIndexes(aIndexArray);
+ }
+
+OMX_ERRORTYPE COmxIL3GPDemuxerAudioOutputPort::GetParameter(OMX_INDEXTYPE aParamIndex,
+ TAny* apComponentParameterStructure) const
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::GetParameter"));
+ switch(aParamIndex)
+ {
+ case OMX_IndexParamNumAvailableStreams:
+ {
+ OMX_PARAM_U32TYPE* u32Type = reinterpret_cast<OMX_PARAM_U32TYPE*>(apComponentParameterStructure);
+ u32Type->nU32 = iProcessingFunction->NumAvailableStreams(COmxIL3GPDemuxer::EPortIndexAudioOutput);
+ return OMX_ErrorNone;
+ }
+
+ case OMX_IndexParamActiveStream:
+ {
+ OMX_PARAM_U32TYPE* u32Type = reinterpret_cast<OMX_PARAM_U32TYPE*>(apComponentParameterStructure);
+ u32Type->nU32 = iProcessingFunction->ActiveStream(COmxIL3GPDemuxer::EPortIndexAudioOutput);
+ return OMX_ErrorNone;
+ }
+
+ default:
+ {
+ return COmxILAudioPort::GetParameter(aParamIndex, apComponentParameterStructure);
+ }
+ }
+ }
+
+OMX_ERRORTYPE COmxIL3GPDemuxerAudioOutputPort::SetParameter(OMX_INDEXTYPE aParamIndex,
+ const TAny* apComponentParameterStructure,
+ TBool& aUpdateProcessingFunction)
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::SetParameter"));
+ switch(aParamIndex)
+ {
+ case OMX_IndexParamActiveStream:
+ {
+ const OMX_PARAM_U32TYPE* u32Type = reinterpret_cast<const OMX_PARAM_U32TYPE*>(apComponentParameterStructure);
+ return iProcessingFunction->SetActiveStream(COmxIL3GPDemuxer::EPortIndexAudioOutput, u32Type->nU32);
+ }
+
+ default:
+ {
+ return COmxILAudioPort::SetParameter(aParamIndex, apComponentParameterStructure, aUpdateProcessingFunction);
+ }
+ }
+ }
+
+OMX_ERRORTYPE COmxIL3GPDemuxerAudioOutputPort::SetFormatInPortDefinition(
+ const OMX_PARAM_PORTDEFINITIONTYPE& aPortDefinition,
+ TBool& /*aUpdateProcessingFunction*/)
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::SetFormatInPortDefinition"));
+
+ if (aPortDefinition.nBufferCountActual > KMaxAudioBuffers)
+ {
+ return OMX_ErrorBadParameter;
+ }
+
+ GetParamPortDefinition().format.audio = aPortDefinition.format.audio;
+
+ return OMX_ErrorNone;
+ }
+
+TBool COmxIL3GPDemuxerAudioOutputPort::IsTunnelledPortCompatible(const OMX_PARAM_PORTDEFINITIONTYPE& /*aPortDefinition*/) const
+ {
+ DEBUG_PRINTF(_L8("COmxIL3GPDemuxerAudioOutputPort::IsTunnelledPortCompatible"));
+
+ // This function only gets called on input ports, so panic if this is ever called
+ User::Panic(K3GPDemuxerAudioPortPanic, KErrGeneral);
+ return EFalse; // to keep compiler happy
+ }
+
+void COmxIL3GPDemuxerAudioOutputPort::FormatDetected(const TAudioFormat& aFormat)
+ {
+ GetParamPortDefinition().format.audio.eEncoding = aFormat.iCoding;
+ }
+
+OMX_AUDIO_CODINGTYPE COmxIL3GPDemuxerAudioOutputPort::AudioFormat()
+ {
+ return GetParamPortDefinition().format.audio.eEncoding;
+ }
+
+/** Returns the number of buffers configured on this port. */
+TInt COmxIL3GPDemuxerAudioOutputPort::BufferCount() const
+ {
+ return GetParamPortDefinition().nBufferCountActual;
+ }