multimediacommscontroller/mmccsubcontroller/inc/mcccodecconfigurator.h
changeset 0 1bce908db942
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2004-2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Provides static configuration functions for different codecs
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #ifndef MCCCODECCONFIGURATOR_H
       
    21 #define MCCCODECCONFIGURATOR_H
       
    22 
       
    23 //  INCLUDES
       
    24 #include <e32base.h>
       
    25 #include "mccsymstreambase.h"
       
    26 
       
    27 // FORWARD DECLARATIONS
       
    28 class MMMFAudioInput;
       
    29 class MMMFAudioOutput;
       
    30 class MDataSink;
       
    31 class MDataSource;
       
    32 class TMccCodecInfo;
       
    33 class CMMFFormatEncode;
       
    34 class CMMFFormatDecode;
       
    35 class CMccVideoSource;
       
    36 class CMccVideoSink;
       
    37 class CPayloadFormatWrite;
       
    38 class CPayloadFormatRead;
       
    39 class TMccFileSourceSetting;
       
    40 class CMccRtpMediaClock;
       
    41 class CMMFDevSound;
       
    42 class CMccFileSink;
       
    43 
       
    44 // CLASS DECLARATION
       
    45 
       
    46 /**
       
    47 *  Mcc Codec configuration static methods declaration
       
    48 *
       
    49 *  @lib Mccsubthread.lib
       
    50 *  @since Series 60 3.0
       
    51 */
       
    52 NONSHARABLE_CLASS( MccCodecConfigurator )
       
    53     {
       
    54     public: // New functions
       
    55 
       
    56         /**
       
    57         * Generic codec configuration function.
       
    58         * @since Series 60 3.0
       
    59         * @param aCodec Codec information
       
    60         * @return void
       
    61         */
       
    62         static void ConfigureCodecL( MDataSource& aDatasource,
       
    63                                      MDataSink& aDatasink, 
       
    64                                      const TMccCodecInfo& aCodec,
       
    65                                      CMccRtpMediaClock& aClock,
       
    66                                      CMccSymStreamBase::TCodecState aCodecState,
       
    67                                      MDataSink* aAssociatedDatasink = 0 );
       
    68         
       
    69         /**
       
    70          * Changes the current encoder bitrate
       
    71          * @since Series 60 3.0
       
    72          * @param aCodec Codec info
       
    73          * @param aBitrate New bitrate
       
    74          * @param aSounddevice Reference to DevSound
       
    75          * @return void
       
    76          */
       
    77         static void ChangeBitrateL( const TMccCodecInfo& aCodec,
       
    78                                     TUint aBitrate, 
       
    79                                     CMMFDevSound& aSounddevice );
       
    80                                      
       
    81         /**
       
    82         * Gets default values of codec
       
    83         */
       
    84         static void GetCodecDefaultsL( const TUid aType,
       
    85         		                       TDes8& aParam, 
       
    86         		                       TMccCodecInfo& aCodec );
       
    87         
       
    88         /**
       
    89          * Checks whether codec is iLBC and if bitrate change needs a
       
    90          * codec stop/resume in order for the reconfiguration to succeed.
       
    91          * @since S60 v3.2
       
    92          * @param aOrigBitrate Original bitrate
       
    93          * @param aRequBitrate Requested bitrate
       
    94          * @param aCodec FourCC code of the codec
       
    95          * @return TBool ETrue if stop/resume is needed for bitrate change
       
    96          *               and codec is iLBC
       
    97          */
       
    98         static TBool IlbcNeedsStopResume( TInt aOrigBitrate,
       
    99             TInt aRequBitrate, const TFourCC& aCodec );
       
   100         
       
   101     private:
       
   102         
       
   103         /**
       
   104         * Configures a codec that is used for uplink/recording
       
   105         * @since Series 60 3.0
       
   106         * @param aRecordDevice MMF Recording device
       
   107         * @param aFormatter Encoder for record data
       
   108         * @param aCodec Codec parameters
       
   109         * @param aCodecState
       
   110         * @return void
       
   111         */
       
   112         static void DoConfigureLiveAudioUplinkStreamL(
       
   113         	MMMFAudioInput& aRecordDevice,
       
   114             CPayloadFormatWrite& aFormatter,
       
   115             const TMccCodecInfo& aCodec,
       
   116             CMccRtpMediaClock& aClock,
       
   117             CMccSymStreamBase::TCodecState aCodecState );
       
   118             
       
   119         /**
       
   120         * Configures a codec that is used for downlink/playback
       
   121         * @since Series 60 3.0
       
   122         * @param aPlayDevice MMF Playback device
       
   123         * @param aFormatter Decoder for playback data
       
   124         * @param aCodec Codec parameters
       
   125         * @param aCodecState
       
   126         * @return void
       
   127         */
       
   128         static void DoConfigureLiveAudioDownlinkStreamL(
       
   129         	MMMFAudioOutput& aPlayDevice,
       
   130             CPayloadFormatRead& aFormatter,
       
   131             const TMccCodecInfo& aCodec,
       
   132             CMccSymStreamBase::TCodecState aCodecState );
       
   133             
       
   134        /**
       
   135         * Configures a codec that is used for video downlink
       
   136         * @since Series 60 3.0
       
   137         * @param aPlayDevice MMF Playback device
       
   138         * @param aFormatter Decoder for playback data
       
   139         * @param aCodec Codec parameters
       
   140         * @return void
       
   141         */
       
   142         static void DoConfigureLiveVideoDownlinkStreamL(
       
   143             MDataSink* aDataSink,
       
   144             CPayloadFormatRead& aFormatter,
       
   145             const TMccCodecInfo& aCodec );
       
   146 
       
   147         /**
       
   148         * Configures a codec for display sink
       
   149         * @since Series 60 3.0
       
   150         * @param aCodec Codec parameters
       
   151         * @param aDatasink
       
   152         * @return void
       
   153         */
       
   154         static void DoConfigureDisplayL( 
       
   155                         const TMccCodecInfo& aCodec,
       
   156                         MDataSink* aDatasink );
       
   157     
       
   158         /**
       
   159         * Configures a codec that is used for uplink video from clip
       
   160         * @since Series 60 3.0
       
   161         * @param aFormatter Encoder for record data
       
   162         * @param aCodec Codec parameters
       
   163         * @param aAssociatedSink
       
   164         * @return void
       
   165         */
       
   166         static void DoConfigureClipUplinkStreamL(
       
   167             CPayloadFormatWrite& aFormatter,
       
   168             const TMccCodecInfo& aCodec,
       
   169             MDataSink* aAssociatedSink,
       
   170             CMccRtpMediaClock& aClock );
       
   171 
       
   172         /**
       
   173         * Configures a codec that is used for uplink live video
       
   174         * @since Series 60 3.0
       
   175         * @param aFormatter Encoder for record data
       
   176         * @param aCodec Codec parameters
       
   177         * @param aAssociatedSink
       
   178         * @return void
       
   179         */
       
   180         static void DoConfigureLiveVideoUplinkStreamL( 
       
   181         	CMccVideoSource& aDataSource,
       
   182             CPayloadFormatWrite& aFormatter,
       
   183             const TMccCodecInfo& aCodec,
       
   184             MDataSink* aAssociatedSink,
       
   185             CMccRtpMediaClock& aClock );
       
   186             
       
   187         /**
       
   188         * Configures the uplink AMR codec
       
   189         * @since Series 60 3.0
       
   190         * @param [input] aPlaybackDev MMF Audio datasink
       
   191          * @param [input] aCodec Codec info
       
   192         * @return void
       
   193         */
       
   194         static void DoConfigureAmrL( MMMFAudioOutput& aPlaybackDev, 
       
   195                                      const TMccCodecInfo&  );
       
   196         
       
   197         /**
       
   198         * Configures the downlink AMR codec
       
   199         * @since Series 60 3.0
       
   200         * @param [input] aRecordDev MMF Audio datasource
       
   201         * @param [input] aCodec Codec info
       
   202         * @return void
       
   203         */
       
   204         static void DoConfigureAmrL( MMMFAudioInput& aRecordDev,  
       
   205                                      const TMccCodecInfo& aCodec );
       
   206 
       
   207         /**
       
   208         * Configures the uplink G.711 codec
       
   209         * @since Series 60 3.0
       
   210         * @param [input] aDatasink MMF Audio datasink
       
   211         * @param [input] aCodec Codec parameters
       
   212         * @param aCodecState
       
   213         * @return void
       
   214         */
       
   215         static void DoConfigureG711L( MMMFAudioOutput& aPlaybackDev, 
       
   216             const TMccCodecInfo& aCodec,
       
   217             CMccSymStreamBase::TCodecState aCodecState );
       
   218         
       
   219         /**
       
   220         * Configures the downlink G.711 codec
       
   221         * @since Series 60 3.0
       
   222         * @param [input] aDatasource MMF Audio datasource
       
   223         * @param [input] aCodec Codec parameters
       
   224         * @param aCodecState
       
   225         * @return void
       
   226         */
       
   227         static void DoConfigureG711L( MMMFAudioInput& aRecordDev,
       
   228             const TMccCodecInfo& aCodec,
       
   229             CMccSymStreamBase::TCodecState aCodecState );
       
   230         
       
   231          /**
       
   232         * Configures the uplink G.729 codec
       
   233         * @since Series 60 3.0
       
   234         * @param aDatasink MMF Audio datasink
       
   235         * @param aBitrate Bitrate for the codec
       
   236         * @return void
       
   237         */
       
   238         static void DoConfigureG729( MMMFAudioOutput& aPlaybackDev );
       
   239         
       
   240         /**
       
   241         * Configures the downlink G.729 codec
       
   242         * @since Series 60 3.0
       
   243         * @param [input] aDatasource    MMF Audio datasource
       
   244         * @param [input] aEnableCng     Is comfort noise generation activated
       
   245         * @return void
       
   246         */
       
   247         static void DoConfigureG729L( MMMFAudioInput& aRecordDev,
       
   248                                       TBool aEnableCng );
       
   249         
       
   250         /**
       
   251         * Configures the uplink iLBC codec
       
   252         * @since Series 60 3.0
       
   253         * @param aDatasink MMF Audio datasink
       
   254         * @param aCodec Codec parameters
       
   255         * @param aCodecState
       
   256         * @return void
       
   257         */
       
   258         static void DoConfigureIlbcL( MMMFAudioOutput& aPlaybackDev, 
       
   259                 const TMccCodecInfo& aCodec,
       
   260                 CMccSymStreamBase::TCodecState aCodecState );
       
   261         
       
   262         /**
       
   263         * Configures the downlink iLBC codec
       
   264         * @since Series 60 3.0
       
   265         * @param aDatasource MMF Audio datasource
       
   266         * @param aCodec Codec parameters
       
   267         * @param aCodecState
       
   268         * @return void
       
   269         */
       
   270         static void DoConfigureIlbcL( MMMFAudioInput& aRecordDev, 
       
   271                 const TMccCodecInfo& aCodec,
       
   272                 CMccSymStreamBase::TCodecState aCodecState );
       
   273         
       
   274         /**
       
   275         * Configures the camera source
       
   276         * @since Series 60 3.0
       
   277         * @param [input] aVideoSource source to be configured
       
   278         * @param [input] aCodec Codec parameters
       
   279         * @return void
       
   280         */
       
   281         static void DoConfigureCameraL( CMccVideoSource& aVideoSource, 
       
   282                 const TMccCodecInfo& aCodec );
       
   283 
       
   284         
       
   285         /**
       
   286         * Configures the file sink
       
   287         * @since Series 60 3.0
       
   288         * @param [input] aFileSink sink to be configured
       
   289         * @param [input] aCodec Codec parameters
       
   290         * @return void
       
   291         */
       
   292         static void DoConfigureFileSinkL( CMccFileSink& aFileSink, 
       
   293                 const TMccCodecInfo& aCodec );
       
   294     
       
   295         /**
       
   296         * Configures a DTMF mediaformat.
       
   297         *
       
   298         * @since   S60 3.0
       
   299         * @param   aPayloadDecoder     Decoder for DTMF payload
       
   300         * @param   aCodec              Mediaformat parameters
       
   301         * @return  void
       
   302         */
       
   303         static void DoConfigureDtmfFormatL(
       
   304         	CPayloadFormatRead& aPayloadDecoder,
       
   305             const TMccCodecInfo& aCodec );
       
   306             
       
   307         /**
       
   308         * Configures a DTMF mediaformat.
       
   309         *
       
   310         * @since   S60 3.0
       
   311         * @param   aPayloadEncoder     Encoder for DTMF payload
       
   312         * @param   aCodec              Mediaformat parameters
       
   313         * @param   aClock              Mediaclock for timestamp synchronization
       
   314         * @return  void
       
   315         */
       
   316         static void DoConfigureDtmfFormatL(
       
   317             CPayloadFormatWrite& aPayloadEncoder,
       
   318             const TMccCodecInfo& aCodec,
       
   319             CMccRtpMediaClock& aClock );
       
   320         
       
   321         /**
       
   322         * Gets configures of the camera source
       
   323         */
       
   324 		static void DoGetCameraConfigurationL( const TMccCodecInfo& aCodec, 
       
   325 		                                       const TDesC8& aParam );
       
   326 		                                       
       
   327 		/**
       
   328         * Gets settings of the clip source
       
   329         */                                    
       
   330 	    static void DoGetClipConfigurationL( TDes8& aParam );
       
   331 
       
   332         /**
       
   333         * Converts a "boolean" setting parameter to a real Symbian style
       
   334         * boolean.
       
   335         * @since Series 60 3.0
       
   336         * @param aParam     Boolean parameter to convert
       
   337         * @return TBool     Converted parameter
       
   338         */
       
   339         static TBool ConvertBoolean( TBool aParam );
       
   340 	    
       
   341 	    /**
       
   342 	    * Checks whether bitrate is supported
       
   343 	    */ 
       
   344 	    static TBool IsSupportedAmrNbBitrate( TInt aBitrate );
       
   345 	    
       
   346 	    /**
       
   347 	    * Checks whether bitrate is supported
       
   348 	    */ 
       
   349 	    static TBool IsSupportedAmrWbBitrate( TInt aBitrate );
       
   350 	    
       
   351 	    static void PassPrerollFromSinkToSourceL(MDataSink* aDataSink,  MDataSource* aDataSource);
       
   352 		 
       
   353         
       
   354     private:    // Friend classes
       
   355         #if defined( TEST_EUNIT )
       
   356         friend class UT_CMccCodecConfigurator;
       
   357         #endif
       
   358     };
       
   359 
       
   360 #endif      // MCCCODECCONFIGURATOR_H
       
   361             
       
   362 // End of File