| /* ------------------------------------------------------------------ |
| * Copyright (C) 1998-2009 PacketVideo |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| * express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * ------------------------------------------------------------------- |
| */ |
| #ifndef PV_FRAME_METADATA_UTILITY_H_INCLUDED |
| #define PV_FRAME_METADATA_UTILITY_H_INCLUDED |
| |
| |
| #ifndef OSCL_BASE_H_INCLUDED |
| #include "oscl_base.h" |
| #endif |
| |
| #ifndef OSCL_MEM_H_INCLUDED |
| #include "oscl_mem.h" |
| #endif |
| |
| #ifndef OSCL_SCHEDULER_AO_H_INCLUDED |
| #include "oscl_scheduler_ao.h" |
| #endif |
| |
| #ifndef OSCL_VECTOR_H_INCLUDED |
| #include "oscl_vector.h" |
| #endif |
| |
| #ifndef OSCL_PRIQUEUE_H_INCLUDED |
| #include "oscl_priqueue.h" |
| #endif |
| |
| #ifndef PV_ENGINE_TYPES_H_INCLUDED |
| #include "pv_engine_types.h" |
| #endif |
| |
| #ifndef PV_PLAYER_DATASOURCE_H_INCLUDED |
| #include "pv_player_datasource.h" |
| #endif |
| |
| #ifndef PV_FRAME_METADATA_INTERFACE_H_INCLUDED |
| #include "pv_frame_metadata_interface.h" |
| #endif |
| |
| #ifndef PV_ENGINE_OBSERVER_H_INCLUDED |
| #include "pv_engine_observer.h" |
| #endif |
| |
| #ifndef PVMF_NODE_INTERFACE_H_INCLUDED |
| #include "pvmf_node_interface.h" |
| #endif |
| |
| #ifndef PVMF_META_DATA_TYPES_H_INCLUDED |
| #include "pvmf_meta_data_types.h" |
| #endif |
| |
| #ifndef PVMF_BASIC_ERRORINFOMESSAGE_H_INCLUDED |
| #include "pvmf_basic_errorinfomessage.h" |
| #endif |
| |
| #ifndef PV_PLAYER_DATASINKPVMFNODE_H_INCLUDED |
| #include "pv_player_datasinkpvmfnode.h" |
| #endif |
| |
| #ifndef PV_FRAME_METADATA_MIO_VIDEO_H_INCLUDED |
| #include "pv_frame_metadata_mio_video.h" |
| #endif |
| |
| #ifndef PV_FRAME_METADATA_MIO_AUDIO_H_INCLUDED |
| #include "pv_frame_metadata_mio_audio.h" |
| #endif |
| |
| #ifndef OSCL_TIMER_H_INCLUDED |
| #include "oscl_timer.h" |
| #endif |
| |
| |
| /** |
| * PVFMUtilityState enum |
| * |
| * Enumeration of internal pvFrameAndMetadata utility state. |
| * |
| **/ |
| typedef enum |
| { |
| PVFM_UTILITY_STATE_IDLE = 1, |
| PVFM_UTILITY_STATE_INITIALIZING, |
| PVFM_UTILITY_STATE_INITIALIZED, |
| PVFM_UTILITY_STATE_RESETTING, |
| PVFM_UTILITY_STATE_HANDLINGERROR, |
| PVFM_UTILITY_STATE_ERROR |
| } PVFMUtilityState; |
| |
| |
| |
| typedef union PVFMUtilityCommandParamUnion |
| { |
| bool bool_value; |
| float float_value; |
| double double_value; |
| uint8 uint8_value; |
| int32 int32_value; |
| uint32 uint32_value; |
| oscl_wchar* pWChar_value; |
| char* pChar_value; |
| uint8* pUint8_value; |
| int32* pInt32_value; |
| uint32* pUint32_value; |
| int64* pInt64_value; |
| uint64* pUint64_value; |
| OsclAny* pOsclAny_value; |
| } _PVFMUtilityCommandParamUnion; |
| |
| |
| /** |
| * PVFMUtilityCommand Class |
| * |
| * PVFMUtilityCommand class is a data class to hold issued commands inside pvFrameAndMetadata utility |
| **/ |
| class PVFMUtilityCommand |
| { |
| public: |
| /** |
| * The constructor for PVFMUtilityCommand which allows the data values to be set. |
| * |
| * @param aCmdType The command type value for this command. The value is an utility-specific 32-bit value. |
| * @param aCmdId The command ID assigned by the utiliy for this command. |
| * @param aContextData The pointer to the passed-in context data for this command. |
| * |
| * @returns None |
| **/ |
| PVFMUtilityCommand(int32 aCmdType, PVCommandId aCmdId, OsclAny* aContextData = NULL, |
| Oscl_Vector<PVFMUtilityCommandParamUnion, OsclMemAllocator>* aParamVector = NULL, bool aAPICommand = true) : |
| iCmdType(aCmdType), iCmdId(aCmdId), iContextData(aContextData), iAPICommand(aAPICommand) |
| { |
| iParamVector.clear(); |
| if (aParamVector) |
| { |
| iParamVector = *aParamVector; |
| } |
| } |
| |
| /** |
| * The copy constructor for PVFMUtilityCommand. Used mainly for Oscl_Vector. |
| * |
| * @param aCmd The reference to the source PVFMUtilityCommand to copy the data values from. |
| * |
| * @returns None |
| **/ |
| PVFMUtilityCommand(const PVFMUtilityCommand& aCmd) |
| { |
| iCmdType = aCmd.iCmdType; |
| iCmdId = aCmd.iCmdId; |
| iContextData = aCmd.iContextData; |
| iAPICommand = aCmd.iAPICommand; |
| iParamVector = aCmd.iParamVector; |
| iMimeType = aCmd.iMimeType; |
| iUuid = aCmd.iUuid; |
| } |
| |
| /** |
| * This function returns the stored command type value. |
| * |
| * @returns The signed 32-bit command type value for this command. |
| **/ |
| int32 GetCmdType()const |
| { |
| return iCmdType; |
| } |
| |
| /** |
| * This function returns the stored command ID value. |
| * |
| * @returns The PVCommandId value for this command. |
| **/ |
| PVCommandId GetCmdId()const |
| { |
| return iCmdId; |
| } |
| |
| /** |
| * This function returns the stored context data pointer. |
| * |
| * @returns The pointer to the context data for this command |
| **/ |
| OsclAny* GetContext()const |
| { |
| return iContextData; |
| } |
| |
| /** |
| * This function tells whether the command is an API command or not |
| * |
| * @returns true if API command, false if not. |
| **/ |
| bool IsAPICommand()const |
| { |
| return iAPICommand; |
| } |
| |
| /** |
| * This function returns the command parameter from the specified index. |
| * If the specified index is not available, empty parameter will be returned |
| * |
| * @param aIndex The index of the parameter to return |
| * |
| * @returns The stored parameter for this command |
| **/ |
| PVFMUtilityCommandParamUnion GetParam(uint32 aIndex)const |
| { |
| if (aIndex >= iParamVector.size()) |
| { |
| PVFMUtilityCommandParamUnion param; |
| oscl_memset(¶m, 0, sizeof(PVFMUtilityCommandParamUnion)); |
| return param; |
| } |
| else |
| { |
| return iParamVector[aIndex]; |
| } |
| } |
| |
| /** |
| * This function returns MIME type parameter for this command |
| * |
| * @returns The MIME type parameter for this command |
| */ |
| const PvmfMimeString& GetMimeType()const |
| { |
| return iMimeType; |
| } |
| |
| /** |
| * This function returns UUID parameter for this command |
| * |
| * @returns The UUID parameter for this command |
| */ |
| PVUuid GetUuid()const |
| { |
| return iUuid; |
| } |
| |
| /** |
| * This function stores MIME type parameter of this command |
| */ |
| void SetMimeType(const PvmfMimeString& aMimeType) |
| { |
| iMimeType = aMimeType; |
| } |
| |
| /** |
| * This function stores the UUID parameter of this command |
| */ |
| void SetUuid(const PVUuid& aUuid) |
| { |
| iUuid = aUuid; |
| } |
| |
| /** |
| * Equality comparison for use with OsclPriorityQueue |
| */ |
| bool operator==(const PVFMUtilityCommand& aCmd) const |
| { |
| return iCmdId == aCmd.iCmdId; |
| } |
| |
| int32 iCmdType; |
| PVCommandId iCmdId; |
| OsclAny* iContextData; |
| bool iAPICommand; |
| Oscl_Vector<PVFMUtilityCommandParamUnion, OsclMemAllocator> iParamVector; |
| OSCL_HeapString<OsclMemAllocator> iMimeType; |
| PVUuid iUuid; |
| }; |
| |
| /** |
| * PVFMUtilityCommandType enum |
| * |
| * Enumeration of types of commands that can be issued to pvFrameAndMetadata utility. |
| * |
| **/ |
| typedef enum |
| { |
| // Engine API commands |
| PVFM_UTILITY_COMMAND_QUERY_UUID = 1, |
| PVFM_UTILITY_COMMAND_QUERY_INTERFACE, |
| PVFM_UTILITY_COMMAND_CANCEL_ALL_COMMANDS, |
| PVFM_UTILITY_COMMAND_GET_STATE, |
| PVFM_UTILITY_COMMAND_ADD_DATA_SOURCE, |
| PVFM_UTILITY_COMMAND_GET_METADATA_KEYS, |
| PVFM_UTILITY_COMMAND_GET_METADATA_VALUES, |
| PVFM_UTILITY_COMMAND_SET_PARAMETERS, |
| PVFM_UTILITY_COMMAND_GET_FRAME_USER_BUFFER, |
| PVFM_UTILITY_COMMAND_GET_FRAME_UTILITY_BUFFER, |
| PVFM_UTILITY_COMMAND_RETURN_BUFFER, |
| PVFM_UTILITY_COMMAND_REMOVE_DATA_SOURCE, |
| PVFM_UTILITY_COMMAND_HANDLE_PLAYER_ERROR |
| } PVFMUtilityCommandType; |
| |
| |
| /** |
| * PVFMUtilityCommandCompareLess Class |
| * |
| * PVFMUtilityCommandCompareLess class is a utility class to allow the OSCL priority queue perform command priority comparison. |
| * The class is meant to be used inside pvFrameAndMetadata utility and not exposed to the interface layer or above. |
| **/ |
| class PVFMUtilityCommandCompareLess |
| { |
| public: |
| /** |
| * The algorithm used in OsclPriorityQueue needs a compare function |
| * that returns true when A's priority is less than B's |
| * @return true if A's priority is less than B's, else false |
| */ |
| int compare(PVFMUtilityCommand& a, PVFMUtilityCommand& b) const |
| { |
| int a_pri = PVFMUtilityCommandCompareLess::GetPriority(a); |
| int b_pri = PVFMUtilityCommandCompareLess::GetPriority(b); |
| if (a_pri < b_pri) |
| { |
| // Higher priority |
| return true; |
| } |
| else if (a_pri == b_pri) |
| { |
| // Same priority so look at the command ID to maintain FIFO |
| return (a.GetCmdId() > b.GetCmdId()); |
| } |
| else |
| { |
| // Lower priority |
| return false; |
| } |
| } |
| |
| /** |
| * Returns the priority of each command |
| * @return A 0-based priority number. A lower number indicates lower priority. |
| */ |
| static int GetPriority(PVFMUtilityCommand& aCmd) |
| { |
| switch (aCmd.GetCmdType()) |
| { |
| case PVFM_UTILITY_COMMAND_QUERY_UUID: |
| return 5; |
| case PVFM_UTILITY_COMMAND_QUERY_INTERFACE: |
| return 5; |
| case PVFM_UTILITY_COMMAND_CANCEL_ALL_COMMANDS: |
| return 8; |
| case PVFM_UTILITY_COMMAND_GET_STATE: |
| return 5; |
| case PVFM_UTILITY_COMMAND_ADD_DATA_SOURCE: |
| return 5; |
| case PVFM_UTILITY_COMMAND_GET_METADATA_KEYS: |
| return 5; |
| case PVFM_UTILITY_COMMAND_GET_METADATA_VALUES: |
| return 5; |
| case PVFM_UTILITY_COMMAND_SET_PARAMETERS: |
| return 5; |
| case PVFM_UTILITY_COMMAND_GET_FRAME_USER_BUFFER: |
| return 5; |
| case PVFM_UTILITY_COMMAND_GET_FRAME_UTILITY_BUFFER: |
| return 5; |
| case PVFM_UTILITY_COMMAND_RETURN_BUFFER: |
| return 5; |
| case PVFM_UTILITY_COMMAND_REMOVE_DATA_SOURCE: |
| return 5; |
| case PVFM_UTILITY_COMMAND_HANDLE_PLAYER_ERROR: |
| return 9; |
| default: |
| return 0; |
| } |
| } |
| }; |
| |
| // Internal structure to use for opaque data context |
| struct PVFMUtilityContext |
| { |
| PVCommandId iCmdId; |
| OsclAny* iCmdContext; |
| int32 iCmdType; |
| }; |
| |
| |
| // Forward declaration |
| class PVPlayerInterface; |
| class PVMFNodeInterface; |
| class PVFMVideoMIO; |
| class PVFMAudioMIO; |
| class OsclMemPoolResizableAllocator; |
| |
| class PVFrameAndMetadataUtility : public OsclTimerObject, |
| public PVFrameAndMetadataInterface, |
| public PvmiCapabilityAndConfig, |
| public PVCommandStatusObserver, |
| public PVErrorEventObserver, |
| public PVInformationalEventObserver, |
| public PVFMVideoMIOGetFrameObserver, |
| public OsclTimerObserver |
| { |
| public: |
| static PVFrameAndMetadataUtility* New(char *aOutputFormatMIMEType, |
| PVCommandStatusObserver *aCmdObserver, |
| PVErrorEventObserver *aErrorObserver, |
| PVInformationalEventObserver *aInfoObserver); |
| ~PVFrameAndMetadataUtility(); |
| |
| // From PVFrameAndMetadataInterface |
| PVCommandId QueryUUID(const PvmfMimeString& aMimeType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids, bool aExactUuidsOnly = false, const OsclAny* aContextData = NULL); |
| PVCommandId QueryInterface(const PVUuid& aUuid, PVInterface*& aInterfacePtr, const OsclAny* aContextData = NULL); |
| PVCommandId CancelAllCommands(const OsclAny* aContextData = NULL); |
| PVCommandId GetState(PVFrameAndMetadataState& aState, const OsclAny* aContextData = NULL); |
| PVMFStatus GetStateSync(PVFrameAndMetadataState& aState); |
| PVCommandId AddDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL); |
| PVCommandId GetMetadataKeys(PVPMetadataList& aKeyList, int32 aStartingIndex = 0, int32 aMaxEntries = -1, char* aQueryKey = NULL, const OsclAny* aContextData = NULL); |
| PVCommandId GetMetadataValues(PVPMetadataList& aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, int32& aNumAvailableValueEntries, Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList, const OsclAny* aContextData = NULL); |
| PVCommandId GetFrame(PVFrameSelector& aFrameInfo, uint8* aProvidedFrameBuffer, uint32& aBufferSize, PVFrameBufferProperty& aBufferProp, const OsclAny* aContextData = NULL); |
| PVCommandId GetFrame(PVFrameSelector& aFrameInfo, uint8** aFrameBufferPtr, uint32& aBufferSize, PVFrameBufferProperty& aBufferProp, const OsclAny* aContextData = NULL); |
| PVCommandId ReturnBuffer(uint8* aFrameBufferPtr, const OsclAny* aContextData = NULL); |
| PVCommandId RemoveDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL); |
| PVMFStatus SetMode(uint32 aMode); |
| |
| void SetThumbnailDimensions(uint32 aWidth, uint32 aHeight); |
| void GetThumbnailDimensions(uint32 &aWidth, uint32 &aHeight); |
| // From PvmiCapabilityAndConfig |
| void setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver); |
| PVMFStatus getParametersSync(PvmiMIOSession aSession, PvmiKeyType aIdentifier, PvmiKvp*& aParameters, int& aNumParamElements, PvmiCapabilityContext aContext); |
| PVMFStatus releaseParameters(PvmiMIOSession aSession, PvmiKvp* aParameters, int aNumElements); |
| void createContext(PvmiMIOSession aSession, PvmiCapabilityContext& aContext); |
| void setContextParameters(PvmiMIOSession aSession, PvmiCapabilityContext& aContext, PvmiKvp* aParameters, int aNumParamElements); |
| void DeleteContext(PvmiMIOSession aSession, PvmiCapabilityContext& aContext); |
| void setParametersSync(PvmiMIOSession aSession, PvmiKvp* aParameters, int aNumElements, PvmiKvp* &aRetKVP); |
| PVMFCommandId setParametersAsync(PvmiMIOSession aSession, PvmiKvp* aParameters, int aNumElements, PvmiKvp*& aRetKVP, OsclAny* aContext = NULL); |
| uint32 getCapabilityMetric(PvmiMIOSession aSession); |
| PVMFStatus verifyParametersSync(PvmiMIOSession aSession, PvmiKvp* aParameters, int aNumElements); |
| |
| private: |
| PVMFBasicErrorInfoMessage* CreateBasicErrInfoMessage(PVMFErrorInfoMessageInterface* nextmsg, PVFMErrorEventType aErrEvent = PVFMErrPlayerEngine); |
| |
| PVFrameAndMetadataUtility(); |
| void Construct(char *aOutputFormatMIMEType, |
| PVCommandStatusObserver *aCmdObserver, |
| PVErrorEventObserver *aErrorObserver, |
| PVInformationalEventObserver *aInfoObserver); |
| |
| // From OsclTimerObject |
| void Run(); |
| |
| // From PVCommandStatusObserver |
| void CommandCompleted(const PVCmdResponse& aResponse); |
| |
| // From PVErrorEventObserver |
| void HandleErrorEvent(const PVAsyncErrorEvent& aEvent); |
| |
| // From PVInformationalEventObserver |
| void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent); |
| |
| // From PVFMVideoMIOGetFrameObserver |
| void HandleFrameReadyEvent(PVMFStatus aEventStatus); |
| |
| // From OsclTimerObserver |
| void TimeoutOccurred(int32 timerID, int32 timeoutInfo); |
| |
| // Command and event queueing related functions |
| PVCommandId AddCommandToQueue(int32 aCmdType, OsclAny* aContextData = NULL, |
| Oscl_Vector<PVFMUtilityCommandParamUnion, OsclMemAllocator>* aParamVector = NULL, |
| const PVUuid* aUuid = NULL, bool aAPICommand = true); |
| |
| // Command and event callback functions |
| void UtilityCommandCompleted(PVCommandId aId, OsclAny* aContext, PVMFStatus aStatus, PVInterface* aExtInterface = NULL, |
| OsclAny* aEventData = NULL, int32 aEventDataSize = 0); |
| |
| // Functions for utility state handling |
| void SetUtilityState(PVFMUtilityState aState); |
| PVFrameAndMetadataState GetUtilityState(void); |
| |
| // Keeps track of next available command ID |
| PVCommandId iCommandId; |
| |
| // Current utility state |
| PVFMUtilityState iState; |
| |
| // caller's intent |
| uint32 iMode; |
| |
| // Queue for utility commands |
| Oscl_Vector<PVFMUtilityCommand, OsclMemAllocator> iCurrentCmd; // Vector of size 1 to hold the command being currently processed |
| Oscl_Vector<PVFMUtilityCommand, OsclMemAllocator> iCmdToCancel; // Vector of size 1 to hold the command being currently cancelled |
| OsclPriorityQueue<PVFMUtilityCommand, OsclMemAllocator, Oscl_Vector<PVFMUtilityCommand, OsclMemAllocator>, PVFMUtilityCommandCompareLess> iPendingCmds; // Vector to hold the command that has been requested |
| |
| // Reference to observers |
| PVCommandStatusObserver *iCmdStatusObserver; |
| PVErrorEventObserver *iErrorEventObserver; |
| PVInformationalEventObserver *iInfoEventObserver; |
| |
| // Command handling functions |
| void DoCancelAllCommands(PVFMUtilityCommand& aCmd); |
| void DoCancelCommandBeingProcessed(void); |
| |
| PVMFStatus DoQueryUUID(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoPlayerQueryUUID(PVCommandId aCmdId, OsclAny* aCmdContext, PvmfMimeString& aMIMEType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUUIDVec, bool aExactMatch); |
| |
| PVMFStatus DoQueryInterface(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoPlayerQueryInterface(PVCommandId aCmdId, OsclAny* aCmdContext, PVUuid& aUuid, PVInterface*& aInterfacePtr); |
| bool queryInterface(const PVUuid& uuid, PVInterface*& iface, PVCommandId cmdid, OsclAny* context); |
| |
| PVMFStatus DoGetState(PVFMUtilityCommand& aCmd, bool aSyncCmd = false); |
| |
| PVMFStatus DoAddDataSource(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoADSPlayerAddDataSource(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoADSPlayerInit(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoADSPlayerAddVideoDataSink(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoADSPlayerAddAudioDataSink(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoADSPlayerPrepare(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoADSPlayerStart(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoADSPlayerPause(PVCommandId aCmdId, OsclAny* aCmdContext); |
| |
| PVMFStatus DoGetMetadataKeys(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoPlayerGetMetadataKeys(PVCommandId aCmdId, OsclAny* aCmdContext, |
| PVPMetadataList& aKeyList, int32 aStartingIndex, int32 aMaxEntries, char* aQueryKey); |
| |
| PVMFStatus DoGetMetadataValues(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoPlayerGetMetadataValues(PVCommandId aCmdId, OsclAny* aCmdContext, |
| PVPMetadataList& aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, |
| int32& aNumAvailableValueEntries, Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList); |
| PVMFStatus DoCapConfigSetParameters(PVFMUtilityCommand& aCmd, bool aSyncCmd); |
| PVMFStatus DoVerifyAndSetFMUParameter(PvmiKvp& aParameter, bool aSetParam); |
| PVMFStatus DoPlayerSetParametersSync(PVCommandId aCmdId, OsclAny* aCmdContext, PvmiKvp* aParameters, int aNumElements, PvmiKvp* &aRetKVP); |
| bool HasVideo(); |
| PVMFStatus DoGetFrame(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoGFPlayerStopFromPaused(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoGFPlayerPrepare(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoGFPlayerStart(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoGFPlayerPause(PVCommandId aCmdId, OsclAny* aCmdContext); |
| |
| PVMFStatus DoReturnBuffer(PVFMUtilityCommand& aCmd); |
| |
| PVMFStatus DoRemoveDataSource(PVFMUtilityCommand& aCmd); |
| PVMFStatus DoRDSPlayerStop(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoRDSPlayerRemoveVideoDataSink(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoRDSPlayerRemoveAudioDataSink(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoRDSPlayerReset(PVCommandId aCmdId, OsclAny* aCmdContext); |
| PVMFStatus DoRDSPlayerRemoveDataSource(PVCommandId aCmdId, OsclAny* aCmdContext); |
| |
| PVMFStatus DoPlayerShutdownRestart(void); |
| |
| enum |
| { |
| // Player commands |
| PVFM_CMD_PlayerQueryUUID, |
| PVFM_CMD_PlayerQueryInterface, |
| PVFM_CMD_ADSPlayerAddDataSource, |
| PVFM_CMD_ADSPlayerInit, |
| PVFM_CMD_ADSPlayerAddVideoDataSink, |
| PVFM_CMD_ADSPlayerAddAudioDataSink, |
| PVFM_CMD_ADSPlayerPrepare, |
| PVFM_CMD_ADSPlayerStart, |
| PVFM_CMD_ADSPlayerPause, |
| PVFM_CMD_PlayerGetMetadataKeys, |
| PVFM_CMD_PlayerGetMetadataValues, |
| PVFM_CMD_PlayerSetParametersSync, |
| PVFM_CMD_GFPlayerStopFromPaused, |
| PVFM_CMD_GFPlayerPrepare, |
| PVFM_CMD_GFPlayerStart, |
| PVFM_CMD_GFPlayerPause, |
| PVFM_CMD_RDSPlayerStopFromPaused, |
| PVFM_CMD_RDSPlayerRemoveVideoDataSink, |
| PVFM_CMD_RDSPlayerRemoveAudioDataSink, |
| PVFM_CMD_RDSPlayerReset, |
| PVFM_CMD_RDSPlayerRemoveDataSource, |
| PVFM_CMD_PlayerQueryCapConfigInterface |
| }; |
| |
| // Player command completion handling |
| void HandlePlayerQueryUUID(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandlePlayerQueryInterface(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerAddDataSource(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerInit(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerAddVideoDataSink(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerAddAudioDataSink(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerPrepare(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerStart(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleADSPlayerPause(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandlePlayerGetMetadataKeys(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandlePlayerGetMetadataValues(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandlePlayerSetParametersSync(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleGFPlayerStopFromPaused(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleGFPlayerPrepare(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleGFPlayerStart(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleGFPlayerPause(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleRDSPlayerStopFromPaused(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleRDSPlayerRemoveVideoDataSink(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleRDSPlayerRemoveAudioDataSink(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleRDSPlayerReset(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| void HandleRDSPlayerRemoveDataSource(PVFMUtilityContext& aUtilContext, const PVCmdResponse& aCmdResp); |
| |
| // Utility function to retrieve player specific error/info |
| PVMFErrorInfoMessageInterface* GetErrorInfoMessageInterface(PVInterface& aInterface); |
| |
| // Player engine instance handle |
| PVPlayerInterface* iPlayer; |
| |
| PvmiCapabilityAndConfig* iPlayerCapConfigIF; |
| PVInterface* iPlayerCapConfigIFPVI; |
| |
| // Output Format Type |
| PVMFFormatType iOutputFormatType; |
| |
| // User specified player data source handle |
| PVPlayerDataSource* iDataSource; |
| |
| // Video data sink |
| PVPlayerDataSinkPVMFNode iVideoDataSink; |
| PVMFNodeInterface* iVideoNode; |
| PVFMVideoMIO* iVideoMIO; |
| |
| // Audio data sink |
| PVPlayerDataSinkPVMFNode iAudioDataSink; |
| PVMFNodeInterface* iAudioNode; |
| PVFMAudioMIO* iAudioMIO; |
| |
| // Handle to the logger node |
| PVLogger* iLogger; |
| PVLogger* iPerfLogger; |
| |
| // Context objects |
| PVFMUtilityContext iUtilityContext; |
| int32 iCancelContext; |
| bool iErrorHandlingInUtilityAO; |
| |
| // UUID for calling QueryInterface() on player |
| PVUuid iPlayerQueryIFUUID; |
| |
| // Resizable memory pool for utility allocated frame buffers |
| OsclMemPoolResizableAllocator* iVideoFrameBufferMemPool; |
| uint8* iCurrentVideoFrameBuffer; |
| uint32* iVideoFrameBufferSize; |
| |
| // Pointer to video frame selection info passed-in by user |
| PVFrameSelector* iVideoFrameSelector; |
| |
| // Pointer to video frame buffer property structure passed-in by user |
| PVFrameBufferProperty* iVideoFrameBufferProp; |
| |
| // Flags for parallel async commands |
| bool iFrameReceived; |
| bool iPlayerStartCompleted; |
| |
| // Hold command status info when error occurs |
| PVMFStatus iAPICmdStatus; |
| PVMFErrorInfoMessageInterface* iAPICmdErrMsg; |
| |
| // OsclTimer for timeouts |
| OsclTimer<OsclMemAllocator>* iTimeoutTimer; |
| uint32 iErrorHandlingWaitTime; |
| uint32 iFrameReadyWaitTime; |
| |
| uint32 iThumbnailWidth; |
| uint32 iThumbnailHeight; |
| }; |
| |
| #endif // PV_FRAME_METADATA_UTILITY_H_INCLUDED |
| |
| |
| |
| |
| |