Home | History | Annotate | Download | only in include
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 /*
     19 * ==============================================================================
     20 *  Name        : pv_player_interface.h
     21 *  Part of     :
     22 *  Interface   :
     23 *  Description : Interface class and supporting definitions for the pvPlayer engine
     24 *  Version     : (see RELEASE field in copyright header above)
     25 *
     26 * ==============================================================================
     27 */
     28 
     29 #ifndef PV_PLAYER_INTERFACE_H_INCLUDED
     30 #define PV_PLAYER_INTERFACE_H_INCLUDED
     31 
     32 
     33 // INCLUDES
     34 #ifndef OSCL_BASE_H_INCLUDED
     35 #include "oscl_base.h"
     36 #endif
     37 
     38 #ifndef OSCL_STRING_H_INCLUDED
     39 #include "oscl_string.h"
     40 #endif
     41 
     42 #ifndef OSCL_VECTOR_H_INCLUDED
     43 #include "oscl_vector.h"
     44 #endif
     45 
     46 #ifndef OSCL_MEM_H_INCLUDED
     47 #include "oscl_mem.h"
     48 #endif
     49 
     50 #ifndef PVLOGGER_H_INCLUDED
     51 #include "pvlogger.h"
     52 #endif
     53 
     54 #ifndef PVMF_RETURN_CODES_H_INCLUDED
     55 #include "pvmf_return_codes.h"
     56 #endif
     57 
     58 #ifndef PV_ENGINE_TYPES_H_INCLUDED
     59 #include "pv_engine_types.h"
     60 #endif
     61 
     62 #ifndef PV_PLAYER_TYPES_H_INCLUDED
     63 #include "pv_player_types.h"
     64 #endif
     65 
     66 #ifndef PV_PLAYER_EVENTS_H_INCLUDED
     67 #include "pv_player_events.h"
     68 #endif
     69 
     70 #ifndef PV_PLAYER_DATASOURCE_H_INCLUDED
     71 #include "pv_player_datasource.h"
     72 #endif
     73 
     74 #ifndef PV_PLAYER_DATASINK_H_INCLUDED
     75 #include "pv_player_datasink.h"
     76 #endif
     77 
     78 #ifndef PVMI_KVP_H_INCLUDED
     79 #include "pvmi_kvp.h"
     80 #endif
     81 
     82 #ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
     83 #include "pvmf_media_clock.h"
     84 #endif
     85 
     86 
     87 // CLASS DECLARATION
     88 /**
     89  * PVPlayerInterface is the interface to the pvPlayer SDK, which
     90  * allows control of a multimedia playback engine.
     91  * The PVPlayerFactory factory class is to be used to create and
     92  * delete instances of this object
     93  **/
     94 class PVPlayerInterface
     95 {
     96     public:
     97 
     98         /**
     99          * Object destructor function
    100          * Releases all resources prior to destruction
    101          **/
    102         virtual ~PVPlayerInterface() {};
    103 
    104         /**
    105          * Returns information about all modules currently used by pvPlayer SDK.
    106          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    107          * callback handler will be called when this command request completes.
    108          *
    109          * @param aSDKModuleInfo
    110          *         A reference to a PVSDKModuleInfo structure which contains the number of modules currently used by
    111          *         pvPlayer SDK and the PV UUID and description string for each module. The PV UUID and description string
    112          *         for modules will be returned in one string buffer allocated by the client. If the string buffer
    113          *         is not large enough to hold the all the module's information, the information will be written
    114          *         up to the length of the buffer and truncated.
    115          * @param aContextData
    116          *         Optional opaque data that will be passed back to the user with the command response
    117          * @leave This method can leave with one of the following error codes
    118          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    119          * @returns A unique command ID for asynchronous completion
    120          **/
    121         virtual PVCommandId GetSDKModuleInfo(PVSDKModuleInfo &aSDKModuleInfo, const OsclAny* aContextData = NULL) = 0;
    122 
    123         /**
    124          * Allows a logging appender to be attached at some point in the
    125          * logger tag tree.  The location in the tag tree is specified by the
    126          * input tag string.  A single appender can be attached multiple times in
    127          * the tree, but it may result in duplicate copies of log messages if the
    128          * appender is not attached in disjoint portions of the tree.
    129          * A logging appender is responsible for actually writing the log message
    130          * to its final location (e.g., memory, file, network, etc).
    131          * This API can be called anytime after creation of pvPlayer.
    132          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    133          * callback handler will be called when this command request completes.
    134          *
    135          * @param aTag
    136          *         Specifies the logger tree tag where the appender should be attached.
    137          * @param aAppender
    138          *         The log appender to attach.
    139          * @param aContextData
    140          *         Optional opaque data that will be passed back to the user with the command response
    141          * @exception This method can leave with one of the following error codes
    142          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    143          * @returns A unique command ID for asynchronous completion
    144          **/
    145         virtual PVCommandId SetLogAppender(const char* aTag, OsclSharedPtr<PVLoggerAppender>& aAppender, const OsclAny* aContextData = NULL) = 0;
    146 
    147         /**
    148          * Allows a logging appender to be removed from the logger tree at the
    149          * point specified by the input tag.  If the input tag is NULL then the
    150          * appender will be removed from locations in the tree.
    151          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    152          * callback handler will be called when this command request completes.
    153          *
    154          * @param aTag
    155          *         Specifies the logger tree tag where the appender should be removed.
    156          *         Can be NULL to remove at all locations.
    157          * @param aAppender
    158          *         The log appender to remove.
    159          * @param aContextData
    160          *         Optional opaque data that will be passed back to the user with the command response
    161          *
    162          * @exception This method can leave with one of the following error codes
    163          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    164          * @returns A unique command ID for asynchronous completion
    165          **/
    166         virtual PVCommandId RemoveLogAppender(const char* aTag, OsclSharedPtr<PVLoggerAppender>& aAppender, const OsclAny* aContextData = NULL) = 0;
    167 
    168         /**
    169          * Allows the logging level to be set for the logging node specified by the
    170          * tag.  A larger log level will result in more messages being logged.  A message
    171          * will only be logged if its level is LESS THAN or equal to the current log level.
    172          * The aSetSubtree flag will allow an entire subtree, with the specified tag as the root,
    173          * to be reset to the specified value.
    174          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    175          * callback handler will be called when this command request completes.
    176          *
    177          * @param aTag
    178          *         Specifies the logger tree tag where the log level should be set.
    179          * @param aLevel
    180          *         Specifies the log level to set.
    181          * @param aSetSubtree
    182          *         Specifies whether the entire subtree with aTag as the root should
    183          *         be reset to the log level.
    184          * @param aContextData
    185          *         Optional opaque data that will be passed back to the user with the command response
    186          *
    187          * @exception This method can leave with one of the following error codes
    188          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    189          * @returns A unique command ID for asynchronous completion
    190          **/
    191         virtual PVCommandId SetLogLevel(const char* aTag, int32 aLevel, bool aSetSubtree = false, const OsclAny* aContextData = NULL) = 0;
    192 
    193         /**
    194          * Allows the logging level to be queried for a particular logging tag.
    195          * A larger log level will result in more messages being logged.
    196          * In the asynchronous response, this should return the log level along with an
    197          * indication of where the level was inherited (i.e., the ancestor tag).
    198          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    199          * callback handler will be called when this command request completes.
    200          *
    201          * @param aTag
    202          *         Specifies the logger tree tag where the log level should be retrieved.
    203          * @param aLogInfo
    204          *         An output parameter which will be filled in with the log level information.
    205          * @param aContextData
    206          *         Optional opaque data that will be passed back to the user with the command response
    207          * @exception This method can leave with one of the following error codes
    208          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    209          * @returns A unique command ID for asynchronous completion
    210          **/
    211         virtual PVCommandId GetLogLevel(const char* aTag, PVLogLevelInfo& aLogInfo, const OsclAny* aContextData = NULL) = 0;
    212 
    213         /**
    214          * This API is to allow for extensibility of the pvPlayer interface.
    215          * It allows a caller to ask for all UUIDs associated with a particular MIME type.
    216          * If interfaces of the requested MIME type are found within the system, they are added
    217          * to the UUIDs array.
    218          * Also added to the UUIDs array will be all interfaces which have the requested MIME
    219          * type as a base MIME type. This functionality can be turned off.
    220          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    221          * callback handler will be called when this command request completes.
    222          *
    223          * @param aMimeType
    224          *         The MIME type of the desired interfaces
    225          * @param aUuids
    226          *         An array to hold the discovered UUIDs
    227          * @param aExactUuidsOnly
    228          *         Turns on/off the retrival of UUIDs with aMimeType as a base type
    229          * @param aContextData
    230          *         Optional opaque data that will be passed back to the user with the command response
    231          *
    232          * @exception This method can leave with one of the following error codes
    233          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    234          * @returns A unique command ID for asynchronous completion
    235          **/
    236         virtual PVCommandId QueryUUID(const PvmfMimeString& aMimeType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids,
    237                                       bool aExactUuidsOnly = false, const OsclAny* aContextData = NULL) = 0;
    238         /**
    239          * This API is to allow for extensibility of the pvPlayer interface.
    240          * It allows a caller to ask for an instance of a particular interface object to be returned.
    241          * The mechanism is analogous to the COM IUnknown method.  The interfaces are identified with
    242          * an interface ID that is a UUID as in DCE and a pointer to the interface object is
    243          * returned if it is supported.  Otherwise the returned pointer is NULL.
    244          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    245          * callback handler will be called when this command request completes.
    246          *
    247          * @param aUuid
    248          *         The UUID of the desired interface
    249          * @param aInterfacePtr
    250          *         A reference to the output pointer to the desired interface
    251          * @param aContextData
    252          *         Optional opaque data that will be passed back to the user with the command response
    253 
    254          * @exception This method can leave with one of the following error codes
    255          *         OsclErrNotSupported if the specified interface UUID is not supported
    256          * @returns A unique command ID for asynchronous completion
    257          **/
    258         virtual PVCommandId QueryInterface(const PVUuid& aUuid, PVInterface*& aInterfacePtr, const OsclAny* aContextData = NULL) = 0;
    259 
    260         /**
    261          * This API is to allow user of the SDK to cancel any specific command which is pending on pvPlayer.
    262          * If the request is to cancel a command which still has to be processed pvPlayer will just remove
    263          * the command from its queue of commands to be processed. If the request is to cancel a command that
    264          * is ongoing then player will attempt to interrupt the ongoing command. The state of player after a cancel
    265          * can vary. So the user of pvPlayerSDK must always query for state before issuing any subsequent
    266          * commands.
    267          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    268          * callback handler will be called when this command request completes.
    269          *
    270          * @param aCancelCmdId
    271          *          Command Id to be cancelled.
    272          * @param aContextData
    273          *         Optional opaque data that will be passed back to the user with the command response
    274          * @returns A unique command id for asynchronous completion
    275          **/
    276         virtual PVCommandId CancelCommand(PVCommandId aCancelCmdId, const OsclAny* aContextData = NULL) = 0;
    277 
    278         /**
    279          * This API is to allow the user to cancel all pending requests in pvPlayer. The current request being
    280          * processed, if any, will also be aborted. The user of PV-SDK should get the state of
    281          * PVPlayer Engine after the command completes and before issuing any other command.
    282          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    283          * callback handler will be called when this command request completes.
    284          *
    285          * @param aContextData
    286          *         Optional opaque data that will be passed back to the user with the command response
    287          * @returns A unique command id for asynchronous completion
    288          **/
    289         virtual PVCommandId CancelAllCommands(const OsclAny* aContextData = NULL) = 0;
    290 
    291         /**
    292          * This function returns the current state of pvPlayer.
    293          * Application may use this info for updating display or determine if the
    294          * pvPlayer is ready for the next request.
    295          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    296          * callback handler will be called when this command request completes.
    297          *
    298          * @param aState
    299          *         A reference to a PVPlayerState. Upon successful completion of this command,
    300          *         it will contain the current state of pvPlayer.
    301          * @param aContextData
    302          *         Optional opaque data that will be passed back to the user with the command response
    303          * @returns A unique command id for asynchronous completion
    304          **/
    305         virtual PVCommandId GetPVPlayerState(PVPlayerState& aState, const OsclAny* aContextData = NULL) = 0;
    306 
    307         /**
    308          * This function returns the current state of pvPlayer as a synchronous command.
    309          * Application may use this info for updating display or determine if the
    310          * pvPlayer is ready for the next request.
    311          *
    312          * @param aState
    313          *         A reference to a PVPlayerState. Upon successful completion of this command,
    314          *         it will contain the current state of pvPlayer.
    315          * @returns Status indicating whether the command succeeded or not.
    316          **/
    317         virtual PVMFStatus GetPVPlayerStateSync(PVPlayerState& aState) = 0;
    318 
    319         /**
    320          * This function allows a player data source to be specified for playback. This function must be called
    321          * when pvPlayer is in PVP_STATE_IDLE state and before calling Init. The specified data source must be a valid PVPlayerDataSource to
    322          * be accepted for use in playback.
    323          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    324          * callback handler will be called when this command request completes.
    325          *
    326          * @param aDataSource
    327          *          Reference to the player data source to be used for playback
    328          * @param aContextData
    329          *          Optional opaque data that will be passed back to the user with the command response
    330          * @leave   This method can leave with one of the following error codes
    331          *          OsclErrNotSupported if the format of the source is incompatible with what the SDK can handle
    332          *          OsclErrInvalidState if invoked in the incorrect state
    333          *          OsclErrNoMemory if the SDK failed to allocate memory during this operation
    334          * @return A unique command id for asynchronous completion
    335          */
    336         virtual PVCommandId AddDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL) = 0;
    337 
    338         /**
    339          * This function switches pvPlayer from PVP_STATE_IDLE state to the PVP_STATE_INITIALIZED state.
    340          * During the transition, pvPlayer is in the PVP_STATE_INITIALIZING transitional state and
    341          * the data source is being initialized to obtain metadata and track information of the source media.
    342          * If initialization fails, pvPlayer will revert to PVP_STATE_IDLE state and the data source
    343          * will be closed.
    344          * The Command should only be called in PVP_STATE_IDLE.
    345          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    346          * callback handler will be called when this command request completes.
    347          *
    348          * @param aContextData
    349          *         Optional opaque data that will be passed back to the user with the command response
    350          * @leave This method can leave with one of the following error codes
    351          *         OsclErrInvalidState if invoked in the incorrect state
    352          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    353          * @returns A unique command id for asynchronous completion
    354          **/
    355         virtual PVCommandId Init(const OsclAny* aContextData = NULL) = 0;
    356 
    357         /**
    358          * This function makes a request to return the list of all or segment of available metadata keys in the current pvPlayer state.
    359          * The metadata key list is dynamic and can change during the course of pvPlayer usage.
    360          * The list can be used to retrieve the metadata values with GetMetadataValues function.
    361          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    362          * callback handler will be called when this command request completes.
    363          *
    364          * @param aKeyList
    365          *         Reference to a vector to place the metadata key list.
    366          * @param aStartingIndex
    367          *         Input parameter to specify the starting index for aKeyList. This parameter along with aMaxEntries
    368          *         allows us to retrieve the metadata key list in segments.
    369          * @param aMaxEntries
    370          *         Input parameter to specify the maximum number of entries to be added to aKeyList. If there is no limit, set to -1.
    371          * @param aQueryKey
    372          *         Input parameter to narrow down the list of requested keys. For example,
    373          *         "track-info/video" indicates all keys related to "track-info/video". for eg:
    374          *         "track-info/video/width" "track-info/video/height". A NULL value indicates that all
    375          *         keys are requested.
    376          * @param aContextData
    377          *         Optional opaque data that will be passed back to the user with the command response
    378          * @leave This method can leave with one of the following error codes
    379          *         OsclErrInvalidState if invoked in the incorrect state
    380          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    381          * @returns A unique command id for asynchronous completion
    382          **/
    383         virtual PVCommandId GetMetadataKeys(PVPMetadataList& aKeyList, int32 aStartingIndex = 0, int32 aMaxEntries = -1,
    384                                             char* aQueryKey = NULL, const OsclAny* aContextData = NULL) = 0;
    385 
    386         /**
    387          * The function makes a request to return the metadata value(s) specified by the passed in metadata key list.
    388          * If the requeted metadata value is unavailable or the metadata key is invalid, the returned list will not contain
    389          * a KVP entry for the key. Note that value indexed in the returned aValueList does not necessary match the same index into
    390          * the specified aKeyList since this command can return none or more than one KVP for a specified key.
    391          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    392          * callback handler will be called when this command request completes.
    393          *
    394          * @param aKeyList
    395          *         Reference to a list of metadata keys for which metadata values are requested.
    396          * @param aStartingValueIndex
    397          *         The starting index refers to the an index into the whole value list specified by the keys in aKeyList. This command
    398          *         would populate the aValueList starting from the specified index.
    399          * @param aMaxValueEntries
    400          *         Input parameter to specify the maximum number of entries to be added to aValueList. If there is no limit, set to -1.
    401          * @param aNumAvailableValueEntries
    402          *         Output parameter which will be filled with number of available values for the specified key list.
    403          * @param aValueList
    404          *         Reference to a vector of KVP to place the specified metadata values
    405          * @param aContextData
    406          *         Optional opaque data that will be passed back to the user with the command response
    407          * @param aMetadataValuesCopiedInCallBack
    408          *         Boolean to let engine know if metadata values are copied by User of SDK in command complete callback.
    409          *         By default the SDK assumes this to be the case. If this argument is set to false by the caller,
    410          *         then SDK assumes that user will call ReleaseMetaDataValues at a later point.
    411          * @leave This method can leave with one of the following error codes
    412          *         OsclErrInvalidState if invoked in the incorrect state
    413          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    414          * @returns A unique command id for asynchronous completion
    415          **/
    416         virtual PVCommandId GetMetadataValues(PVPMetadataList& aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, int32& aNumAvailableValueEntries,
    417                                               Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList, const OsclAny* aContextData = NULL, bool aMetadataValuesCopiedInCallBack = true) = 0;
    418 
    419         /**
    420          * The function makes a request to release the metadata value(s) specified by the passed in metadata value list.
    421          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    422          * callback handler will be called when this command request completes.If a GetMetaDataValues were called in
    423          * PVP_STATE_INITIALIZED state, then corresponding ReleaseMetaDataValues must be called before Reset.
    424          * If a GetMetaDataValues were called in PVP_STATE_PREPARED, PVP_STATE_STARTED, PVP_STATE_PAUSED states,
    425          * then corresponding ReleaseMetaDataValues must be called before Stop.
    426          *
    427          * @param aValueList
    428          *         Reference to a vector of KVP to place the specified metadata values
    429          * @param aContextData
    430          *         Optional opaque data that will be passed back to the user with the command response
    431          * @leave This method can leave with one of the following error codes
    432          *         OsclErrInvalidState if invoked in the incorrect state
    433          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    434          * @returns A unique command id for asynchronous completion
    435          **/
    436         virtual PVCommandId ReleaseMetadataValues(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList, const OsclAny* aContextData = NULL) = 0;
    437 
    438         /**
    439          * This function allows a player data sink to be specified for playback. This function must be called
    440          * when pvPlayer is in PVP_STATE_INITIALIZED state. The specified data sink must be a valid PVPlayerDataSink to
    441          * be accepted for use in playback.
    442          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    443          * callback handler will be called when this command request completes.
    444          *
    445          * @param aDataSink
    446          *         The player data sink to be used for playback.
    447          * @param aContextData
    448          *         Optional opaque data that will be passed back to the user with the command response
    449          * @leave This method can leave with one of the following error codes
    450          *         OsclErrNotSupported if the format of the sink is incompatible with what the SDK can handle
    451          *         OsclErrInvalidState if invoked in the incorrect state
    452          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    453          * @return A unique command id for asynchronous completion
    454          **/
    455         virtual PVCommandId AddDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData = NULL) = 0;
    456 
    457         /**
    458          * This function sets the begin and end positions for the new playback range or changes the end position of the
    459          * current playback range. This function must be called when pvPlayer is in PVP_STATE_INITIALIZED, PVP_STATE_PREPARED,
    460          * PVP_STATE_STARTED, or PVP_STATE_PAUSED state. The specified positions must be between beginning of clip and
    461          * clip duration. The units of position is specified in the passed-in parameter PVPPlaybackPosition.
    462          * If either of the positions is indeterminate, use the indeterminate flag in PVPPlaybackPosition structure.
    463          * The queued playback range can be done using aQueueRange flag which is Not Supported as of now by PV-SDK.
    464          * This function will overwrite any previous playback range info. The only exception is the changing of end position
    465          * for the current playback range during playback.
    466          * Command if called in player state as PVP_STATE_INITIALISED or PVP_STATE_PAUSED, will complete in one Engine AO run without actually
    467          * changing the position. The change in position will come into affect when Prepare or Resume respectively is called on Engine by the app.
    468          * If reposition request is not honored by the source node during Prepare or Resume, engine will continue to complete Prepare or Resume
    469          * but will send an informational event "PVMFInfoChangePlaybackPositionNotSupported" to the app informing that the SetPlaybackRange request
    470          * could not be honored.
    471          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    472          * callback handler will be called when this command request completes.
    473          *
    474          * @param aBeginPos
    475          *         Beginning position for the new playback range
    476          * @param aEndPos
    477          *         Ending position for the new playback range.
    478          * @param aQueueRange
    479          *         Input flag to tell pvPlayer to queue the new playback range (Set/true) or use the
    480          *         new playback range right away (Reset/false)
    481          * @param aContextData
    482          *         Optional opaque data that will be passed back to the user with the command response
    483          * @leave This method can leave with one of the following error codes
    484          *         OsclErrInvalidState if invoked in the incorrect state
    485          * @returns A unique command id for asynchronous completion
    486          **/
    487         virtual PVCommandId SetPlaybackRange(PVPPlaybackPosition aBeginPos, PVPPlaybackPosition aEndPos, bool aQueueRange, const OsclAny* aContextData = NULL) = 0;
    488 
    489         /**
    490          * This function retrieves the playback range information for the current or queued playback range.
    491          * The user can choose which playback range by the aQueued flag. This function can be called when pvPlayer is in
    492          * PVP_STATE_INITIALIZED, PVP_STATE_PREPARED, PVP_STATE_STARTED, or PVP_STATE_PAUSED state.
    493          * The units of position is specified in the passed-in PVPlaybackPosition parameters which will be filled in when the command completes.
    494          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    495          * callback handler will be called when this command request completes.
    496          *
    497          * @param aBeginPos
    498          *         Reference to place the begin position for the playback range
    499          * @param aEndPos
    500          *         Reference to place the end position for the playback range
    501          * @param aQueued
    502          *         Input flag to choose inof of which playback range to return. Set(true)for queued range. Reset(false) for current range.
    503          * @param aContextData
    504          *         Optional opaque data that will be passed back to the user with the command response
    505          * @leave This method can leave with one of the following error codes
    506          *         OsclErrInvalidState if invoked in the incorrect state
    507          * @returns A unique command id for asynchronous completion
    508          **/
    509         virtual PVCommandId GetPlaybackRange(PVPPlaybackPosition &aBeginPos, PVPPlaybackPosition &aEndPos, bool aQueued, const OsclAny* aContextData = NULL) = 0;
    510 
    511         /**
    512          * This function allows querying of the current playback position. The playback position units
    513          * will be in the one specified by the passed-in reference to PVPPlaybackPosition. If no units
    514          * are specified, the units will default to milliseconds.
    515          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    516          * callback handler will be called when this command request completes.
    517          *
    518          * @param aPos
    519          *         Reference to place the current playback position
    520          * @param aContextData
    521          *         Optional opaque data that will be passed back to the user with the command response
    522          * @leave This method can leave with one of the following error codes
    523          *         OsclErrInvalidState if invoked in the incorrect state
    524          * @returns A unique command id for asynchronous completion
    525          **/
    526         virtual PVCommandId GetCurrentPosition(PVPPlaybackPosition &aPos, const OsclAny* aContextData = NULL) = 0;
    527 
    528         /**
    529          * This function allows the setting of the playback rate. The playback rate can be set
    530          * as millipercent of "real-time" playback rate. For example, 100000 means 1X "real-time", 400000
    531          * means 4X, 25000 means 0.25X, and -100000 means 1X backward.
    532          * The playback rate can also be modified by specifying the timebase to use for the playback
    533          * clock. This is accomplished by  setting the aRate parameter to 0 and passing in a pointer
    534          * to an PVMFTimebase.
    535          * This function can be called when pvPlayer is in PVP_STATE_PREPARED, PVP_STATE_STARTED, or PVP_STATE_PAUSED state.
    536          * Changing to or from an outside timebase is only allowed in PVP_STATE_PREPARED.
    537          * Command if called in player state PVP_STATE_PAUSED with a direction change, will complete in one Engine AO run without actually
    538          * changing the direction. The change in direction will come into affect when Resume is called on Engine by the app. If the request
    539          * is not honored by the source node during Resume, engine will continue to complete Resume but will send an informational event
    540          * "PVMFInfoChangePlaybackPositionNotSupported" to the app informing that the SetPlaybackRate request could not be honored.
    541          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    542          * callback handler will be called when this command request completes.
    543          *
    544          * @param aRate
    545          *         The playback rate specified as millipercent of "real-time".
    546          *         A millipercent is 1/1000 of a percent. So 2X = 200% of realtime is
    547          *         200,000 millipercent. The motivation is to povide precision with an integer parameter.
    548          *         Negative rates specify backward playback.
    549          *         The valid range of absolute value of playback rates will be limited to the
    550          *         minimum and maximum returned by GetPlaybackMinMaxRate().
    551          * @param aTimebase
    552          *         Reference to an PVMFTimebase which will be used to drive the playback clock. aRate must be
    553          *         set to 0, 1X, or -1X to use the timebase.
    554          * @param aContextData
    555          *         Optional opaque data that will be passed back to the user with the command response
    556          * @leave This method can leave with one of the following error codes
    557          *         OsclErrArgument if rate or timebase is invalid
    558          * @returns A unique command id for asynchronous completion
    559          **/
    560         virtual PVCommandId SetPlaybackRate(int32 aRate, PVMFTimebase* aTimebase = NULL, const OsclAny* aContextData = NULL) = 0;
    561 
    562         /**
    563          * This function retrieves the current playback rate setting. If the playback rate is set as a millipercent of "real-time"
    564          * playback rate, then aRate will be filled in with the milliperecent value when this command completes
    565          * successfully. If the playback rate is set by an outside timebase, aRate will be set to 0 and aTimebase pointer
    566          * will point to the PVMFTimebase being used when the command completes successfully.
    567          * This function can be called when pvPlayer is in
    568          * PVP_STATE_PREPARED, PVP_STATE_STARTED, or PVP_STATE_PAUSED state.
    569          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    570          * callback handler will be called when this command request completes.
    571          *
    572          * @param aRate
    573          *         A reference to an integer which will be filled in with the current playback rate expressed
    574          *         as millipercent of "real-time" playback rate. If an outside timebase is being used, aRate would
    575          *         be set to 0.
    576          * @param aTimebase
    577          *         Reference to an PVMFTimebase pointer which will be valid if an outside timebase is being used
    578          *         for the playback clock.
    579          * @param aContextData
    580          *         Optional opaque data that will be passed back to the user with the command response
    581          * @leave This method can leave with one of the following error codes
    582          *
    583          * @returns A unique command id for asynchronous completion
    584          **/
    585         virtual PVCommandId GetPlaybackRate(int32& aRate, PVMFTimebase*& aTimebase, const OsclAny* aContextData = NULL) = 0;
    586 
    587         /**
    588          * This function retrieves the minimum and maximum playback rate expressed as  a millipercent of "real-time"
    589          * playback rate.
    590          * This function can be called anytime between pvPlayer instantiation and destruction.
    591          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    592          * callback handler will be called when this command request completes.
    593          *
    594          * @param aMinRate
    595          *         A reference to an integer which will be filled in with the minimum playback rate allowed expressed
    596          *         as millipercent of "real-time" playback rate.
    597          * @param aMaxRate
    598          *         A reference to an integer which will be filled in with the maximum playback rate allowed expressed
    599          *         as millipercent of "real-time" playback rate.
    600          * @param aContextData
    601          *         Optional opaque data that will be passed back to the user with the command response
    602          * @leave This method can leave with one of the following error codes
    603          *
    604          * @returns A unique command id for asynchronous completion
    605          **/
    606         virtual PVCommandId GetPlaybackMinMaxRate(int32& aMinRate, int32& aMaxRate, const OsclAny* aContextData = NULL) = 0;
    607 
    608         /**
    609          * This function allows querying of the current playback position as a synchronous command. The playback position units
    610          * will be in the one specified by the passed-in reference to PVPPlaybackPosition. If no units
    611          * are specified, the units will default to milliseconds.
    612          *
    613          * @param aPos
    614          *         Reference to place the current playback position
    615          * @leave This method can leave with one of the following error codes
    616          *         OsclErrInvalidState if invoked in the incorrect state
    617          * @returns Status indicating whether the command succeeded or not.
    618          **/
    619         virtual PVMFStatus GetCurrentPositionSync(PVPPlaybackPosition &aPos) = 0;
    620 
    621         /**
    622          * This functions prepares pvPlayer for playback. pvPlayer connects the data source with the data sinks and starts
    623          * the data source to queue the media data for playback(e.g. for 3GPP streaming, fills the jitter buffer).
    624          * pvPlayer also checks to make sure each component needed for
    625          * playback is ready and capable. When successful, pvPlayer will be in PVP_STATE_PREPARED state,
    626          * The command should be called only in PVP_STATE_INITIALISED.
    627          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    628          * callback handler will be called when this command request completes.
    629          *
    630          * @param aContextData
    631          *         Optional opaque data that will be passed back to the user with the command response
    632          * @leave This method can leave with one of the following error codes
    633          *         OsclErrInvalidState if invoked in the incorrect state
    634          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    635          * @returns A unique command id for asynchronous completion
    636          **/
    637         virtual PVCommandId Prepare(const OsclAny* aContextData = NULL) = 0;
    638 
    639         /**
    640          * This function kicks off the actual playback. Media data are sent out from the data source to the data sink(s).
    641          * pvPlayer will transition to PVP_STATE_STARTED state after playback starts successfully.
    642          * The command should be called only in PVP_STATE_PREPARED.
    643          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    644          * callback handler will be called when this command request completes.
    645          *
    646          * @param aContextData
    647          *         Optional opaque data that will be passed back to the user with the command response
    648          * @leave This method can leave with one of the following error codes
    649          *         OsclErrInvalidState if invoked in the incorrect state
    650          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    651          * @returns A unique command id for asynchronous completion
    652          **/
    653         virtual PVCommandId Start(const OsclAny* aContextData = NULL) = 0;
    654 
    655         /**
    656          * This function pauses the currently ongoing playback. pvPlayer must be in PVP_STATE_STARTED state
    657          * to call this function. When pause successfully completes, pvPlayer will be in PVP_STATE_PAUSED state.
    658          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    659          * callback handler will be called when this command request completes.
    660          *
    661          * @param aContextData
    662          *         Optional opaque data that will be passed back to the user with the command response
    663          * @leave This method can leave with one of the following error codes
    664          *         OsclErrInvalidState if invoked in the incorrect state
    665          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    666          * @returns A unique command id for asynchronous completion
    667          **/
    668         virtual PVCommandId Pause(const OsclAny* aContextData = NULL) = 0;
    669 
    670         /**
    671          * This function resumes the currently paused playback. pvPlayer must be in
    672          * PVP_STATE_PAUSED state to call this function. When resume successfully completes,
    673          * pvPlayer will be in PVP_STATE_STARTED state.
    674          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    675          * callback handler will be called when this command request completes.
    676          *
    677          * @param aContextData
    678          *         Optional opaque data that will be passed back to the user with the command response
    679          * @leave This method can leave with one of the following error codes
    680          *         OsclErrInvalidState if invoked in the incorrect state
    681          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    682          * @returns A unique command id for asynchronous completion
    683          **/
    684         virtual PVCommandId Resume(const OsclAny* aContextData = NULL) = 0;
    685 
    686         /**
    687          * This function stops the current playback and transitions pvPlayer to the PVP_STATE_INITIALIZED
    688          * state. During the transition, data transmission from data source to all data sinks are
    689          * terminated. Also all connections between data source and data sinks
    690          * are torn down.
    691          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    692          * callback handler will be called when this command request completes.
    693          *
    694          * @param aContextData
    695          *         Optional opaque data that will be passed back to the user with the command response
    696          * @leave This method can leave with one of the following error codes
    697          *         OsclErrInvalidState if invoked in the incorrect state
    698          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    699          * @returns A unique command id for asynchronous completion
    700          **/
    701         virtual PVCommandId Stop(const OsclAny* aContextData = NULL) = 0;
    702 
    703         /**
    704         * This function may be used to close and unbind a data sink that has been previously added.
    705         * This function must be called when pvPlayer is in PVP_STATE_INITIALIZED state. If the data sink
    706         * is in use for playback, Stop must be called first to stop the playback and free the data sink.
    707         * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    708         * callback handler will be called when this command request completes.
    709         *
    710         * @param aDataSink
    711         *         Reference to the data sink to be removed
    712         * @param aContextData
    713         *         Optional opaque data that will be passed back to the user with the command response
    714         * @leave This method can leave with one of the following error codes
    715         *         OsclErrBadHandle if the passed in sink parameter is invalid
    716         *         OsclErrInvalidState if invoked in the incorrect state
    717         *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    718         * @returns A unique command id for asynchronous completion
    719         **/
    720         virtual PVCommandId RemoveDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData = NULL) = 0;
    721 
    722         /**
    723          * This function cleans up resources used for playback to transition pvPlayer to PVP_STATE_IDLE state.
    724          * While processing this command, pvPlayer is in the PVP_STATE_RESETTING state.
    725          * If any data sinks are still referenced by pvPlayer when this function is called, the data sinks
    726          * will be closed and removed from pvPlayer during the Reset.
    727          * If already in PVP_STATE_IDLE state, then nothing will occur.
    728          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    729          * callback handler will be called when this command request completes.
    730          *
    731          * @param aContextData
    732          *         Optional opaque data that will be passed back to the user with the command response
    733          * @leave This method can leave with one of the following error codes
    734          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    735          * @returns A unique command id for asynchronous completion
    736          **/
    737         virtual PVCommandId Reset(const OsclAny* aContextData = NULL) = 0;
    738 
    739         /**
    740          * This function may be used to close and unbind a data source that has been previously added.
    741          * This function must be called when pvPlayer is in PVP_STATE_IDLE state. If the data source
    742          * has already been initialized, Reset must be called first.
    743          * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
    744          * callback handler will be called when this command request completes.
    745          *
    746          * @param aDataSource
    747          *         Reference to the data source to be removed.
    748          * @param aContextData
    749          *         Optional opaque data that will be passed back to the user with the command response
    750          * @leave This method can leave with one of the following error codes
    751          *         OsclErrBadHandle if the passed in sink parameter is invalid
    752          *         OsclErrInvalidState if invoked in the incorrect state
    753          *         OsclErrNoMemory if the SDK failed to allocate memory during this operation
    754          * @returns A unique command id for asynchronous completion
    755          **/
    756         virtual PVCommandId RemoveDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL) = 0;
    757 
    758         /**
    759          * Returns SDK version information about pvPlayer.
    760          *
    761          * @param aSDKInfo
    762          *         A reference to a PVSDKInfo structure which contains product name, supported hardware platform,
    763          *         supported software platform, version, part number, and PV UUID. These fields will contain info
    764          *        .for the currently instantiated pvPlayer engine when this function returns success.
    765          *
    766          **/
    767         OSCL_IMPORT_REF static void GetSDKInfo(PVSDKInfo& aSDKInfo);
    768 
    769 };
    770 
    771 
    772 
    773 
    774 #endif // PV_PLAYER_INTERFACE_H_INCLUDED
    775