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 #ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
     19 #define PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
     20 
     21 #include "oscl_base.h"
     22 #include "oscl_string_containers.h"
     23 #include "pvmf_sm_tunables.h"
     24 
     25 //Jitter buffer node specific leave codes
     26 #define JBPacketRegistrationConfigurationCorrupted  1000
     27 
     28 
     29 enum PVMFJitterBufferDataState
     30 {
     31     PVMF_JITTER_BUFFER_STATE_UNKNOWN,
     32     PVMF_JITTER_BUFFER_READY,
     33     PVMF_JITTER_BUFFER_IN_TRANSITION
     34 };
     35 
     36 ///////////////////////////////////////////////////////////////////////////////
     37 //Specific to RTP streaming session
     38 ///////////////////////////////////////////////////////////////////////////////
     39 typedef struct tagPVMFRTPInfoParams
     40 {
     41     tagPVMFRTPInfoParams()
     42     {
     43         seqNumBaseSet = false;
     44         seqNum = 0;
     45         rtpTimeBaseSet = false;
     46         rtpTime = 0;
     47         nptTimeBaseSet = false;
     48         nptTimeInMS = 0;
     49         rtpTimeScale = 0;
     50         nptTimeInRTPTimeScale = 0;
     51         isPlayAfterPause = false;
     52     };
     53 
     54     bool   seqNumBaseSet;
     55     uint32 seqNum;
     56     bool   rtpTimeBaseSet;
     57     uint32 rtpTime;
     58     uint32 nptTimeInMS;
     59     bool   nptTimeBaseSet;
     60     uint32 rtpTimeScale;
     61     uint32 nptTimeInRTPTimeScale;
     62     bool   isPlayAfterPause;
     63 } PVMFRTPInfoParams;
     64 
     65 ///////////////////////////////////////////////////////////////////////////////
     66 //RTSP based streaming specific data structures
     67 ///////////////////////////////////////////////////////////////////////////////
     68 enum PVMFJitterBufferFireWallPacketFormat
     69 {
     70     PVMF_JB_FW_PKT_FORMAT_RTP,
     71     PVMF_JB_FW_PKT_FORMAT_PV
     72 };
     73 
     74 class PVMFJitterBufferFireWallPacketInfo
     75 {
     76     public:
     77         PVMFJitterBufferFireWallPacketInfo()
     78         {
     79             iServerRoundTripDelayInMS =
     80                 PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_SERVER_RESPONSE_TIMEOUT_IN_MS;
     81             iNumAttempts =
     82                 PVMF_JITTER_BUFFER_NODE_DEFAULT_FIREWALL_PKT_ATTEMPTS;
     83             iFormat = PVMF_JB_FW_PKT_FORMAT_RTP;
     84         };
     85 
     86         virtual ~PVMFJitterBufferFireWallPacketInfo()
     87         {
     88         };
     89 
     90         uint32 iServerRoundTripDelayInMS;
     91         uint32 iNumAttempts;
     92         PVMFJitterBufferFireWallPacketFormat iFormat;
     93 };
     94 
     95 
     96 typedef enum
     97 {
     98     PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNKNOWN,
     99     PVMF_JB_REGISTER_MEDIA_MSG_ERR_CORRUPT_PACKET,
    100     PVMF_JB_REGISTER_MEDIA_MSG_ERR_LATE_MSG,
    101     PVMF_JB_BUFFER_REGISTER_MEDIA_MSG_ERR_CONFIG_NOT_SUPPORTED,
    102     PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_JB_FULL,
    103     PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_INSUFFICIENT_MEMORY_FOR_PACKETIZATION,
    104     PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNEXPECTED_DATA,
    105     PVMF_JB_REGISTER_MEDIA_MSG_ERR_EOS_SIGNALLED,
    106     PVMF_JB_REGISTER_MEDIA_MSG_ERR_INVALID_HEADER,
    107     PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS
    108 } PVMFJitterBufferRegisterMediaMsgStatus;
    109 
    110 class PVMFJBEventNotifier;
    111 class PVMFMediaClock;
    112 
    113 enum JB_NOTIFY_CALLBACK
    114 {
    115     JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED,
    116     JB_NOTIFY_REPORT_BUFFERING_STATUS,
    117     JB_BUFFERING_DURATION_COMPLETE,
    118     JB_MONITOR_REBUFFERING,
    119     JB_NOTIFY_SEND_FIREWALL_PACKET,
    120     JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE  //OOO->Out Of Order
    121 };
    122 
    123 class PVMFJitterBufferObserver;
    124 ///////////////////////////////////////////////////////////////////////////////
    125 //PVMFJitterBufferConstructParams
    126 ///////////////////////////////////////////////////////////////////////////////
    127 class PVMFJitterBufferConstructParams
    128 {
    129     public:
    130         PVMFJitterBufferConstructParams(PVMFMediaClock& aEstimatedServerClock
    131                                         , PVMFMediaClock& aClientPlaybackClock
    132                                         , OSCL_HeapString<OsclMemAllocator>& aMimeType
    133                                         , PVMFJBEventNotifier& aJBEventNotifier
    134                                         , bool& aDelayEstablished
    135                                         , int& aJitterDelayPercent
    136                                         , PVMFJitterBufferDataState& aJitterBufferDataState
    137                                         , PVMFJitterBufferObserver* const aObserver
    138                                         , OsclAny* const aContext)
    139                 : irEstimatedServerClock(aEstimatedServerClock)
    140                 , irClientPlaybackClock(aClientPlaybackClock)
    141                 , irMimeType(aMimeType)
    142                 , irJBEventNotifier(aJBEventNotifier)
    143                 , irDelayEstablished(aDelayEstablished)
    144                 , irJitterDelayPercent(aJitterDelayPercent)
    145                 , irJitterBufferState(aJitterBufferDataState)
    146                 , ipObserver(aObserver)
    147                 , ipContextData(aContext)
    148         {}
    149 
    150         PVMFMediaClock& GetEstimatedServerClock() const
    151         {
    152             return irEstimatedServerClock;
    153         }
    154 
    155         PVMFMediaClock& GetClientPlaybackClock() const
    156         {
    157             return irClientPlaybackClock;
    158         }
    159 
    160         OSCL_HeapString<OsclMemAllocator>&  GetMimeType() const
    161         {
    162             return irMimeType;
    163         }
    164 
    165         bool& GetDelayEstablishStatus() const
    166         {
    167             return irDelayEstablished;
    168         }
    169 
    170         int& GetJBDelayPercent() const
    171         {
    172             return irJitterDelayPercent;
    173         }
    174 
    175         PVMFJBEventNotifier& GetEventNotifier() const
    176         {
    177             return irJBEventNotifier;
    178         }
    179 
    180         PVMFJitterBufferObserver* const GetJBObserver() const
    181         {
    182             return ipObserver;
    183         }
    184 
    185         OsclAny* const  GetContextData() const
    186         {
    187             return ipContextData;
    188         }
    189 
    190         PVMFJitterBufferDataState& GetJitterBufferState() const
    191         {
    192             return irJitterBufferState;
    193         }
    194 
    195     private:
    196         PVMFMediaClock& irEstimatedServerClock;
    197         PVMFMediaClock& irClientPlaybackClock;
    198         OSCL_HeapString<OsclMemAllocator>& irMimeType;
    199         PVMFJBEventNotifier&    irJBEventNotifier;
    200         bool& irDelayEstablished;
    201         int& irJitterDelayPercent;
    202         PVMFJitterBufferDataState&  irJitterBufferState;
    203         PVMFJitterBufferObserver *const ipObserver;
    204         OsclAny* const  ipContextData;
    205 };
    206 
    207 ///////////////////////////////////////////////////////////////////////////////
    208 //RTPSessionInfoForFirewallExchange
    209 ///////////////////////////////////////////////////////////////////////////////
    210 class PVMFPortInterface;
    211 class RTPSessionInfoForFirewallExchange
    212 {
    213     public:
    214         RTPSessionInfoForFirewallExchange(): ipRTPDataJitterBufferPort(NULL), iSSRC(0) {}
    215         RTPSessionInfoForFirewallExchange(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo)
    216         {
    217             ipRTPDataJitterBufferPort = aRTPSessionInfo.ipRTPDataJitterBufferPort;
    218             iSSRC = aRTPSessionInfo.iSSRC;
    219         }
    220         RTPSessionInfoForFirewallExchange(PVMFPortInterface* aInputPort, uint32 aSSRC): ipRTPDataJitterBufferPort(aInputPort)
    221                 , iSSRC(aSSRC) {}
    222 
    223         PVMFPortInterface* ipRTPDataJitterBufferPort;
    224         uint32 iSSRC;
    225 };
    226 
    227 /**
    228  * An enumeration of info codes from PVMFJitterBufferNode
    229  **/
    230 typedef enum
    231 {
    232     PVMFJitterBufferNodeInfoEventStart = 8192,
    233     PVMFJitterBufferNodeJitterBufferFull,
    234     PVMFJitterBufferNodeTrackEOSReached,
    235     PVMFJitterBufferNodeExcercisingPortFlowControl,
    236     PVMFJitterBufferNodeRTCPBYERecvd,
    237     PVMFJitterBufferNodeJitterBufferLowWaterMarkReached,
    238     PVMFJitterBufferNodeJitterBufferHighWaterMarkReached,
    239     PVMFJitterBufferNodeStreamThinningRecommended,
    240     PVMFJitterBufferNodeRTCPDataProcessed,
    241     PVMFJitterBufferNodeInfoEventEnd
    242 } PVMFJitterBufferNodeInfoEventType;
    243 
    244 #endif
    245