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 #ifndef PVT_COMMON_H_INCLUDED
     20 #define PVT_COMMON_H_INCLUDED
     21 
     22 #ifndef OSCL_MEM_H_INCLUDED
     23 #include "oscl_mem.h"
     24 #endif
     25 
     26 #ifndef OSCL_DEFALLOC_H_INCLUDED
     27 #include "oscl_defalloc.h"
     28 #endif
     29 
     30 #ifndef OSCL_MEM_MEMPOOL_H_INCLUDED
     31 #include "oscl_mem_mempool.h"
     32 #endif
     33 
     34 #ifndef OSCL_SHARED_PTR_H_INCLUDED
     35 #include "oscl_shared_ptr.h"
     36 #endif
     37 
     38 #ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
     39 #include "oscl_string_containers.h"
     40 #endif
     41 
     42 #ifndef PVT_2WAY_BASIC_TYPES_H_INCLUDED
     43 #include "pv_2way_basic_types.h"
     44 #endif
     45 
     46 #ifndef PVMF_FORMAT_TYPE_H_INCLUDED
     47 #include "pvmf_format_type.h"
     48 #endif
     49 
     50 #ifndef PVMF_RETURN_CODES_H
     51 #include "pvmf_return_codes.h"
     52 #endif
     53 
     54 #ifndef PVMF_VIDEO_H_INCLUDED
     55 #include "pvmf_video.h"
     56 #endif
     57 
     58 #ifndef PVMF_TIMESTAMP_H_INCLUDED
     59 #include "pvmf_timestamp.h"
     60 #endif
     61 
     62 #ifndef PV_INTERFACE_H
     63 #include "pv_interface.h"
     64 #endif
     65 
     66 #ifndef PV_2WAY_H324M_TYPES_H_INCLUDED
     67 #include "pv_2way_h324m_types.h"
     68 #endif
     69 
     70 #include "h245def.h"
     71 
     72 #define REVERSE_DIR(dir) (TPVDirection)(PV_DIRECTION_BOTH-dir)
     73 
     74 typedef int TPVStatusCode;
     75 
     76 /**
     77  * TPV2wayDirectionality Enum
     78  *
     79  * TPV2wayDirectionality enum is used to convey the directionality of a pv2way track
     80  **/
     81 enum TPV2wayDirectionality
     82 {
     83     EPvtUnidirectional = 1,
     84     EPvtBiDirectional
     85 };
     86 
     87 
     88 typedef enum
     89 {
     90     PV_MUX_COMPONENT_MUX,
     91     PV_MUX_COMPONENT_LOGICAL_CHANNEL,
     92 } TPVMuxComponent;
     93 
     94 /**
     95 Enumeration of format types
     96 **/
     97 typedef enum
     98 {
     99     PV_INVALID_CODEC_TYPE,
    100     PV_AUD_TYPE_G723 = 1,
    101     PV_AUD_TYPE_GSM,
    102     PV_VID_TYPE_H263 = 20,
    103     PV_VID_TYPE_MPEG4,
    104     PV_VID_TYPE_H264,
    105     PV_UI_BASIC_STRING = 40,
    106     PV_UI_IA5_STRING,
    107     PV_UI_GENERAL_STRING,
    108     PV_UI_DTMF,
    109     PV_CODEC_TYPE_NONE = 99
    110 } PVCodecType_t;
    111 
    112 typedef uint32 TPVChannelId;
    113 #define CHANNEL_ID_UNKNOWN 0xFFFFFFFF
    114 #define CHANNEL_ID_DEFAULT 0xFFFFFFFF
    115 
    116 /*********************************/
    117 /* H324 System Definition Value  */
    118 /*********************************/
    119 //#define   OK      1
    120 #define NG      0
    121 #define ON      1
    122 #define OFF     0
    123 #define PVT_NOT_SET (-1)
    124 
    125 const int KPVDefaultVideoBitRate = 42000; // bits/s
    126 const int KPVDefaultFrameRate = 5;   // frames/s
    127 const int KPVDefaultIFrameInterval = 10000;  // s
    128 const int KPVDefaultIFrameRequestInterval = 10000;  // s
    129 
    130 
    131 typedef bool TPVRemoteTerminalType; /* same = true, other = false */
    132 
    133 enum TPVTerminalIdentifier
    134 {
    135     EPVT_NONE = 0,
    136     EPVT_LOCAL = 1,
    137     EPVT_REMOTE = 2,
    138     EPVT_BOTH = 3,
    139     EPVT_TERMINAL_IDENTIFIER_MAX = EPVT_BOTH + 1
    140 };
    141 
    142 enum TPVDirectionality
    143 {
    144     EPVT_UNI_DIRECTIONAL = 1,
    145     EPVT_BI_DIRECTIONAL
    146 };
    147 
    148 enum TPVChannelSegmentableType
    149 {
    150     NONSEGMENTABLE = 0,
    151     SEGMENTABLE
    152 };
    153 
    154 
    155 typedef enum
    156 {
    157     EPVT_Failed = 0,
    158     EPVT_Success,
    159     EPVT_Pending,
    160 
    161     EPVT_ErrorBusy = 0x03000000,
    162     //Terminal busy
    163     EPVT_ErrorNotImplemented,
    164     //feature or command is not implemented.
    165     EPVT_ErrorInvalidParameter,
    166     //invalid parameter in the command
    167     EPVT_ErrorInvalidCodecType,
    168     // invalid codec type specified in the command
    169     EPVT_ErrorInvalidState,
    170     //command is not valid for the current authoring state.
    171     EPVT_ErrorNoMemory,
    172     //system dynamic memory error
    173     EPVT_ErrorLocalCapability,
    174     // We cant handle it
    175     EPVT_ErrorRemoteCapability,
    176     // the other terminal cant handle it
    177     EPVT_ErrorRemoteRejected,
    178     // The remote terminal rejected it
    179     EPVT_Timeout,
    180     // No response received from the remote terminal
    181     EPVT_FailedToInitialize,
    182     // The specified component failed to initialize properly
    183     EPVT_FailedToSetup,
    184     // Could not setup the specified components with the specified parameters
    185     EPVT_FailedToNegotiate,
    186     // Failed to negotiate a set of parameters with the remote terminal
    187     EPVT_ErrorRemoteDisconnected
    188     // remote terminal disconnected while establishing connection
    189 } TPVTReturnStatus;
    190 
    191 
    192 enum TPVSeverity
    193 {
    194     PVT_INFORMATIONAL = 0,
    195     PVT_WARNING,
    196     PVT_ERROR
    197 };
    198 
    199 typedef enum
    200 {
    201     E_EP_LOW = 1,
    202     E_EP_MEDIUM,
    203     E_EP_HIGH
    204 } ErrorProtectionLevel_t;
    205 
    206 
    207 // Used to convey audio type down (App->324)
    208 typedef enum
    209 {
    210     PV_AUD_TYPE_GSM_475 = 1,
    211     PV_AUD_TYPE_GSM_515,
    212     PV_AUD_TYPE_GSM_590,
    213     PV_AUD_TYPE_GSM_670,
    214     PV_AUD_TYPE_GSM_740,
    215     PV_AUD_TYPE_GSM_795,
    216     PV_AUD_TYPE_GSM_102,
    217     PV_AUD_TYPE_GSM_122,
    218     PV_AUD_TYPE_G723_53,
    219     PV_AUD_TYPE_G723_63,
    220     PV_AUD_TYPE_NONE = 99
    221 } PVAudType_t;
    222 
    223 
    224 const PVCodecType_t PV_VID_TYPE_NONE = PV_CODEC_TYPE_NONE ;
    225 const PVCodecType_t PV_SIMPLE_AUD_TYPE_NONE = PV_CODEC_TYPE_NONE ;
    226 
    227 typedef PVCodecType_t PVAudTypeSimple_t;
    228 
    229 // Used to convey video type (up or down)
    230 typedef PVCodecType_t PVVidType_t;
    231 
    232 /**
    233 CPVParam class
    234 Base class for audio/video/mux parameters
    235 **/
    236 class CPVParam
    237 {
    238     public:
    239         CPVParam() {}
    240         virtual ~CPVParam() {}
    241         virtual CPVParam* Copy() = 0;
    242 };
    243 
    244 class CPVMediaParam : public CPVParam
    245 {
    246     public:
    247         OSCL_IMPORT_REF CPVMediaParam(PVCodecType_t aCodecType = PV_CODEC_TYPE_NONE);
    248         virtual ~CPVMediaParam();
    249         virtual PV2WayMediaType GetMediaType() = 0;
    250         OSCL_IMPORT_REF PVCodecType_t GetCodecType();
    251     private:
    252         PVCodecType_t iCodecType;
    253 };
    254 
    255 
    256 
    257 class CPVAudioParam : public CPVMediaParam
    258 {
    259     public:
    260         OSCL_IMPORT_REF CPVParam* Copy();
    261         OSCL_IMPORT_REF PV2WayMediaType GetMediaType();
    262     protected:
    263         CPVAudioParam(PVCodecType_t aCodecType = PV_CODEC_TYPE_NONE);
    264     private:
    265 };
    266 
    267 class CPVVideoParam : public CPVMediaParam
    268 {
    269     public:
    270         OSCL_IMPORT_REF ~CPVVideoParam();
    271 
    272         OSCL_IMPORT_REF PV2WayMediaType GetMediaType();
    273 
    274         OSCL_IMPORT_REF CPVParam* Copy();
    275 
    276         OSCL_IMPORT_REF uint16 GetWidth();
    277 
    278         OSCL_IMPORT_REF uint16 GetHeight();
    279     protected:
    280         CPVVideoParam(uint16 aWidth, uint16 aHeight, PVCodecType_t aCodecType = PV_CODEC_TYPE_NONE);
    281     private:
    282         uint16 iWidth;
    283         uint16 iHeight;
    284 };
    285 
    286 
    287 class CPVAMRAudioParam : public CPVAudioParam
    288 {
    289     public:
    290         OSCL_IMPORT_REF CPVAMRAudioParam();
    291         OSCL_IMPORT_REF ~CPVAMRAudioParam();
    292 };
    293 
    294 class CPVG723AudioParam : public CPVAudioParam
    295 {
    296     public:
    297         OSCL_IMPORT_REF CPVG723AudioParam();
    298         OSCL_IMPORT_REF ~CPVG723AudioParam();
    299 };
    300 
    301 class CPVH263VideoParam : public CPVVideoParam
    302 {
    303     public:
    304         OSCL_IMPORT_REF CPVH263VideoParam(uint16 w, uint16 h);
    305         OSCL_IMPORT_REF ~CPVH263VideoParam();
    306 };
    307 
    308 
    309 class CPVM4vVideoParam : public CPVVideoParam
    310 {
    311     public:
    312         OSCL_IMPORT_REF CPVM4vVideoParam(uint16 w, uint16 h, uint16 sz, uint8 *cfg);
    313 
    314         OSCL_IMPORT_REF ~CPVM4vVideoParam();
    315 
    316         OSCL_IMPORT_REF OsclAny Set(uint16 config_sz, uint8* cfg);
    317 
    318         OSCL_IMPORT_REF uint16 GetDecoderConfigSize();
    319 
    320         OSCL_IMPORT_REF uint8 *GetDecoderConfig();
    321 
    322         OSCL_IMPORT_REF CPVParam* Copy();
    323 
    324     private:
    325         uint16 iSz;
    326         uint8 *iCfg;
    327 };
    328 
    329 class CPVTrackInfo
    330 {
    331     public:
    332         virtual ~CPVTrackInfo() {}
    333         virtual TPVDirection GetDirection() = 0;
    334         virtual TPVChannelId GetChannelId() = 0;
    335         virtual TPVDirectionality GetDirectionality() = 0;
    336         virtual int GetNumSduSizes() = 0;
    337         virtual int GetSduSize(int index = 0) = 0;
    338         virtual int* GetSduSizes() = 0;
    339         virtual CPVMediaParam* GetMediaParam() = 0;
    340         virtual CPVTrackInfo* Copy() = 0;
    341 //  friend bool operator== (CPVTrackInfo &a, CPVTrackInfo &b);
    342 };
    343 
    344 OSCL_IMPORT_REF bool operator==(CPVTrackInfo &a, CPVTrackInfo &b);
    345 
    346 class CPvtMediaCapability
    347 {
    348     public:
    349         CPvtMediaCapability(PVMFFormatType format_type, uint32 bitrate = 0, bool aMandatory = false)
    350                 : iFormatType(format_type), iBitrate(bitrate), iMandatory(aMandatory) {}
    351         virtual ~CPvtMediaCapability() {}
    352         virtual PVMFFormatType GetFormatType()const
    353         {
    354             return iFormatType;
    355         }
    356         virtual uint32 GetBitrate()const
    357         {
    358             return iBitrate;
    359         }
    360         virtual bool IsMandatory() const
    361         {
    362             return iMandatory;
    363         }
    364 
    365         PVMFFormatType iFormatType;
    366         uint32 iBitrate;
    367         bool iMandatory;
    368 };
    369 
    370 class CPvtAudioCapability : public CPvtMediaCapability
    371 {
    372     public:
    373         CPvtAudioCapability(PVMFFormatType format_type, uint32 bitrate = 0, bool aMandatory = false)
    374                 : CPvtMediaCapability(format_type, bitrate, aMandatory) {}
    375         ~CPvtAudioCapability() {}
    376 };
    377 
    378 #define PV2WAY_MAX_AMR_NB_BITRATE 12200
    379 class CPvtAmrNbCapability : public CPvtAudioCapability
    380 {
    381     public:
    382         CPvtAmrNbCapability(uint32 bitrate = 0)
    383                 : CPvtAudioCapability(PVMF_MIME_AMR_IF2, PV2WAY_MAX_AMR_NB_BITRATE, true)
    384         {
    385             OSCL_UNUSED_ARG(bitrate);
    386             OSCL_UNUSED_ARG(bitrate);
    387         }
    388 };
    389 
    390 
    391 class CPvtVideoCapability : public CPvtMediaCapability
    392 {
    393     public:
    394         CPvtVideoCapability(PVMFFormatType format_type, uint32 bitrate = 0, bool aMandatory = false)
    395                 : CPvtMediaCapability(format_type, bitrate, aMandatory) {}
    396         virtual ~CPvtVideoCapability() {    }
    397         PVMFFormatType GetFormatType()const
    398         {
    399             return iFormatType;
    400         }
    401         uint32 GetBitrate()const
    402         {
    403             return iBitrate;
    404         }
    405         virtual PVMFVideoResolution* GetMaxResolution(uint32& frame_rate) = 0;
    406         virtual void SetMaxResolution(uint32 width, uint32 height, uint32 frame_rate) = 0;
    407         virtual uint16 Getfsi(uint8*& aDecoderConfig) = 0;
    408 
    409 
    410 };
    411 
    412 class CPvtMpeg4Capability : public CPvtVideoCapability
    413 {
    414     public:
    415         CPvtMpeg4Capability(uint32 bitrate = 0) : CPvtVideoCapability(PVMF_MIME_M4V, bitrate, false), iDecoderConfig(NULL)
    416         {
    417             iProfile = -1;
    418             iLevel = -1;
    419             iDecoderConfigLen = 0;
    420             iVideoResolution = OSCL_NEW(PVMFVideoResolution, (0, 0));
    421             iGenericCapability = NULL;
    422             iFrameRate = 0;
    423 
    424         }
    425         ~CPvtMpeg4Capability()
    426         {
    427             if (iDecoderConfig)
    428             {
    429                 OSCL_DEFAULT_FREE(iDecoderConfig);
    430             }
    431             if (iVideoResolution)
    432             {
    433                 OSCL_DELETE(iVideoResolution);
    434                 iVideoResolution = NULL;
    435             }
    436         }
    437 
    438         void SetMaxResolution(uint32 width, uint32 height, uint32 frame_rate)
    439         {
    440             iVideoResolution->width = (uint16)width;
    441             iVideoResolution->height = (uint16)height;
    442             iFrameRate = frame_rate;
    443         }
    444 
    445         PVMFVideoResolution* GetMaxResolution(uint32& frame_rate)
    446         {
    447             frame_rate = iFrameRate;
    448             return iVideoResolution;
    449         }
    450 
    451         uint16 Getfsi(uint8*& aDecoderConfig)
    452         {
    453             aDecoderConfig = iDecoderConfig;
    454             return iDecoderConfigLen;
    455         }
    456 
    457 
    458 
    459         int32 iProfile;
    460         int32 iLevel;
    461         uint8* iDecoderConfig;
    462         uint16 iDecoderConfigLen;
    463         PS_GenericCapability iGenericCapability;
    464         PVMFVideoResolution *iVideoResolution;
    465         uint32 iFrameRate;
    466 };
    467 
    468 class CPvtH263Capability : public CPvtVideoCapability
    469 {
    470     public:
    471         CPvtH263Capability(uint32 bitrate = 0) : CPvtVideoCapability(PVMF_MIME_H2632000, bitrate, true)
    472         {
    473             iVideoResolution = OSCL_NEW(PVMFVideoResolution, (0, 0));
    474             iH263VideoCapability = NULL;
    475             iFrameRate = 0;
    476         }
    477         ~CPvtH263Capability()
    478         {
    479             if (iVideoResolution)
    480                 OSCL_DELETE(iVideoResolution);
    481         }
    482 
    483 
    484         void SetMaxResolution(uint32 width, uint32 height, uint32 frame_rate)
    485         {
    486             iVideoResolution->width = (uint16)width;
    487             iVideoResolution->height = (uint16)height;
    488             iFrameRate = frame_rate;
    489 
    490         }
    491 
    492         PVMFVideoResolution* GetMaxResolution(uint32& frame_rate)
    493         {
    494 
    495             frame_rate = iFrameRate;
    496             return iVideoResolution;
    497         }
    498         uint16 Getfsi(uint8*& aDecoderConfig)
    499         {
    500             OSCL_UNUSED_ARG(aDecoderConfig);
    501             return 0;
    502         }
    503 
    504 
    505         PVMFVideoResolution *iVideoResolution;
    506         uint32 iFrameRate;
    507         PS_H263VideoCapability iH263VideoCapability;
    508 };
    509 
    510 
    511 class CPvtTerminalCapability
    512 {
    513     public:
    514         CPvtTerminalCapability(Oscl_Vector<CPvtMediaCapability*, OsclMemAllocator>& capability_items):
    515                 iCapabilityItems(capability_items)
    516         {
    517         }
    518         ~CPvtTerminalCapability()
    519         {
    520             for (uint16 i = 0; i < iCapabilityItems.size(); i++)
    521                 OSCL_DELETE(iCapabilityItems[i]);
    522         }
    523         uint16 GetNumCapabilityItems()const
    524         {
    525             return (uint16)iCapabilityItems.size();
    526         }
    527         CPvtMediaCapability* GetCapabilityItem(uint16 index)
    528         {
    529             return iCapabilityItems[index];
    530         }
    531     private:
    532         Oscl_Vector<CPvtMediaCapability*, OsclMemAllocator> iCapabilityItems;
    533 };
    534 
    535 /**
    536  CPVUserInput class
    537 Base class for User Input mesages
    538 **/
    539 class CPVUserInput
    540 {
    541     public:
    542         /**
    543          * Virtual destructor
    544          **/
    545         virtual ~CPVUserInput() {};
    546         /**
    547          * Virtual function to return the user input type
    548          **/
    549         virtual TPVUserInputType GetType() = 0;
    550 
    551         /**
    552          * Virtual function to return a copy of self
    553          **/
    554         virtual CPVUserInput* Copy() = 0;
    555 };
    556 class CPVUserInputDtmf : public HeapBase, public CPVUserInput
    557 {
    558     public:
    559         OSCL_IMPORT_REF CPVUserInputDtmf(uint8 input, bool update, uint16 duration = 0);
    560 
    561         OSCL_IMPORT_REF TPVUserInputType GetType();
    562 
    563         OSCL_IMPORT_REF uint8 GetInput();
    564 
    565         OSCL_IMPORT_REF bool IsUpdate();
    566 
    567         OSCL_IMPORT_REF uint16 GetDuration();
    568 
    569         OSCL_IMPORT_REF CPVUserInput* Copy();
    570     private:
    571         uint8 iInput;
    572         bool iIsUpdate;
    573         uint16 iDuration;
    574 };
    575 
    576 class CPVUserInputAlphanumeric : public HeapBase, public CPVUserInput
    577 {
    578     public:
    579         OSCL_IMPORT_REF CPVUserInputAlphanumeric(uint8* input, uint16 len);
    580         OSCL_IMPORT_REF ~CPVUserInputAlphanumeric();
    581         OSCL_IMPORT_REF TPVUserInputType GetType();
    582         OSCL_IMPORT_REF uint8* GetInput();
    583         OSCL_IMPORT_REF uint16 GetLength();
    584         OSCL_IMPORT_REF CPVUserInput* Copy();
    585     protected:
    586         uint8* iInput;  /* We own the memory*/
    587         uint16 iLength;        /* length of the string */
    588 };
    589 
    590 
    591 typedef enum
    592 {
    593     EObjectIdentifier,
    594     EH221NonStandard
    595 } TPVH245VendorType;
    596 
    597 class TPVH245Vendor
    598 {
    599     public:
    600         virtual ~TPVH245Vendor() {}
    601         virtual TPVH245VendorType GetVendorType() = 0;
    602         virtual TPVH245Vendor* Copy() = 0;
    603 };
    604 
    605 class TPVH245VendorObjectIdentifier : public TPVH245Vendor
    606 {
    607     public:
    608         OSCL_IMPORT_REF TPVH245VendorObjectIdentifier(uint8* vendor, uint16 vendorLength);
    609         OSCL_IMPORT_REF ~TPVH245VendorObjectIdentifier();
    610         OSCL_IMPORT_REF TPVH245VendorType GetVendorType();
    611         OSCL_IMPORT_REF uint8* GetVendor(uint16* length);
    612         OSCL_IMPORT_REF TPVH245Vendor* Copy();
    613 
    614     protected:
    615         uint8* iVendor;
    616         uint16 iVendorLength;
    617 };
    618 
    619 class TPVVendorH221NonStandard : public TPVH245Vendor
    620 {
    621     public:
    622         OSCL_IMPORT_REF TPVVendorH221NonStandard(uint8 t35countryCode, uint8 t35extension, uint32 manufacturerCode);
    623         OSCL_IMPORT_REF ~TPVVendorH221NonStandard();
    624         OSCL_IMPORT_REF TPVH245VendorType GetVendorType();
    625         OSCL_IMPORT_REF TPVH245Vendor* Copy();
    626         OSCL_IMPORT_REF uint8 GetT35CountryCode();
    627         OSCL_IMPORT_REF uint8 GetT35Extension();
    628         OSCL_IMPORT_REF uint32 GetManufacturerCode();
    629     private:
    630         uint8 iT35CountryCode; /* INTEGER (0..255) */
    631         uint8 iT35Extension; /* INTEGER (0..255) */
    632         uint32 iManufacturerCode; /* INTEGER (0..65535) */
    633 };
    634 
    635 // Vendor identification classes
    636 class TPVVendorIdentification
    637 {
    638     public:
    639         OSCL_IMPORT_REF TPVVendorIdentification();
    640         OSCL_IMPORT_REF TPVVendorIdentification(TPVH245Vendor* vendor,
    641                                                 uint8* pn, uint16 pn_len,
    642                                                 uint8* vn, uint16 vn_len);
    643         OSCL_IMPORT_REF ~TPVVendorIdentification();
    644         TPVH245Vendor* iVendor;
    645         uint8* iProductNumber;
    646         uint16 iProductNumberLen;
    647         uint8* iVersionNumber;
    648         uint16 iVersionNumberLen;
    649 };
    650 
    651 typedef uint16 TPVTerminalEvent;
    652 
    653 typedef enum
    654 {
    655     H324_INITIALIZED,
    656     H245_CE_STARTED,
    657     H245_CE_RECEIVED,
    658     H245_CE_COMPLETED,
    659     H245_CE_ERROR,
    660     H245_MSD_STARTED,
    661     H245_MSD_RECEIVED,
    662     H245_MSD_COMPLETED,
    663     H245_MSD_ERROR,
    664     H245_MT_STARTED,
    665     H245_MT_RECEIVED,
    666     H245_MT_SEND_COMPLETED,
    667     H245_MT_ERROR,
    668     H245_OLC_STARTED,
    669     H245_OLC_RECEIVED,
    670     H245_OLC_COMPLETED,
    671     H245_OLC_ERROR,
    672     H245_OBLC_STARTED,
    673     H245_OBLC_RECEIVED,
    674     H245_OBLC_COMPLETED,
    675     H245_OBLC_ERROR,
    676     H245_RTD_STARTED,
    677     H245_RTD_RECEIVED,
    678     H245_RTD_COMPLETED,
    679     H245_RTD_ERROR,
    680     H245_END_SESSION_STARTED,
    681     H245_END_SESSION_RECEIVED,
    682 
    683     SRP_TIMEOUT = H245_END_SESSION_RECEIVED + 20,
    684     SRP_MAX_RETRIES,
    685     SRP_CRC_ERROR,
    686     AUDIO_ERROR_RATE
    687 } TPVH324mEvent;
    688 
    689 class CPvtDiagnosticIndication
    690 {
    691     public:
    692         OSCL_IMPORT_REF CPvtDiagnosticIndication(TPVTerminalEvent aEvent, int aParam1, int aParam2, int aParam3) ;
    693 
    694         OSCL_IMPORT_REF ~CPvtDiagnosticIndication();
    695         TPVTerminalEvent iEvent;
    696         int iParam1;
    697         int iParam2;
    698         int iParam3;
    699 };
    700 
    701 typedef int TPVLogLevel;
    702 
    703 typedef enum
    704 {
    705     PV_START_LOG,
    706     PV_STOP_LOG,
    707 } TPVLogEvent;
    708 
    709 typedef enum
    710 {
    711     LOG_NONE =               0x00000000,
    712     LOG_ALL =                0xFFFFFFFF,
    713     ENGINE_MODULE =          0x00000001,
    714     TSC_MODULE =             0x00000002,
    715     H223_MODULE =            0x00000004,
    716     VID_DEC_MODULE =         0x00000020,
    717     AUD_DEC_MODULE =         0x00000040,
    718     VID_ENC_MODULE =         0x00000080,
    719     AUD_ENC_MODULE =         0x00000100,
    720     SYS_TOOLS_MODULE =       0x00000008,
    721     H223_IN_BITSTREAM =      0x00000200,
    722     H223_OUT_BITSTREAM =     0x00000400,
    723     IN_CONTROL_BITSTREAM =   0x00000800,
    724     OUT_CONTROL_BITSTREAM =  0x00001000,
    725     IN_AUD_BISTREAM =        0x00002000,
    726     OUT_AUD_BITSREAM =       0x00004000,
    727     IN_VID_BITSTREAM =       0x00008000,
    728     OUT_VID_BITSTREAM =      0x00010000
    729 } TPVLogComponent;
    730 
    731 #define PARAM_DEFAULT -1
    732 typedef enum
    733 {
    734     MUX_GENERIC = 0,
    735     MUX_H223,
    736     MUX_RTP
    737 } TPVMuxType;
    738 
    739 class CPVGenericMuxParam : public CPVParam
    740 {
    741     public:
    742         OSCL_IMPORT_REF CPVGenericMuxParam(TPVMuxType aType = MUX_GENERIC);
    743         OSCL_IMPORT_REF TPVMuxType GetMuxType();
    744         OSCL_IMPORT_REF virtual CPVParam* Copy();
    745         OSCL_IMPORT_REF virtual OsclAny Copy(CPVGenericMuxParam* param);
    746 
    747         int16 discard_corrupt_video;
    748         uint32 max_discard_video_sdu_size;
    749         uint32 err_rate_threshold_to_req_I_frame;
    750         uint32 audio_err_rate_update_interval;
    751         uint32 audio_encode_frame_delay;
    752         uint32 audio_decode_frame_delay;
    753     protected:
    754         TPVMuxType iMuxType;
    755 };
    756 
    757 #define MAX_H223_LEVELS 5
    758 typedef enum
    759 {
    760     H223_LEVEL0 = 0,
    761     H223_LEVEL1,
    762     H223_LEVEL1_DF, /* Double flag */
    763     H223_LEVEL2,
    764     H223_LEVEL2_OH, /* Optional header */
    765     H223_LEVEL3,
    766     H223_LEVEL_UNKNOWN
    767 } TPVH223Level;
    768 
    769 typedef enum
    770 {
    771     H223_PDU_SIMPLE, /* Audio only, Video only, Control only  */
    772     H223_PDU_COMBINED /* A+V */
    773 } TPVH223MuxPduType;
    774 
    775 typedef enum
    776 {
    777     H223_IDLE_SYNC_NONE = 0,
    778     H223_IDLE_SYNC_OCTET, /* Idle sync is a repeatition of a particular octet - 0, 1, F etc */
    779     H223_IDLE_SYNC_FLAGS /* Idle sync is a repeatition of flags of the current level */
    780 } TPVH223MuxIdleSyncType;
    781 
    782 
    783 class CPVH223MuxParam : public CPVGenericMuxParam
    784 {
    785     public:
    786         OSCL_IMPORT_REF CPVH223MuxParam();
    787         OSCL_IMPORT_REF ~CPVH223MuxParam();
    788 
    789         OSCL_IMPORT_REF CPVParam* Copy();
    790         int iBitrate;
    791         TPVH223Level iLevel;
    792         int16 iMaxAl1SduSize;
    793         int16 iMaxAl2SduSize;
    794         int16 iMaxAl3SduSize;
    795         int16 iMaxAl1SduSizeR;
    796         int16 iMaxAl2SduSizeR;
    797         int16 iMaxAl3SduSizeR;
    798         bool iParseOnResyncMarkers;
    799         TPVH223MuxPduType iOutgoingPduType; /* The pdu type for outgoing packets.  */
    800         int16 iMaxPduSize; /* Limits the max outgoing pdu size */
    801         TPVH223MuxIdleSyncType iIdleSyncType;
    802         uint8 iIdleSyncByte; /* Specify when using H223_IDLE_SYNC_OCTET */
    803     protected:
    804 };
    805 
    806 class CPVH245Param : public CPVParam
    807 {
    808     public:
    809         OSCL_IMPORT_REF CPVH245Param();
    810         OSCL_IMPORT_REF CPVParam* Copy();
    811 };
    812 
    813 class CPVSrpParam : public CPVParam
    814 {
    815     public:
    816         OSCL_IMPORT_REF CPVSrpParam();
    817         OSCL_IMPORT_REF CPVParam* Copy();
    818 };
    819 
    820 class CPVTerminalParam : public CPVParam
    821 {
    822     public:
    823         OSCL_IMPORT_REF CPVTerminalParam(CPVGenericMuxParam* muxParam = NULL);
    824         OSCL_IMPORT_REF CPVTerminalParam(CPVTerminalParam& that);
    825         virtual ~CPVTerminalParam();
    826         virtual TPVTerminalType GetTerminalType() = 0;
    827         OSCL_IMPORT_REF CPVParam* Copy(CPVTerminalParam* param);
    828         OSCL_IMPORT_REF OsclAny SetMuxParam(CPVGenericMuxParam* muxParam);
    829         OSCL_IMPORT_REF CPVGenericMuxParam* GetMuxParam();
    830     protected:
    831         CPVGenericMuxParam* iMuxParam;
    832 };
    833 
    834 /* MasterSlaveDetermination Decision */
    835 typedef enum
    836 {
    837     PVT_SLAVE = 0,
    838     PVT_MSD_INDETERMINATE = 128,
    839     PVT_MASTER = 255
    840 } TPVMasterSlave;
    841 
    842 typedef enum
    843 {
    844     PVT_AL1,
    845     PVT_AL2,
    846     PVT_AL3,
    847     PVT_AL_UNKNOWN
    848 } TPVAdaptationLayer;
    849 
    850 OSCL_IMPORT_REF int IndexForAdaptationLayer(TPVAdaptationLayer al);
    851 OSCL_IMPORT_REF TPVAdaptationLayer AdaptationLayerForIndex(int al_index);
    852 OSCL_IMPORT_REF ErrorProtectionLevel_t EplForAdaptationLayer(TPVAdaptationLayer al);
    853 
    854 class CPVH324MParam : public CPVTerminalParam
    855 {
    856     public:
    857         OSCL_IMPORT_REF CPVH324MParam(CPVH223MuxParam* h223param = NULL);
    858         OSCL_IMPORT_REF CPVH324MParam(const CPVH324MParam& that);
    859         OSCL_IMPORT_REF ~CPVH324MParam();
    860         OSCL_IMPORT_REF TPVTerminalType GetTerminalType();
    861         OSCL_IMPORT_REF CPVParam* Copy();
    862         OSCL_IMPORT_REF OsclAny SetH223Param(CPVH223MuxParam* h223Param);
    863         OSCL_IMPORT_REF CPVH223MuxParam* GetH223Param();
    864         OSCL_IMPORT_REF OsclAny SetSRPParam(CPVSrpParam* srpParam);
    865         OSCL_IMPORT_REF OsclAny SetH245Param(CPVH245Param* h245Param);
    866 
    867         bool iAllowAl1Video;        /* Local terminal */
    868         bool iAllowAl2Video;        /* Local terminal */
    869         bool iAllowAl3Video;        /*   (These are sent in outgoing CE) */
    870         /* The above flags determine if support for the layers will be indicate in the
    871            TSC.  The following  determine if they will be used or not */
    872         bool iUseAl1Video;
    873         bool iUseAl2Video;
    874         bool iUseAl3Video;
    875         TPVAdaptationLayer iVideoLayer;         /* Layer to use, decided by local terminal */
    876         TPVAdaptationLayer iForceVideoLayerIfMaster;            /* Force the terminal to use this layer - for testing purposes */
    877         TPVAdaptationLayer iForceVideoLayerIfSlave;         /* Force the terminal to use this layer - for testing purposes */
    878         TPVMasterSlave iMasterSlave;
    879         bool iSpecifyReceiveAndTransmitCapability;
    880         bool iSendRme; /* Send Request Multiplex Entry to the remote terminal */
    881         bool iSkipMsd; /* 1 = Skip MSD */
    882         uint16 iRequestMaxMuxPduSize; /* Requests maxMuxPduSize to the remote terminal if > 0.  This is done after TCS
    883                                                  if the remote terminal supports the maxMuxPduCapability */
    884         CPVH245Param* iH245Param;
    885         CPVSrpParam* iSrpParam;
    886 };
    887 
    888 class TPVVideoEncoderParam
    889 {
    890     public:
    891         OSCL_IMPORT_REF TPVVideoEncoderParam();
    892 
    893         int video_bitrate;
    894         PVCodecType_t codec;
    895         int16 video_frame_rate;
    896         int16 air;
    897         int16 intra_refresh;
    898         int16 data_partitioning;
    899         int16 advanced;
    900         int16 use_gov;
    901         int16 rvlc;
    902         int16 use_resync;
    903         int16 use_hec;
    904         int16 use_gobsync;
    905         int16 vos;
    906         int16 ref_frame_rate;
    907         int16 orig_frameskip;
    908         int16 chosen_frame_skip;
    909         int16 qp;
    910         int16 qpi;
    911         int cam_low_light_mode;
    912         int cam_saturation_level;
    913         int cam_contrast_level;
    914         int cam_edge_enhance;
    915         int cam_brightness;
    916         int deblocking_filter;
    917         int prefilter;
    918         int prefilter_coeff1;
    919         int prefilter_coeff2;
    920         int prefilter_coeff3;
    921         int buffer_backlog;
    922         int16 qp_max;
    923         int16 qp_min;
    924         int16 qp_delta_frame;
    925         int16 qp_delta_slice;
    926         int   iframe_interval;
    927         int   iframe_request_interval;
    928 
    929     public:
    930 };
    931 
    932 typedef enum
    933 {
    934     PV_PANIC_ON_ERROR =     0x0001,
    935     PV_RELEASE_ON_ERROR =   0x0002,
    936     PV_RESYNC_ON_ERROR =        0x0003
    937 } TPVGCErrorHandleMode;
    938 
    939 class CPVTerminalStatistics
    940 {
    941 
    942 };
    943 
    944 class CPVH324TerminalStatistics : public CPVTerminalStatistics
    945 {
    946 
    947 };
    948 
    949 OSCL_IMPORT_REF PVMFFormatType PVCodecTypeToPVMFFormatType(PVCodecType_t aCodecType);
    950 OSCL_IMPORT_REF PVCodecType_t PVMFFormatTypeToPVCodecType(PVMFFormatType aFormatType);
    951 OSCL_IMPORT_REF PV2WayMediaType PVMFFormatTypeToPVMediaType(PVMFFormatType aFormatType);
    952 
    953 #define min2(a, b) ((a > b) ? b : a)
    954 
    955 #define __STR2__(x) #x
    956 #define __STR1__(x) __STR2__(x)
    957 #define __LOC__ __FILE__ "("__STR1__(__LINE__)") : Warning Msg: "
    958 
    959 class BasicAlloc : public Oscl_DefAlloc
    960 {
    961     public:
    962         void* allocate(const uint32 size)
    963         {
    964             void* tmp = (void*)OSCL_DEFAULT_MALLOC(size);
    965             OSCL_ASSERT(tmp != 0);
    966             return tmp;
    967         }
    968         void deallocate(void* p)
    969         {
    970             OSCL_DEFAULT_FREE(p);
    971         }
    972 };
    973 
    974 typedef enum
    975 {
    976     PV_H324COMPONENT_H245_USER,
    977     PV_H324COMPONENT_H245,
    978     PV_H324COMPONENT_SRP,
    979     PV_H324COMPONENT_H223
    980 } TPVH324Component;
    981 
    982 const PVMFStatus PV2WayH324ErrorStatusStart = (-10600);
    983 const PVMFStatus PV2WayH324ErrorSymmetryViolation = PV2WayH324ErrorStatusStart;
    984 
    985 class CodecCapabilityInfo
    986 {
    987     public:
    988         OSCL_IMPORT_REF CodecCapabilityInfo();
    989         virtual ~CodecCapabilityInfo() {}
    990         OSCL_IMPORT_REF virtual CodecCapabilityInfo* Copy();
    991         PVCodecType_t codec;
    992         TPVDirection dir;
    993         uint32 max_bitrate;
    994         uint32 min_sample_size;
    995         uint32 max_sample_size;
    996 };
    997 
    998 class VideoCodecCapabilityInfo : public CodecCapabilityInfo
    999 {
   1000     public:
   1001         OSCL_IMPORT_REF VideoCodecCapabilityInfo();
   1002         ~VideoCodecCapabilityInfo()
   1003         {
   1004             if (codec_specific_info)
   1005             {
   1006                 OSCL_DEFAULT_FREE(codec_specific_info);
   1007             }
   1008         }
   1009         OSCL_IMPORT_REF CodecCapabilityInfo* Copy();
   1010         Oscl_Vector<PVMFVideoResolutionRange, OsclMemAllocator> resolutions;
   1011         uint8* codec_specific_info;
   1012         uint16 codec_specific_info_len;
   1013 };
   1014 
   1015 
   1016 typedef enum
   1017 {
   1018     APP,
   1019     ENG
   1020 } TPVPriority;
   1021 
   1022 class FormatCapabilityInfo
   1023 {
   1024     public:
   1025         FormatCapabilityInfo() : id(CHANNEL_ID_UNKNOWN),
   1026                 format(PVMF_MIME_FORMAT_UNKNOWN),
   1027                 dir(PV_DIRECTION_NONE),
   1028                 bitrate(0),
   1029                 min_sample_size(0),
   1030                 max_sample_size(0),
   1031                 capabilities(1),
   1032                 fsi(NULL), fsi_len(0) {}
   1033         FormatCapabilityInfo(PVMFFormatType aFormat,
   1034                              TPVDirection aDir,
   1035                              uint32 aCapabilities)
   1036                 : format(aFormat),
   1037                 dir(aDir),
   1038                 bitrate(0),
   1039                 min_sample_size(0),
   1040                 max_sample_size(0),
   1041                 capabilities(aCapabilities),
   1042                 fsi(NULL), fsi_len(0) {}
   1043         ~FormatCapabilityInfo()
   1044         {
   1045             if (fsi)
   1046             {
   1047                 OSCL_DEFAULT_FREE(fsi);
   1048                 fsi = NULL;
   1049             }
   1050         }
   1051         TPVChannelId id;
   1052         PVMFFormatType format;
   1053         TPVDirection dir;
   1054         uint32 bitrate;
   1055         uint32 min_sample_size;
   1056         uint32 max_sample_size;
   1057         uint32 capabilities; // additional capabilities
   1058         uint8* fsi;
   1059         uint32 fsi_len;
   1060         /* Enum for Priority */
   1061         TPVPriority iPriority;
   1062 };
   1063 
   1064 class H324ChannelParameters
   1065 {
   1066     public:
   1067         OSCL_IMPORT_REF H324ChannelParameters(TPVDirection dir, PVMFFormatType mediaType, unsigned bandwidth);
   1068         OSCL_IMPORT_REF H324ChannelParameters(const H324ChannelParameters& that);
   1069         OSCL_IMPORT_REF ~H324ChannelParameters();
   1070         OSCL_IMPORT_REF void SetCodecs(Oscl_Vector<FormatCapabilityInfo, OsclMemAllocator>& codecs);
   1071         OSCL_IMPORT_REF Oscl_Vector<FormatCapabilityInfo, OsclMemAllocator>* GetCodecs();
   1072 
   1073         OSCL_IMPORT_REF PV2WayMediaType GetMediaType();
   1074         OSCL_IMPORT_REF unsigned GetBandwidth();
   1075     private:
   1076         Oscl_Vector<FormatCapabilityInfo, OsclMemAllocator>* iCodecs;
   1077         unsigned iBandwidth;
   1078 };
   1079 
   1080 typedef enum
   1081 {
   1082     EH324Timer,
   1083     EH324Counter
   1084 } TPVH324TimerCounter;
   1085 
   1086 
   1087 #define PVH324MLogicalChannelInfoUuid PVUuid(0x200306a0,0xffab,0x11d9,0xba,0x43,0x00,0x02,0xa5,0xd5,0xc5,0x1b)
   1088 /* Base class for media logical channels */
   1089 class LogicalChannelInfo
   1090 {
   1091     public:
   1092         virtual ~LogicalChannelInfo() {}
   1093 
   1094         virtual TPVDirection GetDirection() = 0;
   1095 
   1096         virtual TPVChannelId GetLogicalChannelNumber() = 0;
   1097 
   1098         virtual uint32 GetSduSize() = 0;
   1099 
   1100         virtual bool IsSegmentable() = 0;
   1101 
   1102         virtual uint32 GetBitrate() = 0;
   1103 
   1104         virtual uint32 GetSampleInterval() = 0;
   1105 
   1106         virtual const uint8* GetFormatSpecificInfo(uint32* format_specific_info_len) = 0;
   1107 
   1108         virtual PVMFTimestamp GetLastSduTimestamp() = 0;
   1109 
   1110         virtual PVMFFormatType GetFormatType() = 0;
   1111 
   1112 };
   1113 
   1114 #define PV_H324_MUX_INPUT_FORMATS "x-pvmf/multiplexed/input_formats"
   1115 #define PV_H324_MUX_INPUT_FORMATS_VALTYPE "x-pvmf/multiplexed/formattype;valtype=int32"
   1116 #define PV_H324_MUX_OUTPUT_FORMATS "x-pvmf/multiplexed/output_formats"
   1117 #define PV_H324_MUX_OUTPUT_FORMATS_VALTYPE "x-pvmf/multiplexed/formattype;valtype=int32"
   1118 
   1119 #define PV_H324_VIDEO_INPUT_FORMATS "x-pvmf/video/decode/input_formats"
   1120 #define PV_H324_VIDEO_INPUT_FORMATS_VALTYPE "x-pvmf/video/decode/formattype;valtype=int32"
   1121 #define PV_H324_AUDIO_INPUT_FORMATS "x-pvmf/audio/decode/input_formats"
   1122 #define PV_H324_AUDIO_INPUT_FORMATS_VALTYPE "x-pvmf/audio/decode/formattype;valtype=int32"
   1123 
   1124 #define PV_H324_VIDEO_OUTPUT_FORMATS "x-pvmf/video/encode/output_formats"
   1125 #define PV_H324_VIDEO_OUTPUT_FORMATS_VALTYPE "x-pvmf/video/encode/formattype;valtype=int32"
   1126 #define PV_H324_AUDIO_OUTPUT_FORMATS "x-pvmf/audio/encode/output_formats"
   1127 #define PV_H324_AUDIO_OUTPUT_FORMATS_VALTYPE "x-pvmf/audio/encode/formattype;valtype=int32"
   1128 
   1129 OSCL_IMPORT_REF const char* GetFormatsString(TPVDirection aDir, PV2WayMediaType aMediaType);
   1130 OSCL_IMPORT_REF const char* GetFormatsValtypeString(TPVDirection aDir, PV2WayMediaType aMediaType);
   1131 
   1132 template<class elementalClass>
   1133 class Basic2WayDestructDealloc : public OsclDestructDealloc
   1134 {
   1135     public:
   1136         virtual void destruct_and_dealloc(OsclAny *ptr)
   1137         {
   1138             OSCL_DEFAULT_FREE(ptr);
   1139         }
   1140 };
   1141 
   1142 OSCL_IMPORT_REF void GetSampleSize(PVMFFormatType aFormatType, uint32* aMin, uint32* aMax);
   1143 
   1144 /**
   1145  * CPV2WayM4VConfigInfo Class
   1146  *
   1147  * The CPV2WayM4VConfigInfo class contains configuration information for an M4V encoder.  This information can be used to configure a encoded source or sink.
   1148  **/
   1149 
   1150 class CPV2WayM4VConfigInfo
   1151 {
   1152     public:
   1153         CPV2WayM4VConfigInfo() : m4v_VOLHeaderSize(0), frameWidth(176), frameHeight(144), frameRate(5), profileLevelID(0) {};
   1154 
   1155         CPV2WayM4VConfigInfo(OsclSharedPtr<uint8> am4v_VOLHeader,
   1156                              uint32 am4v_VOLHeaderSize,
   1157                              int aframeWidth,
   1158                              int aframeHeight,
   1159                              int aprofileLevelID,
   1160                              int aframeRate)
   1161         {
   1162             m4v_VOLHeader.Bind(am4v_VOLHeader);
   1163             m4v_VOLHeaderSize = am4v_VOLHeaderSize;
   1164             frameWidth = aframeWidth;
   1165             frameHeight = aframeHeight;
   1166             profileLevelID = aprofileLevelID;
   1167             frameRate = aframeRate;
   1168         }
   1169 
   1170 
   1171         CPV2WayM4VConfigInfo & operator=(const CPV2WayM4VConfigInfo& aInfo)
   1172         {
   1173             m4v_VOLHeader.Bind(aInfo.m4v_VOLHeader);
   1174             m4v_VOLHeaderSize = aInfo.m4v_VOLHeaderSize;
   1175             frameWidth = aInfo.frameWidth;
   1176             frameHeight = aInfo.frameHeight;
   1177             frameRate = aInfo.frameRate;
   1178             profileLevelID = aInfo.profileLevelID;
   1179             return *this;
   1180         }
   1181 
   1182 
   1183         OsclSharedPtr<uint8> m4v_VOLHeader;
   1184         uint32 m4v_VOLHeaderSize;
   1185         int frameWidth;
   1186         int frameHeight;
   1187         int frameRate;
   1188         int profileLevelID;
   1189 
   1190 };
   1191 
   1192 /**
   1193  * CPV2WayH263ConfigInfo Class
   1194  *
   1195  * The CPV2WayH263ConfigInfo class contains configuration information for an H263 encoder.  This information can be used to configure a encoded source or sink.
   1196  **/
   1197 
   1198 class CPV2WayH263ConfigInfo
   1199 {
   1200     public:
   1201         CPV2WayH263ConfigInfo() : profile(0), level(10), frameWidth(176), frameHeight(144), frameRate(5) {};
   1202 
   1203         CPV2WayH263ConfigInfo & operator=(const CPV2WayH263ConfigInfo& aInfo)
   1204         {
   1205             profile = aInfo.profile;
   1206             level = aInfo.level;
   1207             frameWidth = aInfo.frameWidth;
   1208             frameHeight = aInfo.frameHeight;
   1209             frameRate = aInfo.frameRate;
   1210             return *this;
   1211         }
   1212 
   1213 
   1214         int profile;
   1215         int level;
   1216         int frameWidth;
   1217         int frameHeight;
   1218         int frameRate;
   1219 };
   1220 
   1221 
   1222 class OlcFormatInfo
   1223 {
   1224     public:
   1225         OlcFormatInfo() : iId(CHANNEL_ID_UNKNOWN),
   1226                 iCodec(PV_CODEC_TYPE_NONE),
   1227                 isSymmetric(true) {}
   1228         TPVChannelId iId;
   1229         PVCodecType_t iCodec;
   1230         bool isSymmetric;
   1231 };
   1232 
   1233 template < uint32 numchunk, uint32 chunksize = 0 >
   1234 class PoolMemAlloc : public OsclMemPoolFixedChunkAllocator
   1235 {
   1236     public:
   1237         PoolMemAlloc(): OsclMemPoolFixedChunkAllocator(numchunk, chunksize) {}
   1238 };
   1239 typedef PoolMemAlloc<10> PoolMemAlloc_OsclMemAllocator_10;
   1240 
   1241 #define PORT_TYPE_FOR_DIRECTION(dir) ((dir == OUTGOING) ? EPVInputPort : EPVOutputPort)
   1242 OSCL_IMPORT_REF PV2WayMediaType GetMediaType(PVCodecType_t codec);
   1243 OSCL_IMPORT_REF void GetSampleSize(PVMFFormatType aFormatType, uint32* aMin, uint32* aMax);
   1244 OSCL_IMPORT_REF bool CodecRequiresFsi(PVCodecType_t codec);
   1245 
   1246 #endif
   1247