--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omxil_generic/omxilcomplib/src/omxilclientclockport.cpp Wed Aug 25 12:40:50 2010 +0300
@@ -0,0 +1,229 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include <openmax/il/common/omxilclientclockport.h>
+#include "log.h"
+
+
+EXPORT_C COmxILClientClockPort* COmxILClientClockPort::NewL(const TOmxILCommonPortData& aCommonPortData,
+ const RArray<OMX_OTHER_FORMATTYPE>& aSupportedOtherFormats)
+ {
+ COmxILClientClockPort* self = new(ELeave) COmxILClientClockPort();
+ CleanupStack::PushL(self);
+ self->ConstructL(aCommonPortData, aSupportedOtherFormats);
+ CleanupStack::Pop();
+ return self;
+ }
+
+void COmxILClientClockPort::ConstructL(const TOmxILCommonPortData& aCommonPortData, const RArray<OMX_OTHER_FORMATTYPE>& aSupportedOtherFormats)
+ {
+ COmxILOtherPort::ConstructL(aCommonPortData, aSupportedOtherFormats);
+ }
+
+COmxILClientClockPort::COmxILClientClockPort()
+ : iSpecVersion(TOmxILSpecVersion())
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::COmxILClientClockPort"));
+ }
+
+OMX_ERRORTYPE COmxILClientClockPort::GetLocalOmxParamIndexes(RArray<TUint>& aIndexArray) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetLocalOmxParamIndexes"));
+ return COmxILOtherPort::GetLocalOmxParamIndexes(aIndexArray);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::GetLocalOmxConfigIndexes(RArray<TUint>& aIndexArray) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetLocalOmxParamIndexes"));
+ return COmxILOtherPort::GetLocalOmxConfigIndexes(aIndexArray);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::GetParameter(OMX_INDEXTYPE aParamIndex,
+ TAny* apComponentParameterStructure) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetParameter"));
+ return COmxILOtherPort::GetParameter(aParamIndex, apComponentParameterStructure);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::SetParameter(OMX_INDEXTYPE aParamIndex,
+ const TAny* apComponentParameterStructure,
+ TBool& aUpdateProcessingFunction)
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::SetParameter"));
+ return COmxILOtherPort::SetParameter(aParamIndex, apComponentParameterStructure, aUpdateProcessingFunction);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::SetFormatInPortDefinition(const OMX_PARAM_PORTDEFINITIONTYPE& /*aPortDefinition*/,
+ TBool& /*aUpdateProcessingFunction*/)
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::SetFormatInPortDefinition"));
+ return OMX_ErrorNone;
+ }
+
+
+TBool COmxILClientClockPort::IsTunnelledPortCompatible(const OMX_PARAM_PORTDEFINITIONTYPE& aPortDefinition) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::IsTunnelledPortCompatible"));
+ // Domain check
+ if(aPortDefinition.eDomain != GetParamPortDefinition().eDomain)
+ {
+ return EFalse;
+ }
+
+ // Format check
+ if (aPortDefinition.format.other.eFormat != GetParamPortDefinition().format.other.eFormat)
+ {
+ return EFalse;
+ }
+
+ return ETrue;
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::GetMediaTime(OMX_TICKS& aMediaTime) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetMediaTime"));
+ return GetTime(aMediaTime, OMX_IndexConfigTimeCurrentMediaTime);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::GetWallTime(OMX_TICKS& aWallTime) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetWallTime"));
+ return GetTime(aWallTime, OMX_IndexConfigTimeCurrentWallTime);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::GetClockState(OMX_TIME_CONFIG_CLOCKSTATETYPE& aClockState) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetClockState"));
+
+ if (IsClockComponentAvailable())
+ {
+ aClockState.nSize = sizeof(OMX_TIME_CONFIG_CLOCKSTATETYPE);
+ aClockState.nVersion = iSpecVersion;
+ aClockState.eState = OMX_TIME_ClockStateMax;
+ aClockState.nStartTime = 0;
+ aClockState.nOffset = 0;
+ aClockState.nWaitMask = 0;
+ return OMX_GetConfig(GetTunnelledComponent(), OMX_IndexConfigTimeClockState, &aClockState);
+ }
+
+ return OMX_ErrorIncorrectStateOperation;
+
+ }
+
+OMX_ERRORTYPE COmxILClientClockPort::MediaTimeRequest(const OMX_PTR apPrivate,
+ const OMX_TICKS aMediaTime,
+ const OMX_TICKS aOffset) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::MediaTimeRequest"));
+ OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE timeInfo;
+ timeInfo.nSize = sizeof(timeInfo);
+ timeInfo.nVersion = iSpecVersion;
+ timeInfo.nPortIndex = GetTunnelledPort();
+ timeInfo.pClientPrivate = apPrivate;
+ timeInfo.nMediaTimestamp = aMediaTime;
+ timeInfo.nOffset = aOffset;
+
+ if (IsClockComponentAvailable())
+ {
+ return OMX_SetConfig(GetTunnelledComponent(), OMX_IndexConfigTimeMediaTimeRequest, &timeInfo);
+ }
+
+ return OMX_ErrorIncorrectStateOperation;
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::SetStartTime(const OMX_TICKS aStartTime) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::SetStartTime"));
+ return SetTime(aStartTime, OMX_IndexConfigTimeClientStartTime);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::SetVideoReference(const OMX_TICKS aVideoRef) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::SetVideoReference"));
+ return SetTime(aVideoRef, OMX_IndexConfigTimeCurrentVideoReference);
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::SetAudioReference(const OMX_TICKS aAudioRef) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::SetAudioReference"));
+ return SetTime(aAudioRef, OMX_IndexConfigTimeCurrentAudioReference);
+ }
+
+OMX_BOOL COmxILClientClockPort::IsClockComponentAvailable() const
+{
+ if (GetTunnelledComponent() != NULL && GetParamPortDefinition().bEnabled)
+ {
+ return OMX_TRUE;
+ }
+
+ return OMX_FALSE;
+}
+
+OMX_ERRORTYPE COmxILClientClockPort::GetTime(OMX_TICKS& aWallTime, const OMX_INDEXTYPE aTimeIndex) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::GetTime"));
+ OMX_TIME_CONFIG_TIMESTAMPTYPE timeInfo;
+ timeInfo.nSize = sizeof(timeInfo);
+ timeInfo.nVersion = iSpecVersion;
+ timeInfo.nPortIndex = GetTunnelledPort();
+
+ if (!IsClockComponentAvailable())
+ {
+ return OMX_ErrorIncorrectStateOperation;
+ }
+
+ OMX_ERRORTYPE error = OMX_GetConfig(GetTunnelledComponent(), aTimeIndex, &timeInfo);
+
+ if (error == OMX_ErrorNone)
+ {
+ aWallTime = timeInfo.nTimestamp;
+ }
+
+ return error;
+ }
+
+
+OMX_ERRORTYPE COmxILClientClockPort::SetTime(const OMX_TICKS aStartTime, const OMX_INDEXTYPE aTimeIndex) const
+ {
+ DEBUG_PRINTF(_L8("COmxILClientClockPort::SetTime"));
+ OMX_TIME_CONFIG_TIMESTAMPTYPE timeInfo;
+ timeInfo.nSize = sizeof(timeInfo);
+ timeInfo.nVersion = iSpecVersion;
+ timeInfo.nPortIndex = GetTunnelledPort();
+ timeInfo.nTimestamp = aStartTime;
+
+ if (IsClockComponentAvailable())
+ {
+ return OMX_SetConfig(GetTunnelledComponent(), aTimeIndex, &timeInfo);
+ }
+
+ return OMX_ErrorIncorrectStateOperation;
+ }