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_2way_basic_types
     21 *  Part of     :
     22 *  Interface   :
     23 *  Description : Basic / low-level enums and types used by PV2Way engine
     24 *  Version     : (see RELEASE field in copyright header above)
     25 *
     26 * ==============================================================================
     27 */
     28 
     29 #ifndef PV_2WAY_BASIC_TYPES_H_INCLUDED
     30 #define PV_2WAY_BASIC_TYPES_H_INCLUDED
     31 
     32 #ifndef PVMF_FORMAT_TYPE_H_INCLUDED
     33 #include "pvmf_format_type.h"
     34 #endif
     35 
     36 #ifndef OSCL_VECTOR_H_INCLUDED
     37 #include "oscl_vector.h"
     38 #endif
     39 
     40 #ifndef OSCL_MEM_H_INCLUDED
     41 #include "oscl_mem.h"
     42 #endif
     43 
     44 // CONSTANTS
     45 /** The starting error code for 2way specific errors **/
     46 const int PV2WayErrorStatusStart = (-10500);
     47 /** There was an error dispatching muxed data to the downstream node **/
     48 const int PV2WayDispatchError = PV2WayErrorStatusStart - 1;
     49 /** The request was rejected by the peer **/
     50 const int PV2WayErrorRejected = PV2WayErrorStatusStart - 5;
     51 /** Signals replacement of an existing resource **/
     52 const int PV2WayErrReplaced = PV2WayErrorStatusStart - 6;
     53 
     54 // DATA TYPES
     55 /**
     56  *  TPVTerminalType enum
     57  *  TPVTerminalType enumerates the possible 2-way protocols
     58  **/
     59 typedef enum TPVTerminalType
     60 {
     61     PV_323,/* based on H.323 */
     62     PV_324M, /* based on H.324m */
     63     PV_SIP, /* based on SIP */
     64     PV_TERMINAL_TYPE_NONE
     65 } PV2WayTerminalType;
     66 
     67 /**
     68  * TPVLoopbackMode Enum
     69  *
     70  * TPVLoopbackMode emumerates the possible loopback options that can be used with the pv2way SDK
     71  **/
     72 typedef enum TPVLoopbackMode
     73 {
     74     PV_LOOPBACK_NONE,
     75     PV_LOOPBACK_COMM, /* Loops back from Comm source to Comm sink */
     76     PV_LOOPBACK_ENGINE, /* Loops back media at the engine level, no mux involved */
     77     PV_LOOPBACK_MUX /* Loops back at the output of the mux */
     78 } PV2WayLoopbackMode;
     79 
     80 /**
     81  * TPVDirection Enum
     82  *
     83  * TPVDirection emumerates the direction of the track.
     84  **/
     85 typedef enum TPVDirection
     86 {
     87     PV_DIRECTION_NONE = 0,
     88     INCOMING = 1,
     89     OUTGOING = 2,
     90     PV_DIRECTION_BOTH = 3
     91 } PV2WayDirection;
     92 
     93 /**
     94 Enumeration of high level media types supported by the SDK
     95  **/
     96 typedef enum TPVMediaType_t
     97 {
     98     PV_MEDIA_NONE = 0,
     99     PV_CONTROL = 1,
    100     PV_AUDIO = 2,
    101     PV_VIDEO = 4,
    102     PV_DATA = 8,
    103     PV_USER_INPUT = 16,
    104     PV_MULTIPLEXED = 32,
    105     PV_MEDIA_ALL = 0xFFFF
    106 } PV2WayMediaType;
    107 
    108 /**
    109  * PVTrackId uniquely identifies a track for transferring audio/video in a particular direction -
    110  * receive or transmit.
    111  *
    112  **/
    113 typedef unsigned int PVTrackId;
    114 
    115 /**
    116  * TPV2WayState Class
    117  *
    118  * An enumeration of the major states of the pv2way engine.
    119  **/
    120 typedef enum
    121 {
    122     /**
    123         The state immediately after the pv2way instance has been successfully created or instantiated.
    124         No resources have been allocated yet.
    125     **/
    126     EIdle = 0,
    127     /**
    128         The pv2way is in this state when it is initializing from the EIdle to the ESetup state.  The terminal queries the
    129         available device capabilities (encode, decode, mux), acquires resources to make a two-way call (codecs, formats, memory etc)
    130         and transitions to the ESetup state when it will be ready to accept setup parameters and Connect.
    131         If initializing fails, the pv2way relinquishes the resources and reverts to the EIdle state.
    132     **/
    133     EInitializing,
    134     /**
    135         The state where the pv2way instance is in the process of receiving setup parameters from the application, for encoding,
    136         multiplexing, capturing and rendering.  Each time a new set of parameters is passed in, validation will take place and a
    137         status will be returned accordingly.  A valid data source and data sink for the communications port are to be added to the
    138         terminal in this state before it can be transitioned to the Econnecting state.  Media sources and sinks can also be added
    139         at this time.
    140     **/
    141     ESetup,
    142     /**
    143         The state where the pv2way instance has received a call to start connecting.  It starts communication with the remote terminal
    144         to exchange media capabilities and channel configuration in preparation for the establishment of media channels.
    145     **/
    146     EConnecting,
    147     /**
    148         The state after all control signaling is completed.  The terminal is now able to open media tracks for audio and video.
    149     **/
    150     EConnected,
    151     /**
    152         The state where the terminal is shutting down all tracks and the multiplex.
    153     **/
    154     EDisconnecting,
    155     /**
    156         The state where the terminal is releasing all resources and transitioning to the EIdle state.
    157     **/
    158     EResetting
    159 } PV2WayState;
    160 
    161 /**
    162  * TPVTIndicationType enum
    163  *
    164  *  Enumeration of unsolicited indications from pv2way.
    165  *
    166  **/
    167 enum TPVTIndicationType
    168 {
    169 
    170     /**
    171      * Indicates that the peer terminal has established an incoming track.  The
    172      * local buffer specifies the media type associated with the track.
    173      * The first octet of the local buffer indicates the media type.
    174      * The second,third and fourth octets are reserved.
    175      * The four octets from five to eight are to be interpreted as a unique track id.
    176      * The format type and additional capabilities are indicated using the PV2WayTrackInfoInterface extension interface.
    177      **/
    178     PVT_INDICATION_INCOMING_TRACK,
    179     /**
    180      * Indicates that the local terminal has established an outgoing track that is
    181      * acceptable to the peer.  The local buffer specifies the media type associated with the track.
    182      * The first octet of the local buffer indicates the media type.
    183      * The second,third and fourth octets are reserved.
    184      * The four octets from five to eight are to be interpreted as a unique track id.
    185      * The format type and additional capabilities are indicated using the PV2WayTrackInfoInterface extension interface.
    186      **/
    187     PVT_INDICATION_OUTGOING_TRACK,
    188     /**
    189      * Indicates that 2way engine has ended the current telephony session.  The app
    190      * can now either reset the engine or make a subsequent call.
    191      *
    192      **/
    193     PVT_INDICATION_DISCONNECT,
    194     /**
    195      * Indicates the start of unsolicited closure of an incoming/outgoing track.  The PVT_INDICATION_CLOSE_TRACK
    196      * indication will be sent when the track is completely close.
    197      * The first octet of the local buffer indicates the direction of the track.
    198      * The second and third octets indicates the track id.
    199      **/
    200     PVT_INDICATION_CLOSING_TRACK,
    201     /**
    202      * Indicates an unsolicited closure of an incoming/outgoing track.  Any media sink/source
    203      * associated with this will be stopped and returned to the application.
    204      * The first octet of the local buffer indicates the media type of the track.
    205      * The second octet indicates the direction.
    206      * The third octet indicates whether there is a replacement for this track available.  If true,
    207      * the application may add data source/sink for this track again.
    208      **/
    209     PVT_INDICATION_CLOSE_TRACK,
    210     /**
    211      * Indicates that the remote terminal has paused an incoming track.  Any media sink
    212      * associated with this will be stopped.
    213      *
    214      **/
    215 
    216     PVT_INDICATION_PAUSE_TRACK,
    217     /**
    218      * Indicates that the remote terminal has resumed an incoming track.  Any media sink
    219      * associated with this will be restarted.
    220      *
    221      **/
    222     PVT_INDICATION_RESUME_TRACK,
    223     /**
    224      * Indicates an internal error in the pv2way engine.  The derived class provides
    225      * further information about the actual error.
    226      *
    227      **/
    228     PVT_INDICATION_INTERNAL_ERROR,
    229 };
    230 
    231 
    232 // CLASS DECLARATION
    233 
    234 /**
    235 * PV2WayInitInfo Class
    236 *
    237 * PV2WayInitInfo is an interface required
    238 * for protocols specific classes pass to the PV2WayInterface's
    239 * InitL() method
    240 *
    241 **/
    242 class PV2WayInitInfo
    243 {
    244     public:
    245         /**
    246         *  pure virtual method that must be overridden to return
    247         *  the classname of the actual subclass
    248          **/
    249         virtual void GetInitInfoClassName(OSCL_wString& aClassName) = 0;
    250 
    251         virtual ~PV2WayInitInfo() { }
    252 
    253         /**
    254         *  The list of audio formats that can be transmitted
    255          **/
    256         Oscl_Vector<const char*, OsclMemAllocator> iOutgoingAudioFormats;
    257 
    258         /**
    259         *  The list of video formats that can be transmitted
    260          **/
    261         Oscl_Vector<const char*, OsclMemAllocator> iOutgoingVideoFormats;
    262 
    263         /**
    264         *  The list of audio formats that can be received
    265          **/
    266         Oscl_Vector<const char*, OsclMemAllocator> iIncomingAudioFormats;
    267 
    268         /**
    269         *  The list of video formats that can be received
    270          **/
    271         Oscl_Vector<const char*, OsclMemAllocator> iIncomingVideoFormats;
    272 
    273 };
    274 
    275 
    276 /**
    277 * PV2WayConnectOptions Class
    278  *
    279 * PV2WayConnectOptions class contains options to be specified during connect
    280  **/
    281 class PV2WayConnectOptions
    282 {
    283     public:
    284         /**
    285          * Default Constructor
    286          **/
    287         PV2WayConnectOptions()
    288                 : iLoopbackMode(PV_LOOPBACK_NONE),
    289                 iLocalId(NULL),
    290                 iLocalIdSize(0),
    291                 iRemoteId(NULL),
    292                 iRemoteIdSize(0) {}
    293 
    294         /**
    295          * Constructor
    296          * @param aLoopbackMode
    297          *         The loopback mode to used during Connect
    298          * @param aLocalId, aLocalIdSize
    299          *         A unique octet string identifying the local terminal
    300          * @param aRemoteId, aRemoteIdSize
    301          *         A unique octet string identifying the peer (Used only in 2-Stage dialling)
    302          * @returns void
    303          *
    304          **/
    305         PV2WayConnectOptions(TPVLoopbackMode aLoopbackMode,
    306                              uint8* aLocalId, uint32 aLocalIdSize,
    307                              uint8* aRemoteId, uint32 aRemoteIdSize)
    308                 : iLoopbackMode(aLoopbackMode),
    309                 iLocalId(aLocalId),
    310                 iLocalIdSize(aLocalIdSize),
    311                 iRemoteId(aRemoteId),
    312                 iRemoteIdSize(aRemoteIdSize)
    313         {}
    314 
    315         /**
    316         * Pure virtual method that must be overridden.  Retrieves class name
    317         *
    318         * @param aClassName
    319         *         A reference to an OSCL_wString, which is to hold the subclass
    320         *          name
    321         * @returns void
    322         **/
    323         virtual void GetConnectInfoClassName(OSCL_wString &aClassName) = 0;
    324 
    325         /**
    326         *  The loopback mode
    327         **/
    328         TPVLoopbackMode iLoopbackMode;
    329 
    330         /**
    331         *  The id of the local terminal
    332         **/
    333         uint8* iLocalId;
    334         /**
    335         *  The size of the local id
    336         **/
    337         uint32 iLocalIdSize;
    338 
    339         /**
    340         *  The id of the peer
    341         **/
    342         uint8* iRemoteId;
    343         /**
    344         *  The size of the remote id
    345         **/
    346         uint32 iRemoteIdSize;
    347 };
    348 #endif
    349