• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_JITTER_BUFFER_NODE_H_INCLUDED
19 #define PVMF_JITTER_BUFFER_NODE_H_INCLUDED
20 #ifndef OSCL_EXCLUSIVE_PTR_H_INCLUDED
21 #include "oscl_exclusive_ptr.h"
22 #endif
23 #ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
24 #include "pvmf_media_clock.h"
25 #endif
26 #ifndef OSCL_TIMER_H_INCLUDED
27 #include "oscl_timer.h"
28 #endif
29 #ifndef PVLOGGER_H_INCLUDED
30 #include "pvlogger.h"
31 #endif
32 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED
33 #include "pvmf_node_interface.h"
34 #endif
35 #ifdef PVMF_NODE_UTILS_H_INCLUDED
36 #include "pvmf_node_utils.h"
37 #endif
38 #ifndef OSCL_SCHEDULER_AO_H_INCLUDED
39 #include "oscl_scheduler_ao.h"
40 #endif
41 #ifndef PVMF_JITTER_BUFFER_PORT_H_INCLUDED
42 #include "pvmf_jitter_buffer_port.h"
43 #endif
44 #ifndef PVMF_JITTER_BUFFER_EXT_INTERFACE_H_INCLUDED
45 #include "pvmf_jitter_buffer_ext_interface.h"
46 #endif
47 #ifndef PVMF_JITTER_BUFFER_INTERNAL_H_INCLUDED
48 #include "pvmf_jitter_buffer_internal.h"
49 #endif
50 #ifndef PVMF_SM_NODE_EVENTS_H_INCLUDED
51 #include "pvmf_sm_node_events.h"
52 #endif
53 
54 #ifndef PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
55 #include "pvmf_jb_jitterbuffermisc.h"
56 #endif
57 
58 #ifndef PVMF_MEDIA_CMD_H_INCLUDED
59 #include "pvmf_media_cmd.h"
60 #endif
61 
62 ///////////////////////////////////////////////
63 //IDs for all of the asynchronous node commands.
64 ///////////////////////////////////////////////
65 enum TPVMFJitterBufferNodeCommand
66 {
67     PVMF_JITTER_BUFFER_NODE_QUERYUUID,
68     PVMF_JITTER_BUFFER_NODE_QUERYINTERFACE,
69     PVMF_JITTER_BUFFER_NODE_REQUESTPORT,
70     PVMF_JITTER_BUFFER_NODE_RELEASEPORT,
71     PVMF_JITTER_BUFFER_NODE_INIT,
72     PVMF_JITTER_BUFFER_NODE_PREPARE,
73     PVMF_JITTER_BUFFER_NODE_START,
74     PVMF_JITTER_BUFFER_NODE_STOP,
75     PVMF_JITTER_BUFFER_NODE_FLUSH,
76     PVMF_JITTER_BUFFER_NODE_PAUSE,
77     PVMF_JITTER_BUFFER_NODE_RESET,
78     PVMF_JITTER_BUFFER_NODE_CANCELALLCOMMANDS,
79     PVMF_JITTER_BUFFER_NODE_CANCELCOMMAND,
80     /* add jitter buffer node specific commands here */
81     PVMF_JITTER_BUFFER_NODE_COMMAND_LAST
82 };
83 
84 enum PVMFStreamType
85 {
86     PVMF_STREAM_TYPE_UNKNOWN = 0,
87     PVMF_STREAM_TYPE_AUDIO = 1,
88     PVMF_STREAM_TYPE_VIDEO = 2,
89 
90     //NUM_PVMF_STREAM_TYPES must always be at the end.
91     NUM_PVMF_STREAM_TYPES
92 };
93 
94 class PVLogger;
95 class PVMFJitterBufferExtensionInterfaceImpl;
96 class PVMFJitterBufferConstructParams;
97 class JitterBufferFactory;
98 
99 class PVMFJitterBufferNode : public PVInterface,
100         public PVMFNodeInterface,
101         public OsclActiveObject,
102         public PVMFJitterBufferObserver,
103         public PVMFJitterBufferMiscObserver,
104         public PVMFJBEventNotifierObserver,
105         public PVMFMediaClockStateObserver
106 {
107     public:
108         OSCL_IMPORT_REF PVMFJitterBufferNode(int32 aPriority, JitterBufferFactory* aJBFactory);         //may be provide static func for creation and make the ctor private
109         OSCL_IMPORT_REF virtual ~PVMFJitterBufferNode();
110 
111         //Overrides from PVInterface
addRef()112         virtual void addRef()
113         {
114         }
removeRef()115         virtual void removeRef()
116         {
117         }
118         virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface);
119 
120         //Overrides from PVMFNodeInterface
121         OSCL_IMPORT_REF PVMFStatus ThreadLogon();
122         OSCL_IMPORT_REF PVMFStatus ThreadLogoff();
123         OSCL_IMPORT_REF PVMFStatus GetCapability(PVMFNodeCapability& aNodeCapability);
124         OSCL_IMPORT_REF PVMFPortIter* GetPorts(const PVMFPortFilter* aFilter = NULL);
125         OSCL_IMPORT_REF PVMFCommandId QueryUUID(PVMFSessionId,
126                                                 const PvmfMimeString& aMimeType,
127                                                 Oscl_Vector< PVUuid, OsclMemAllocator >& aUuids,
128                                                 bool aExactUuidsOnly = false,
129                                                 const OsclAny* aContext = NULL);
130         OSCL_IMPORT_REF PVMFCommandId QueryInterface(PVMFSessionId,
131                 const PVUuid& aUuid,
132                 PVInterface*& aInterfacePtr,
133                 const OsclAny* aContext = NULL);
134         OSCL_IMPORT_REF PVMFCommandId RequestPort(PVMFSessionId,
135                 int32 aPortTag,
136                 const PvmfMimeString* aPortConfig = NULL,
137                 const OsclAny* aContext = NULL);
138         OSCL_IMPORT_REF PVMFCommandId ReleasePort(PVMFSessionId,
139                 PVMFPortInterface& aPort,
140                 const OsclAny* aContext = NULL);
141         OSCL_IMPORT_REF PVMFCommandId Init(PVMFSessionId,
142                                            const OsclAny* aContext = NULL);
143         OSCL_IMPORT_REF PVMFCommandId Prepare(PVMFSessionId aSession,
144                                               const OsclAny* aContext = NULL);
145         OSCL_IMPORT_REF PVMFCommandId Start(PVMFSessionId,
146                                             const OsclAny* aContext = NULL);
147         OSCL_IMPORT_REF PVMFCommandId Stop(PVMFSessionId,
148                                            const OsclAny* aContext = NULL);
149         OSCL_IMPORT_REF PVMFCommandId Flush(PVMFSessionId,
150                                             const OsclAny* aContext = NULL);
151         OSCL_IMPORT_REF PVMFCommandId Pause(PVMFSessionId,
152                                             const OsclAny* aContext = NULL);
153         OSCL_IMPORT_REF PVMFCommandId Reset(PVMFSessionId,
154                                             const OsclAny* aContext = NULL);
155         OSCL_IMPORT_REF PVMFCommandId CancelAllCommands(PVMFSessionId,
156                 const OsclAny* aContextData = NULL);
157         OSCL_IMPORT_REF PVMFCommandId CancelCommand(PVMFSessionId,
158                 PVMFCommandId aCmdId,
159                 const OsclAny* aContextData = NULL);
160         void HandlePortActivity(const PVMFPortActivity& aActivity);   //from PVMFPortActivityHandler
161 
162         //Overrides from PVMFJitterBufferObserver
163         virtual void JitterBufferFreeSpaceAvailable(OsclAny* aContext);
164         virtual void ProcessJBInfoEvent(PVMFAsyncEvent& aEvent);
165         virtual void PacketReadyToBeRetrieved(OsclAny* aContext);
166         virtual void EndOfStreamSignalled(OsclAny* aContext);
167         virtual void MediaTrackSSRCEstablished(PVMFJitterBuffer* aJitterBuffer, uint32 aSSRC);
168 
169         //PVMFJitterBufferMiscObserver
170         virtual void MessageReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage);
171         virtual void MediaReceivingChannelPrepared(bool aStatus);
172         virtual void ProcessRTCPControllerEvent(PVMFAsyncEvent& aEvent);
173         virtual void SessionSessionExpired();
174 
175 
176         //Overrides from PVMFJBEventNotifierObserver
177         virtual void ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus);
178 
179         //Override from PVMFMediaClockStateObserver
180         virtual void ClockStateUpdated();
181         virtual void NotificationsInterfaceDestroyed();
182 
183     private:
184         //Overrides from OsclActiveObject
185         void Run();
186         void DoCancel();
187 
188         //Extension interface functions implemented in Node
189         virtual void SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval);  //Not used as of now
190         virtual bool SetPortParams(PVMFPortInterface* aPort,
191                                    uint32 aTimeScale,
192                                    uint32 aBitRate,
193                                    OsclRefCounterMemFrag& aConfig,
194                                    bool aRateAdaptation = false,
195                                    uint32 aRateAdaptationFeedBackFrequency = 0);
196         virtual bool SetPlayRange(int32 aStartTimeInMS,
197                                   int32 aStopTimeInMS,
198                                   bool oPlayAfterASeek,
199                                   bool aStopTimeAvailable = true);
200         virtual void SetPlayBackThresholdInMilliSeconds(uint32 threshold);  //Not used as of now [replace with wait for OOO timeout]
201         virtual void SetJitterBufferRebufferingThresholdInMilliSeconds(uint32 aThreshold);
202         virtual void GetJitterBufferRebufferingThresholdInMilliSeconds(uint32& aThreshold);
203         virtual void SetJitterBufferDurationInMilliSeconds(uint32 duration);
204         virtual void GetJitterBufferDurationInMilliSeconds(uint32& duration);
205         virtual void SetEarlyDecodingTimeInMilliSeconds(uint32 duration);
206         virtual void SetBurstThreshold(float burstThreshold);
207         //While in buffering/start state, Jitter Buffer node expects its upstream peer node to send media msg at its input port in duration < inactivity duration
208         virtual void SetMaxInactivityDurationForMediaInMs(uint32 duration);
209         virtual void GetMaxInactivityDurationForMediaInMs(uint32& duration);
210 
211         virtual void SetClientPlayBackClock(PVMFMediaClock* clientClock);
212         virtual bool PrepareForRepositioning(bool oUseExpectedClientClockVal = false,
213                                              uint32 aExpectedClientClockVal = 0);   //called for RTSP based streaming only
214         virtual bool SetPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC);
215         virtual bool SetPortRTPParams(PVMFPortInterface* aPort,
216                                       bool   aSeqNumBasePresent,
217                                       uint32 aSeqNumBase,
218                                       bool   aRTPTimeBasePresent,
219                                       uint32 aRTPTimeBase,
220                                       bool   aNPTTimeBasePresent,
221                                       uint32 aNPTInMS,
222                                       bool oPlayAfterASeek = false);
223         virtual bool SetPortRTCPParams(PVMFPortInterface* aPort,
224                                        int aNumSenders,
225                                        uint32 aRR,
226                                        uint32 aRS);
227         virtual PVMFTimestamp GetActualMediaDataTSAfterSeek();
228         virtual PVMFTimestamp GetMaxMediaDataTS();
229 
230         virtual PVMFStatus SetServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo);
231         virtual PVMFStatus NotifyOutOfBandEOS();
232         virtual PVMFStatus SendBOSMessage(uint32 aStramID);
233 
234         virtual void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator, const PVMFPortInterface* aPort);
235 
236         virtual void SetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32 aSize, uint32 aResizeSize, uint32 aMaxNumResizes, uint32 aExpectedNumberOfBlocksPerBuffer);
237         virtual void GetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const ;
238 
239         virtual void SetSharedBufferResizeParams(uint32 maxNumResizes, uint32 resizeSize);
240         virtual void GetSharedBufferResizeParams(uint32& maxNumResizes, uint32& resizeSize);
241 
242         virtual bool ClearJitterBuffer(PVMFPortInterface* aPort,
243                                        uint32 aSeqNum);
244         virtual void FlushJitterBuffer();
245 
246 
247         virtual PVMFStatus SetInputMediaHeaderPreParsed(PVMFPortInterface* aPort,
248                 bool aHeaderPreParsed);
249 
250         virtual PVMFStatus HasSessionDurationExpired(bool& aExpired);
251         virtual bool PurgeElementsWithNPTLessThan(NptTimeFormat& aNPTTime);
252 
253         virtual void SetBroadCastSession();
254         virtual void DisableFireWallPackets();
255         virtual void UpdateJitterBufferState();
256         virtual void StartOutputPorts();
257         virtual void StopOutputPorts();
258 
259         bool SetPortParams(PVMFPortInterface* aPort,
260                            uint32 aTimeScale,
261                            uint32 aBitRate,
262                            OsclRefCounterMemFrag& aConfig,
263                            bool aRateAdaptation,
264                            uint32 aRateAdaptationFeedBackFrequency,
265                            uint aMaxNumBuffResizes, uint aBuffResizeSize);
266         bool SetPortParams(PVMFPortInterface* aPort,
267                            uint32 aTimeScale,
268                            uint32 aBitRate,
269                            OsclRefCounterMemFrag& aConfig,
270                            bool aRateAdaptation,
271                            uint32 aRateAdaptationFeedBackFrequency,
272                            bool aUserSpecifiedBuffParams,
273                            uint aMaxNumBuffResizes = 0, uint aBuffResizeSize = 0);
274         bool PrepareForPlaylistSwitch();
275 
276         //Async command handling functions
277         void DoQueryUuid(PVMFJitterBufferNodeCommand&);
278         void DoQueryInterface(PVMFJitterBufferNodeCommand&);
279         void DoRequestPort(PVMFJitterBufferNodeCommand&);
280         void DoReleasePort(PVMFJitterBufferNodeCommand&);
281         void DoInit(PVMFJitterBufferNodeCommand&);
282         void DoPrepare(PVMFJitterBufferNodeCommand& aCmd);
283         void CompletePrepare();
284         void CancelPrepare();
285         void DoStart(PVMFJitterBufferNodeCommand&);
286         void CompleteStart();
287         void CancelStart();
288 
289         //Utility functions
290         void Construct();
291         void ResetNodeParams(bool aReleaseMemory = true);
292         bool ProcessPortActivity(PVMFJitterBufferPortParams*);
293         PVMFStatus ProcessIncomingMsg(PVMFJitterBufferPortParams*);
294         PVMFStatus ProcessOutgoingMsg(PVMFJitterBufferPortParams*);
295         void QueuePortActivity(PVMFJitterBufferPortParams*,
296                                const PVMFPortActivity&);
297         bool CheckForPortRescheduling();
298         bool CheckForPortActivityQueues();
299 
300         bool getPortContainer(PVMFPortInterface* aPort,
301                               PVMFJitterBufferPortParams*& aPortParams);
302 
303 
304         PVMFCommandId QueueCommandL(PVMFJitterBufferNodeCommand&);
305         void MoveCmdToCurrentQueue(PVMFJitterBufferNodeCommand& aCmd);
306         bool ProcessCommand(PVMFJitterBufferNodeCommand&);
307         void CommandComplete(PVMFJitterBufferNodeCmdQ&,
308                              PVMFJitterBufferNodeCommand&,
309                              PVMFStatus,
310                              OsclAny* aData = NULL,
311                              PVUuid* aEventUUID = NULL,
312                              int32* aEventCode = NULL);
313         void CommandComplete(PVMFJitterBufferNodeCommand&,
314                              PVMFStatus,
315                              OsclAny* aData = NULL,
316                              PVUuid* aEventUUID = NULL,
317                              int32* aEventCode = NULL);
318         void InternalCommandComplete(PVMFJitterBufferNodeCmdQ&,
319                                      PVMFJitterBufferNodeCommand&,
320                                      PVMFStatus aStatus,
321                                      OsclAny* aEventData = NULL);
322         PVMFJBCommandContext* RequestNewInternalCmd();
323 
324         void DoStop(PVMFJitterBufferNodeCommand&);
325         void DoFlush(PVMFJitterBufferNodeCommand&);
326         bool FlushPending();
327 
328         void DoPause(PVMFJitterBufferNodeCommand&);
329         void DoReset(PVMFJitterBufferNodeCommand&);
330         void DoCancelAllCommands(PVMFJitterBufferNodeCommand&);
331         void DoCancelCommand(PVMFJitterBufferNodeCommand&);
332 
333         void ReportErrorEvent(PVMFEventType aEventType,
334                               OsclAny* aEventData = NULL,
335                               PVUuid* aEventUUID = NULL,
336                               int32* aEventCode = NULL);
337         void ReportInfoEvent(PVMFEventType aEventType,
338                              OsclAny* aEventData = NULL,
339                              PVUuid* aEventUUID = NULL,
340                              int32* aEventCode = NULL);
341         void SetState(TPVMFNodeInterfaceState);
342 
343         void CleanUp();
344 
345 
346 
347         friend class PVMFJitterBufferPort;
348         friend class PVMFJitterBufferExtensionInterfaceImpl;
349 
350 
351 
352         bool CheckStateForRegisteringRTPPackets();
353 
NotifyAutoPauseComplete()354         bool NotifyAutoPauseComplete()
355         {
356 
357             return true;
358         }
NotifyAutoResumeComplete()359         bool NotifyAutoResumeComplete()
360         {
361 
362             return true;
363         }
364 
365         PVMFPortInterface* getPortCounterpart(PVMFPortInterface* aPort);
366         bool CheckForSpaceInJitterBuffer(PVMFPortInterface* aPort);
367         PVMFStatus CheckForHighWaterMark(PVMFPortInterface* aPort, bool& aHighWaterMarkReached);
368         PVMFStatus CheckForLowWaterMark(PVMFPortInterface* aPort, bool& aLowWaterMarkReached);
369         PVMFStatus RequestMemCallBackForAutoResume(PVMFPortInterface* aPort);
370         void freeblockavailable(OsclAny* aContextData);
371         void freememoryavailable(OsclAny* aContextData);
372         void chunkdeallocated(OsclAny* aContextData);
373         bool RegisterDataPacket(PVMFPortInterface* aPort,
374                                 PVMFJitterBuffer* aJitterBuffer,
375                                 PVMFSharedMediaDataPtr& aDataPacket);
376         PVMFJitterBuffer* findJitterBuffer(PVMFPortInterface* aPort);
377         PVMFPortInterface* findPortForJitterBuffer(PVMFJitterBuffer*);
378         bool IsJitterBufferReady(PVMFJitterBufferPortParams*, uint32& aClockDiff);
379         PVMFStatus SendData(PVMFPortInterface*);
380         PVMFStatus CheckJitterBufferEmpty(bool& oEmpty);
381 
382 
383         void LogSessionDiagnostics();
384         void LogPortDiagnostics();
385 
386         PVMFStatus CheckForEOS();
387         PVMFStatus GenerateAndSendEOSCommand(PVMFPortInterface* aPort);
388 
389 
390         bool QueueBOSCommand(PVMFPortInterface* aPort);
391 
SetInPlaceProcessingMode(PVMFPortInterface * aPort,bool aInPlaceProcessing)392         PVMFStatus SetInPlaceProcessingMode(PVMFPortInterface* aPort,
393                                             bool aInPlaceProcessing)
394         {
395             PVMFJitterBufferPortParams* portParamsPtr = NULL;
396             if (!getPortContainer(aPort, portParamsPtr))
397             {
398                 return PVMFFailure;
399             }
400 
401             if (portParamsPtr->ipJitterBuffer != NULL)
402             {
403                 portParamsPtr->ipJitterBuffer->SetInPlaceProcessingMode(aInPlaceProcessing);
404             }
405             return PVMFSuccess;
406         }
407 
408 
409         OsclAny* AllocatePort();
410         bool PushPortToVect(PVMFJitterBufferPort*& aPort);
411         bool PushPortParamsToQ(PVMFJitterBufferPortParams*& aPortParams);
412 
413         //  PvmfRtcpTimer* iRTCPTimer;
414         void RtcpTimerEvent(PvmfRtcpTimer* pTimer);
415         uint32 CalcRtcpInterval(PVMFJitterBufferPortParams* pFeedbackPort);
416         PVMFStatus ProcessIncomingRTCPReport(PVMFSharedMediaMsgPtr&,
417                                              PVMFJitterBufferPortParams*);
418 
419         PVMFStatus GenerateRTCPRR(PVMFJitterBufferPortParams* pPort);
420 
421         bool LocateFeedBackPort(PVMFJitterBufferPortParams*&,
422                                 PVMFJitterBufferPortParams*&);
423 
424         bool LocateInputPortForFeedBackPort(PVMFJitterBufferPortParams*&,
425                                             PVMFJitterBufferPortParams*&);
426 
427         PVMFStatus ComposeAndSendFeedBackPacket(PVMFJitterBufferPortParams*&,
428                                                 PVMFJitterBufferPortParams*&);
429 
430         PVMFStatus ComposeAndSendRateAdaptationFeedBackPacket(PVMFJitterBufferPortParams*&,
431                 PVMFJitterBufferPortParams*&);
432 
433 
434 
435 
436         void PVMFJBSessionDurationTimerEvent();
437         void ComputeCurrentSessionDurationMonitoringInterval();
438 
439 
440         PVMFStatus CreateFireWallPacketMemAllocators(PVMFJitterBufferPortParams*);
441         PVMFStatus DestroyFireWallPacketMemAllocators(PVMFJitterBufferPortParams*);
442 
443         PVMFStatus SendFireWallPackets();
444 
445         bool Allocate(PVMFJitterBufferPortParams* it, PVMFSharedMediaDataPtr& fireWallPkt, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataImpl, const int size);
446 
447         PVMFStatus ResetFireWallPacketInfoAndResend();
448         void CheckForFireWallRecv(bool &aComplete);
449         void CheckForFireWallPacketAttempts(bool &aComplete);
450         PVMFStatus DecodeFireWallPackets(PVMFSharedMediaDataPtr aPacket,
451                                          PVMFJitterBufferPortParams* aPortParamsPtr);
452         void SetJitterBufferSize(uint32 aBufferSz);
453         void GetJitterBufferSize(uint32& aBufferSz) const;
454         void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator);
455         bool RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay = 0, OsclAny* aContext = NULL);
456         void CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext = NULL);
457         void HandleEvent_IncomingMediaInactivityDurationExpired();
458         void HandleEvent_NotifyReportBufferingStatus();
459         void HandleEvent_JitterBufferBufferingDurationComplete();
460 
461         /* Bitstream thinning releated */
462         void UpdateRebufferingStats(PVMFEventType aEventType);
463         PVMFNodeCapability iCapability;
464         PVMFJitterBufferNodeCmdQ iInputCommands;
465         PVMFJitterBufferNodeCmdQ iCurrentCommand;
466         PVMFPortVector<PVMFJitterBufferPort, OsclMemAllocator> iPortVector;
467         Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator> iPortParamsQueue;
468         Oscl_Vector<PVMFPortActivity, OsclMemAllocator> iPortActivityQueue;
469 
470         bool    oStartPending;
471         bool    oStopOutputPorts;
472         uint32  iPauseTime;
473 
474         PVMFMediaClock* ipClientPlayBackClock;
475 
476         bool    iMediaReceiveingChannelPrepared;
477 
478         PVMFJitterBufferMisc*   ipJitterBufferMisc;
479 
480         bool iBroadCastSession;
481 
482         JitterBufferFactory* ipJitterBufferFactory;
483         /////////////////////////////////////////////////////////////////////////////
484         //Following variables are shared with the jitter buffers associated with the session and are passed by refernce
485         //Node should only observe these and initialize it, and modification to these are supposed to be done by the
486         //jitter buffer only
487         bool    iDelayEstablished;
488         int     iJitterDelayPercent;
489         PVMFJitterBufferDataState iJitterBufferState;
490 
491         /////////////////////////////////////////////////////////////////////////////
492         //Extention interface
493         PVMFJitterBufferExtensionInterfaceImpl* ipExtensionInterface;
494         //Variables to persist info passed on by the extension interface
495         uint32 iRebufferingThreshold;
496         uint32 iJitterBufferDurationInMilliSeconds;
497         uint32 iMaxInactivityDurationForMediaInMs;
498         uint32 iEstimatedServerKeepAheadInMilliSeconds;
499         /* resizable reallocator configuration */
500         uint32 iJitterBufferSz;
501         uint iMaxNumBufferResizes;
502         uint iBufferResizeSize;
503         uint32 iBufferingStatusIntervalInMs;
504 
505         PVMFJitterBufferFireWallPacketInfo iFireWallPacketInfo;
506         bool iDisableFireWallPackets;
507         bool iPlayingAfterSeek;
508         ///////////////////////////////////////////////////////////////////////
509         //EventNotification tracking vars
510         PVMFJBEventNotifier*    ipEventNotifier;
511         uint32 iIncomingMediaInactivityDurationCallBkId;
512         bool   iIncomingMediaInactivityDurationCallBkPending;
513         uint32 iNotifyBufferingStatusCallBkId;
514         bool   iNotifyBufferingStatusCallBkPending;
515         uint32 iJitterBufferDurationCallBkId;
516         bool   iJitterBufferDurationCallBkPending;
517 
518         //////////////////////// Diagnostic log related  //////////////////////
519         bool iDiagnosticsLogged;
520         uint32 iNumRunL;
521         ///////////////////////////////////////////////////////////////////////
522 
523         ///////////////////////////////////////////////////////////////////////
524         //Loggers
525         PVLogger* ipLogger;
526         PVLogger* ipDataPathLogger;
527         PVLogger* ipDataPathLoggerIn;
528         PVLogger* ipDataPathLoggerOut;
529         PVLogger* ipDataPathLoggerFlowCtrl;
530         PVLogger* ipClockLogger;
531         PVLogger* ipClockLoggerSessionDuration;
532         PVLogger* ipClockLoggerRebuff;
533         PVLogger* ipDiagnosticsLogger;
534         PVLogger* ipJBEventsClockLogger;
535         ///////////////////////////////////////////////////////////////////////
536 };
537 #endif
538