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 #ifndef PVMF_NODES_SYNC_CONTROL_H_INCLUDED 19 #define PVMF_NODES_SYNC_CONTROL_H_INCLUDED 20 21 #ifndef OSCL_BASE_H_INCLUDED 22 #include "oscl_base.h" 23 #endif 24 #ifndef PV_UUID_H_INCLUDED 25 #include "pv_uuid.h" 26 #endif 27 #ifndef PV_INTERFACE_H_INCLUDED 28 #include "pv_interface.h" 29 #endif 30 #ifndef PVMF_TIMESTAMP_H_INCLUDED 31 #include "pvmf_timestamp.h" 32 #endif 33 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED 34 #include "pvmf_node_interface.h" 35 #endif 36 #ifndef PVMF_RETURN_CODES_H_INCLUDED 37 #include "pvmf_return_codes.h" 38 #endif 39 #ifndef PVMF_EVENT_HANDLING_H_INCLUDED 40 #include "pvmf_event_handling.h" 41 #endif 42 43 #define PvmfNodesSyncControlUuid PVUuid(0xd4d82607,0xbca5,0x43e3,0x88,0x30,0xa3,0x1b,0x36,0x0a,0xb5,0xf2) 44 45 // Forward declarations 46 class PVMFMediaClock; 47 48 /** 49 * Configuration interface used by data sink nodes to synchronize rendering of media data 50 * and handle repositioning. 51 */ 52 class PvmfNodesSyncControlInterface : public PVInterface 53 { 54 public: 55 /** 56 * Sets the clock to which media data is synchronized. 57 * 58 * @param aClock Clock object to which media data is synchronized. 59 * @return Completion status. 60 */ 61 virtual PVMFStatus SetClock(PVMFMediaClock* aClock) = 0; 62 63 /** 64 * Notifies the data sink node that clock rate is changing. Also allows 65 * the underlying data sink node to tell whether the new rate can be supported 66 * via the return code. 67 * 68 * @param aRate The new playback rate expressed in millipercent of "real-time" playback 69 * @return PVMFSuccess if the data sink can handle the new rate. PVMFFailure if it cannot 70 **/ 71 virtual PVMFStatus ChangeClockRate(int32 aRate) = 0; 72 73 /** 74 * Configure the criteria to determine whether media data is early or late. 75 * 76 * Media data is considered early if it has a timestamp earlier than the current time of the clock by 77 * the early margin. The media data will be scheduled to be processed at the later time that is 78 * synchronized to the clock. Media data is considered late if it has a timestamp later than the 79 * current time of the clock by the late margin and will be dropped. 80 * 81 * @param aEarlyMargin Early margin in milliseconds. 82 * @param aLateMargin Late margin in milliseconds. 83 * @return Completion status 84 */ 85 virtual PVMFStatus SetMargins(int32 aEarlyMargin, int32 aLateMargin) = 0; 86 87 /** 88 * Notification that the clock has started 89 * 90 * The clock reference passed in by SetClock() can be controlled outside of 91 * the node. This lets the controller of the clock notify the node when the clock 92 * has started progressing 93 * 94 * @return None 95 */ 96 virtual void ClockStarted(void) = 0; 97 98 /** 99 * Notification that the clock has stopped 100 * 101 * The clock reference passed in by SetClock() can be controlled outside of 102 * the node. This lets the controller of the clock notify the node when the clock 103 * has stopped progressing due to Pause() or Stop() being called on the clock. 104 * 105 * @return None 106 */ 107 virtual void ClockStopped(void) = 0; 108 109 /** 110 * Skip processing media data until a specified timestamp 111 * 112 * Media data with timestamp before the specified starting and resume timestamp will be skipped. Default 113 * behaviour is to drop all skipped data, where SyncMediaData API will return -1 for all timestamps 114 * before the starting/resume time. If aRenderSkippedData is set to true, SyncMediaData API will return 115 * 0 for all timestamps after the starting time but before the resume time to indicate forced rendering of all skipped data. 116 * This method is asynchronous and the completion of this command will be sent through the 117 * PVMFNodeCmdStatusObserver of the node implementing this interface. 118 * 119 * @param aSessionId Session ID returned when creating a session with the node 120 * @param aResumeTimestamp Timestamp at which normal evaluation of timestamp against the clock will resume. This timestamp 121 * must be greater than or equal to aStartingTimestamp 122 * @param aPlayBackPositionContinuous When set to true, this is meant to notify the data sink that 123 * this skip media data call does not relate to a change in source position. Or in 124 * other words source is continuous. Example: Smart Forward Repositioning (SFR). In this case the source node 125 * remains in the same position but sinks are asked to skip thru media data segments. 126 * @param aContext Optional opaque data to be passed back to user with the command response 127 * @returns A unique command id for asynchronous completion. 128 */ 129 virtual PVMFCommandId SkipMediaData(PVMFSessionId aSessionId, 130 PVMFTimestamp aResumeTimestamp, 131 uint32 aStreamID = 0, 132 bool aPlayBackPositionContinuous = false, 133 OsclAny* aContext = NULL) = 0; 134 }; 135 136 #endif // PVMF_NODES_SYNC_CONTROL_H_INCLUDED 137 138 139 140 141