diff options
author | James Dong <jdong@google.com> | 2009-12-02 22:18:44 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-12-02 22:18:44 -0800 |
commit | 9d018d8437a4936275270b7866b9bf557f566d37 (patch) | |
tree | 7c0ff1a49e7d6a193e45dd1874103859aaf37e36 | |
parent | 5e291bbb990db983435932e76319a2fd19a302c0 (diff) | |
parent | 674995079ccb3544671ae00d378d2d932ca9d062 (diff) | |
download | opencore-9d018d8437a4936275270b7866b9bf557f566d37.tar.gz |
am 67499507: Enable the support for selecting preferred video codecs (software based vs hardware based)
Merge commit '674995079ccb3544671ae00d378d2d932ca9d062' into eclair-mr2
* commit '674995079ccb3544671ae00d378d2d932ca9d062':
Enable the support for selecting preferred video codecs (software based vs hardware based)
21 files changed, 81 insertions, 41 deletions
diff --git a/android/metadatadriver.cpp b/android/metadatadriver.cpp index 93583dc08..8b594425d 100644 --- a/android/metadatadriver.cpp +++ b/android/metadatadriver.cpp @@ -538,7 +538,7 @@ void MetadataDriver::handleCreate() { LOGV("handleCreate"); int error = 0; - OSCL_TRY(error, mUtil = PVFrameAndMetadataFactory::CreateFrameAndMetadataUtility((char*)PVMF_MIME_YUV420, this, this, this)); + OSCL_TRY(error, mUtil = PVFrameAndMetadataFactory::CreateFrameAndMetadataUtility((char*)PVMF_MIME_YUV420, this, this, this, false)); if (error || mUtil->SetMode(PV_FRAME_METADATA_INTERFACE_MODE_SOURCE_METADATA_AND_THUMBNAIL) != PVMFSuccess) { handleCommandFailure(); } else { diff --git a/codecs_v2/omx/omx_common/include/pv_omxcore.h b/codecs_v2/omx/omx_common/include/pv_omxcore.h index 9b42e8ac6..57f026ca0 100644 --- a/codecs_v2/omx/omx_common/include/pv_omxcore.h +++ b/codecs_v2/omx/omx_common/include/pv_omxcore.h @@ -312,7 +312,8 @@ class OMXGlobalData OSCL_IMPORT_REF OMX_ERRORTYPE OMX_APIENTRY OMX_MasterGetHandle(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN OMX_STRING cComponentName, OMX_IN OMX_PTR pAppData, - OMX_IN OMX_CALLBACKTYPE* pCallBacks); + OMX_IN OMX_CALLBACKTYPE* pCallBacks, + OMX_IN OMX_BOOL bHWAccelerated = OMX_TRUE); OSCL_IMPORT_REF OMX_ERRORTYPE OMX_MasterGetRolesOfComponent( OMX_IN OMX_STRING compName, diff --git a/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp b/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp index d28000e75..b6360d2f3 100644 --- a/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp +++ b/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp @@ -81,6 +81,7 @@ typedef struct PVOMXMasterRegistryStruct { OMX_U8 CompName[PV_OMX_MAX_COMPONENT_NAME_LENGTH]; OMX_U8 CompRole[PV_OMX_MAX_COMPONENT_NAME_LENGTH]; + OMX_BOOL bHWAccelerated; OMX_U32 OMXCoreIndex; OMX_U32 CompIndex; } PVOMXMasterRegistryStruct; @@ -275,6 +276,11 @@ static OMX_ERRORTYPE _OMX_MasterInit(OMXMasterCoreGlobalData *data) strncpy((OMX_STRING)pOMXMasterRegistry[master_index].CompRole, (OMX_STRING)ComponentRoles[role], PV_OMX_MAX_COMPONENT_NAME_LENGTH); pOMXMasterRegistry[master_index].OMXCoreIndex = jj; pOMXMasterRegistry[master_index].CompIndex = component_index; + if (strstr(ComponentName, "OMX.PV.")) { + pOMXMasterRegistry[master_index].bHWAccelerated = OMX_FALSE; + } else { + pOMXMasterRegistry[master_index].bHWAccelerated = OMX_TRUE; + } master_index++; } @@ -529,7 +535,8 @@ OSCL_EXPORT_REF OMX_ERRORTYPE OMX_APIENTRY OMX_MasterGetHandle( OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN OMX_STRING cComponentName, OMX_IN OMX_PTR pAppData, - OMX_IN OMX_CALLBACKTYPE* pCallBacks) + OMX_IN OMX_CALLBACKTYPE* pCallBacks, + OMX_BOOL bHWAccelerated) { OMX_ERRORTYPE Status = OMX_ErrorNone; OMX_U32 ii, kk; @@ -561,8 +568,13 @@ OSCL_EXPORT_REF OMX_ERRORTYPE OMX_APIENTRY OMX_MasterGetHandle( // go through the list of supported components and find the component based on its name (identifier) if (!oscl_strcmp((OMX_STRING)pOMXMasterRegistry[ii].CompName, cComponentName)) { - // found a matching name - break; + // when we are not requesting a HW accelelrated codec, we must find a software + // codec. + if (!bHWAccelerated) { + if (!pOMXMasterRegistry[ii].bHWAccelerated) break; + } else { + break; + } } } if (ii == (data->iTotalNumOMXComponents)) diff --git a/engines/adapters/player/framemetadatautility/include/pv_frame_metadata_factory.h b/engines/adapters/player/framemetadatautility/include/pv_frame_metadata_factory.h index a40a81d43..1729798f4 100644 --- a/engines/adapters/player/framemetadatautility/include/pv_frame_metadata_factory.h +++ b/engines/adapters/player/framemetadatautility/include/pv_frame_metadata_factory.h @@ -60,7 +60,8 @@ class PVFrameAndMetadataFactory OSCL_IMPORT_REF static PVFrameAndMetadataInterface* CreateFrameAndMetadataUtility(char *aOutputFormatMIMEType, PVCommandStatusObserver* aCmdStatusObserver, PVErrorEventObserver *aErrorEventObserver, - PVInformationalEventObserver *aInfoEventObserver); + PVInformationalEventObserver *aInfoEventObserver, + bool aHwAccelerate = true); /** * This function allows the application to delete an instance of a pvFrameAndMetadata utility * and reclaim all allocated resources. An utility instance can be deleted only in diff --git a/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_factory.cpp b/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_factory.cpp index a79143edf..cd00b51e7 100644 --- a/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_factory.cpp +++ b/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_factory.cpp @@ -47,9 +47,10 @@ OSCL_DLL_ENTRY_POINT_DEFAULT() OSCL_EXPORT_REF PVFrameAndMetadataInterface *PVFrameAndMetadataFactory::CreateFrameAndMetadataUtility(char *aOutputFormatMIMEType, PVCommandStatusObserver* aCmdStatusObserver, PVErrorEventObserver *aErrorEventObserver, - PVInformationalEventObserver *aInfoEventObserver) + PVInformationalEventObserver *aInfoEventObserver, + bool aHwAccelerated) { - return PVFrameAndMetadataUtility::New(aOutputFormatMIMEType, aCmdStatusObserver, aErrorEventObserver, aInfoEventObserver); + return PVFrameAndMetadataUtility::New(aOutputFormatMIMEType, aCmdStatusObserver, aErrorEventObserver, aInfoEventObserver, aHwAccelerated); } diff --git a/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.cpp b/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.cpp index da833b063..370b31da8 100644 --- a/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.cpp +++ b/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.cpp @@ -37,7 +37,7 @@ static const char PVFMUTIL_FRAMERETRIEVAL_TIMEOUT_KEY[] = "x-pvmf/fmu/timeout-fr #define PVFMUTIL_VIDEOFRAMEBUFFER_MEMPOOL_BUFFERSIZE PVFMUTIL_VIDEOFRAMEBUFFER_MAXSIZE*2 PVFrameAndMetadataUtility* PVFrameAndMetadataUtility::New(char *aOutputFormatMIMEType, PVCommandStatusObserver *aCmdObserver, - PVErrorEventObserver *aErrorObserver, PVInformationalEventObserver *aInfoObserver) + PVErrorEventObserver *aErrorObserver, PVInformationalEventObserver *aInfoObserver, bool aHwAccelerated) { if (aOutputFormatMIMEType == NULL || aCmdObserver == NULL || aErrorObserver == NULL || aInfoObserver == NULL) @@ -47,7 +47,7 @@ PVFrameAndMetadataUtility* PVFrameAndMetadataUtility::New(char *aOutputFormatMIM } PVFrameAndMetadataUtility* util = NULL; - util = OSCL_NEW(PVFrameAndMetadataUtility, ()); + util = OSCL_NEW(PVFrameAndMetadataUtility, (aHwAccelerated)); if (util) { util->Construct(aOutputFormatMIMEType, @@ -374,7 +374,8 @@ PVCommandId PVFrameAndMetadataUtility::RemoveDataSource(PVPlayerDataSource& aDat } -PVFrameAndMetadataUtility::PVFrameAndMetadataUtility() : +PVFrameAndMetadataUtility::PVFrameAndMetadataUtility(bool aHwAccelerated) : + iHwAccelerated(aHwAccelerated), OsclTimerObject(OsclActiveObject::EPriorityNominal, "PVFrameMetadataUtility"), iCommandId(0), iState(PVFM_UTILITY_STATE_IDLE), @@ -433,7 +434,7 @@ void PVFrameAndMetadataUtility::Construct(char *aOutputFormatMIMEType, PVCommand iInfoEventObserver = aInfoObserver; // Create the player instance - iPlayer = PVPlayerFactory::CreatePlayer(this, this, this); + iPlayer = PVPlayerFactory::CreatePlayer(this, this, this, iHwAccelerated); OSCL_ASSERT(iPlayer != NULL); // Allocate memory for vectors @@ -2615,7 +2616,7 @@ PVMFStatus PVFrameAndMetadataUtility::DoPlayerShutdownRestart(void) leavecode = 0; PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iPerfLogger, PVLOGMSG_NOTICE, (0, "PVFrameAndMetadataUtility::CreatePlayer Called Tick=%d", OsclTickCount::TickCount())); - OSCL_TRY(leavecode, iPlayer = PVPlayerFactory::CreatePlayer(this, this, this)); + OSCL_TRY(leavecode, iPlayer = PVPlayerFactory::CreatePlayer(this, this, this, iHwAccelerated)); OSCL_FIRST_CATCH_ANY(leavecode, PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVFrameAndMetadataUtility::DoPlayerShutdownRestart() Player engine could not be instantiated! Asserting")); OSCL_ASSERT(false); diff --git a/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.h b/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.h index 3b2208c40..2fb9c1f07 100644 --- a/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.h +++ b/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.h @@ -411,7 +411,8 @@ class PVFrameAndMetadataUtility : public OsclTimerObject, static PVFrameAndMetadataUtility* New(char *aOutputFormatMIMEType, PVCommandStatusObserver *aCmdObserver, PVErrorEventObserver *aErrorObserver, - PVInformationalEventObserver *aInfoObserver); + PVInformationalEventObserver *aInfoObserver, + bool aHwAccelerated = true); ~PVFrameAndMetadataUtility(); // From PVFrameAndMetadataInterface @@ -444,9 +445,10 @@ class PVFrameAndMetadataUtility : public OsclTimerObject, PVMFStatus verifyParametersSync(PvmiMIOSession aSession, PvmiKvp* aParameters, int aNumElements); private: + bool iHwAccelerated; PVMFBasicErrorInfoMessage* CreateBasicErrInfoMessage(PVMFErrorInfoMessageInterface* nextmsg, PVFMErrorEventType aErrEvent = PVFMErrPlayerEngine); - PVFrameAndMetadataUtility(); + PVFrameAndMetadataUtility(bool aHwAccelerated); void Construct(char *aOutputFormatMIMEType, PVCommandStatusObserver *aCmdObserver, PVErrorEventObserver *aErrorObserver, diff --git a/engines/player/config/core/pv_player_node_registry_populator.cpp b/engines/player/config/core/pv_player_node_registry_populator.cpp index e53438741..358421730 100644 --- a/engines/player/config/core/pv_player_node_registry_populator.cpp +++ b/engines/player/config/core/pv_player_node_registry_populator.cpp @@ -150,7 +150,9 @@ void PVPlayerRegistryPopulator::RegisterAllNodes(PVPlayerNodeRegistryInterface* nodeinfo.iNodeUUID = KPVMFOMXVideoDecNodeUuid; nodeinfo.iOutputType.clear(); nodeinfo.iOutputType.push_back(PVMF_MIME_YUV420); - nodeinfo.iNodeCreateFunc = PVMFOMXVideoDecNodeFactory::CreatePVMFOMXVideoDecNode; + // Only CreatePVMFOMXVideoDecNode has a different funtional pointer type + // we do a cast here so that iNodeCreateFunc can be used uniformly for other types of nodes + nodeinfo.iNodeCreateFunc = (PVMFNodeInterface*(*)(int32))PVMFOMXVideoDecNodeFactory::CreatePVMFOMXVideoDecNode; nodeinfo.iNodeReleaseFunc = PVMFOMXVideoDecNodeFactory::DeletePVMFOMXVideoDecNode; aRegistry->RegisterNode(nodeinfo); #endif diff --git a/engines/player/include/pv_player_factory.h b/engines/player/include/pv_player_factory.h index e5790a245..86679a3d7 100644 --- a/engines/player/include/pv_player_factory.h +++ b/engines/player/include/pv_player_factory.h @@ -60,7 +60,8 @@ class PVPlayerFactory **/ OSCL_IMPORT_REF static PVPlayerInterface* CreatePlayer(PVCommandStatusObserver* aCmdStatusObserver, PVErrorEventObserver *aErrorEventObserver, - PVInformationalEventObserver *aInfoEventObserver); + PVInformationalEventObserver *aInfoEventObserver, + bool aHwAccelerated = true); /** * This function allows the application to delete an instance of a pvPlayer * and reclaim all allocated resources. A player can be deleted only in diff --git a/engines/player/src/pv_player_engine.cpp b/engines/player/src/pv_player_engine.cpp index 567d1c9c9..1027bb663 100644 --- a/engines/player/src/pv_player_engine.cpp +++ b/engines/player/src/pv_player_engine.cpp @@ -96,10 +96,11 @@ PVPlayerEngine* PVPlayerEngine::New(PVCommandStatusObserver* aCmdStatusObserver, PVErrorEventObserver *aErrorEventObserver, - PVInformationalEventObserver *aInfoEventObserver) + PVInformationalEventObserver *aInfoEventObserver, + bool aHwAccelerated) { PVPlayerEngine* engine = NULL; - engine = OSCL_NEW(PVPlayerEngine, ()); + engine = OSCL_NEW(PVPlayerEngine, (aHwAccelerated)); if (engine) { engine->Construct(aCmdStatusObserver, @@ -1026,7 +1027,8 @@ bool PVPlayerEngine::queryInterface(const PVUuid& uuid, PVInterface*& iface) -PVPlayerEngine::PVPlayerEngine() : +PVPlayerEngine::PVPlayerEngine(bool aHwAccelerated) : + iHwAccelerated(aHwAccelerated), OsclTimerObject(OsclActiveObject::EPriorityNominal, "PVPlayerEngine"), iCommandId(0), iState(PVP_ENGINE_STATE_IDLE), @@ -4459,7 +4461,7 @@ PVMFStatus PVPlayerEngine::DoSetupSourceNode(PVCommandId aCmdId, OsclAny* aCmdCo } int32 leavecode = 0; - OSCL_TRY(leavecode, iSourceNode = iPlayerNodeRegistry.CreateNode(foundUuids[0])); + OSCL_TRY(leavecode, iSourceNode = iPlayerNodeRegistry.CreateNode(foundUuids[0], true)); OSCL_FIRST_CATCH_ANY(leavecode, PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerEngine::DoSetupDecNode() Error in creating SourceNode")); return PVMFFailure;); @@ -6729,7 +6731,7 @@ PVMFStatus PVPlayerEngine::DoDecNodeQueryCapConfigIF(PVCommandId aCmdId, OsclAny if (!foundUuids.empty()) { PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::DoDecNodeQueryCapConfigIF() Node found for %s, sink %s", currTrack->getTrackMimeType().get_str(), iSinkFormat.getMIMEStrPtr())); - iTrackSelectionList[i].iTsDecNode = iPlayerNodeRegistry.CreateNode(foundUuids[0]); + iTrackSelectionList[i].iTsDecNode = iPlayerNodeRegistry.CreateNode(foundUuids[0], iHwAccelerated); if (iTrackSelectionList[i].iTsDecNode != NULL) { diff --git a/engines/player/src/pv_player_engine.h b/engines/player/src/pv_player_engine.h index a8a6d6c76..be6b16d0b 100644 --- a/engines/player/src/pv_player_engine.h +++ b/engines/player/src/pv_player_engine.h @@ -893,7 +893,8 @@ class PVPlayerEngine : public OsclTimerObject, public: static PVPlayerEngine* New(PVCommandStatusObserver *aCmdObserver, PVErrorEventObserver *aErrorObserver, - PVInformationalEventObserver *aInfoObserver); + PVInformationalEventObserver *aInfoObserver, + bool aHwAccelerated); ~PVPlayerEngine(); // From PVPlayerInterface @@ -967,7 +968,7 @@ class PVPlayerEngine : public OsclTimerObject, void PVPlayerWatchdogTimerEvent(); private: - PVPlayerEngine(); + PVPlayerEngine(bool aHwAccelerated); void Construct(PVCommandStatusObserver *aCmdObserver, PVErrorEventObserver *aErrorObserver, PVInformationalEventObserver *aInfoObserver); @@ -1179,6 +1180,7 @@ class PVPlayerEngine : public OsclTimerObject, PVMFStatus DoVerifyAndSetPlayerParameter(PvmiKvp& aParameter, bool aSetParam); PVMFStatus DoVerifyAndSetPlayerProductInfoParameter(PvmiKvp& aParameter, bool aSetParam); PVMFStatus DoSetConfigSyncMargin(int32 aEarlyMargin, int32 aLateMargin, int32 aMediaType); + bool iHwAccelerated; int32 iCapConfigContext; // Engine datapath and related variables diff --git a/engines/player/src/pv_player_factory.cpp b/engines/player/src/pv_player_factory.cpp index 1eb56b799..ff114b14a 100644 --- a/engines/player/src/pv_player_factory.cpp +++ b/engines/player/src/pv_player_factory.cpp @@ -44,9 +44,10 @@ OSCL_DLL_ENTRY_POINT_DEFAULT() OSCL_EXPORT_REF PVPlayerInterface *PVPlayerFactory::CreatePlayer(PVCommandStatusObserver* aCmdStatusObserver, PVErrorEventObserver *aErrorEventObserver, - PVInformationalEventObserver *aInfoEventObserver) + PVInformationalEventObserver *aInfoEventObserver, + bool aHwAccelerated) { - return PVPlayerEngine::New(aCmdStatusObserver, aErrorEventObserver, aInfoEventObserver); + return PVPlayerEngine::New(aCmdStatusObserver, aErrorEventObserver, aInfoEventObserver, aHwAccelerated); } OSCL_EXPORT_REF bool PVPlayerFactory::DeletePlayer(PVPlayerInterface* aPlayer) diff --git a/engines/player/src/pv_player_node_registry.cpp b/engines/player/src/pv_player_node_registry.cpp index 3b5bc139c..3aa8aeba1 100644 --- a/engines/player/src/pv_player_node_registry.cpp +++ b/engines/player/src/pv_player_node_registry.cpp @@ -231,7 +231,7 @@ PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFF } -PVMFNodeInterface* PVPlayerNodeRegistry::CreateNode(PVUuid& aUuid) +PVMFNodeInterface* PVPlayerNodeRegistry::CreateNode(PVUuid& aUuid, bool aHwAccelerated) { PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerNodeRegistry::CreateNode() IN")); bool iFoundFlag = false; @@ -266,8 +266,21 @@ PVMFNodeInterface* PVPlayerNodeRegistry::CreateNode(PVUuid& aUuid) #endif if (NULL != nodeInfo->iNodeCreateFunc) { - nodeInterface = (*(iType[NodeSearchCount].iNodeCreateFunc))(priority); + if (KPVMFOMXVideoDecNodeUuid == aUuid) + { + // FIXME: + // for now, we care about whether it is hardware-based or not only when it is a video decoder node. + // do a cast on the fucntion pointer + PVMFNodeInterface*(*aVideoDecNodeCreateFunc)(int32, bool); + aVideoDecNodeCreateFunc = (PVMFNodeInterface*(*)(int32, bool)) (iType[NodeSearchCount].iNodeCreateFunc); + nodeInterface = (*(aVideoDecNodeCreateFunc))(priority, aHwAccelerated); + } + else + { + nodeInterface = (*(iType[NodeSearchCount].iNodeCreateFunc))(priority); + } } + PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerNodeRegistry::CreateNode() OUT")); return nodeInterface; } diff --git a/engines/player/src/pv_player_node_registry.h b/engines/player/src/pv_player_node_registry.h index 42b54b6e0..f4426d0a7 100644 --- a/engines/player/src/pv_player_node_registry.h +++ b/engines/player/src/pv_player_node_registry.h @@ -118,7 +118,7 @@ class PVPlayerNodeRegistry : public PVPlayerNodeRegistryInterface * * @returns a pointer to node **/ - virtual PVMFNodeInterface* CreateNode(PVUuid& aUuid); + virtual PVMFNodeInterface* CreateNode(PVUuid& aUuid, bool aHwAccelerated); /** * The ReleaseNode for PVPlayerNodeRegistry. Used for releasing a node. diff --git a/nodes/common/include/pv_player_node_registry_interface.h b/nodes/common/include/pv_player_node_registry_interface.h index 1efa265be..0205531d1 100644 --- a/nodes/common/include/pv_player_node_registry_interface.h +++ b/nodes/common/include/pv_player_node_registry_interface.h @@ -119,7 +119,7 @@ class PVPlayerNodeRegistryInterface * * @returns a pointer to node **/ - virtual PVMFNodeInterface* CreateNode(PVUuid& aUuid) = 0; + virtual PVMFNodeInterface* CreateNode(PVUuid& aUuid, bool aHwAccelerated = true) = 0; /** * The ReleaseNode for PVPlayerNodeRegistry. Used for releasing a node. diff --git a/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h b/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h index d36ad8d49..c5db83876 100644 --- a/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h +++ b/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h @@ -363,7 +363,7 @@ class PVMFOMXBaseDecNode { public: - OSCL_IMPORT_REF PVMFOMXBaseDecNode(int32 aPriority, const char aAOName[]); + OSCL_IMPORT_REF PVMFOMXBaseDecNode(int32 aPriority, const char aAOName[], bool aHwAccelerated = true); OSCL_IMPORT_REF virtual ~PVMFOMXBaseDecNode(); // From PVMFNodeInterface @@ -826,7 +826,7 @@ class PVMFOMXBaseDecNode OMX_TICKS iOMXTicksTimestamp; OSCL_IMPORT_REF OMX_TICKS ConvertTimestampIntoOMXTicks(const MediaClockConverter &src); uint32 ConvertOMXTicksIntoTimestamp(const OMX_TICKS &src); - + OMX_BOOL bHWAccelerated; }; diff --git a/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp b/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp index 2cbb38535..9b927ef3b 100644 --- a/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp +++ b/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp @@ -522,7 +522,7 @@ OSCL_EXPORT_REF PVMFStatus PVMFOMXBaseDecNode::SetDecoderNodeConfiguration(PVMFO ///////////////////////////////////////////////////////////////////////////// // Class Constructor ///////////////////////////////////////////////////////////////////////////// -OSCL_EXPORT_REF PVMFOMXBaseDecNode::PVMFOMXBaseDecNode(int32 aPriority, const char aAOName[]) : +OSCL_EXPORT_REF PVMFOMXBaseDecNode::PVMFOMXBaseDecNode(int32 aPriority, const char aAOName[], bool accelerated) : OsclActiveObject(aPriority, aAOName), iInPort(NULL), iOutPort(NULL), @@ -550,7 +550,8 @@ OSCL_EXPORT_REF PVMFOMXBaseDecNode::PVMFOMXBaseDecNode(int32 aPriority, const ch iResetInProgress(false), iResetMsgSent(false), iStopInResetMsgSent(false), - iCompactFSISettingSucceeded(false) + iCompactFSISettingSucceeded(false), + bHWAccelerated(accelerated? OMX_TRUE: OMX_FALSE) { iThreadSafeHandlerEventHandler = NULL; iThreadSafeHandlerEmptyBufferDone = NULL; @@ -4117,7 +4118,7 @@ void PVMFOMXBaseDecNode::DoPrepare(PVMFOMXBaseDecNodeCommand& aCmd) else #endif // try to create component - err = OMX_MasterGetHandle(&iOMXDecoder, (OMX_STRING) aInputParameters.cComponentName, (OMX_PTR) this, (OMX_CALLBACKTYPE *) & iCallbacks); + err = OMX_MasterGetHandle(&iOMXDecoder, (OMX_STRING) aInputParameters.cComponentName, (OMX_PTR) this, (OMX_CALLBACKTYPE *) & iCallbacks, bHWAccelerated); // if successful, no need to continue if ((err == OMX_ErrorNone) && (iOMXDecoder != NULL)) { diff --git a/nodes/pvomxvideodecnode/include/pvmf_omx_videodec_factory.h b/nodes/pvomxvideodecnode/include/pvmf_omx_videodec_factory.h index 719040f69..894e23888 100644 --- a/nodes/pvomxvideodecnode/include/pvmf_omx_videodec_factory.h +++ b/nodes/pvomxvideodecnode/include/pvmf_omx_videodec_factory.h @@ -49,7 +49,7 @@ class PVMFOMXVideoDecNodeFactory * @param aPriority The active object priority for the node. Default is standard priority if not specified * @returns A pointer to an instance of PVMFOMXVideoDecNode as PVMFNodeInterface reference or leaves if instantiation fails **/ - OSCL_IMPORT_REF static PVMFNodeInterface* CreatePVMFOMXVideoDecNode(int32 aPriority = OsclActiveObject::EPriorityNominal); + OSCL_IMPORT_REF static PVMFNodeInterface* CreatePVMFOMXVideoDecNode(int32 aPriority = OsclActiveObject::EPriorityNominal, bool aHwAccelerated = true); /** * Deletes an instance of PVMFOMXVideoDecNode diff --git a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_factory.cpp b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_factory.cpp index 18b17efa2..06e7dadc9 100644 --- a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_factory.cpp +++ b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_factory.cpp @@ -35,10 +35,10 @@ OSCL_DLL_ENTRY_POINT_DEFAULT() //////////////////////////////////////////////////////////////////////////// -OSCL_EXPORT_REF PVMFNodeInterface* PVMFOMXVideoDecNodeFactory::CreatePVMFOMXVideoDecNode(int32 aPriority) +OSCL_EXPORT_REF PVMFNodeInterface* PVMFOMXVideoDecNodeFactory::CreatePVMFOMXVideoDecNode(int32 aPriority, bool aHwAccelerated) { PVMFNodeInterface* node = NULL; - node = new PVMFOMXVideoDecNode(aPriority); + node = new PVMFOMXVideoDecNode(aPriority, aHwAccelerated); if (node == NULL) { OSCL_LEAVE(OsclErrNoMemory); diff --git a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp index bdc90d51a..54a213027 100644 --- a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp +++ b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp @@ -139,8 +139,8 @@ PVMFStatus PVMFOMXVideoDecNode::ThreadLogon() ///////////////////////////////////////////////////////////////////////////// // Class Constructor ///////////////////////////////////////////////////////////////////////////// -PVMFOMXVideoDecNode::PVMFOMXVideoDecNode(int32 aPriority) : - PVMFOMXBaseDecNode(aPriority, "PVMFOMXVideoDecNode"), +PVMFOMXVideoDecNode::PVMFOMXVideoDecNode(int32 aPriority, bool aHwAccelerated) : + PVMFOMXBaseDecNode(aPriority, "PVMFOMXVideoDecNode", aHwAccelerated), iH263MaxBitstreamFrameSize(PVOMXVIDEODECNODE_CONFIG_H263MAXBITSTREAMFRAMESIZE_DEF), iH263MaxWidth(PVOMXVIDEODECNODE_CONFIG_H263MAXWIDTH_DEF), iH263MaxHeight(PVOMXVIDEODECNODE_CONFIG_H263MAXHEIGHT_DEF), diff --git a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h index e692aa8f4..2db338ec7 100644 --- a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h +++ b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h @@ -127,7 +127,7 @@ class PVMFOMXVideoDecNode : public PVMFOMXBaseDecNode { public: - PVMFOMXVideoDecNode(int32 aPriority); + PVMFOMXVideoDecNode(int32 aPriority, bool aHwAccelerated); ~PVMFOMXVideoDecNode(); // From PVMFNodeInterface |