multimediacommscontroller/mmccinterface/inc/mmcccodecamr.h
changeset 0 1bce908db942
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2004 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:    Class is used for configuring AMR codec.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 #ifndef __MCC_CODEC_AMR_H__
       
    22 #define __MCC_CODEC_AMR_H__
       
    23 
       
    24 //  INCLUDES
       
    25 #include "mmcccodecinformation.h"
       
    26 
       
    27 // CONSTANTS
       
    28 const TUint KDefaultModeChangePeriod = 1;
       
    29 
       
    30 // AMR-NB Codec possible bitrates
       
    31 const TInt KAmrNbBitrate475( 4750 );
       
    32 const TInt KAmrNbBitrate515( 5150 );
       
    33 const TInt KAmrNbBitrate590( 5900 );
       
    34 const TInt KAmrNbBitrate670( 6700 );
       
    35 const TInt KAmrNbBitrate740( 7400 );
       
    36 const TInt KAmrNbBitrate795( 7950 );
       
    37 const TInt KAmrNbBitrate102( 10200 );
       
    38 const TInt KAmrNbBitrate122( 12200 );
       
    39 
       
    40 
       
    41 const TUint KMccAllowedAmrNbBitrate475     = 0x0001;
       
    42 const TUint KMccAllowedAmrNbBitrate515     = 0x0002;
       
    43 const TUint KMccAllowedAmrNbBitrate590     = 0x0004;
       
    44 const TUint KMccAllowedAmrNbBitrate670     = 0x0008;
       
    45 const TUint KMccAllowedAmrNbBitrate740     = 0x0010;
       
    46 const TUint KMccAllowedAmrNbBitrate795     = 0x0020;
       
    47 const TUint KMccAllowedAmrNbBitrate102     = 0x0040;
       
    48 const TUint KMccAllowedAmrNbBitrate122     = 0x0080;
       
    49 const TUint KMccAllowedAmrNbBitrateAll     = 0x00FF;
       
    50 
       
    51 // Allowed bitrates bitfield can contain additional information
       
    52 const TUint KMccAllowedAmrAdditionalInfo   = 0x0F00;
       
    53 
       
    54 // If this bit is not present, mode-change-period=1
       
    55 const TUint KMccAllowedModeChangePeriod2   = 0x0100;
       
    56 
       
    57 // If this bit is not present, mode-change-neighbor=0
       
    58 const TUint KMccAllowedModeChangeNeighbor1 = 0x0200;
       
    59 
       
    60 const TUint KAmrNbSamplingFreq( 8000 );
       
    61 
       
    62 const TInt KAMRDefaultHwFrameTime( 20 );
       
    63 const TInt KAMRDefaultFrameSize( 32 );
       
    64 const TInt KAMRDefaultPTime( 20 );
       
    65 const TInt KAMRDefaultMaxPTime( 400 );
       
    66 
       
    67 const TUint KModTen( 10 );
       
    68 
       
    69 const TInt KAMRMode0( 0 );
       
    70 const TInt KAMRMode1( 1 );
       
    71 const TInt KAMRMode2( 2 );
       
    72 const TInt KAMRMode3( 3 );
       
    73 const TInt KAMRMode4( 4 );
       
    74 const TInt KAMRMode5( 5 );
       
    75 const TInt KAMRMode6( 6 );
       
    76 const TInt KAMRMode7( 7 );
       
    77 
       
    78 // Max five frames is used with AMR FEC redundancy
       
    79 const TInt  KMaxAmrFecRedCount = 5;
       
    80 
       
    81 _LIT8( KMatchModeSet, "*mode-set*");
       
    82 _LIT8( KTxtModeSet, "mode-set=");
       
    83 _LIT8( KMatchOctetAlign, "*octet-align*");
       
    84 _LIT8( KMatchModeChangePeriod, "*mode-change-period*");
       
    85 _LIT8( KMatchModeChangeNeighbor, "*mode-change-neighbor*");
       
    86 _LIT8( KCrc,"*crc*" );
       
    87 _LIT8( KRobustSorting,"*robust-sorting*" );
       
    88 _LIT8( KInterleaving,"*interleaving*" );
       
    89 _LIT8( KMaxRed,"*max-red*" );
       
    90 
       
    91 // CLASS DECLARATION
       
    92 /**
       
    93 *  Container class for the codec information.
       
    94 *
       
    95 *  @lib MCCInterface.dll
       
    96 *  @since Series 60 3.0
       
    97 */
       
    98 NONSHARABLE_CLASS( CMccCodecAMR ) : public CMccCodecInformation
       
    99     {
       
   100     public:  // Constructors and destructor
       
   101 
       
   102         /**
       
   103         * Two-phased constructor.
       
   104         */
       
   105         static CMccCodecAMR* NewL();
       
   106         
       
   107         /**
       
   108         * Destructor.
       
   109         */
       
   110         virtual ~CMccCodecAMR();
       
   111         
       
   112     public: // New functions
       
   113     
       
   114     public: // From CMccCodecInformation
       
   115     
       
   116         /**
       
   117         * From CMccCodecInformation
       
   118         */
       
   119         TBool RequireSignalling( const CMccCodecInformation& aCandidate ) const;      
       
   120 
       
   121         /**
       
   122         * From CMccCodecInformation
       
   123         */
       
   124         CMccCodecInformation* CloneDefaultsL();
       
   125         
       
   126         /**
       
   127         * From CMccCodecInformation
       
   128         */
       
   129         CMccCodecInformation* CloneDetailedL();
       
   130         
       
   131     private:
       
   132 
       
   133         /**
       
   134         * By default Symbian 2nd phase constructor is private.
       
   135         */
       
   136         void ConstructL();
       
   137     
       
   138     
       
   139     /**
       
   140     *   Set functions
       
   141     */          
       
   142     public: 
       
   143                
       
   144         /**
       
   145         * From CMccCodecInformation. Enable / Disable Voice Activity Detection.
       
   146         * @since    Series 60 3.0
       
   147         * @param    aEnableVAD    Boolean indicating whether to enable Voice Activity Detection
       
   148         * @return   KErrNotSupported if codec doesn't support VAD; otherwise KErrNone.
       
   149         */
       
   150         TInt EnableVAD( TBool aEnableVAD );
       
   151 
       
   152         /**
       
   153         * From CMccCodecInformation. Sets bitrate used with codec.
       
   154         * @since     Series 60 3.0
       
   155         * @param     aBitrate     New bitrate value
       
   156         * @return    KErrNotSupported if codec doesn't support bitrate value issued; otherwise KErrNone.
       
   157         */
       
   158         TInt SetBitrate( TUint aBitrate );
       
   159                 
       
   160         /**
       
   161         * From CMccCodecInformation. Sets the sampling frequency.
       
   162         * @since    Series 60 3.0
       
   163         * @param    aSamplingFreq   Sampling frequency to be used
       
   164         * @return   KErrNotSupported if codec doesn't support sampling frequency issued; otherwise KErrNone.
       
   165         */
       
   166         TInt SetSamplingFreq( TUint32 aSamplingFreq );
       
   167 
       
   168         /**
       
   169         * From MccCodecInformation. Sets the packet time.
       
   170         * @since    Series 60 3.0
       
   171         * @param aPTime PacketTime.
       
   172         * @return One of the standard system-wide error codes.
       
   173         */
       
   174         TInt SetPTime( TUint aPTime );
       
   175         
       
   176         /**
       
   177         * From MccCodecInformation. Sets max packet time.
       
   178         * @since    Series 60 3.0
       
   179         * @param aMaxPTime Maximum PacketTime
       
   180         * @return One of the standard system-wide error codes.
       
   181         */
       
   182         TInt SetMaxPTime( TUint aMaxPTime );
       
   183 
       
   184         /**
       
   185         * From CMccCodecInformation. Sets the sdp name.
       
   186         * @since Series 60 3.0
       
   187         * @param aRtpId - [input] RTP session ID
       
   188         * @return One of the standard system-wide error codes.
       
   189         */
       
   190         TInt SetSdpName( const TDesC8& aSdpName );
       
   191         
       
   192         /**
       
   193         * From CMccCodecInformation. Sets the payload type.
       
   194         * @since Series 60 3.0
       
   195         * @param aRtpId - [input] RTP session ID
       
   196         * @return One of the standard system-wide error codes.
       
   197         */
       
   198         TInt SetPayloadType( TUint8 aPayloadType );
       
   199 
       
   200         /**
       
   201         * From CMccCodecInformation. Sets the codec mode.
       
   202         * @since         Series 60 3.0
       
   203         * @param aMode   Codec mode ( e.g. ULAW/ALAW, Bandwidth efficient / octet aligned )
       
   204         * @return        KErrNotSupported if codec doesnt' support codec mode value issued; otherwise KErrNone.
       
   205         */
       
   206         TInt SetCodecMode( TCodecMode aCodecMode );
       
   207         
       
   208         
       
   209         /**
       
   210         * Sets the allowed bitrates for the codec.
       
   211         * @since Series 60 3.0
       
   212         * @param aBitrateMask bitrate mask.
       
   213         * @return KErrNotSupported if codec doesnt' support the bitrate mask
       
   214         *     value issued; otherwise KErrNone.
       
   215         */
       
   216         TInt SetAllowedBitrates( TUint aBitrateMask );
       
   217         
       
   218         /**
       
   219         * Set number of channels. Range between 1 to 8. Refer to RFC3551 4.1
       
   220         * for interpretation of channels value. Default value is 1.
       
   221         *
       
   222         * @since    Series 60 3.0
       
   223         * @return   One of the standard system-wide error codes.
       
   224         */
       
   225         TInt SetChannels( TInt aNumOfChannels );
       
   226 
       
   227 
       
   228         /**
       
   229          * From CMccCodecInformation.
       
   230          * Sets the redundancy level. Setting is effective only if some
       
   231          * redundancy algorithm is set with SetAlgo().
       
   232          *
       
   233          * @param   aRedCount   The level of redundancy
       
   234          * @return  One of the standard system-wide error codes.
       
   235          */
       
   236         TInt SetRedCount( TUint aRedCount );
       
   237         
       
   238         /**
       
   239          * Sets the upper limit on the usage of redundancy in milliseconds.
       
   240          * @since    Series 60 3.2
       
   241          * @param    aMaxRed   maximum redundancy
       
   242          * @return   One of the standard system-wide error codes.
       
   243          */
       
   244         TInt SetMaxRed( TInt aMaxRed ); 
       
   245     
       
   246     /**
       
   247     *  New virtual functions
       
   248     */  
       
   249     protected: 
       
   250     
       
   251         /**
       
   252         * Sets bitrate used with codec.
       
   253         * @since Series 60 3.0
       
   254         * @param aBitrateMask bitrate mask, sets the largest bitrate
       
   255         * @return KErrNotSupported if codec doesn't support bitrate value
       
   256         *     issued; otherwise KErrNone.
       
   257         */
       
   258         virtual TInt SetBitrateFromBitrateMask( TUint aBitrateMask ); 
       
   259         
       
   260         /**
       
   261         * From CMccCodecInformation. Gets the mode set of a bitrate.
       
   262         * @since     Series 60 3.0
       
   263         * @param     aBitrate     The bitrate value
       
   264         * @return     mode set value
       
   265         */
       
   266         virtual TInt GetBitrateModeSet( TUint aBitrate );
       
   267         
       
   268         /**
       
   269         * From CMccCodecInformation. Gets the bitrate mask from the mode set .
       
   270         * @since     Series 60 3.0
       
   271         * @param     aMode The mode set
       
   272         * @param    aBitrateMask reference to bitrateMask
       
   273         * @return KErrNotSupported if codec doesnt' support the bitrate mask
       
   274         *     value issued; otherwise KErrNone.
       
   275         */
       
   276         virtual TInt GetBitrateMaskFromMode( TUint aMode, TUint& aBitrateMask  );
       
   277 
       
   278     
       
   279         /**
       
   280         * Gets the allowed bitrates for the codec.
       
   281         * @since  Series 60 3.0
       
   282         * @param  aBitrateMask RArray<TUint> reference 
       
   283         * @return KErrNotSupported if codec doesnt' support the function
       
   284         *         otherwise KErrNone.
       
   285         */
       
   286         virtual TInt GetAllowedBitratesArrayL( RArray<TUint>& aBitratesArray );
       
   287     
       
   288         /**
       
   289         * Sets the bitrate from the mode set .
       
   290         * @since     Series 60 3.0
       
   291         * @param     aBitrate     The mode set
       
   292         * @return    mode set value
       
   293         */
       
   294         virtual void SetBitrateModeSet( TUint aModeSet );
       
   295 
       
   296     
       
   297     public:
       
   298               
       
   299         /**
       
   300         * Get number of channels.
       
   301         * @since    Series 60 3.0
       
   302         * @return   One of the standard system-wide error codes.
       
   303         */
       
   304         TInt GetChannels( TInt& aNumOfChannels  ) const; 
       
   305         
       
   306     /**
       
   307     *   FMTP functions
       
   308     */ 
       
   309     public: //Public FMTP functions
       
   310         
       
   311         /**
       
   312         * Get the fmtp string
       
   313         * @since Series 60 3.0
       
   314         * @return Fmtp.
       
   315         */
       
   316         TDesC8& GetFmtpL( ); 
       
   317         
       
   318         /**
       
   319         * Parses the fmtp attributes, and updates the internal values
       
   320         * except the iFmtpAttr attribute
       
   321         * @since Series 60 3.0
       
   322         * @param aFmtp Fmtp attribute
       
   323         * @return True if any param was updated
       
   324         */
       
   325         TBool ParseFmtpAttrL( const TDesC8& aFmtp );      
       
   326        
       
   327         /**
       
   328         * Creates the fmtp string from internal values
       
   329         * @since Series 60 3.0
       
   330         * @return void
       
   331         */
       
   332         void CreateFmtpAttrListL();
       
   333       
       
   334         /**
       
   335         * Creates the fmtp string from internal values and the given bitrates
       
   336         * @since Series 60 3.0
       
   337         * @return void
       
   338         */
       
   339         void CreateFmtpAttrListL( const RArray<TUint>& aBitrates );
       
   340    
       
   341     
       
   342     protected: // New functions for derived classes
       
   343     
       
   344             
       
   345         /**
       
   346         * C++ default constructor.
       
   347         */
       
   348         CMccCodecAMR();
       
   349         
       
   350         /**
       
   351         * Parses the fmtp attribute and updates the right param  
       
   352         * @since Series 60 3.0
       
   353         * @param aFmtp Fmtp attribute
       
   354         * @return ETrue if any params were updated
       
   355         */
       
   356         TBool ParseFmtpSegmentL( const TDesC8& aFmtp );
       
   357         
       
   358         /**
       
   359         * Parses the fmtp attribute and updates the octet-align value
       
   360         * @since Series 60 3.0
       
   361         * @param aFmtp Fmtp attribute
       
   362         * @return ETrue if any params were updated
       
   363         */
       
   364         TBool ParseFmtpOctetAlignL( const TDesC8& aFmtpOctetAlign );
       
   365         
       
   366         /**
       
   367         * Parses the fmtp attribute and updates the mode-change-period value
       
   368         * @since Series 60 3.0
       
   369         * @param aFmtp Fmtp attribute
       
   370         * @return ETrue if any params were updated
       
   371         */
       
   372         TBool ParseFmtpModeChangePeriodL( const TDesC8& aFmtpModeChangePeriod );
       
   373         
       
   374         /**
       
   375         * Parses the fmtp attribute and updates the mode-change-neighbor value
       
   376         * @since Series 60 3.0
       
   377         * @param aFmtp Fmtp attribute
       
   378         * @return ETrue if any params were updated
       
   379         */
       
   380         TBool ParseFmtpModeChangeNeighborL( const TDesC8& aFmtpModeChangeNeighbor );
       
   381         
       
   382         /**
       
   383         * Parses the fmtp attribute and updates the crc value
       
   384         * @since Series 60 3.0
       
   385         * @param aFmtp Fmtp attribute
       
   386         * @return ETrue if any params were updated
       
   387         */
       
   388         TBool ParseFmtpCrcL( const TDesC8& aFmtpCrc );
       
   389 
       
   390         /**
       
   391         * Parses the fmtp attribute and updates the robust sorting value
       
   392         * @since Series 60 3.0
       
   393         * @param aFmtp Fmtp attribute
       
   394         * @return ETrue if any params were updated
       
   395         */
       
   396         TBool ParseFmtpRobustSortingL( const TDesC8& aFmtpRobustSorting );
       
   397         
       
   398     
       
   399         /**
       
   400         * Creates the octet-align value of the FMTP
       
   401         * @since Series 60 3.0
       
   402         * @param aBuf The buffer to modify
       
   403         * @return ETrue if any params were updated
       
   404         */
       
   405         TBool CreateFmtpOctetAlign( TDes8& aBuf );
       
   406    
       
   407         /**
       
   408         * Creates the mode-change-period value of the FMTP
       
   409         * @since Series 60 3.0
       
   410         * @param aBuf The buffer to modify
       
   411         * @return ETrue if any params were updated
       
   412         */
       
   413         TBool CreateFmtpModeChangePeriod( TDes8& aBuf );
       
   414         
       
   415         /**
       
   416         * Creates the mode-change-neigbor value of the FMTP
       
   417         * @since Series 60 3.0
       
   418         * @param aBuf The buffer to modify
       
   419         * @return ETrue if any params were updated
       
   420         */
       
   421         TBool CreateFmtpModeChangeNeighbor( TDes8& aBuf );
       
   422         
       
   423         /**
       
   424          * Creates the max-red value of the FMTP
       
   425          * @since Series 60 3.2
       
   426          * @param aBuf The buffer to modify
       
   427          * @return ETrue if any params were updated
       
   428          */
       
   429         TBool CreateFmtpMaxRed( TDes8& aBuf );
       
   430         
       
   431         /**
       
   432          * Parses the fmtp attribute and updates the max red value
       
   433          * @since Series 60 3.2
       
   434          * @param aFmtpMaxRed Fmtp attribute
       
   435          * @return ETrue if any params were updated
       
   436          */
       
   437         TBool ParseFmtpMaxRedL( const TDesC8& aFmtpMaxRed );
       
   438         
       
   439         /**
       
   440         * Parses the fmtp attribute and updates the mode-set value  
       
   441         * @since Series 60 3.0
       
   442         * @param aFmtp Fmtp attribute
       
   443         * @return ETrue if any params were updated
       
   444         */
       
   445         TBool ParseFmtpModeSetL( const TDesC8& aFmtpModeSet );
       
   446         
       
   447         /**
       
   448         * Creates the mode-set value of the FMTP according to the bitrates
       
   449         * @since Series 60 3.0
       
   450         * @param aBuf The buffer to modify
       
   451         * @param aBitrates Supported bitrates of the codec
       
   452         * @return ETrue if the buffer was modified
       
   453         */
       
   454         TBool CreateFmtpModeSet( TDes8& aBuf,
       
   455                                          const RArray<TUint>& aBitrates );
       
   456                 
       
   457         /**
       
   458         * Parses the fmtp attribute and updates the interleaving value  
       
   459         * @since Series 60 3.0
       
   460         * @param aFmtp Fmtp attribute
       
   461         * @return ETrue if any params were updated
       
   462         */
       
   463         TBool ParseFmtpInterleavingL( const TDesC8& aFmtpInterleaving );
       
   464         
       
   465         /**
       
   466         * Specifies the number of frame blocks,
       
   467         * that is the interval at which codec mode changes are allowed
       
   468         * @since    Series 60 3.0
       
   469         * @return   One of the standard system-wide error codes.
       
   470         */
       
   471         TInt SetModeChangePeriod( const TInt aPeriod );
       
   472         
       
   473         /**
       
   474         * Get specified number of frame blocks
       
   475         * @since    Series 60 3.0
       
   476         * @return   One of the standard system-wide error codes.
       
   477         */
       
   478         TInt ModeChangePeriod( ) const;
       
   479         
       
   480         /**
       
   481         * Set boolean variable, which indicates change between two modes.
       
   482         * With default value 1 changes are only allowed to the 
       
   483         * neighboring mode.
       
   484         * @since    Series 60 3.0
       
   485         * @return   One of the standard system-wide error codes.
       
   486         */
       
   487         TInt SetModeChangeNeighbor( const TBool aNeighbor );
       
   488         
       
   489         /**
       
   490         * Get boolean variable, which indicates change between two modes.
       
   491         * @since    Series 60 3.0
       
   492         * @return   Return iNeighbor
       
   493         */
       
   494         TBool ModeChangeNeighbor( ) const;
       
   495         
       
   496         /**
       
   497         * Set boolean type frame CRC value. With value 1 CRC shall be
       
   498         * included in the payload, otherwise not. 1 also implies that
       
   499         * octet-alignet operation shall be used for the session.
       
   500         * @since    Series 60 3.0
       
   501         * @return   One of the standard system-wide error codes.
       
   502         */
       
   503         TInt SetCrc( const TBool aCrc );
       
   504         
       
   505         /**
       
   506         * Get boolean type CRC value.
       
   507         * @since    Series 60 3.0
       
   508         * @return   iCrc
       
   509         */
       
   510         TBool GetCrc( ) const;
       
   511         
       
   512         /**
       
   513         * Set robust sorting on/off with boolean value. With value 1
       
   514         * the payload SHALL employ robust sorting. Implies automatically
       
   515         * that octet-aligned operation SHALL be used for the session.
       
   516         * @since    Series 60 3.0
       
   517         * @return   One of the standard system-wide error codes.
       
   518         */     
       
   519         TInt SetRobustSorting( const TBool aRobust );
       
   520         
       
   521         /**
       
   522         * Get boolean type robust sorting value
       
   523         * @since    Series 60 3.0
       
   524         * @return   iRobust
       
   525         */
       
   526         TBool GetRobustSorting( ) const;
       
   527         
       
   528         /**
       
   529         * Set interleaving as unsigned integer. Number range is 0-63.
       
   530         * Indicates that frame-block level interleaving SHALL be
       
   531         * used for the session and it's value defines the max number of
       
   532         * frame-blocks allowed in interleaving group. Implies automatically
       
   533         * that octet-aligned operation SHALL be used.
       
   534         * @since    Series 60 3.0
       
   535         * @return   One of the standard system-wide error codes.
       
   536         */
       
   537         TInt SetInterleaving( const TInt aFrameBlockCount );
       
   538 
       
   539         /**
       
   540         * Get Interleavin value.
       
   541         * @since    Series 60 3.0
       
   542         * @return   iFrameBlockCount
       
   543         */
       
   544         TInt GetInterleaving( ) const;  
       
   545         
       
   546         void SetBitrateMask( TUint aBitrateMask, TBool aKeepAdditionalInfo = EFalse ); 
       
   547         
       
   548         void SetBitrateMaskAdditionalInfo( TUint aAdditionalInfo ); 
       
   549     
       
   550     protected:  // Data
       
   551     
       
   552         TUint iDefaultBitrateMask;
       
   553         
       
   554         TUint iDefaultBitrate;
       
   555         
       
   556         TUint iAdditionalInfoMask;
       
   557         
       
   558         TInt iMaxModeSetVal;
       
   559     
       
   560     private:    // Data
       
   561     
       
   562         /**
       
   563          * Mode-set exist in FMTP
       
   564          */
       
   565         TBool iModesExist;
       
   566         
       
   567         /**
       
   568          * Octet-align exist in FMTP
       
   569          */
       
   570         TBool iOctetAlignExist;
       
   571         
       
   572         /**
       
   573          * Mode-change-period exist in FMTP
       
   574          */
       
   575         TBool iModeChangePeriodExist;
       
   576         
       
   577         /**
       
   578          * Mode-change-neighbor exist in FMTP
       
   579          */
       
   580         TBool iModeChangeNeighborExist;
       
   581         
       
   582         /**
       
   583          * Max-red exist in FMTP
       
   584          */
       
   585         TBool iMaxRedExist;    
       
   586         
       
   587 private:
       
   588 
       
   589     #ifdef TEST_EUNIT
       
   590         friend class UT_CMccCodecAMR;
       
   591         friend class UT_CMccCodecAmrWb;
       
   592     #endif
       
   593       
       
   594     };
       
   595 
       
   596 
       
   597 #endif      // __MCC_CODEC_AMR_H__
       
   598 
       
   599 // End of File