# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1273585322 -10800 # Node ID 3570217d8c217238c15a78504a296926189237f6 # Parent f5c5c82a163e4385d6ff8f56fba3e3c99c91e427 Revision: 201017 Kit: 201019 diff -r f5c5c82a163e -r 3570217d8c21 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp --- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp Tue May 11 16:42:02 2010 +0300 @@ -841,17 +841,6 @@ // we need to block this until duration is calculated if using mmfplayutility iBlockDuration = EFalse; -// ou1cimx1#205863 - if (!iDataSourceAdapter->IsLocalPlayback()) - { - DP0(_L("CAdvancedAudioPlayController::AddDataSourceL not file source")); - if (iSharedBufferMaxNum <= 2) - { - iSharedBufferMaxNum = 3; - } - iSharedBufferMaxSize = iSharedBufferMaxSizeForNonSeekableSrc; - DP2(_L("CAdvancedAudioPlayController::AddDataSourceL new iSharedBufferMaxNum[%d] iSharedBufferMaxSize[%d]"), iSharedBufferMaxNum, iSharedBufferMaxSize); - } if ((!iEventsEnabled) && (!iDataSourceAdapter->OnlyHeaderPresent())) { @@ -997,11 +986,6 @@ { DP0(_L("CAdvancedAudioPlayController::RemoveDataSinkL")); - if (!iDataSink) - { - User::Leave(KErrNotReady); - } - if (iDataSink != &aDataSink) { User::Leave(KErrArgument); @@ -1011,9 +995,12 @@ { User::Leave(KErrNotReady); } - - iDataSink->SinkStopL(); // should always stop source before logoff - iDataSink->SinkThreadLogoff(); + + if (iDataSink) + { + iDataSink->SinkStopL(); // should always stop source before logoff + iDataSink->SinkThreadLogoff(); + } // dereference Decoder from Utility before deleting AudioOutput (which took ownership of decoder) if (iAudioUtility) @@ -1021,8 +1008,8 @@ iAudioUtility->DeReferenceDecoder(); } - delete iAudioOutput; - iAudioOutput = NULL; + delete iAudioOutput; + iAudioOutput = NULL; iDataSink = NULL; iDecoderExists = EFalse; } @@ -1036,7 +1023,12 @@ DP0(_L("CAdvancedAudioPlayController::ResetL")); RemoveDataSourceL(*iDataSource); - RemoveDataSinkL(*iDataSink); + + if (iDataSink) + { + DP0(_L("CAdvancedAudioPlayController::ResetL, calling RemoveDataSinkL")); + RemoveDataSinkL(*iDataSink); + } } // ----------------------------------------------------------------------------- diff -r f5c5c82a163e -r 3570217d8c21 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioControllerUtility/Src/MP3AudioControllerUtility.cpp --- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioControllerUtility/Src/MP3AudioControllerUtility.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioControllerUtility/Src/MP3AudioControllerUtility.cpp Tue May 11 16:42:02 2010 +0300 @@ -175,6 +175,8 @@ TInt frameBytes = 0; TInt avgFrameLen = 0; TInt frames = 0; + TInt scaling=0; + TInt round=0; // We could have used the bitrate found above for CBR MP3 content and not continue to average // the bitrate. However, some users can manipulated the file and append other bitrate content. // Since it is not too difficult, we can update the bitrate above with an averaged bitrate. @@ -203,6 +205,12 @@ frames++; } avgFrameLen = frameBytes / frames; // frames is always non-zero here + scaling = frameBytes*10/frames; + round = scaling%10; + if(round > 5) + { + ++avgFrameLen; + } } iBitRate = (avgFrameLen * 8 * iSamplingRate) / iSamplesPerFrame; } diff -r f5c5c82a163e -r 3570217d8c21 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/aacaudioplaycontroller/Src/AACAudioPlayControllerPlugin.cpp --- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/aacaudioplaycontroller/Src/AACAudioPlayControllerPlugin.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/aacaudioplaycontroller/Src/AACAudioPlayControllerPlugin.cpp Tue May 11 16:42:02 2010 +0300 @@ -111,6 +111,18 @@ void CAACAudioPlayControllerPlugin::DoAddDataSourceL() { DP0(_L("CAACAudioPlayControllerPlugin::DoAddDataSourceL")); + // ou1cimx1#205863 + if (iSourceType != KUidMmfFileSource) + { + DP0(_L("CAACAudioPlayControllerPlugin::DoAddDataSourceL not file source")); + if (iSharedBufferMaxNum <= 2) + { + iSharedBufferMaxNum = 3; + } + iSharedBufferMaxSize = iSharedBufferMaxSizeForNonSeekableSrc; + DP2(_L("CAACAudioPlayControllerPlugin::DoAddDataSourceL new iSharedBufferMaxNum[%d] iSharedBufferMaxSize[%d]"), iSharedBufferMaxNum, iSharedBufferMaxSize); + } + } // ----------------------------------------------------------------------------- diff -r f5c5c82a163e -r 3570217d8c21 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/amraudioplaycontroller/Src/AMRAudioPlayControllerPlugin.cpp --- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/amraudioplaycontroller/Src/AMRAudioPlayControllerPlugin.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/amraudioplaycontroller/Src/AMRAudioPlayControllerPlugin.cpp Tue May 11 16:42:02 2010 +0300 @@ -104,6 +104,18 @@ void CAMRAudioPlayControllerPlugin::DoAddDataSourceL() { DP0(_L("CAMRAudioPlayControllerPlugin::DoAddDataSourceL")); + // ou1cimx1#205863 + if (iSourceType != KUidMmfFileSource) + { + DP0(_L("CAMRAudioPlayControllerPlugin::DoAddDataSourceL not file source")); + if (iSharedBufferMaxNum <= 2) + { + iSharedBufferMaxNum = 3; + } + iSharedBufferMaxSize = iSharedBufferMaxSizeForNonSeekableSrc; + DP2(_L("CAMRAudioPlayControllerPlugin::DoAddDataSourceL new iSharedBufferMaxNum[%d] iSharedBufferMaxSize[%d]"), iSharedBufferMaxNum, iSharedBufferMaxSize); + } + } // ----------------------------------------------------------------------------- diff -r f5c5c82a163e -r 3570217d8c21 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/awbaudioplaycontroller/Src/AWBAudioPlayControllerPlugin.cpp --- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/awbaudioplaycontroller/Src/AWBAudioPlayControllerPlugin.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/awbaudioplaycontroller/Src/AWBAudioPlayControllerPlugin.cpp Tue May 11 16:42:02 2010 +0300 @@ -103,6 +103,18 @@ void CAWBAudioPlayControllerPlugin::DoAddDataSourceL() { DP0(_L("CAWBAudioPlayControllerPlugin::DoAddDataSourceL")); + // ou1cimx1#205863 + if (iSourceType != KUidMmfFileSource) + { + DP0(_L("CAWBAudioPlayControllerPlugin::DoAddDataSourceL not file source")); + if (iSharedBufferMaxNum <= 2) + { + iSharedBufferMaxNum = 3; + } + iSharedBufferMaxSize = iSharedBufferMaxSizeForNonSeekableSrc; + DP2(_L("CAWBAudioPlayControllerPlugin::DoAddDataSourceL new iSharedBufferMaxNum[%d] iSharedBufferMaxSize[%d]"), iSharedBufferMaxNum, iSharedBufferMaxSize); + } + } // ----------------------------------------------------------------------------- diff -r f5c5c82a163e -r 3570217d8c21 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/mp3audioplaycontroller/Src/MP3AudioPlayControllerPlugin.cpp --- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/mp3audioplaycontroller/Src/MP3AudioPlayControllerPlugin.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/mp3audioplaycontroller/Src/MP3AudioPlayControllerPlugin.cpp Tue May 11 16:42:02 2010 +0300 @@ -102,6 +102,18 @@ void CMP3AudioPlayControllerPlugin::DoAddDataSourceL() { DP0(_L("CMP3AudioPlayControllerPlugin::DoAddDataSourceL")); + // ou1cimx1#205863 + if (iSourceType != KUidMmfFileSource) + { + DP0(_L("CMP3AudioPlayControllerPlugin::DoAddDataSourceL not file source")); + if (iSharedBufferMaxNum <= 2) + { + iSharedBufferMaxNum = 3; + } + iSharedBufferMaxSize = iSharedBufferMaxSizeForNonSeekableSrc; + DP2(_L("CMP3AudioPlayControllerPlugin::DoAddDataSourceL new iSharedBufferMaxNum[%d] iSharedBufferMaxSize[%d]"), iSharedBufferMaxNum, iSharedBufferMaxSize); + } + } // ----------------------------------------------------------------------------- diff -r f5c5c82a163e -r 3570217d8c21 mmmw_plat/audio_metadata_reader_api/inc/MetaDataField.hrh --- a/mmmw_plat/audio_metadata_reader_api/inc/MetaDataField.hrh Tue Apr 27 17:11:02 2010 +0300 +++ b/mmmw_plat/audio_metadata_reader_api/inc/MetaDataField.hrh Tue May 11 16:42:02 2010 +0300 @@ -22,38 +22,40 @@ // DATA TYPES enum TMetaDataFieldId // Possible metadata fields - { - EUnknownMetaDataField = 0, + { + EUnknownMetaDataField = 0, - EMetaDataSongTitle = 1, - EMetaDataArtist, - EMetaDataAlbum, - EMetaDataYear, - EMetaDataComment, - EMetaDataAlbumTrack, - EMetaDataGenre, - EMetaDataComposer, - EMetaDataCopyright, - EMetaDataOriginalArtist, - EMetaDataUrl, - EMetaDataUserUrl, - EMetaDataJpeg, - EMetaDataVendor, - EMetaDataRating, - EMetaDataUniqueFileIdentifier, - EMetaDataDuration, - EMetaDataDate, - EMetaDataUnsyncLyrics - // More later... - }; + EMetaDataSongTitle = 1, + EMetaDataArtist, + EMetaDataAlbum, + EMetaDataYear, + EMetaDataComment, + EMetaDataAlbumTrack, + EMetaDataGenre, + EMetaDataComposer, + EMetaDataCopyright, + EMetaDataOriginalArtist, + EMetaDataUrl, + EMetaDataUserUrl, + EMetaDataJpeg, + EMetaDataVendor, + EMetaDataRating, + EMetaDataUniqueFileIdentifier, + EMetaDataDuration, + EMetaDataDate, + EMetaDataUnsyncLyrics, + EMetaDataProtected // get the Protected info, "0"=non protected, "1"=protected + + // More later... + }; // ENUM for ID3 Version enum TID3Version - { - ENonID3, - EID3Version1, - EID3Version2 - }; + { + ENonID3, + EID3Version1, + EID3Version2 + }; #endif // CMETADATAFIELD_HRH diff -r f5c5c82a163e -r 3570217d8c21 mmmw_plat/telephony_multimedia_service_api/inc/tmssource.h --- a/mmmw_plat/telephony_multimedia_service_api/inc/tmssource.h Tue Apr 27 17:11:02 2010 +0300 +++ b/mmmw_plat/telephony_multimedia_service_api/inc/tmssource.h Tue May 11 16:42:02 2010 +0300 @@ -48,22 +48,6 @@ virtual gint GetType(TMSSourceType& sourcetype) = 0; }; -/*class TMSDeviceMic:public TMSSource - { -public: - virtual gint GetType(TMSSourceType& sourcetype){return iSourceType}; -private: - TMSSourceType iSourceType; - };*/ - -/*class TMSModem:public TMSSource - { -public: - virtual gint GetType(TMSSourceType& sourcetype){return iSourceType}; -private: - TMSSourceType iSourceType; - };*/ - } //namespace TMS #endif //TMS_SOURCE_H diff -r f5c5c82a163e -r 3570217d8c21 mmmw_plat/telephony_multimedia_service_api/tsrc/Conf/TMSAudioServicesTestClass.cfg --- a/mmmw_plat/telephony_multimedia_service_api/tsrc/Conf/TMSAudioServicesTestClass.cfg Tue Apr 27 17:11:02 2010 +0300 +++ b/mmmw_plat/telephony_multimedia_service_api/tsrc/Conf/TMSAudioServicesTestClass.cfg Tue May 11 16:42:02 2010 +0300 @@ -700,12 +700,12 @@ Tms CreateDownlinkStream Tms CreateEffect 9 allownextresult TMS_RESULT_DOES_NOT_EXIST -Tms RemoveGlobleVolumeEffectToStream -Tms AddGlobleVolumeEffectToStream +Tms RemoveGlobalVolumeEffectToStream +Tms AddGlobalVolumeEffectToStream allownextresult TMS_RESULT_ALREADY_EXIST -Tms AddGlobleVolumeEffectToStream -Tms RemoveGlobleVolumeEffectToStream -Tms AddGlobleVolumeEffectToStream +Tms AddGlobalVolumeEffectToStream +Tms RemoveGlobalVolumeEffectToStream +Tms AddGlobalVolumeEffectToStream delete Tms [Endtest] @@ -717,12 +717,12 @@ Tms CreateUplinkStream Tms CreateEffect 10 allownextresult TMS_RESULT_DOES_NOT_EXIST -Tms RemoveGlobleGainEffectToStream -Tms AddGlobleGainEffectToStream +Tms RemoveGlobalGainEffectToStream +Tms AddGlobalGainEffectToStream allownextresult TMS_RESULT_ALREADY_EXIST -Tms AddGlobleGainEffectToStream -Tms RemoveGlobleGainEffectToStream -Tms AddGlobleGainEffectToStream +Tms AddGlobalGainEffectToStream +Tms RemoveGlobalGainEffectToStream +Tms AddGlobalGainEffectToStream delete Tms [Endtest] diff -r f5c5c82a163e -r 3570217d8c21 mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/inc/TMSAudioServicesTestClass.h --- a/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/inc/TMSAudioServicesTestClass.h Tue Apr 27 17:11:02 2010 +0300 +++ b/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/inc/TMSAudioServicesTestClass.h Tue May 11 16:42:02 2010 +0300 @@ -104,8 +104,7 @@ _LIT( KTagPrivate, "Private"); // MACROS -//#define ?macro ?macro_def -// Logging path + #ifdef __WINSCW__ _LIT( KTmsAudioServicesTestClassLogPath, "\\logs\\testframework\\" ); _LIT16(KTestFile1, "\\testing\\data\\alarm 1.aac"); @@ -332,6 +331,7 @@ TInt CreateUplinkStream(CStifItemParser& aItem); TInt GetUplinkVersion(CStifItemParser& aItem); TInt GetSupportedFormats(CStifItemParser& aItem); + TInt IsCallTypeSupported(CStifItemParser& aItem); TInt SetDownlinkFormat(CStifItemParser& aItem); TInt SetUplinkFormat(CStifItemParser& aItem); @@ -347,7 +347,6 @@ TInt Gain(CStifItemParser& aItem); TInt Volume(CStifItemParser& aItem); - TInt GetBufferType(CStifItemParser& aItem); // TInt GetSupportedBitrates( CStifItemParser& aItem ); @@ -369,6 +368,7 @@ void DisplayFormat(TMSFormatType aFormat); void GetSupportedBitrates(RArray& aBrArr); void DisplayDevice(TMSAudioOutput device); + TInt GetBufferType(CStifItemParser& aItem); TInt ConfigEncAudDevice(CStifItemParser& aItem); @@ -391,15 +391,15 @@ TInt RemoveSinkObserver(CStifItemParser& aItem); gint CreateVolumeEffect(); - gint CreateVolumeGlobleEffect(); + gint CreateVolumeGlobalEffect(); TInt AddVolumeEffectToStream(CStifItemParser& aItem); - TInt AddGlobleVolumeEffectToStream(CStifItemParser& aItem); - TInt RemoveGlobleVolumeEffectToStream(CStifItemParser& aItem); + TInt AddGlobalVolumeEffectToStream(CStifItemParser& aItem); + TInt RemoveGlobalVolumeEffectToStream(CStifItemParser& aItem); gint CreateGainEffect(); - gint CreateGlobleGainEffect(); + gint CreateGlobalGainEffect(); TInt AddGainEffectToStream(CStifItemParser& aItem); - TInt AddGlobleGainEffectToStream(CStifItemParser& aItem); - TInt RemoveGlobleGainEffectToStream(CStifItemParser& aItem); + TInt AddGlobalGainEffectToStream(CStifItemParser& aItem); + TInt RemoveGlobalGainEffectToStream(CStifItemParser& aItem); TInt GetStreamType(CStifItemParser& aItem); TInt GetStreamState(CStifItemParser& aItem); diff -r f5c5c82a163e -r 3570217d8c21 mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocks.cpp --- a/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocks.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocks.cpp Tue May 11 16:42:02 2010 +0300 @@ -148,8 +148,7 @@ // TInt CTmsAudioServicesTestClass::RunMethodL(CStifItemParser& aItem) { - static TStifFunctionInfo const - KFunctions[] = + static TStifFunctionInfo const KFunctions[] = { // Copy this line for every implemented function. // First string is the function name used in TestScripter script file. @@ -180,12 +179,12 @@ ENTRY( "OpenDownlink", CTmsAudioServicesTestClass::OpenDownlink ), ENTRY( "OpenUplink", CTmsAudioServicesTestClass::OpenUplink ), ENTRY( "Gain", CTmsAudioServicesTestClass::Gain ), - ENTRY( "AddGlobleGainEffectToStream", CTmsAudioServicesTestClass::AddGlobleGainEffectToStream), - ENTRY( "RemoveGlobleGainEffectToStream", CTmsAudioServicesTestClass::RemoveGlobleGainEffectToStream), + ENTRY( "AddGlobalGainEffectToStream", CTmsAudioServicesTestClass::AddGlobalGainEffectToStream), + ENTRY( "RemoveGlobalGainEffectToStream", CTmsAudioServicesTestClass::RemoveGlobalGainEffectToStream), ENTRY( "Volume", CTmsAudioServicesTestClass::Volume ), - ENTRY( "AddGlobleVolumeEffectToStream", CTmsAudioServicesTestClass::AddGlobleVolumeEffectToStream), - ENTRY( "RemoveGlobleVolumeEffectToStream", CTmsAudioServicesTestClass::RemoveGlobleVolumeEffectToStream), - ENTRY( "CreateGlobleGainEffect", CTmsAudioServicesTestClass::CreateGlobleGainEffect), + ENTRY( "AddGlobalVolumeEffectToStream", CTmsAudioServicesTestClass::AddGlobalVolumeEffectToStream), + ENTRY( "RemoveGlobalVolumeEffectToStream", CTmsAudioServicesTestClass::RemoveGlobalVolumeEffectToStream), + ENTRY( "CreateGlobalGainEffect", CTmsAudioServicesTestClass::CreateGlobalGainEffect), ENTRY( "Close", CTmsAudioServicesTestClass::Close ), ENTRY( "Start", CTmsAudioServicesTestClass::Start ), ENTRY( "Pause", CTmsAudioServicesTestClass::Pause ), @@ -675,8 +674,8 @@ break; case TMS_EFFECT_GLOBAL_VOL: { - error = CreateVolumeGlobleEffect(); - // AddGlobleVolumeEffectToStream(); + error = CreateVolumeGlobalEffect(); + // AddGlobalVolumeEffectToStream(); } break; case TMS_EFFECT_GAIN: @@ -687,8 +686,8 @@ break; case TMS_EFFECT_GLOBAL_GAIN: { - error = CreateGlobleGainEffect(); - // AddGlobleGainEffectToStream(); + error = CreateGlobalGainEffect(); + // AddGlobalGainEffectToStream(); } break; default: @@ -1034,7 +1033,8 @@ return error; } -TInt CTmsAudioServicesTestClass::CreateDownlinkStream(CStifItemParser& /*aItem*/) +TInt CTmsAudioServicesTestClass::CreateDownlinkStream( + CStifItemParser& /*aItem*/) { FTRACE(FPrint(_L("CTmsAudioServicesTestClass::CreateDownlinkStream"))); iLog->Log(_L("CTmsAudioServicesTestClass::CreateDownlinkStream")); @@ -1196,8 +1196,7 @@ if (error != KErrNone) { - iLog->Log(_L("CTmsAudioServicesTestClass::SetDownlinkFormat - failed, return error = %d" ), - error); + iLog->Log(_L("CTmsAudioServicesTestClass::SetDownlinkFormat - failed, return error = %d" ), error); return error; } } @@ -1221,8 +1220,7 @@ error = iTmsDnlink->ResetFormat(iTmsFormatDn); if (error != KErrNone) { - iLog->Log(_L("CTmsAudioServicesTestClass::ReSetDownlinkFormat - failed, return error = %d" ), - error); + iLog->Log(_L("CTmsAudioServicesTestClass::ReSetDownlinkFormat - failed, return error = %d" ), error); return error; } } @@ -1273,8 +1271,7 @@ { if (iTmsFormatUp) { - iLog->Log( - _L("CTmsAudioServicesTestClass::SetUplinkFormat - iTmsFormatUp")); + iLog->Log(_L("CTmsAudioServicesTestClass::SetUplinkFormat - iTmsFormatUp")); error = iTmsUplink->SetFormat(iTmsFormatUp); } else @@ -1285,8 +1282,7 @@ if (error != KErrNone) { - iLog->Log(_L("CTmsAudioServicesTestClass::SetUplinkFormat - failed, return error = %d" ), - error); + iLog->Log(_L("CTmsAudioServicesTestClass::SetUplinkFormat - failed, return error = %d" ), error); return error; } } @@ -1397,6 +1393,7 @@ iRecBufReady = EFalse; //iUpLinkCodec = ENULL; iTmsUplink->Deinit(); + iTmsUplink->RemoveObserver(*this); iUpLinkStatus = UNINITIALIZED; iLog->Log(_L("Close Uplink")); AddExpectedEvent(EUplinkClosed, KMediumTimeout); @@ -1405,6 +1402,7 @@ { //iPlayBufPtr.Set(NULL, 0, 0); iTmsDnlink->Deinit(); + iTmsDnlink->RemoveObserver(*this); iDnLinkStatus = UNINITIALIZED; iPlayBufReady = EFalse; // iDnLinkCodec = ENULL; @@ -1591,7 +1589,7 @@ if (effecttype == TMS_EFFECT_GAIN) { RDebug::Printf("[TMS STIF] GAIN, GetMaxLevel"); - ret = static_cast(iTmsUplinkEffect)->GetMaxLevel( + ret = static_cast (iTmsUplinkEffect)->GetMaxLevel( iMaxGain); RDebug::Printf("[TMS STIF] GAIN, GetMaxLevel Level [%d] Ret Err [%d]", iMaxGain, ret); RDebug::Printf("[TMS STIF] GAIN, SetLevel to [%d]", iMaxGain); @@ -1599,7 +1597,7 @@ RDebug::Printf("[TMS STIF] GAIN, SetLevel ret [%d]", ret); iLog->Log(_L("SetMaxGain: %d"), iMaxGain); RDebug::Printf("[TMS STIF] GAIN, GetLevel"); - ret = static_cast(iTmsUplinkEffect)->GetLevel(iGain); + ret = static_cast (iTmsUplinkEffect)->GetLevel(iGain); RDebug::Printf("[TMS STIF] GAIN, Exp Level [%d] Ret Level [%d] Ret Err [%d]", iMaxGain, iGain, ret); if (iGain != iMaxGain) { @@ -1607,9 +1605,9 @@ return KErrUnexpectedValue; } - static_cast(iTmsUplinkEffect)->SetLevel(0); + static_cast (iTmsUplinkEffect)->SetLevel(0); iLog->Log(_L("MuteMic")); - static_cast(iTmsUplinkEffect)->GetLevel(iGain); + static_cast (iTmsUplinkEffect)->GetLevel(iGain); if (iGain != 0) { @@ -1620,26 +1618,26 @@ else if (effecttype == TMS_EFFECT_GLOBAL_GAIN) { RDebug::Printf("[TMS STIF] GLOBAL GAIN, GetMaxLevel"); - ret = static_cast(iGlobalGain)->GetMaxLevel( + ret = static_cast (iGlobalGain)->GetMaxLevel( iMaxGain); RDebug::Printf("[TMS STIF] GLOBAL GAIN, GetMaxLevel Level [%d] Ret Err [%d]", iMaxGain, ret); RDebug::Printf("[TMS STIF] GLOBAL GAIN, SetLevel to [%d]", iMaxGain); - ret = static_cast(iGlobalGain)->SetLevel( + ret = static_cast (iGlobalGain)->SetLevel( iMaxGain); RDebug::Printf("[TMS STIF] GLOBAL GAIN, SetLevel ret [%d]", ret); - iLog->Log(_L("SetGlobleMaxGain: %d"), iMaxGain); + iLog->Log(_L("SetGlobalMaxGain: %d"), iMaxGain); RDebug::Printf("[TMS STIF] GLOBAL GAIN, GetLevel"); ret = static_cast(iGlobalGain)->GetLevel(iGain); RDebug::Printf("[TMS STIF] GLOBAL GAIN, Exp Level [%d] Ret Level [%d] Ret Err [%d]", iMaxGain, iGain, ret); if (iGain != iMaxGain) { - iLog->Log(_L("GetGain doesn't return expected Globle MaxGain!!! returned Gain = %d"), iGain); + iLog->Log(_L("GetGain doesn't return expected Global MaxGain!!! returned Gain = %d"), iGain); return KErrUnexpectedValue; } - static_cast(iGlobalGain)->SetLevel(0); + static_cast (iGlobalGain)->SetLevel(0); iLog->Log(_L("MuteMic")); - static_cast(iGlobalGain)->GetLevel(iGain); + static_cast (iGlobalGain)->GetLevel(iGain); if (iGain != 0) { @@ -1665,16 +1663,16 @@ if (effecttype == TMS_EFFECT_VOLUME) { RDebug::Printf("[TMS STIF] Volume, GetMaxLevel"); - ret = static_cast(iTmsDnlinkEffect)->GetMaxLevel( + ret = static_cast (iTmsDnlinkEffect)->GetMaxLevel( iMaxVolume); RDebug::Printf("[TMS STIF] MaxLevel [%d] Ret Error [%d]", iMaxVolume, ret); RDebug::Printf("[TMS STIF] Volume, SetLevel to MaxLevel [%d]", iMaxVolume); - ret = static_cast(iTmsDnlinkEffect)->SetLevel( + ret = static_cast (iTmsDnlinkEffect)->SetLevel( iMaxVolume); RDebug::Printf("[TMS STIF] SetLevel Ret Error [%d]", ret); iLog->Log(_L("SetMaxVolume: %d"), iMaxVolume); RDebug::Printf("[TMS STIF] GetLevel"); - ret = static_cast(iTmsDnlinkEffect)->GetLevel( + ret = static_cast (iTmsDnlinkEffect)->GetLevel( iVolume); RDebug::Printf("[TMS STIF] Level [%d] Ret Error [%d]", iVolume, ret); if (iVolume != iMaxVolume) @@ -1684,10 +1682,10 @@ } RDebug::Printf("[TMS STIF] Volume, SetLevel to 0 "); - ret = static_cast(iTmsDnlinkEffect)->SetLevel(0); + ret = static_cast (iTmsDnlinkEffect)->SetLevel(0); RDebug::Printf("[TMS STIF] SetLevel Ret Error [%d]", ret); iLog->Log(_L("Mute Volume")); - ret = static_cast(iTmsDnlinkEffect)->GetLevel( + ret = static_cast (iTmsDnlinkEffect)->GetLevel( iVolume); RDebug::Printf("[TMS STIF] Level [%d] Ret Error [%d]", iVolume, ret); if (iVolume != 0) @@ -1699,34 +1697,34 @@ else if (effecttype == TMS_EFFECT_GLOBAL_VOL) { RDebug::Printf("[TMS STIF] GLOBAL_VOL, Get Current Level"); - ret = static_cast(iGlobalVol)->GetLevel(iVolume); + ret = static_cast (iGlobalVol)->GetLevel(iVolume); RDebug::Printf("[TMS STIF] Current Vol Level [%d] Ret Error [%d]", iVolume, ret); RDebug::Printf("[TMS STIF] GLOBAL_VOL, GetMaxLevel"); - ret = static_cast(iGlobalVol)->GetMaxLevel( + ret = static_cast (iGlobalVol)->GetMaxLevel( iMaxVolume); RDebug::Printf("[TMS STIF] MaxLevel [%d] Ret Error [%d]", iMaxVolume, ret); RDebug::Printf("[TMS STIF] GLOBAL_VOL, SetLevel to [%d]", iMaxVolume); - ret = static_cast(iGlobalVol)->SetLevel( + ret = static_cast (iGlobalVol)->SetLevel( iMaxVolume); RDebug::Printf("[TMS STIF] SetLevel Ret Error [%d]", ret); - iLog->Log(_L("SetMaxGlobleVolume: %d"), iMaxVolume); + iLog->Log(_L("SetMaxGlobalVolume: %d"), iMaxVolume); RDebug::Printf("[TMS STIF] GLOBAL_VOL,GetLevel"); - ret = static_cast(iGlobalVol)->GetLevel(iVolume); + ret = static_cast (iGlobalVol)->GetLevel(iVolume); RDebug::Printf("[TMS STIF] Expected Level [%d] Ret Level [%d] Ret Error [%d]", iMaxVolume, iVolume, ret); - iLog->Log(_L("GetMaxGlobleVolume: %d"), iVolume); + iLog->Log(_L("GetMaxGlobalVolume: %d"), iVolume); if (iVolume != iMaxVolume) { - iLog->Log(_L("GetGlobleVolume doesn't return expected MaxVolume!!! returned Volume = %d"), iVolume); + iLog->Log(_L("GetGlobalVolume doesn't return expected MaxVolume!!! returned Volume = %d"), iVolume); return KErrUnexpectedValue; } - static_cast(iGlobalVol)->SetLevel(0); - iLog->Log(_L("Mute Globle Volume")); - static_cast(iGlobalVol)->GetLevel(iVolume); + static_cast (iGlobalVol)->SetLevel(0); + iLog->Log(_L("Mute Global Volume")); + static_cast (iGlobalVol)->GetLevel(iVolume); if (iVolume != 0) { - iLog->Log(_L("GetGlobleVolume does not return expected Mute value!!! returned Volume = %d"), iVolume); + iLog->Log(_L("GetGlobalVolume does not return expected Mute value!!! returned Volume = %d"), iVolume); return KErrUnexpectedValue; } } @@ -1808,7 +1806,8 @@ return error; } -TInt CTmsAudioServicesTestClass::AddGlobalRoutingObserver(CStifItemParser& /*aItem */) +TInt CTmsAudioServicesTestClass::AddGlobalRoutingObserver( + CStifItemParser& /*aItem */) { iLog->Log(_L("CTmsAudioServicesTestClass::AddGlobalRoutingObserver")); TInt error = KErrNone; @@ -1825,7 +1824,8 @@ return error; } -TInt CTmsAudioServicesTestClass::DeleteGlobalRoutingObserver(CStifItemParser& /*aItem*/) +TInt CTmsAudioServicesTestClass::DeleteGlobalRoutingObserver( + CStifItemParser& /*aItem*/) { iLog->Log(_L("CTmsAu dioServicesTestClass::DeleteGlobalRoutingObserver")); TInt error = KErrNone; @@ -1898,7 +1898,7 @@ return error; } - AddExpectedEvent(ESetOutputComplete, KLongTimeout); + AddExpectedEvent(ESetOutputComplete, KShortTimeout); } return error; @@ -2159,8 +2159,7 @@ { if (iBitratesVector.size() > 0) { - std::vector::iterator iBitrate = - iBitratesVector.begin(); + std::vector::iterator iBitrate = iBitratesVector.begin(); error = iTmsFormatUp -> SetBitRate(*iBitrate); iLog->Log(_L("BR set %d"), *iBitrate); } @@ -2241,13 +2240,16 @@ switch (iUpLinkCodec) { case TMS_FORMAT_G711: - error = static_cast(iTmsFormatUp)->GetVADMode(aVad); + error = static_cast (iTmsFormatUp)->GetVADMode( + aVad); break; case TMS_FORMAT_G729: - error = static_cast(iTmsFormatUp)->GetVADMode(aVad); + error = static_cast (iTmsFormatUp)->GetVADMode( + aVad); break; case TMS_FORMAT_ILBC: - error = static_cast(iTmsFormatUp)->GetVADMode(aVad); + error = static_cast (iTmsFormatUp)->GetVADMode( + aVad); break; default: break; @@ -2272,13 +2274,16 @@ switch (iUpLinkCodec) { case TMS_FORMAT_G711: - error = static_cast(iTmsFormatUp)->SetVADMode(iVad); + error = static_cast (iTmsFormatUp)->SetVADMode( + iVad); break; case TMS_FORMAT_G729: - error = static_cast(iTmsFormatUp)->SetVADMode(iVad); + error = static_cast (iTmsFormatUp)->SetVADMode( + iVad); break; case TMS_FORMAT_ILBC: - error = static_cast(iTmsFormatUp)->SetVADMode(iVad); + error = static_cast (iTmsFormatUp)->SetVADMode( + iVad); break; default: break; @@ -2298,7 +2303,7 @@ if ((linkType == KTagUplink) && (iUpLinkCodec == TMS_FORMAT_G711)) { TMSG711CodecMode aMode; - static_cast(iTmsFormatUp)->GetMode(aMode); + static_cast (iTmsFormatUp)->GetMode(aMode); if (aMode == TMS_G711_CODEC_MODE_ALAW) { @@ -2317,7 +2322,7 @@ && (iUpLinkCodec == TMS_FORMAT_ILBC)) { TMSILBCCodecMode aMode; - static_cast(iTmsFormatUp)->GetMode(aMode); + static_cast (iTmsFormatUp)->GetMode(aMode); if (aMode == TMS_ILBC_CODEC_MODE_20MS_FRAME) { @@ -2336,7 +2341,7 @@ && (iDnLinkCodec == TMS_FORMAT_G711)) { TMSG711CodecMode aMode; - static_cast(iTmsFormatDn)->GetMode(aMode); + static_cast (iTmsFormatDn)->GetMode(aMode); if (aMode == TMS_G711_CODEC_MODE_ALAW) { @@ -2355,7 +2360,7 @@ && (iDnLinkCodec == TMS_FORMAT_ILBC)) { TMSILBCCodecMode aMode; - static_cast(iTmsFormatDn)->GetMode(aMode); + static_cast (iTmsFormatDn)->GetMode(aMode); if (aMode == TMS_ILBC_CODEC_MODE_20MS_FRAME) { @@ -2398,56 +2403,56 @@ && (mode == KTagALaw)) { iLog->Log(_L("UPL Mode Set: aLaw")); - static_cast(iTmsFormatUp)->SetMode( + static_cast (iTmsFormatUp)->SetMode( TMS_G711_CODEC_MODE_ALAW); } else if ((linkType == KTagUplink) && (iUpLinkCodec == TMS_FORMAT_G711) && (mode == KTagULaw)) { iLog->Log(_L("UPL Mode Set: uLaw")); - static_cast(iTmsFormatUp)->SetMode( + static_cast (iTmsFormatUp)->SetMode( TMS_G711_CODEC_MODE_MULAW); } else if ((linkType == KTagUplink) && (iUpLinkCodec == TMS_FORMAT_ILBC) && (mode == KTag20ms)) { iLog->Log(_L("UPL Mode Set: 20ms frame")); - static_cast(iTmsFormatUp)->SetMode( + static_cast (iTmsFormatUp)->SetMode( TMS_ILBC_CODEC_MODE_20MS_FRAME); } else if ((linkType == KTagUplink) && (iUpLinkCodec == TMS_FORMAT_ILBC) && (mode == KTag30ms)) { iLog->Log(_L("UPL Mode Set: 30ms frame")); - static_cast(iTmsFormatUp)->SetMode( + static_cast (iTmsFormatUp)->SetMode( TMS_ILBC_CODEC_MODE_30MS_FRAME); } else if ((linkType == KTagDnlink) && (iDnLinkCodec == TMS_FORMAT_G711) && (mode == KTagALaw)) { iLog->Log(_L("DNL Mode Set: aLaw")); - static_cast(iTmsFormatDn)->SetMode( + static_cast (iTmsFormatDn)->SetMode( TMS_G711_CODEC_MODE_ALAW); } else if ((linkType == KTagDnlink) && (iDnLinkCodec == TMS_FORMAT_G711) && (mode == KTagULaw)) { iLog->Log(_L("DNL Mode Set: uLaw")); - static_cast(iTmsFormatDn)->SetMode( + static_cast (iTmsFormatDn)->SetMode( TMS_G711_CODEC_MODE_MULAW); } else if ((linkType == KTagDnlink) && (iDnLinkCodec == TMS_FORMAT_ILBC) && (mode == KTag20ms)) { iLog->Log(_L("DNL Mode Set: 20ms frame")); - static_cast(iTmsFormatDn)->SetMode( + static_cast (iTmsFormatDn)->SetMode( TMS_ILBC_CODEC_MODE_20MS_FRAME); } else if ((linkType == KTagDnlink) && (iDnLinkCodec == TMS_FORMAT_ILBC) && (mode == KTag30ms)) { iLog->Log(_L("DNL Mode Set: 30ms frame")); - static_cast(iTmsFormatDn)->SetMode( + static_cast (iTmsFormatDn)->SetMode( TMS_ILBC_CODEC_MODE_30MS_FRAME); } else @@ -2468,11 +2473,11 @@ switch (iDnLinkCodec) { case TMS_FORMAT_G711: - error = static_cast(iTmsFormatDn)->GetCNG(aCng); + error = static_cast (iTmsFormatDn)->GetCNG(aCng); iLog->Log(_L("CNG: %d"), aCng); break; case TMS_FORMAT_ILBC: - error = static_cast(iTmsFormatDn)->GetCNG(aCng); + error = static_cast (iTmsFormatDn)->GetCNG(aCng); iLog->Log(_L("CNG: %d"), aCng); break; default: @@ -2489,18 +2494,17 @@ TInt CTmsAudioServicesTestClass::ToggleCNG(CStifItemParser & /*aItem*/) { - iLog ->Log(_L("CTmsAudioServicesTestClass::ToggleCNG")); TInt error = KErrNone; iCng = (iCng) ? EFalse : ETrue; switch (iDnLinkCodec) { case TMS_FORMAT_G711: - static_cast(iTmsFormatDn)->SetCNG(iCng); + static_cast (iTmsFormatDn)->SetCNG(iCng); iLog->Log(_L("CNG set: %d"), iCng); break; case TMS_FORMAT_ILBC: - static_cast(iTmsFormatDn)->SetCNG(iCng); + static_cast (iTmsFormatDn)->SetCNG(iCng); iLog->Log(_L("CNG set: %d"), iCng); break; default: @@ -2516,7 +2520,7 @@ TBool aPlc = EFalse; if (iDnLinkCodec == TMS_FORMAT_G711) { - static_cast(iTmsFormatDn)->GetPlc(aPlc); + static_cast (iTmsFormatDn)->GetPlc(aPlc); iLog->Log(_L("PLC: %d"), aPlc); } @@ -2536,7 +2540,7 @@ iPlc = (iPlc) ? EFalse : ETrue; if (iDnLinkCodec == TMS_FORMAT_G711) { - error = static_cast(iTmsFormatDn)->SetPlc(iPlc); + error = static_cast (iTmsFormatDn)->SetPlc(iPlc); iLog->Log(_L("PLC set: %d"), iPlc); } @@ -2560,9 +2564,7 @@ { error = iTmsDnlink->AddSource(iTmsClientSource); } - iLog->Log( - _L("CTmsAudioServicesTestClass::AddClientSrcToDnlStream Error [%d]"), - error); + iLog->Log(_L("CTmsAudioServicesTestClass::AddClientSrcToDnlStream Error [%d]"), error); return error; } @@ -2640,7 +2642,7 @@ TInt error = KErrNone; if (iTmsClientSource) { - error = static_cast(iTmsClientSource)->AddObserver( + error = static_cast (iTmsClientSource)->AddObserver( *this, NULL); } return error; @@ -2653,8 +2655,7 @@ TInt error = KErrNone; if (iTmsClientSource) { - error = static_cast(iTmsClientSource)->RemoveObserver( - *this); + error = static_cast (iTmsClientSource)->RemoveObserver(*this); } return error; } @@ -2739,8 +2740,8 @@ TInt error = KErrNone; if (iTmsUplink && iTmsClientSink) { - error = static_cast(iTmsClientSink)->AddObserver(*this, - NULL); + error = static_cast (iTmsClientSink)->AddObserver( + *this, NULL); } return error; } @@ -2751,7 +2752,7 @@ TInt error = KErrNone; if (iTmsUplink && iTmsClientSink) { - error = static_cast(iTmsClientSink)->RemoveObserver( + error = static_cast (iTmsClientSink)->RemoveObserver( *this); } return error; @@ -2766,30 +2767,29 @@ status = iFactory->CreateEffect(TMS_EFFECT_VOLUME, iTmsDnlinkEffect); if (status == KErrNone) { - static_cast(iTmsDnlinkEffect)->AddObserver(*this, - NULL); + static_cast (iTmsDnlinkEffect)->AddObserver( + *this, NULL); } } RDebug::Printf("[TMS STIF] CreateVolumeEffect Return [%d]", status); return status; } -gint CTmsAudioServicesTestClass::CreateVolumeGlobleEffect() +gint CTmsAudioServicesTestClass::CreateVolumeGlobalEffect() { - iLog->Log(_L("CTmsAudioServicesTestClass::CreateVolumeGlobleEffect")); + iLog->Log(_L("CTmsAudioServicesTestClass::CreateVolumeGlobalEffect")); gint status(KErrNone); if (iFactory && !iGlobalVol) { status = iFactory->CreateEffect(TMS_EFFECT_GLOBAL_VOL, iGlobalVol); - if (status == KErrNone) { - static_cast(iGlobalVol)->AddObserver(*this, + static_cast (iGlobalVol)->AddObserver(*this, NULL); - iLog->Log(_L("CTmsAudioServicesTestClass::CreateVolumeGlobleEffect - AddObserver")); + iLog->Log(_L("CTmsAudioServicesTestClass::CreateVolumeGlobalEffect - AddObserver")); } } - RDebug::Printf("[TMS STIF] CreateVolumeGlobleEffect Return [%d]", status); + RDebug::Printf("[TMS STIF] CreateVolumeGlobalEffect Return [%d]", status); return status; } @@ -2805,10 +2805,10 @@ return error; } -TInt CTmsAudioServicesTestClass::AddGlobleVolumeEffectToStream( +TInt CTmsAudioServicesTestClass::AddGlobalVolumeEffectToStream( CStifItemParser& /*aItem*/) { - iLog->Log(_L("CTmsAudioServicesTestClass::AddGlobleVolumeEffectToStream")); + iLog->Log(_L("CTmsAudioServicesTestClass::AddGlobalVolumeEffectToStream")); TInt error = KErrNone; if (iTmsDnlink && iGlobalVol) { @@ -2817,10 +2817,10 @@ return error; } -TInt CTmsAudioServicesTestClass::RemoveGlobleVolumeEffectToStream( +TInt CTmsAudioServicesTestClass::RemoveGlobalVolumeEffectToStream( CStifItemParser& /*aItem*/) { - iLog->Log(_L("CTmsAudioServicesTestClass::RemoveGlobleVolumeEffectToStream")); + iLog->Log(_L("CTmsAudioServicesTestClass::RemoveGlobalVolumeEffectToStream")); TInt error = KErrNone; if (iTmsDnlink && iGlobalVol) { @@ -2839,28 +2839,28 @@ status = iFactory->CreateEffect(TMS_EFFECT_GAIN, iTmsUplinkEffect); if (status == KErrNone) { - static_cast(iTmsUplinkEffect)->AddObserver(*this, - NULL); + static_cast (iTmsUplinkEffect)->AddObserver( + *this, NULL); } } RDebug::Printf("[TMS STIF] CreateGainEffect Return [%d]", status); return status; } -gint CTmsAudioServicesTestClass::CreateGlobleGainEffect() +gint CTmsAudioServicesTestClass::CreateGlobalGainEffect() { - iLog->Log(_L("CTmsAudioServicesTestClass::CreateGlobleGainEffect")); + iLog->Log(_L("CTmsAudioServicesTestClass::CreateGlobalGainEffect")); gint status(KErrNone); if (iFactory && !iGlobalGain) { status = iFactory->CreateEffect(TMS_EFFECT_GLOBAL_GAIN, iGlobalGain); if (status == KErrNone) { - static_cast(iGlobalGain)->AddObserver(*this, - NULL); + static_cast (iGlobalGain)->AddObserver( + *this, NULL); } } - RDebug::Printf("[TMS STIF] CreateGlobleGainEffect Return [%d]", status); + RDebug::Printf("[TMS STIF] CreateGlobalGainEffect Return [%d]", status); return status; } @@ -2876,10 +2876,10 @@ return error; } -TInt CTmsAudioServicesTestClass::AddGlobleGainEffectToStream( +TInt CTmsAudioServicesTestClass::AddGlobalGainEffectToStream( CStifItemParser& /*aItem*/) { - iLog->Log(_L("CTmsAudioServicesTestClass::AddGlobleGainEffectToStream")); + iLog->Log(_L("CTmsAudioServicesTestClass::AddGlobalGainEffectToStream")); TInt error = KErrNone; if (iTmsUplink && iGlobalGain) { @@ -2888,10 +2888,10 @@ return error; } -TInt CTmsAudioServicesTestClass::RemoveGlobleGainEffectToStream( +TInt CTmsAudioServicesTestClass::RemoveGlobalGainEffectToStream( CStifItemParser& /*aItem*/) { - iLog->Log(_L("CTmsAudioServicesTestClass::RemoveGlobleGainEffectToStream")); + iLog->Log(_L("CTmsAudioServicesTestClass::RemoveGlobalGainEffectToStream")); TInt error = KErrNone; if (iTmsUplink && iGlobalGain) { @@ -2925,12 +2925,12 @@ Mem::Copy(desptr, srcptr, srcsize); - static_cast(iTmsClientSource)->BufferFilled( + static_cast (iTmsClientSource)->BufferFilled( *iPlayBuf); - static_cast(iTmsClientSink)->BufferProcessed(iRecBuf); + static_cast (iTmsClientSink)->BufferProcessed(iRecBuf); iPlayBufReady = EFalse; // buf filled, ready for FillBuffer - iRecBufReady = EFalse; // buf consumed, ready for EmptyBuffer + iRecBufReady = EFalse; // buf consumed, ready for EmptyBuffer } iLog->Log(_L("CTmsAudioServicesTestClass::DoLoopback END")); diff -r f5c5c82a163e -r 3570217d8c21 mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocksCallbacks.cpp --- a/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocksCallbacks.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocksCallbacks.cpp Tue May 11 16:42:02 2010 +0300 @@ -144,6 +144,7 @@ void CTmsAudioServicesTestClass::EffectsEvent(const TMSEffect& tmseffect, TMSSignalEvent /*event*/) { + iLog->Log(_L("[tms cb]CTmsAudioServicesTestClass::EffectsEvent")); TMSEffectType effecttype; const_cast(tmseffect).GetType(effecttype); switch (effecttype) diff -r f5c5c82a163e -r 3570217d8c21 mmserv/metadatautility/Src/MetaDataParser.cpp --- a/mmserv/metadatautility/Src/MetaDataParser.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/metadatautility/Src/MetaDataParser.cpp Tue May 11 16:42:02 2010 +0300 @@ -19,13 +19,16 @@ // INCLUDE FILES -#include "MetaDataParser.h" #include #include #include #include #include +#include "MetaDataParser.h" +#include "MetaDataSourceFile.h" +#include "MetaDataFieldContainer.h" + _LIT(KCharacterSetRscFile, "TopCharacterSet.rsc"); // ============================ MEMBER FUNCTIONS =============================== @@ -121,6 +124,10 @@ TInt CMetaDataParser::UnicodeBOM( const TDesC8& aUnicode ) { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParser::UnicodeBOM")); +#endif + TPtrC8 bomData( aUnicode.Left( 2 ) ); TBuf8<2> BEbom; // Big endian BOM @@ -162,6 +169,10 @@ // void CMetaDataParser::MapID3GenreToStringL(TInt aNum, TDes& aGenrePtr) { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParser::MapID3GenreToStringL")); +#endif + if(aNum < 0 || aNum > 125 && aNum != 199) { return; @@ -560,6 +571,10 @@ // void CMetaDataParser::MapID3GenreToStringL(TInt aNum, TDes8& aGenrePtr) { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParser::MapID3GenreToStringL")); +#endif + if(aNum < 0 || aNum > 125 && aNum != 199) { return; @@ -1242,4 +1257,46 @@ } return EFalse; } + + +// ----------------------------------------------------------------------------- +// CMetaDataParser::CommonParseL +// ----------------------------------------------------------------------------- +// +void CMetaDataParser::CommonParseL( + CMetaDataSourceFile* aSource, + const RArray& aWantedFields, + CMetaDataFieldContainer& aContainer ) + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParser::CommonParseL")); +#endif + + GetProtectedL(aSource, aContainer); + ParseL(aWantedFields, aContainer); + } + +// ----------------------------------------------------------------------------- +// CMetaDataParser::GetProtectedL +// ----------------------------------------------------------------------------- +// +void CMetaDataParser::GetProtectedL( CMetaDataSourceFile* aSource, + CMetaDataFieldContainer& aContainer ) + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParser::GetProtectedL")); +#endif + + TBool fileProtected = aSource->FileProtected(); + TBuf16<5> desc16; + desc16.AppendNum(fileProtected); + + aContainer.AppendL( EMetaDataProtected, desc16 ); + +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParser::GetProtectedL, Protected=%S "), &desc16); +#endif + + } + // End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/metadatautility/Src/MetaDataParser.h --- a/mmserv/metadatautility/Src/MetaDataParser.h Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/metadatautility/Src/MetaDataParser.h Tue May 11 16:42:02 2010 +0300 @@ -26,13 +26,14 @@ #include #include #include -#include "MetaDataID3v1Genre.h" #include #include +#include "MetaDataID3v1Genre.h" // FORWARD DECLARATION class CMetaDataFieldContainer; +class CMetaDataSourceFile; // CONSTANTS const TInt KUnicodeBOMNotFound = 0; @@ -97,7 +98,7 @@ * @since 3.0 * @return void */ - void MapID3GenreToStringL(TInt aNum, TDes& aGenrePtr); + void MapID3GenreToStringL( TInt aNum, TDes& aGenrePtr ); /** * Maps ID3v2 genre integer to string @@ -107,11 +108,33 @@ * @return void */ - void MapID3GenreToStringL(TInt aNum, TDes8& aGenrePtr); + void MapID3GenreToStringL( TInt aNum, TDes8& aGenrePtr ); void GenerateTopCharacterSetsL(); - void SelectCharacterSetsForLanguageL(TInt aLanguage); - void ReadCharacterSetResourceL(TInt aResourceId); - TBool IsInTopCharacterSet(TUint aCharacterSetId); + void SelectCharacterSetsForLanguageL( TInt aLanguage ); + void ReadCharacterSetResourceL( TInt aResourceId ); + TBool IsInTopCharacterSet( TUint aCharacterSetId ); + + /** + * Parses the common metadata, the metadata fields are + * inserted into the container. + * @since 9.2 + * @param aSource a Metadata source file. + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @param aContainer On return, metadata found in aSource is stored here + * @return void + */ + void CommonParseL( CMetaDataSourceFile* aSource, + const RArray& aWantedFields, + CMetaDataFieldContainer& aContainer ); + + /** + * Append DRM Protected data to the container. + * @param aSource a Metadata source file. + * @param aContainer On return, metadata ptotected data is stored here + * @return void + */ + void GetProtectedL( CMetaDataSourceFile* aSource, + CMetaDataFieldContainer& aContainer ); protected: @@ -121,8 +144,8 @@ * @param aDesc The original descriptor * @return Pointer to descriptor without whitespace */ - TPtrC8 StripTrailingZeroes( const TDesC8& aDesc, TInt encoding = 0); - TPtrC StripTrailingZeroes( const TDesC& aDesc); + TPtrC8 StripTrailingZeroes( const TDesC8& aDesc, TInt encoding = 0 ); + TPtrC StripTrailingZeroes( const TDesC& aDesc ); /** * Returns BOM indication in the provided unicode. diff -r f5c5c82a163e -r 3570217d8c21 mmserv/metadatautility/Src/MetaDataUtilityBody.cpp --- a/mmserv/metadatautility/Src/MetaDataUtilityBody.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/metadatautility/Src/MetaDataUtilityBody.cpp Tue May 11 16:42:02 2010 +0300 @@ -108,7 +108,7 @@ iParser = FindParserFileL(aFileName); if ( iParser ) { - iParser->ParseL(aWantedFields, *iContainer); + iParser->CommonParseL((CMetaDataSourceFile*)iSource, aWantedFields, *iContainer); } } @@ -130,7 +130,7 @@ iParser = FindParserFileL(aFile); if ( iParser ) { - iParser->ParseL(aWantedFields, *iContainer); + iParser->CommonParseL((CMetaDataSourceFile*)iSource, aWantedFields, *iContainer); } } @@ -152,7 +152,7 @@ iParser = FindParserDesL(aDes); if ( iParser ) { - iParser->ParseL(aWantedFields, *iContainer); + iParser->CommonParseL((CMetaDataSourceFile*)iSource, aWantedFields, *iContainer); } } @@ -467,10 +467,7 @@ { User::Leave(KErrAlreadyExists); } - - // iParser = FindParserFileL(aFileName); - - if(KErrNone == IsSupportedMimeType(aMimeType)) + if(KErrNone == IsSupportedMimeType(aMimeType)) { iParser = FindParserFileL(aFileName, aMimeType); } @@ -481,7 +478,7 @@ if ( iParser ) { - iParser->ParseL(aWantedFields, *iContainer); + iParser->CommonParseL((CMetaDataSourceFile*)iSource, aWantedFields, *iContainer); } } // ----------------------------------------------------------------------------- @@ -501,8 +498,6 @@ User::Leave(KErrAlreadyExists); } - //iParser = FindParserFileL(aFile); - if(KErrNone == IsSupportedMimeType(aMimeType)) { iParser = FindParserFileL(aFile, aMimeType); @@ -512,10 +507,9 @@ User::Leave(KErrNotSupported); } - //iParser = FindParserFileL(aFile); if ( iParser ) { - iParser->ParseL(aWantedFields, *iContainer); + iParser->CommonParseL((CMetaDataSourceFile*)iSource, aWantedFields, *iContainer); } } @@ -703,7 +697,7 @@ } if ( iParser ) { - iParser->ParseL(aWantedFields, *iContainer); + iParser->CommonParseL((CMetaDataSourceFile*)iSource, aWantedFields, *iContainer); } } diff -r f5c5c82a163e -r 3570217d8c21 mmserv/radioutility/radioserver/Server/Src/RadioServer.cpp --- a/mmserv/radioutility/radioserver/Server/Src/RadioServer.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/radioutility/radioserver/Server/Src/RadioServer.cpp Tue May 11 16:42:02 2010 +0300 @@ -491,6 +491,8 @@ { RADIO_RDEBUG_INT3(_L("[RADIO-SVR] TunerOnComplete(%d) State[%d] Trigger[%d]"), aError, iState, iTunerOnTrigger); TFourCC radioFourCC; + // TBool antennaStatus = iSettings->IsAntennaAttached(); + switch ( iTunerOnTrigger ) { case ETriggerTunerControl: @@ -559,10 +561,13 @@ if ( aError == KErrNone ) { iState = EStateTunerOn; - // AK - begin: to cause publishing (CPHU-73YTQW) - iSettings->SetAntennaStatus(EFalse, EFalse); - // - end - iSettings->SetAntennaStatus(ETrue); + if ( iSettings->IsAntennaAttached() ) + { + // AK - begin: to cause publishing (CPHU-73YTQW) + iSettings->SetAntennaStatus(EFalse, EFalse); + // - end + iSettings->SetAntennaStatus(ETrue); + } } // else // Unable to turn the tuner back on. It's possible that after TunerOn request @@ -594,6 +599,14 @@ default: break; } + + if ( iSettings->IsAntennaAttached() == EFalse ) + { + // antenna removed during TunerOn sequence, request TunerOff + // can not shutdown totally in TunerOffComplete thus set iState to EStateTunerOff + iState = EStateTunerOff; + iTunerControl->TunerOff(); + } } // ----------------------------------------------------------------------------- @@ -648,13 +661,14 @@ CompleteAsyncRequest(aError); } } + else if( aError == KRadioServErrDuplicateRequest ) + { + // tuner off and duplicate request going on, trace it out + RADIO_RDEBUG(_L("[RADIO-SVR] TunerOffComplete() - EStateTunerOff - KRadioServErrDuplicateRequest")); + } else { - if( aError == KRadioServErrDuplicateRequest ) - { - // tuner off and duplicate request going on, trace it out - RADIO_RDEBUG(_L("[RADIO-SVR] TunerOffComplete() - EStateTunerOff - KRadioServErrDuplicateRequest")); - } + RADIO_RDEBUG(_L("[RADIO-SVR] TunerOffComplete() - iState = EStateTunerOff;")); } break; default: diff -r f5c5c82a163e -r 3570217d8c21 mmserv/radioutility/radioserver/Server/Src/RadioServerShutdown.cpp --- a/mmserv/radioutility/radioserver/Server/Src/RadioServerShutdown.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/radioutility/radioserver/Server/Src/RadioServerShutdown.cpp Tue May 11 16:42:02 2010 +0300 @@ -86,14 +86,6 @@ } // ----------------------------------------------------------------------------- -// CRadioServerShutdown::DoCancel -// ----------------------------------------------------------------------------- -// -void CRadioServerShutdown::DoCancel() - { - } - -// ----------------------------------------------------------------------------- // CRadioServerShutdown::RunL // ----------------------------------------------------------------------------- // diff -r f5c5c82a163e -r 3570217d8c21 mmserv/radioutility/radioserver/Server/Src/RadioServerShutdown.h --- a/mmserv/radioutility/radioserver/Server/Src/RadioServerShutdown.h Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/radioutility/radioserver/Server/Src/RadioServerShutdown.h Tue May 11 16:42:02 2010 +0300 @@ -58,12 +58,6 @@ /** * From CTimer - * Cancel the shutdown timer. - */ - void DoCancel(); - - /** - * From CTimer * Timer has expired, stop the RadioServer. **/ void RunL(); diff -r f5c5c82a163e -r 3570217d8c21 mmserv/thumbnailengine/TneAPISrc/HXTneserver.cpp --- a/mmserv/thumbnailengine/TneAPISrc/HXTneserver.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/thumbnailengine/TneAPISrc/HXTneserver.cpp Tue May 11 16:42:02 2010 +0300 @@ -21,6 +21,8 @@ #include"HXTneclientservercommon.h" #include #include +#include // Sqrt +#include // abs static const TInt kDefaultStack = 0x4000; @@ -57,7 +59,7 @@ -const TInt KMaxPacketToDecode = 32; +const TInt KMaxPacketToDecode = 160; // Many clips begin with several seconds of logos / MPAA rating which need to be skipped //////////////Server/////////////// @@ -688,51 +690,126 @@ } } +/* Determines whether a frame contains sufficient data to be considered an useful frame. + * The logic scans a set of pixels to confirm: + * too bright or too dark pixels are not taken into account. Only mid brightness pixels will be considered + * if less than minSamples valid samples the frame is rejected. + * if the mode is more frequent than maxModePrct% the frame is rejected. This is useful to reject the MPAA rating or other simple logos + * if the contrast is too low (max - min) frame is rejected + * if the standard deviation is too low frame is rejected. + */ + TBool CTneSession::IsGoodFrame(TUint8* aYUVDataPtr) { - TInt i; + TInt ySize = iWidth*iHeight; + TUint8 * resetYUVPtr = aYUVDataPtr; + + // only these luminances are taken into account + TInt minSamples = 5; + TInt tooDark = 30; + TInt tooBright = 240; + + // Defines how much data we analyze from the image to analyze its validity + TInt pixelSkips = iHeight; // scans about 1 to 3 pixels per line depending on aspect ratio + + // average luminance profiling + TInt runningSum = 0; + TInt numberOfSamples = 0; + TInt averageValue = 0; + + // contrast profiling TInt minValue = 255; TInt maxValue = 0; + TInt minMaxDeltaThreshold = 20; + + // mode profiling + int mode = 0; + int modeSamples = 0; + int histogram[255] = {0}; + int maxModePrct = 69; + + // standard deviation profiling + TInt minStdDeviation = 5; + TUint32 residualsum = 0; + TReal stdDeviation = 0; + + // Exit value TBool goodFrame = ETrue; - TInt runningSum=0; - TInt averageValue=0; - TInt pixelSkips = 4; - TInt numberOfSamples=0; - TInt minMaxDeltaThreshold = 20; - TInt extremeRegionThreshold = 20; - TInt ySize = iWidth*iHeight; - - // gather image statistics - for(i=0, numberOfSamples=0; i maxValue) - maxValue = *aYUVDataPtr; - if(*aYUVDataPtr < minValue) - minValue = *aYUVDataPtr; + if ( (*aYUVDataPtr>tooDark) && (*aYUVDataPtr maxValue) + maxValue = *aYUVDataPtr; + if(*aYUVDataPtr < minValue) + minValue = *aYUVDataPtr; + histogram[*aYUVDataPtr]++; + numberOfSamples++; + } + } + + if (numberOfSamples < minSamples) + { + //FLOG(_L("CTneSession::IsGoodFrame too few good samples")); + goodFrame = EFalse; } - //VDASSERT(numberOfSamples,10); - if (numberOfSamples == 0) + else { - FLOG(_L("CTneSession::IsGoodFrame numberOfSamples is zero")); - } - else - { - averageValue = runningSum/numberOfSamples; - } + // Find the mode + for (i=0; i<255; i++) + { + if (histogram[i] > modeSamples) + { + modeSamples = histogram[i]; + mode = i; + } + } + // Add the mode and most immediate values, as compression may add artifacts that disperse its value + for (i = mode-2, modeSamples = 0; i < mode+3; i++) + { + modeSamples += histogram[i]; + } - // make decision based statistics - if((maxValue - minValue) < minMaxDeltaThreshold) - goodFrame = EFalse; - else - { - if(averageValue < (minValue + extremeRegionThreshold) || - averageValue > (maxValue - extremeRegionThreshold)) - goodFrame = EFalse; + if (modeSamples * 100 / numberOfSamples > maxModePrct) + { + //FLOG(_L("Mode (%d) in over %d%% of the image\n", mode, modeSamples * 100 / numberOfSamples); + goodFrame = false; + } + else + { + averageValue = runningSum / numberOfSamples; + // Rescan the frame now that we the average value is known + aYUVDataPtr = resetYUVPtr; + + + // Calculate the sum of residuals: (pixel - avgpixel)^2 + for(i=0; itooDark) && (*aYUVDataPtr -#include - -namespace TMS { - -// TMSCallAdpt class -class TMSCallAdpt - { -public: - static gint CreateCallL(gint callType, TMSCallAdpt*& callAdpt); - virtual ~TMSCallAdpt(); - virtual gint CreateStream(TMSCallType callType, - TMSStreamType strmType, gint& outStrmId) = 0; - virtual gint InitStreamL(TMSCallType callType, - TMSStreamType strmType, gint strmId, TMSFormatType frmtType, - const RMessage2& aMessage) = 0; - virtual gint StartStream(TMSCallType callType, - TMSStreamType strmType, gint strmId) = 0; - virtual gint PauseStream(TMSCallType callType, - TMSStreamType strmType, gint strmId) = 0; - virtual gint StopStream(TMSCallType callType, TMSStreamType strmType, - gint strmId) = 0; - virtual gint DeinitStream(TMSCallType callType, - TMSStreamType strmType, gint strmId) = 0; - virtual gint DeleteStream(TMSCallType callType, - TMSStreamType strmType, gint strmId) = 0; - virtual gint DataXferBufferEmptied(TMSCallType callType, - TMSStreamType strmType, gint strmId) = 0; - virtual gint DataXferBufferFilled(TMSCallType callType, - TMSStreamType strmType, gint strmId, guint datasize) = 0; - virtual gint GetDataXferBufferHndl(const TMSCallType callType, - const TMSStreamType strmType, const gint strmId, - const guint32 key, RChunk& chunk) = 0; - - virtual gint GetMaxVolume(guint& volume) = 0; - virtual gint SetVolume(const guint volume) = 0; - virtual gint GetVolume(guint& volume) = 0; - virtual gint GetMaxGain(guint& gain) = 0; - virtual gint SetGain(const guint gain) = 0; - virtual gint GetGain(guint& gain) = 0; - virtual gint GetGlobalMaxVolume(guint& volume) = 0; - virtual gint SetGlobalVolume(const guint volume) = 0; - virtual gint GetGlobalVolume(guint& volume) = 0; - virtual gint GetGlobalMaxGain(guint& gain) = 0; - virtual gint SetGlobalGain(const guint gain) = 0; - virtual gint GetGlobalGain(guint& gain) = 0; - - virtual gint GetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, gint& mode) = 0; - virtual gint SetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, const gint mode) = 0; - virtual gint GetSupportedBitRatesCount(guint& count) = 0; - virtual gint GetSupportedBitRates(CBufFlat*& brbuffer) = 0; - virtual gint GetBitRate(guint& bitrate) = 0; - virtual gint SetBitRate(const guint bitrate) = 0; - virtual gint GetVAD(const TMSFormatType fmttype, gboolean& vad) = 0; - virtual gint SetVAD(const TMSFormatType fmttype, const gboolean vad) = 0; - virtual gint GetCNG(const TMSFormatType fmttype, gboolean& cng) = 0; - virtual gint SetCNG(const TMSFormatType fmttype, const gboolean cng) = 0; - virtual gint GetPlc(const TMSFormatType fmttype, gboolean& plc) = 0; - virtual gint SetPlc(const TMSFormatType fmttype, const gboolean plc) = 0; - virtual gint SetOutput(TMSAudioOutput output) = 0; - virtual gint GetOutput(TMSAudioOutput& output) = 0; - virtual gint GetPreviousOutput(TMSAudioOutput& output) = 0; - virtual gint GetAvailableOutputsL(gint& count, - CBufFlat*& outputsbuffer) = 0; - -protected: - TMSCallAdpt(); - virtual gint PostConstruct(); - -protected: - gint iGlobalVol; - gint iGlobalGain; - }; - -} //namespace TMS - -#endif // CALLADPT_H - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/callcsadpt.h --- a/mmserv/tms/tmscallserver/inc/callcsadpt.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef CALLCSADPT_H -#define CALLCSADPT_H - -#include -#include -#include -#include "tmsclientserver.h" -#include "calladpt.h" -#include "mcspdevsoundobserver.h" - -namespace TMS { - -// FORWARD DECLARATIONS -class TMSCSUplink; -class TMSCSDownlink; -class TMSTarSettings; - -/* - * CallCSAdapt class - */ -class TMSCallCSAdpt : public TMSCallAdpt, - public TMSCSPDevSoundObserver, - public MTelephonyAudioRoutingObserver - { -public: - TMSCallCSAdpt(); - virtual ~TMSCallCSAdpt(); - virtual gint PostConstruct(); - - virtual gint CreateStream(TMSCallType callType, TMSStreamType strmType, - gint& outStrmId); - virtual gint InitStreamL(TMSCallType callType, TMSStreamType strmType, - gint strmId, TMSFormatType frmtType, const RMessage2& aMessage); - virtual gint StartStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint PauseStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint StopStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint DeinitStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint DeleteStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint DataXferBufferEmptied(TMSCallType callType, - TMSStreamType strmType, gint strmId); - virtual gint DataXferBufferFilled(TMSCallType callType, - TMSStreamType strmType, gint strmId, guint datasize); - virtual gint GetDataXferBufferHndl(const TMSCallType callType, - const TMSStreamType strmType, const gint strmId, - const guint32 key, RChunk& chunk); - virtual gint GetMaxVolume(guint& volume); - virtual gint SetVolume(const guint volume); - virtual gint GetVolume(guint& volume); - virtual gint GetMaxGain(guint& gain); - virtual gint SetGain(const guint gain); - virtual gint GetGain(guint& gain); - virtual gint GetGlobalMaxVolume(guint& volume); - virtual gint SetGlobalVolume(const guint volume); - virtual gint GetGlobalVolume(guint& volume); - virtual gint GetGlobalMaxGain(guint& gain); - virtual gint SetGlobalGain(const guint gain); - virtual gint GetGlobalGain(guint& gain); - - virtual gint GetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, gint& mode); - virtual gint SetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, const gint mode); - virtual gint GetSupportedBitRatesCount(guint& count); - virtual gint GetSupportedBitRates(CBufFlat*& brbuffer); - virtual gint GetBitRate(guint& bitrate); - virtual gint SetBitRate(const guint bitrate); - virtual gint GetVAD(const TMSFormatType fmttype, gboolean& vad); - virtual gint SetVAD(const TMSFormatType fmttype, const gboolean vad); - virtual gint GetCNG(const TMSFormatType fmttype, gboolean& cng); - virtual gint SetCNG(const TMSFormatType fmttype, const gboolean cng); - virtual gint GetPlc(const TMSFormatType fmttype, gboolean& plc); - virtual gint SetPlc(const TMSFormatType fmttype, const gboolean plc); - - virtual gint SetOutput(TMSAudioOutput output); - virtual gint GetOutput(TMSAudioOutput& output); - virtual gint GetPreviousOutput(TMSAudioOutput& output); - virtual gint GetAvailableOutputsL(gint& count, CBufFlat*& outputsbuffer); - - void NotifyClient(const gint strmId, const gint aCommand, - const gint aStatus = KErrNone, const gint64 aInt64 = TInt64(0)); - - //From TMSCSPDevSoundObserver - void DownlinkInitCompleted(TInt status); - void UplinkInitCompleted(TInt status); - void UplinkActivatedSuccessfully(); - void DownlinkActivatedSuccessfully(); - void UplinkActivationFailed(); - void DownlinkActivationFailed(); - -protected: - void AvailableOutputsChanged( - CTelephonyAudioRouting& aTelephonyAudioRouting); - void OutputChanged(CTelephonyAudioRouting& aTelephonyAudioRouting); - void SetOutputComplete(CTelephonyAudioRouting& aTelephonyAudioRouting, - gint aError); - void GetSupportedBitRatesL(CBufFlat*& brbuffer); - -private: - gint iNextStreamId; - - TMSCSUplink* iCSUplink; - TMSCSDownlink* iCSDownlink; - CTelephonyAudioRouting* iRouting; - TMSTarSettings* iTarSettings; - TMSStreamType iStrmtype; - - RMsgQueue iMsgQueueUp; - RMsgQueue iMsgQueueDn; - TmsMsgBuf iMsgBuffer; - - gboolean iUplinkInitialized; - gint iUplinkStreamId; - gboolean iDnlinkInitialized; - gint iDnlinkStreamId; - }; - -} //namespace TMS - -#endif // CALLCSADPT_H - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/callipadpt.h --- a/mmserv/tms/tmscallserver/inc/callipadpt.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef __CALLIPADAPT_H -#define __CALLIPADAPT_H - -// INCLUDES -#include -#include -#include "tmsclientserver.h" -#include "tmsshared.h" -#include "calladpt.h" - -namespace TMS { - -// FORWARD DECLARATIONS -class TMSIPDownlink; -class TMSIPUplink; - -// TMSCallIPAdpt class -class TMSCallIPAdpt : public TMSCallAdpt - { -public: - // Constractor - static TMSCallIPAdpt* NewL(); - - virtual ~TMSCallIPAdpt(); - virtual gint PostConstruct(); - - virtual gint CreateStream(TMSCallType callType, TMSStreamType strmType, - gint& outStrmId); - virtual gint InitStreamL(TMSCallType callType, TMSStreamType strmType, - gint strmId, TMSFormatType frmtType, const RMessage2& aMessage); - virtual gint StartStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint PauseStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint StopStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint DeinitStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint DeleteStream(TMSCallType callType, TMSStreamType strmType, - gint strmId); - virtual gint DataXferBufferEmptied(TMSCallType callType, - TMSStreamType strmType, gint strmId); - virtual gint DataXferBufferFilled(TMSCallType callType, - TMSStreamType strmType, gint strmId, guint datasize); - virtual gint GetDataXferBufferHndl(const TMSCallType callType, - const TMSStreamType strmType, const gint strmId, - const guint32 key, RChunk& chunk); - - virtual gint GetMaxVolume(guint& volume); - virtual gint SetVolume(const guint volume); - virtual gint GetVolume(guint& volume); - virtual gint GetMaxGain(guint& gain); - virtual gint SetGain(const guint gain); - virtual gint GetGain(guint& gain); - virtual gint GetGlobalMaxVolume(guint& volume); - virtual gint SetGlobalVolume(const guint volume); - virtual gint GetGlobalVolume(guint& volume); - virtual gint GetGlobalMaxGain(guint& gain); - virtual gint SetGlobalGain(const guint gain); - virtual gint GetGlobalGain(guint& gain); - - virtual gint GetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, gint& mode); - virtual gint SetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, const gint mode); - virtual gint GetSupportedBitRatesCount(guint& count); - virtual gint GetSupportedBitRates(CBufFlat*& brbuffer); - virtual gint GetBitRate(guint& bitrate); - virtual gint SetBitRate(const guint bitrate); - virtual gint GetVAD(const TMSFormatType fmttype, gboolean& vad); - virtual gint SetVAD(const TMSFormatType fmttype, const gboolean vad); - virtual gint GetCNG(const TMSFormatType fmttype, gboolean& cng); - virtual gint SetCNG(const TMSFormatType fmttype, const gboolean cng); - virtual gint GetPlc(const TMSFormatType fmttype, gboolean& plc); - virtual gint SetPlc(const TMSFormatType fmttype, const gboolean plc); - - virtual gint SetOutput(TMSAudioOutput output); - virtual gint GetOutput(TMSAudioOutput& output); - virtual gint GetPreviousOutput(TMSAudioOutput& output); - virtual gint GetAvailableOutputsL(TInt& count, CBufFlat*& outputsbuffer); - - gint SetIlbcCodecMode(const gint mode, const TMSStreamType strmtype); - gint GetIlbcCodecMode(gint& mode, const TMSStreamType strmtype); - gint SetG711CodecMode(const gint mode, const TMSStreamType strmtype); - gint GetG711CodecMode(gint& mode, const TMSStreamType strmtype); - gint FrameModeRqrdForEC(gboolean& frmodereq); - gint SetFrameMode(const gboolean frmode); - gint GetFrameMode(gboolean& frmode); - gint ConcealErrorForNextBuffer(); - gint BadLsfNextBuffer(); - - gint OpenDownlinkL(const RMessage2& aMessage); - gint OpenUplinkL(const RMessage2& aMessage); - void SetFormat(const gint strmId, const TUint32 aFormat); - - void BufferFilledL(TUint dataSize); - void BufferEmptiedL(); - gint GetDataXferChunkHndl(const TMSStreamType strmType, - const TUint32 key, RChunk& chunk); - -private: - void ConstructL(); - TMSCallIPAdpt(); - - void NotifyClient(const gint strmId, const TInt aCommand, - const TInt aStatus = KErrNone, const TInt64 aInt64 = TInt64(0)); - //void DetermineG711FrameRateL(); //G711 10/20ms - void GetSupportedBitRatesL(CBufFlat*& brbuffer); - -private: - gint iNextStreamId; - gboolean iUplinkInitialized; - gint iUplinkStreamId; - gboolean iDnlinkInitialized; - gint iDnlinkStreamId; - - TMSIPDownlink* iIPDownlink; - TMSIPUplink* iIPUplink; - - // Message queues for communication and data transfer back to the client - RMsgQueue iMsgQueueUp; - RMsgQueue iMsgQueueDn; - - TmsMsgBuf iMsgBuffer; - TMMFPrioritySettings iPriority; - TUint32 iUpFourCC; - TUint32 iDnFourCC; - TInt iMaxVolume; - TInt iMaxGain; - RArray iArrBitrates; - RArray iCodecs; - TInt iCodecsCount; - - }; - -} //namespace TMS - -#endif //__CALLIPADAPT_H - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/csdownlink.h --- a/mmserv/tms/tmscallserver/inc/csdownlink.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef CSDownlink_H -#define CSDownlink_H - -#include -#include "cspdevsound.h" - -namespace TMS { - -// -class TMSCSPDevSoundObserver; - -/** - * Provides Downlink functionality. - * - */ -NONSHARABLE_CLASS(TMSCSDownlink) : public TMSCSPDevSound - { -public: - - static TMSCSDownlink* NewL(TMSCSPDevSoundObserver& aObserver); - - virtual ~TMSCSDownlink(); - - /** - * Sets volume. - * @param aVolume Volume. - */ - void SetVolume(gint aVolume); - - /** - * Gets volume. - * @return Current volume. - */ - gint Volume(); - - /** - * Gets max volume. - * @return Current volume. - */ - gint MaxVolume(); - - // from base class MDevSoundObserver - - /** - * From MDevSoundObserver. - * Indication from devsound that stream (Downlink) has been activated - * successfully. - */ - void BufferToBeFilled(CMMFBuffer* /*aBuffer*/); - - /** - * From MDevSoundObserver. - * Indication from devsound that activation of stream( Downlink) - * failed. - */ - void PlayError(TInt aErrorCode); - -private: - - /** - * From CSPDevSound. - * Tries to activate the mic stream. - */ - void DoActivateL(); - -protected: - - TMSCSDownlink(TMSCSPDevSoundObserver& aObserver); - - void ConstructL(); - }; - -} //namespace TMS - -#endif // CSDownlink_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/cspdevsound.h --- a/mmserv/tms/tmscallserver/inc/cspdevsound.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef CSPDEVSOUND_H -#define CSPDEVSOUND_H - -#include - -namespace TMS { - -class TMSCSPDevSoundObserver; - -/** - * Wrapper for CMMFDevSound - * - */ -NONSHARABLE_CLASS(TMSCSPDevSound) : public CBase, - public MDevSoundObserver - { -public: - - /** - * Destructor. - */ - virtual ~TMSCSPDevSound(); - - /** - * Activates the dev sound stream. TMSCSPDevSoundObserver methods are called - * when activation goes ok or fails. If the stream is already active or - * activating then nothing is done. - */ - virtual void Activate(); - - /** - * Deactivates the devsound stream. If stream is not active or - * activation is not ongoing then nothing is done. - */ - virtual void Deactivate(); - - /** - * Indicates that activation is ongoing, - * but the result of the activation is still unknown. - * @return ETrue - activation ongoing, EFalse - activation not ongoing. - */ - TBool IsActivationOngoing() const; - - /** - * Determines wether the devsound stream is active or not. - * @return ETrue - Stream is active, EFalse - Stream not active. - */ - TBool IsActive() const; - - CMMFDevSound& DevSound(); - - // from base class MDevSoundObserver - - /** - * From MDevSoundObserver - * Empty implementation - */ - void InitializeComplete(TInt aError); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void BufferToBeFilled(CMMFBuffer* aBuffer); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void PlayError(TInt aError); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void ToneFinished(TInt aError); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void BufferToBeEmptied(CMMFBuffer* aBuffer); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void RecordError(TInt aError); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void ConvertError(TInt aError); - - /** - * From MDevSoundObserver - * Empty implementation - */ - void DeviceMessage(TUid aMessageType, const TDesC8& aMsg); - -protected: - - TMSCSPDevSound(TMSCSPDevSoundObserver& aObserver); - - void ConstructL(TMMFState aMode, gint aAudioPreference, - gint aAudioPriority); - -private: - - /** - * Derived class has to activate the stream here. - */ - virtual void DoActivateL() = 0; - -protected: - - TUint iStreamType; - - /** - * Indication if device is activated. Derived class has to update this. - */ - TBool iActive; - - /** - * Indication if activation is ongoing. - * Derived class has to update this. - */ - TBool iActivationOngoing; - - /** - * Devsound instance - * Own. - */ - CMMFDevSound* iDevSound; - - /** - * Observer for successfull activation. - * Not own. - */ - TMSCSPDevSoundObserver& iObserver; - - }; - -} //namespace TMS - -#endif // CSPDEVSOUND_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/csuplink.h --- a/mmserv/tms/tmscallserver/inc/csuplink.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef CS_UPLINK_H -#define CS_UPLINK_H - -#include -#include "cspdevsound.h" - -namespace TMS { - -/** - * Provides uplink functionality. - * - */ -NONSHARABLE_CLASS(TMSCSUplink) : public TMSCSPDevSound - { -public: - - static TMSCSUplink* NewL(TMSCSPDevSoundObserver& aObserver); - - virtual ~TMSCSUplink(); - - /** - * Determines mic mute state. - * - * @return ETrue - mic is muted, EFalse - mic is not muted. - */ - TBool IsMuted(); - - /** - * Set mic muted. - */ - void SetMuted(); - - /** - * Set mic unmuted. - */ - void SetUnmuted(); - - /** - * Set mic gain. - */ - void SetGain(gint aGain); - - /** - * Get mic muted. - */ - gint Gain(); - - /** - * Get max gain. - */ - gint MaxGain(); - - // from base class MDevSoundObserver - - /** - * From MDevSoundObserver - * Notification from Devsound that stream (mic) is - * activated successfully. - */ - void BufferToBeEmptied(CMMFBuffer* aBuffer); - - /** - * From MDevSoundObserver - * Notification from devsound that downstream(mic) activation - * feiled. - */ - void RecordError(TInt aError); - -private: - - // from base class MCSPDevSound - - /** - * From MCSPDevSound. - * Tries to activate the mic stream. - */ - void DoActivateL(); - -protected: - - TMSCSUplink(TMSCSPDevSoundObserver& aObserver); - void ConstructL(); - }; - -} //namespace TMS - -#endif // CSUplink_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/delaytimer.h --- a/mmserv/tms/tmscallserver/inc/delaytimer.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef DELAYTIMER_H -#define DELAYTIMER_H - -#include - -namespace TMS { - -/** - * A Timer utility class used by the Server for shutdown purpose. - */ -class TMSCallDelayTimer : public CActive - { -public: - // Construct/destruct - static TMSCallDelayTimer* NewL(); - ~TMSCallDelayTimer(); - -public: - // Request a timeout after aDelay - void SetDelay(TTimeIntervalMicroSeconds32 aDelay); - -protected: - // From CActive - void RunL(); - void DoCancel(); - -private: - // Construct/destruct - TMSCallDelayTimer(); - void ConstructL(); - -private: - RTimer iShutDownTimer; // Has - }; - -} //namespace TMS - -#endif //DELAYTIMER_H - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/ipcallstream.h --- a/mmserv/tms/tmscallserver/inc/ipcallstream.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,312 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef __IPCALLSTREAM_H -#define __IPCALLSTREAM_H - -//#define __PLAY_WAV_FROM_FILE__ - -#include -#include -#include -#include "tmsgstreamer.h" -#include "tmsshared.h" -#include "tmsclientserver.h" - -#ifdef __USE_GSTREAMER__ -#include -#include "gstg711encoderinterface.h" -#include "gstspeechencoderconfig.h" -#include "gsterrorconcealmentinterface.h" -#include "gstg711decoderinterface.h" -#include "gstilbcdecoderinterface.h" -#include "gstilbcencoderinterface.h" -#include "gstg729encoderinterface.h" -#include "gstg729decoderinterface.h" -#else //__USE_GSTREAMER__ -#include -#include -#include - -// FORWARD DECLARATIONS -class CAudioOutput; -class CErrorConcealmentIntfc; -class CSpeechEncoderConfig; -class CG711DecoderIntfc; -class CG729DecoderIntfc; -class CIlbcDecoderIntfc; -class CG711EncoderIntfc; -class CG729EncoderIntfc; -class CIlbcEncoderIntfc; -#endif //__USE_GSTREAMER__ - -namespace TMS { - -// ----------------------------------------------------------------------------- -// Class Name: TMSIPCallStreamBase -// -// Base abstract class for creating VoIP uplink and downlink streams. -// ----------------------------------------------------------------------------- -class TMSIPCallStreamBase : public CBase -#ifndef __USE_GSTREAMER__ - , public MDevSoundObserver -#endif //__USE_GSTREAMER__ - { -public: - enum TStreamState - { - ENotReady, // not initialized - EReady, // initialized and ready for streaming - EStreaming - // active streaming - }; - -public: - virtual ~TMSIPCallStreamBase(); - - virtual void Start() = 0; - virtual void Stop() = 0; - virtual gint SetCodecCi() = 0; - -#ifndef __USE_GSTREAMER__ - void InitDevSoundL(const TMMFState aDevSoundState, - const TMMFPrioritySettings priority); -#endif //__USE_GSTREAMER__ - void SetMsgQueue(const RMsgQueue aMsgQueue); - gint DoChunk(const gint aDataLen, TmsMsgBuf& aMsgBuffer); - gint ConfigureMedia(const guint32 aCodecID); - -protected: -#ifndef __USE_GSTREAMER__ - // From MDevSoundObserver - virtual void InitializeComplete(TInt aError) = 0; - virtual void BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) {} - virtual void RecordError(TInt /*aError*/) {} - virtual void BufferToBeFilled(CMMFBuffer* /*aBuffer*/) {} - virtual void PlayError(TInt /*aError*/) {} - virtual void ToneFinished(TInt /*aError*/) {} - virtual void ConvertError(TInt /*aError*/) {} - virtual void DeviceMessage(TUid /*aMessageType*/, const TDesC8& /*aMsg*/) {} - virtual void SendEventToClient(const TMMFEvent& /*aEvent*/) {} -#endif //__USE_GSTREAMER__ - -protected: - - CActiveScheduler* iActiveScheduler; - TStreamState iStatus; - -#ifndef __USE_GSTREAMER__ - CMMFDevSound* iDevSound; - CMMFDataBuffer* iDevSoundBufPtr; -#endif //__USE_GSTREAMER__ - - RMsgQueue iMsgQueue; // ITC back to client - TmsMsgBuf iMsgBuffer; - RChunk iChunk; - gint iMaxBufLen; - guint32 iCodecID; - TMMFPrioritySettings iPriority; - const gchar* iMediaType; - - gint iG711DecodeMode; - gint iILBCDecodeMode; - gint iG711EncodeMode; - gint iILBCEncodeMode; - gint iBufLen; - TBool iWriteDataXferHndlToClient; - TUint32 iKey; - }; - -// ----------------------------------------------------------------------------- -// Class Name: TMSIPDownlink -// -// Class handling VoIP downlink stream object. -// ----------------------------------------------------------------------------- -class TMSIPDownlink : public TMSIPCallStreamBase - { -public: - virtual ~TMSIPDownlink(); - -#ifdef __USE_GSTREAMER__ - static void cb_raw_playback_handoff(GstElement* appsrc, guint size); - static gboolean bus_call(GstBus* bus, GstMessage* msg, gpointer data); -#endif //__USE_GSTREAMER__ - static TMSIPDownlink* NewL(const guint32 codecID, - const TMMFPrioritySettings priority); - TMSIPDownlink(); - void ConstructL(const guint32 codecID, - const TMMFPrioritySettings priority); - - gint SetCodecCi(); - void Start(); - void Stop(); - void BufferFilled(const guint buflen); - gint SetVolume(const guint volume); - gint GetVolume(guint& volume); - gint GetMaxVolume(guint& volume); - gint GetDataXferChunkHndl(const TUint32 key, RChunk& chunk); - - // For CIs - gint SetIlbcCodecMode(const gint mode); - gint GetIlbcCodecMode(gint& mode); - gint SetG711CodecMode(const gint mode); - gint GetG711CodecMode(gint& mode); - gint FrameModeRqrdForEC(gboolean& frmodereq); - gint SetFrameMode(gboolean frmode); - gint GetFrameMode(gboolean& frmode); - gint ConcealErrorForNextBuffer(); - gint SetCng(const TMSFormatType fmttype, const gboolean cng); - gint GetCng(const TMSFormatType fmttype, gboolean& cng); - gint SetPlc(const TMSFormatType fmttype, const gboolean plc); - gint GetPlc(const TMSFormatType fmttype, gboolean& plc); - gint BadLsfNextBuffer(); - - void SetAudioDeviceL(TMSAudioOutput output); - void GetAudioDeviceL(TMSAudioOutput& output); - -private: - void SetCodecCiL(); - -#ifdef __USE_GSTREAMER__ - void BufferToBeFilled(); - gint gst_play_raw(); - gint gst_initialize_play(); -#else //__USE_GSTREAMER__ - // From MDevSoundObserver - virtual void BufferToBeFilled(CMMFBuffer* aBuffer); - virtual void InitializeComplete(TInt aError); - virtual void PlayError(TInt aError); -#endif //__USE_GSTREAMER__ - -private: - - gboolean iFrameMode; - gboolean iPlc; - gint iMaxVolume; - -#ifndef __USE_GSTREAMER__ - CAudioOutput* iAudioOutput; - CErrorConcealmentIntfc* iErrConcealmentIntfc; - CG711DecoderIntfc* iG711DecoderIntfc; - CG729DecoderIntfc* iG729DecoderIntfc; - CIlbcDecoderIntfc* iIlbcDecoderIntfc; -#else //__USE_GSTREAMER__ - GstErrorConcealmentIntfc* iErrConcealmentIntfc; - GstG711DecoderIntfc* iG711DecoderIntfc; - GstG729DecoderIntfc* iG729DecoderIntfc; - GstIlbcDecoderIntfc* iIlbcDecoderIntfc; - GstElement* iPipelinePlay; - GstElement* iAppSrc; - GstElement* iSink; - GstBus* iBusPlay; -#endif //__USE_GSTREAMER__ -#ifdef _DEBUG - gint iSamplesPlayedCount; -#endif - -#ifdef __PLAY_WAV_FROM_FILE__ - RFile iFile; - gint fsize; - gint iReadSize; - gint iReadBytes; - RFs iFs; - HBufC8* fbuf; -#endif - }; - -// ----------------------------------------------------------------------------- -// Class Name: TMSIPUplink -// -// Class handling VoIP uplink stream. -// ----------------------------------------------------------------------------- -class TMSIPUplink : public TMSIPCallStreamBase - { -public: - virtual ~TMSIPUplink(); - -#ifdef __USE_GSTREAMER__ - static void cb_record_raw_handoff(GstElement *sink); - static gboolean bus_call(GstBus* bus, GstMessage* msg, gpointer data); -#endif //__USE_GSTREAMER__ - static TMSIPUplink* NewL(const guint32 codecID, - const TMMFPrioritySettings priority); - TMSIPUplink(); - void ConstructL(const guint32 codecID, - const TMMFPrioritySettings priority); - - gint SetCodecCi(); - void Start(); - void Stop(); - void BufferEmptied(); - gint SetGain(const guint gain); - gint GetGain(guint& gain); - gint GetMaxGain(guint& gain); - gint GetDataXferChunkHndl(const TUint32 key, RChunk& chunk); - - // For CIs - gint SetIlbcCodecMode(const gint mode); - gint GetIlbcCodecMode(gint& mode); - gint SetG711CodecMode(const gint mode); - gint GetG711CodecMode(gint& mode); - gint GetSupportedBitrates(RArray& bitrates); - gint SetBitrate(guint bitrate); - gint GetBitrate(guint& bitrate); - gint SetVad(const TMSFormatType fmttype, const gboolean vad); - gint GetVad(const TMSFormatType fmttype, gboolean& vad); - -private: - void SetCodecCiL(); - -#ifdef __USE_GSTREAMER__ - void BufferToBeEmptied(); - gint gst_record_raw(); - gint gst_initialize_record(); -#else //__USE_GSTREAMER__ - // From MDevSoundObserver - virtual void BufferToBeEmptied(CMMFBuffer* aBuffer); - virtual void InitializeComplete(TInt aError); - virtual void RecordError(TInt /*aError*/); -#endif //__USE_GSTREAMER__ - -private: - gint iMaxGain; - -#ifndef __USE_GSTREAMER__ - CSpeechEncoderConfig* iSpeechEncoderConfig; - CG711EncoderIntfc* iG711EncoderIntfc; - CG729EncoderIntfc* iG729EncoderIntfc; - CIlbcEncoderIntfc* iIlbcEncoderIntfc; -#else //__USE_GSTREAMER__ - GstSpeechEncoderConfigIntfc* iSpeechEncoderConfig; - GstG711EncoderIntfc* iG711EncoderIntfc; - GstG729EncoderIntfc* iG729EncoderIntfc; - GstIlbcEncoderIntfc* iIlbcEncoderIntfc; - GstElement* iPipelineRec; - GstElement* iSource; - GstElement* iAppSink; - GstBus* iBusRec; -#endif //__USE_GSTREAMER__ -#ifdef _DEBUG - gint iSamplesRecCount; -#endif - }; - -} //namespace TMS - -#endif //__IPCALLSTREAM_H - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/mcspdevsoundobserver.h --- a/mmserv/tms/tmscallserver/inc/mcspdevsoundobserver.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef MCSPDEVSOUNDOBSERVER_H -#define MCSPDEVSOUNDOBSERVER_H - -namespace TMS { - -/** - * Observer interface for knowing when audio streams have been - * successfully ramped up. - * - */ -class TMSCSPDevSoundObserver - { -public: - virtual void DownlinkInitCompleted(TInt x) = 0; - virtual void UplinkInitCompleted(TInt x) = 0; - - /** - * Notification that Mic has been activated successfully - * - */ - virtual void UplinkActivatedSuccessfully() = 0; - - /** - * Notification that speaker has been activated successfully - * - */ - virtual void DownlinkActivatedSuccessfully() = 0; - - /** - * Notification that Mic initialisation failed. - * - */ - virtual void UplinkActivationFailed() = 0; - - /** - * Notification that Speaker activation failed. - * - */ - virtual void DownlinkActivationFailed() = 0; - }; - -} //namespace TMS - -#endif // MCSPDEVSOUNDOBSERVER_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tarsettings.h --- a/mmserv/tms/tmscallserver/inc/tarsettings.h Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#ifndef TARSETTINGS_H -#define TARSETTINGS_H - -// INCLUDES -#include -#include -#include -#include "tmsclientserver.h" - -namespace TMS { - -// CLASS DECLARATION -class TMSTarSettings - { -public: - // Constructors and destructor - - /** - * Two-phased constructor. - */ - static TMSTarSettings* NewL(); - - /** - * Destructor. - */ - virtual ~TMSTarSettings(); - -public: - // New functions - - void SetTar(TRoutingMsgBufPckg rountingpckg, TBool aPublish = ETrue); - -private: - - /** - * C++ default constructor. - */ - TMSTarSettings(); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - -private: - gint iVolume; //Volume - }; - -} //namespace TMS - -#endif // TarSETTINGS_H - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscalladpt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscalladpt.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef CALLADPT_H +#define CALLADPT_H + +#include +#include + +namespace TMS { + +// TMSCallAdpt class +class TMSCallAdpt + { +public: + static gint CreateCallL(gint callType, TMSCallAdpt*& callAdpt); + virtual ~TMSCallAdpt(); + virtual gint CreateStream(TMSCallType callType, + TMSStreamType strmType, gint& outStrmId) = 0; + virtual gint InitStreamL(TMSCallType callType, + TMSStreamType strmType, gint strmId, TMSFormatType frmtType, + const RMessage2& aMessage) = 0; + virtual gint StartStream(TMSCallType callType, + TMSStreamType strmType, gint strmId) = 0; + virtual gint PauseStream(TMSCallType callType, + TMSStreamType strmType, gint strmId) = 0; + virtual gint StopStream(TMSCallType callType, TMSStreamType strmType, + gint strmId) = 0; + virtual gint DeinitStream(TMSCallType callType, + TMSStreamType strmType, gint strmId) = 0; + virtual gint DeleteStream(TMSCallType callType, + TMSStreamType strmType, gint strmId) = 0; + virtual gint DataXferBufferEmptied(TMSCallType callType, + TMSStreamType strmType, gint strmId) = 0; + virtual gint DataXferBufferFilled(TMSCallType callType, + TMSStreamType strmType, gint strmId, guint datasize) = 0; + virtual gint GetDataXferBufferHndl(const TMSCallType callType, + const TMSStreamType strmType, const gint strmId, + const guint32 key, RChunk& chunk) = 0; + + virtual gint GetMaxVolume(guint& volume) = 0; + virtual gint SetVolume(const guint volume) = 0; + virtual gint GetVolume(guint& volume) = 0; + virtual gint GetMaxGain(guint& gain) = 0; + virtual gint SetGain(const guint gain) = 0; + virtual gint GetGain(guint& gain) = 0; + virtual gint GetGlobalMaxVolume(guint& volume) = 0; + virtual gint SetGlobalVolume(const guint volume) = 0; + virtual gint GetGlobalVolume(guint& volume) = 0; + virtual gint GetGlobalMaxGain(guint& gain) = 0; + virtual gint SetGlobalGain(const guint gain) = 0; + virtual gint GetGlobalGain(guint& gain) = 0; + + virtual gint GetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, gint& mode) = 0; + virtual gint SetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, const gint mode) = 0; + virtual gint GetSupportedBitRatesCount(guint& count) = 0; + virtual gint GetSupportedBitRates(CBufFlat*& brbuffer) = 0; + virtual gint GetBitRate(guint& bitrate) = 0; + virtual gint SetBitRate(const guint bitrate) = 0; + virtual gint GetVAD(const TMSFormatType fmttype, gboolean& vad) = 0; + virtual gint SetVAD(const TMSFormatType fmttype, const gboolean vad) = 0; + virtual gint GetCNG(const TMSFormatType fmttype, gboolean& cng) = 0; + virtual gint SetCNG(const TMSFormatType fmttype, const gboolean cng) = 0; + virtual gint GetPlc(const TMSFormatType fmttype, gboolean& plc) = 0; + virtual gint SetPlc(const TMSFormatType fmttype, const gboolean plc) = 0; + virtual gint SetOutput(TMSAudioOutput output) = 0; + virtual gint GetOutput(TMSAudioOutput& output) = 0; + virtual gint GetPreviousOutput(TMSAudioOutput& output) = 0; + virtual gint GetAvailableOutputsL(gint& count, + CBufFlat*& outputsbuffer) = 0; + +protected: + TMSCallAdpt(); + virtual gint PostConstruct(); + +protected: + gint iGlobalVol; + gint iGlobalGain; + }; + +} //namespace TMS + +#endif // CALLADPT_H + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscallcsadpt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscallcsadpt.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef CALLCSADPT_H +#define CALLCSADPT_H + +#include +#include +#include +#include "tmsclientserver.h" +#include "tmscalladpt.h" +#include "tmscsdevsoundobserver.h" + +namespace TMS { + +// FORWARD DECLARATIONS +class TMSCSUplink; +class TMSCSDownlink; +class TMSTarSettings; + +/* + * CallCSAdapt class + */ +class TMSCallCSAdpt : public TMSCallAdpt, + public TMSCSPDevSoundObserver, + public MTelephonyAudioRoutingObserver + { +public: + TMSCallCSAdpt(); + virtual ~TMSCallCSAdpt(); + virtual gint PostConstruct(); + + virtual gint CreateStream(TMSCallType callType, TMSStreamType strmType, + gint& outStrmId); + virtual gint InitStreamL(TMSCallType callType, TMSStreamType strmType, + gint strmId, TMSFormatType frmtType, const RMessage2& aMessage); + virtual gint StartStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint PauseStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint StopStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint DeinitStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint DeleteStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint DataXferBufferEmptied(TMSCallType callType, + TMSStreamType strmType, gint strmId); + virtual gint DataXferBufferFilled(TMSCallType callType, + TMSStreamType strmType, gint strmId, guint datasize); + virtual gint GetDataXferBufferHndl(const TMSCallType callType, + const TMSStreamType strmType, const gint strmId, + const guint32 key, RChunk& chunk); + virtual gint GetMaxVolume(guint& volume); + virtual gint SetVolume(const guint volume); + virtual gint GetVolume(guint& volume); + virtual gint GetMaxGain(guint& gain); + virtual gint SetGain(const guint gain); + virtual gint GetGain(guint& gain); + virtual gint GetGlobalMaxVolume(guint& volume); + virtual gint SetGlobalVolume(const guint volume); + virtual gint GetGlobalVolume(guint& volume); + virtual gint GetGlobalMaxGain(guint& gain); + virtual gint SetGlobalGain(const guint gain); + virtual gint GetGlobalGain(guint& gain); + + virtual gint GetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, gint& mode); + virtual gint SetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, const gint mode); + virtual gint GetSupportedBitRatesCount(guint& count); + virtual gint GetSupportedBitRates(CBufFlat*& brbuffer); + virtual gint GetBitRate(guint& bitrate); + virtual gint SetBitRate(const guint bitrate); + virtual gint GetVAD(const TMSFormatType fmttype, gboolean& vad); + virtual gint SetVAD(const TMSFormatType fmttype, const gboolean vad); + virtual gint GetCNG(const TMSFormatType fmttype, gboolean& cng); + virtual gint SetCNG(const TMSFormatType fmttype, const gboolean cng); + virtual gint GetPlc(const TMSFormatType fmttype, gboolean& plc); + virtual gint SetPlc(const TMSFormatType fmttype, const gboolean plc); + + virtual gint SetOutput(TMSAudioOutput output); + virtual gint GetOutput(TMSAudioOutput& output); + virtual gint GetPreviousOutput(TMSAudioOutput& output); + virtual gint GetAvailableOutputsL(gint& count, CBufFlat*& outputsbuffer); + + void NotifyClient(const gint strmId, const gint aCommand, + const gint aStatus = KErrNone, const gint64 aInt64 = TInt64(0)); + + //From TMSCSPDevSoundObserver + void DownlinkInitCompleted(TInt status); + void UplinkInitCompleted(TInt status); + void UplinkActivatedSuccessfully(); + void DownlinkActivatedSuccessfully(); + void UplinkActivationFailed(); + void DownlinkActivationFailed(); + +protected: + void AvailableOutputsChanged( + CTelephonyAudioRouting& aTelephonyAudioRouting); + void OutputChanged(CTelephonyAudioRouting& aTelephonyAudioRouting); + void SetOutputComplete(CTelephonyAudioRouting& aTelephonyAudioRouting, + gint aError); + void GetSupportedBitRatesL(CBufFlat*& brbuffer); + +private: + gint iNextStreamId; + + TMSCSUplink* iCSUplink; + TMSCSDownlink* iCSDownlink; + CTelephonyAudioRouting* iRouting; + TMSTarSettings* iTarSettings; + TMSStreamType iStrmtype; + + RMsgQueue iMsgQueueUp; + RMsgQueue iMsgQueueDn; + TmsMsgBuf iMsgBuffer; + + gboolean iUplinkInitialized; + gint iUplinkStreamId; + gboolean iDnlinkInitialized; + gint iDnlinkStreamId; + }; + +} //namespace TMS + +#endif // CALLCSADPT_H + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscallipadpt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscallipadpt.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef __CALLIPADAPT_H +#define __CALLIPADAPT_H + +// INCLUDES +#include +#include +#include "tmsclientserver.h" +#include "tmsshared.h" +#include "tmscalladpt.h" + +namespace TMS { + +// FORWARD DECLARATIONS +class TMSIPDownlink; +class TMSIPUplink; + +// TMSCallIPAdpt class +class TMSCallIPAdpt : public TMSCallAdpt + { +public: + // Constractor + static TMSCallIPAdpt* NewL(); + + virtual ~TMSCallIPAdpt(); + virtual gint PostConstruct(); + + virtual gint CreateStream(TMSCallType callType, TMSStreamType strmType, + gint& outStrmId); + virtual gint InitStreamL(TMSCallType callType, TMSStreamType strmType, + gint strmId, TMSFormatType frmtType, const RMessage2& aMessage); + virtual gint StartStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint PauseStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint StopStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint DeinitStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint DeleteStream(TMSCallType callType, TMSStreamType strmType, + gint strmId); + virtual gint DataXferBufferEmptied(TMSCallType callType, + TMSStreamType strmType, gint strmId); + virtual gint DataXferBufferFilled(TMSCallType callType, + TMSStreamType strmType, gint strmId, guint datasize); + virtual gint GetDataXferBufferHndl(const TMSCallType callType, + const TMSStreamType strmType, const gint strmId, + const guint32 key, RChunk& chunk); + + virtual gint GetMaxVolume(guint& volume); + virtual gint SetVolume(const guint volume); + virtual gint GetVolume(guint& volume); + virtual gint GetMaxGain(guint& gain); + virtual gint SetGain(const guint gain); + virtual gint GetGain(guint& gain); + virtual gint GetGlobalMaxVolume(guint& volume); + virtual gint SetGlobalVolume(const guint volume); + virtual gint GetGlobalVolume(guint& volume); + virtual gint GetGlobalMaxGain(guint& gain); + virtual gint SetGlobalGain(const guint gain); + virtual gint GetGlobalGain(guint& gain); + + virtual gint GetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, gint& mode); + virtual gint SetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, const gint mode); + virtual gint GetSupportedBitRatesCount(guint& count); + virtual gint GetSupportedBitRates(CBufFlat*& brbuffer); + virtual gint GetBitRate(guint& bitrate); + virtual gint SetBitRate(const guint bitrate); + virtual gint GetVAD(const TMSFormatType fmttype, gboolean& vad); + virtual gint SetVAD(const TMSFormatType fmttype, const gboolean vad); + virtual gint GetCNG(const TMSFormatType fmttype, gboolean& cng); + virtual gint SetCNG(const TMSFormatType fmttype, const gboolean cng); + virtual gint GetPlc(const TMSFormatType fmttype, gboolean& plc); + virtual gint SetPlc(const TMSFormatType fmttype, const gboolean plc); + + virtual gint SetOutput(TMSAudioOutput output); + virtual gint GetOutput(TMSAudioOutput& output); + virtual gint GetPreviousOutput(TMSAudioOutput& output); + virtual gint GetAvailableOutputsL(TInt& count, CBufFlat*& outputsbuffer); + + gint SetIlbcCodecMode(const gint mode, const TMSStreamType strmtype); + gint GetIlbcCodecMode(gint& mode, const TMSStreamType strmtype); + gint SetG711CodecMode(const gint mode, const TMSStreamType strmtype); + gint GetG711CodecMode(gint& mode, const TMSStreamType strmtype); + gint FrameModeRqrdForEC(gboolean& frmodereq); + gint SetFrameMode(const gboolean frmode); + gint GetFrameMode(gboolean& frmode); + gint ConcealErrorForNextBuffer(); + gint BadLsfNextBuffer(); + + gint OpenDownlinkL(const RMessage2& aMessage); + gint OpenUplinkL(const RMessage2& aMessage); + void SetFormat(const gint strmId, const TUint32 aFormat); + + void BufferFilledL(TUint dataSize); + void BufferEmptiedL(); + gint GetDataXferChunkHndl(const TMSStreamType strmType, + const TUint32 key, RChunk& chunk); + +private: + void ConstructL(); + TMSCallIPAdpt(); + + void NotifyClient(const gint strmId, const TInt aCommand, + const TInt aStatus = KErrNone, const TInt64 aInt64 = TInt64(0)); + //void DetermineG711FrameRateL(); //G711 10/20ms + void GetSupportedBitRatesL(CBufFlat*& brbuffer); + +private: + gint iNextStreamId; + gboolean iUplinkInitialized; + gint iUplinkStreamId; + gboolean iDnlinkInitialized; + gint iDnlinkStreamId; + + TMSIPDownlink* iIPDownlink; + TMSIPUplink* iIPUplink; + + // Message queues for communication and data transfer back to the client + RMsgQueue iMsgQueueUp; + RMsgQueue iMsgQueueDn; + + TmsMsgBuf iMsgBuffer; + TMMFPrioritySettings iPriority; + TUint32 iUpFourCC; + TUint32 iDnFourCC; + TInt iMaxVolume; + TInt iMaxGain; + RArray iArrBitrates; + RArray iCodecs; + TInt iCodecsCount; + + }; + +} //namespace TMS + +#endif //__CALLIPADAPT_H + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscsdevsound.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscsdevsound.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef TMSCSDEVSOUND_H +#define TMSCSDEVSOUND_H + +#include + +namespace TMS { + +class TMSCSPDevSoundObserver; + +/** + * Wrapper for CMMFDevSound + * + */ +NONSHARABLE_CLASS(TMSCSPDevSound) : public CBase, + public MDevSoundObserver + { +public: + + /** + * Destructor. + */ + virtual ~TMSCSPDevSound(); + + /** + * Activates the dev sound stream. TMSCSPDevSoundObserver methods are called + * when activation goes ok or fails. If the stream is already active or + * activating then nothing is done. + */ + virtual void Activate(); + + /** + * Deactivates the devsound stream. If stream is not active or + * activation is not ongoing then nothing is done. + */ + virtual void Deactivate(); + + /** + * Indicates that activation is ongoing, + * but the result of the activation is still unknown. + * @return ETrue - activation ongoing, EFalse - activation not ongoing. + */ + TBool IsActivationOngoing() const; + + /** + * Determines wether the devsound stream is active or not. + * @return ETrue - Stream is active, EFalse - Stream not active. + */ + TBool IsActive() const; + + CMMFDevSound& DevSound(); + + // from base class MDevSoundObserver + + /** + * From MDevSoundObserver + * Empty implementation + */ + void InitializeComplete(TInt aError); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void BufferToBeFilled(CMMFBuffer* aBuffer); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void PlayError(TInt aError); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void ToneFinished(TInt aError); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void BufferToBeEmptied(CMMFBuffer* aBuffer); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void RecordError(TInt aError); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void ConvertError(TInt aError); + + /** + * From MDevSoundObserver + * Empty implementation + */ + void DeviceMessage(TUid aMessageType, const TDesC8& aMsg); + +protected: + + TMSCSPDevSound(TMSCSPDevSoundObserver& aObserver); + + void ConstructL(TMMFState aMode, gint aAudioPreference, + gint aAudioPriority); + +private: + + /** + * Derived class has to activate the stream here. + */ + virtual void DoActivateL() = 0; + +protected: + + TUint iStreamType; + + /** + * Indication if device is activated. Derived class has to update this. + */ + TBool iActive; + + /** + * Indication if activation is ongoing. + * Derived class has to update this. + */ + TBool iActivationOngoing; + + /** + * Devsound instance + * Own. + */ + CMMFDevSound* iDevSound; + + /** + * Observer for successfull activation. + * Not own. + */ + TMSCSPDevSoundObserver& iObserver; + + }; + +} //namespace TMS + +#endif // TMSCSDEVSOUND_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscsdevsoundobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscsdevsoundobserver.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef TMSCSDEVSOUNDOBSERVER_H +#define TMSCSDEVSOUNDOBSERVER_H + +namespace TMS { + +/** + * Observer interface for knowing when audio streams have been + * successfully ramped up. + * + */ +class TMSCSPDevSoundObserver + { +public: + virtual void DownlinkInitCompleted(TInt status) = 0; + virtual void UplinkInitCompleted(TInt status) = 0; + + /** + * Notification that Mic has been activated successfully + * + */ + virtual void UplinkActivatedSuccessfully() = 0; + + /** + * Notification that speaker has been activated successfully + * + */ + virtual void DownlinkActivatedSuccessfully() = 0; + + /** + * Notification that Mic initialisation failed. + * + */ + virtual void UplinkActivationFailed() = 0; + + /** + * Notification that Speaker activation failed. + * + */ + virtual void DownlinkActivationFailed() = 0; + }; + +} //namespace TMS + +#endif // TMSCSDEVSOUNDOBSERVER_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscsdownlink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscsdownlink.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef TMSCSDOWNLINK_H +#define TMSCSDOWNLINK_H + +#include +#include "tmscsdevsound.h" + +namespace TMS { + +// +class TMSCSPDevSoundObserver; + +/** + * Provides Downlink functionality. + * + */ +NONSHARABLE_CLASS(TMSCSDownlink) : public TMSCSPDevSound + { +public: + + static TMSCSDownlink* NewL(TMSCSPDevSoundObserver& aObserver); + + virtual ~TMSCSDownlink(); + + /** + * Sets volume. + * @param aVolume Volume. + */ + void SetVolume(gint aVolume); + + /** + * Gets volume. + * @return Current volume. + */ + gint Volume(); + + /** + * Gets max volume. + * @return Current volume. + */ + gint MaxVolume(); + + // from base class MDevSoundObserver + + /** + * From MDevSoundObserver. + * Indication from devsound that stream (Downlink) has been activated + * successfully. + */ + void BufferToBeFilled(CMMFBuffer* /*aBuffer*/); + + /** + * From MDevSoundObserver. + * Indication from devsound that activation of stream( Downlink) + * failed. + */ + void PlayError(TInt aErrorCode); + +private: + + /** + * From CSPDevSound. + * Tries to activate the mic stream. + */ + void DoActivateL(); + +protected: + + TMSCSDownlink(TMSCSPDevSoundObserver& aObserver); + + void ConstructL(); + }; + +} //namespace TMS + +#endif // TMSCSDOWNLINK_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmscsuplink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmscsuplink.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef TMSCSUPLINK_H +#define TMSCSUPLINK_H + +#include +#include "tmscsdevsound.h" + +namespace TMS { + +/** + * Provides uplink functionality. + * + */ +NONSHARABLE_CLASS(TMSCSUplink) : public TMSCSPDevSound + { +public: + + static TMSCSUplink* NewL(TMSCSPDevSoundObserver& aObserver); + + virtual ~TMSCSUplink(); + + /** + * Determines mic mute state. + * + * @return ETrue - mic is muted, EFalse - mic is not muted. + */ + TBool IsMuted(); + + /** + * Set mic muted. + */ + void SetMuted(); + + /** + * Set mic unmuted. + */ + void SetUnmuted(); + + /** + * Set mic gain. + */ + void SetGain(gint aGain); + + /** + * Get mic muted. + */ + gint Gain(); + + /** + * Get max gain. + */ + gint MaxGain(); + + // from base class MDevSoundObserver + + /** + * From MDevSoundObserver + * Notification from Devsound that stream (mic) is + * activated successfully. + */ + void BufferToBeEmptied(CMMFBuffer* aBuffer); + + /** + * From MDevSoundObserver + * Notification from devsound that downstream(mic) activation + * feiled. + */ + void RecordError(TInt aError); + +private: + + // from base class MCSPDevSound + + /** + * From MCSPDevSound. + * Tries to activate the mic stream. + */ + void DoActivateL(); + +protected: + + TMSCSUplink(TMSCSPDevSoundObserver& aObserver); + void ConstructL(); + }; + +} //namespace TMS + +#endif // TMSCSUPLINK_H diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmsdelaytimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmsdelaytimer.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef DELAYTIMER_H +#define DELAYTIMER_H + +#include + +namespace TMS { + +/** + * A Timer utility class used by the Server for shutdown purpose. + */ +class TMSCallDelayTimer : public CActive + { +public: + // Construct/destruct + static TMSCallDelayTimer* NewL(); + ~TMSCallDelayTimer(); + +public: + // Request a timeout after aDelay + void SetDelay(TTimeIntervalMicroSeconds32 aDelay); + +protected: + // From CActive + void RunL(); + void DoCancel(); + +private: + // Construct/destruct + TMSCallDelayTimer(); + void ConstructL(); + +private: + RTimer iShutDownTimer; // Has + }; + +} //namespace TMS + +#endif //DELAYTIMER_H + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmsipcallstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmsipcallstream.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef __IPCALLSTREAM_H +#define __IPCALLSTREAM_H + +//#define __PLAY_WAV_FROM_FILE__ + +#include +#include +#include +#include "tmsgstreamer.h" +#include "tmsshared.h" +#include "tmsclientserver.h" + +#ifdef __USE_GSTREAMER__ +#include +#include "gstg711encoderinterface.h" +#include "gstspeechencoderconfig.h" +#include "gsterrorconcealmentinterface.h" +#include "gstg711decoderinterface.h" +#include "gstilbcdecoderinterface.h" +#include "gstilbcencoderinterface.h" +#include "gstg729encoderinterface.h" +#include "gstg729decoderinterface.h" +#else //__USE_GSTREAMER__ +#include +#include +#include + +// FORWARD DECLARATIONS +class CAudioOutput; +class CErrorConcealmentIntfc; +class CSpeechEncoderConfig; +class CG711DecoderIntfc; +class CG729DecoderIntfc; +class CIlbcDecoderIntfc; +class CG711EncoderIntfc; +class CG729EncoderIntfc; +class CIlbcEncoderIntfc; +#endif //__USE_GSTREAMER__ + +namespace TMS { + +// ----------------------------------------------------------------------------- +// Class Name: TMSIPCallStreamBase +// +// Base abstract class for creating VoIP uplink and downlink streams. +// ----------------------------------------------------------------------------- +class TMSIPCallStreamBase : public CBase +#ifndef __USE_GSTREAMER__ + , public MDevSoundObserver +#endif //__USE_GSTREAMER__ + { +public: + enum TStreamState + { + ENotReady, // not initialized + EReady, // initialized and ready for streaming + EStreaming + // active streaming + }; + +public: + virtual ~TMSIPCallStreamBase(); + + virtual void Start() = 0; + virtual void Stop() = 0; + virtual gint SetCodecCi() = 0; + +#ifndef __USE_GSTREAMER__ + void InitDevSoundL(const TMMFState aDevSoundState, + const TMMFPrioritySettings priority); +#endif //__USE_GSTREAMER__ + void SetMsgQueue(const RMsgQueue aMsgQueue); + gint DoChunk(const gint aDataLen, TmsMsgBuf& aMsgBuffer); + gint ConfigureMedia(const guint32 aCodecID); + +protected: +#ifndef __USE_GSTREAMER__ + // From MDevSoundObserver + virtual void InitializeComplete(TInt aError) = 0; + virtual void BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) {} + virtual void RecordError(TInt /*aError*/) {} + virtual void BufferToBeFilled(CMMFBuffer* /*aBuffer*/) {} + virtual void PlayError(TInt /*aError*/) {} + virtual void ToneFinished(TInt /*aError*/) {} + virtual void ConvertError(TInt /*aError*/) {} + virtual void DeviceMessage(TUid /*aMessageType*/, const TDesC8& /*aMsg*/) {} + virtual void SendEventToClient(const TMMFEvent& /*aEvent*/) {} +#endif //__USE_GSTREAMER__ + +protected: + + CActiveScheduler* iActiveScheduler; + TStreamState iStatus; + +#ifndef __USE_GSTREAMER__ + CMMFDevSound* iDevSound; + CMMFDataBuffer* iDevSoundBufPtr; +#endif //__USE_GSTREAMER__ + + RMsgQueue iMsgQueue; // ITC back to client + TmsMsgBuf iMsgBuffer; + RChunk iChunk; + gint iMaxBufLen; + guint32 iCodecID; + TMMFPrioritySettings iPriority; + const gchar* iMediaType; + + gint iG711DecodeMode; + gint iILBCDecodeMode; + gint iG711EncodeMode; + gint iILBCEncodeMode; + gint iBufLen; + TBool iWriteDataXferHndlToClient; + TUint32 iKey; + }; + +// ----------------------------------------------------------------------------- +// Class Name: TMSIPDownlink +// +// Class handling VoIP downlink stream object. +// ----------------------------------------------------------------------------- +class TMSIPDownlink : public TMSIPCallStreamBase + { +public: + virtual ~TMSIPDownlink(); + +#ifdef __USE_GSTREAMER__ + static void cb_raw_playback_handoff(GstElement* appsrc, guint size); + static gboolean bus_call(GstBus* bus, GstMessage* msg, gpointer data); +#endif //__USE_GSTREAMER__ + static TMSIPDownlink* NewL(const guint32 codecID, + const TMMFPrioritySettings priority); + TMSIPDownlink(); + void ConstructL(const guint32 codecID, + const TMMFPrioritySettings priority); + + gint SetCodecCi(); + void Start(); + void Stop(); + void BufferFilled(const guint buflen); + gint SetVolume(const guint volume); + gint GetVolume(guint& volume); + gint GetMaxVolume(guint& volume); + gint GetDataXferChunkHndl(const TUint32 key, RChunk& chunk); + + // For CIs + gint SetIlbcCodecMode(const gint mode); + gint GetIlbcCodecMode(gint& mode); + gint SetG711CodecMode(const gint mode); + gint GetG711CodecMode(gint& mode); + gint FrameModeRqrdForEC(gboolean& frmodereq); + gint SetFrameMode(gboolean frmode); + gint GetFrameMode(gboolean& frmode); + gint ConcealErrorForNextBuffer(); + gint SetCng(const TMSFormatType fmttype, const gboolean cng); + gint GetCng(const TMSFormatType fmttype, gboolean& cng); + gint SetPlc(const TMSFormatType fmttype, const gboolean plc); + gint GetPlc(const TMSFormatType fmttype, gboolean& plc); + gint BadLsfNextBuffer(); + + void SetAudioDeviceL(TMSAudioOutput output); + void GetAudioDeviceL(TMSAudioOutput& output); + +private: + void SetCodecCiL(); + +#ifdef __USE_GSTREAMER__ + void BufferToBeFilled(); + gint gst_play_raw(); + gint gst_initialize_play(); +#else //__USE_GSTREAMER__ + // From MDevSoundObserver + virtual void BufferToBeFilled(CMMFBuffer* aBuffer); + virtual void InitializeComplete(TInt aError); + virtual void PlayError(TInt aError); +#endif //__USE_GSTREAMER__ + +private: + + gboolean iFrameMode; + gboolean iPlc; + gint iMaxVolume; + +#ifndef __USE_GSTREAMER__ + CAudioOutput* iAudioOutput; + CErrorConcealmentIntfc* iErrConcealmentIntfc; + CG711DecoderIntfc* iG711DecoderIntfc; + CG729DecoderIntfc* iG729DecoderIntfc; + CIlbcDecoderIntfc* iIlbcDecoderIntfc; +#else //__USE_GSTREAMER__ + GstErrorConcealmentIntfc* iErrConcealmentIntfc; + GstG711DecoderIntfc* iG711DecoderIntfc; + GstG729DecoderIntfc* iG729DecoderIntfc; + GstIlbcDecoderIntfc* iIlbcDecoderIntfc; + GstElement* iPipelinePlay; + GstElement* iAppSrc; + GstElement* iSink; + GstBus* iBusPlay; +#endif //__USE_GSTREAMER__ +#ifdef _DEBUG + gint iSamplesPlayedCount; +#endif + +#ifdef __PLAY_WAV_FROM_FILE__ + RFile iFile; + gint fsize; + gint iReadSize; + gint iReadBytes; + RFs iFs; + HBufC8* fbuf; +#endif + }; + +// ----------------------------------------------------------------------------- +// Class Name: TMSIPUplink +// +// Class handling VoIP uplink stream. +// ----------------------------------------------------------------------------- +class TMSIPUplink : public TMSIPCallStreamBase + { +public: + virtual ~TMSIPUplink(); + +#ifdef __USE_GSTREAMER__ + static void cb_record_raw_handoff(GstElement *sink); + static gboolean bus_call(GstBus* bus, GstMessage* msg, gpointer data); +#endif //__USE_GSTREAMER__ + static TMSIPUplink* NewL(const guint32 codecID, + const TMMFPrioritySettings priority); + TMSIPUplink(); + void ConstructL(const guint32 codecID, + const TMMFPrioritySettings priority); + + gint SetCodecCi(); + void Start(); + void Stop(); + void BufferEmptied(); + gint SetGain(const guint gain); + gint GetGain(guint& gain); + gint GetMaxGain(guint& gain); + gint GetDataXferChunkHndl(const TUint32 key, RChunk& chunk); + + // For CIs + gint SetIlbcCodecMode(const gint mode); + gint GetIlbcCodecMode(gint& mode); + gint SetG711CodecMode(const gint mode); + gint GetG711CodecMode(gint& mode); + gint GetSupportedBitrates(RArray& bitrates); + gint SetBitrate(guint bitrate); + gint GetBitrate(guint& bitrate); + gint SetVad(const TMSFormatType fmttype, const gboolean vad); + gint GetVad(const TMSFormatType fmttype, gboolean& vad); + +private: + void SetCodecCiL(); + +#ifdef __USE_GSTREAMER__ + void BufferToBeEmptied(); + gint gst_record_raw(); + gint gst_initialize_record(); +#else //__USE_GSTREAMER__ + // From MDevSoundObserver + virtual void BufferToBeEmptied(CMMFBuffer* aBuffer); + virtual void InitializeComplete(TInt aError); + virtual void RecordError(TInt /*aError*/); +#endif //__USE_GSTREAMER__ + +private: + gint iMaxGain; + +#ifndef __USE_GSTREAMER__ + CSpeechEncoderConfig* iSpeechEncoderConfig; + CG711EncoderIntfc* iG711EncoderIntfc; + CG729EncoderIntfc* iG729EncoderIntfc; + CIlbcEncoderIntfc* iIlbcEncoderIntfc; +#else //__USE_GSTREAMER__ + GstSpeechEncoderConfigIntfc* iSpeechEncoderConfig; + GstG711EncoderIntfc* iG711EncoderIntfc; + GstG729EncoderIntfc* iG729EncoderIntfc; + GstIlbcEncoderIntfc* iIlbcEncoderIntfc; + GstElement* iPipelineRec; + GstElement* iSource; + GstElement* iAppSink; + GstBus* iBusRec; +#endif //__USE_GSTREAMER__ +#ifdef _DEBUG + gint iSamplesRecCount; +#endif + }; + +} //namespace TMS + +#endif //__IPCALLSTREAM_H + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/inc/tmstarsettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/inc/tmstarsettings.h Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#ifndef TARSETTINGS_H +#define TARSETTINGS_H + +// INCLUDES +#include +#include +#include +#include "tmsclientserver.h" + +namespace TMS { + +// CLASS DECLARATION +class TMSTarSettings + { +public: + // Constructors and destructor + + /** + * Two-phased constructor. + */ + static TMSTarSettings* NewL(); + + /** + * Destructor. + */ + virtual ~TMSTarSettings(); + +public: + // New functions + + void SetTar(TRoutingMsgBufPckg rountingpckg, TBool aPublish = ETrue); + +private: + + /** + * C++ default constructor. + */ + TMSTarSettings(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + +private: + gint iVolume; //Volume + }; + +} //namespace TMS + +#endif // TarSETTINGS_H + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/calladpt.cpp --- a/mmserv/tms/tmscallserver/src/calladpt.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include "callipadpt.h" -#include "callcsadpt.h" -#include "calladpt.h" -#include "tmsutility.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSCallAdpt::TMSCallAdpt -// -// ----------------------------------------------------------------------------- -// -TMSCallAdpt::TMSCallAdpt() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallAdpt::~TMSCallAdpt -// -// ----------------------------------------------------------------------------- -// -TMSCallAdpt::~TMSCallAdpt() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallAdpt::CreateCallL -// -// ----------------------------------------------------------------------------- -// -gint TMSCallAdpt::CreateCallL(gint callType, TMSCallAdpt*& callAdpt) - { - TRACE_PRN_FN_ENT; - TMSCallAdpt* self(NULL); - gint retVal(TMS_RESULT_SUCCESS); - switch (callType) - { - case TMS_CALL_IP: - retVal = TMS_RESULT_INSUFFICIENT_MEMORY; - self = TMSCallIPAdpt::NewL(); - if (self) - { - retVal = self->PostConstruct(); - if (retVal != TMS_RESULT_SUCCESS) - { - delete self; - self = NULL; - } - } - break; - - case TMS_CALL_CS: - retVal = TMS_RESULT_INSUFFICIENT_MEMORY; - self = new TMSCallCSAdpt(); - if (self) - { - retVal = self->PostConstruct(); - if (retVal != TMS_RESULT_SUCCESS) - { - delete self; - self = NULL; - } - } - break; - default: - retVal = TMS_RESULT_CALL_TYPE_NOT_SUPPORTED; - break; - } - callAdpt = self; - TRACE_PRN_FN_EXT; - return retVal; - } - -// ----------------------------------------------------------------------------- -// TMSCallAdpt::PostConstruct -// -// ----------------------------------------------------------------------------- -// -gint TMSCallAdpt::PostConstruct() - { - return TMS_RESULT_SUCCESS; - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/callcsadpt.cpp --- a/mmserv/tms/tmscallserver/src/callcsadpt.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1056 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include -#include -#include "csuplink.h" -#include "csdownlink.h" -#include "callcsadpt.h" -#include "tmsutility.h" -#include "tmsshared.h" -#include "tmsclientserver.h" -#include "tarsettings.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::TMSCallCSAdpt -// -// ----------------------------------------------------------------------------- -// -TMSCallCSAdpt::TMSCallCSAdpt() - { - TRACE_PRN_FN_ENT; - - iCSDownlink = NULL; - iCSUplink = NULL; - iRouting = NULL; - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::~TMSCallCSAdpt -// -// ----------------------------------------------------------------------------- -// -TMSCallCSAdpt::~TMSCallCSAdpt() - { - TRACE_PRN_FN_ENT; - delete iCSDownlink; - delete iCSUplink; - delete iRouting; - delete iTarSettings; - - if (iMsgQueueUp.Handle() > 0) - { - iMsgQueueUp.Close(); - } - - if (iMsgQueueDn.Handle() > 0) - { - iMsgQueueDn.Close(); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::PostConstruct -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::PostConstruct() - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - iNextStreamId = 1; - iUplinkInitialized = FALSE; - iDnlinkInitialized = FALSE; - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::CreateStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::CreateStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint& outStrmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - status = TMS_RESULT_ALREADY_EXIST; - if (!iUplinkInitialized) - { - iUplinkInitialized = TRUE; - iUplinkStreamId = iNextStreamId; - outStrmId = iUplinkStreamId; - iNextStreamId++; - iUplinkInitialized = TRUE; - status = TMS_RESULT_SUCCESS; - } - break; - case TMS_STREAM_DOWNLINK: - status = TMS_RESULT_ALREADY_EXIST; - if (!iDnlinkInitialized) - { - iDnlinkInitialized = TRUE; - iDnlinkStreamId = iNextStreamId; - outStrmId = iDnlinkStreamId; - iNextStreamId++; - iDnlinkInitialized = TRUE; - status = TMS_RESULT_SUCCESS; - } - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::InitStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::InitStreamL(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId, TMSFormatType /*frmtType*/, - const RMessage2& aMessage) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - - switch (strmType) - { - case TMS_STREAM_UPLINK: - if (strmId == iUplinkStreamId) - { - // Open message queue handling client-server communication - if (iMsgQueueUp.Handle() <= 0) - { - // Third argument in TMSCallProxy::InitStream - status = iMsgQueueUp.Open(aMessage, 1); - } - if (status == TMS_RESULT_SUCCESS) - { - TRAP(status, iCSUplink = TMSCSUplink::NewL(*this)); - } - iStrmtype = TMS_STREAM_UPLINK; - } - else - { - status = TMS_RESULT_DOES_NOT_EXIST; - } - break; - case TMS_STREAM_DOWNLINK: - if (strmId == iDnlinkStreamId) - { - // Open message queue handling client-server communication - if (iMsgQueueDn.Handle() <= 0) - { - // Third argument in TMSCallProxy::InitStream - status = iMsgQueueDn.Open(aMessage, 1); - } - if (status == TMS_RESULT_SUCCESS) - { - TRAP(status, iCSDownlink = TMSCSDownlink::NewL(*this)); - if (status == TMS_RESULT_SUCCESS) - { - TRAP(status, iRouting = - CTelephonyAudioRouting::NewL(*this)); - if (status == TMS_RESULT_SUCCESS) - { - iTarSettings = TMSTarSettings::NewL(); - } - } - } - iStrmtype = TMS_STREAM_DOWNLINK; - } - else - { - status = TMS_RESULT_DOES_NOT_EXIST; - } - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - - TRACE_PRN_IF_ERR(status); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::StartStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::StartStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - if (iCSUplink && strmId == iUplinkStreamId) - { - iCSUplink->Activate(); - } - break; - case TMS_STREAM_DOWNLINK: - if (iCSDownlink && strmId == iDnlinkStreamId) - { - iCSDownlink->Activate(); - } - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::PauseStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::PauseStream(TMSCallType /*callType*/, - TMSStreamType /*strmType*/, gint /*strmId*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::StopStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::StopStream(TMSCallType /*callType*/, TMSStreamType strmType, - gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - if (iCSUplink && strmId == iUplinkStreamId) - { - iCSUplink->Deactivate(); - NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, - status, 0); - } - break; - case TMS_STREAM_DOWNLINK: - if (iCSDownlink && strmId == iDnlinkStreamId) - { - iCSDownlink->Deactivate(); - NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, - status, 0); - } - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DeinitStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::DeinitStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - if (iCSUplink && strmId == iUplinkStreamId) - { - iCSUplink->Deactivate(); - iUplinkInitialized = FALSE; - NotifyClient(iUplinkStreamId, ECmdUplinkDeInitComplete, - status, 0); - } - break; - case TMS_STREAM_DOWNLINK: - if (iCSDownlink && strmId == iDnlinkStreamId) - { - iCSDownlink->Deactivate(); - iDnlinkInitialized = FALSE; - NotifyClient(iDnlinkStreamId, ECmdDownlinkDeInitComplete, - status, 0); - } - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DeleteStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::DeleteStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - if (strmId == iUplinkStreamId) - { - iUplinkStreamId = -1; - iUplinkInitialized = FALSE; - } - break; - case TMS_STREAM_DOWNLINK: - if (strmId == iDnlinkStreamId) - { - iDnlinkStreamId = -1; - iDnlinkInitialized = FALSE; - } - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DataXferBufferEmptied -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::DataXferBufferEmptied(TMSCallType /*callType*/, - TMSStreamType /*strmType*/, gint /*strmId*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DataXferBufferFilled -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::DataXferBufferFilled(TMSCallType /*callType*/, - TMSStreamType /*strmType*/, gint /*strmId*/, guint /*datasize*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetDataXferBufferHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetDataXferBufferHndl(const TMSCallType /*callType*/, - const TMSStreamType /*strmType*/, const gint /*strmId*/, - const guint32 /*key*/, RChunk& /*chunk*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetMaxVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetMaxVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSDownlink && iDnlinkInitialized) - { - volume = iCSDownlink->MaxVolume(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetVolume(const guint volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSDownlink && iDnlinkInitialized) - { - iCSDownlink->SetVolume(volume); - status = TMS_RESULT_SUCCESS; - NotifyClient(iDnlinkStreamId, ECmdSetVolume, status, 0); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSDownlink && iDnlinkInitialized) - { - volume = iCSDownlink->Volume(); - status = TMS_RESULT_SUCCESS; - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetMaxGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetMaxGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSUplink && iUplinkInitialized) - { - gain = iCSUplink->MaxGain(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetGain(const guint gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iUplinkInitialized) - { - iCSUplink->SetGain(gain); - status = TMS_RESULT_SUCCESS; - NotifyClient(iUplinkInitialized, ECmdSetGain, status, 0); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSUplink && iUplinkInitialized) - { - gain = iCSUplink->Gain(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetGlobalMaxVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetGlobalMaxVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSDownlink && iDnlinkInitialized) - { - volume = iCSDownlink->MaxVolume(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetGlobalVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetGlobalVolume(const guint volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - - iGlobalVol = volume; - if (iCSDownlink && iDnlinkInitialized) - { - iCSDownlink->SetVolume(volume); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetGlobalVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetGlobalVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSDownlink && iDnlinkInitialized) - { - volume = iCSDownlink->Volume(); - status = TMS_RESULT_SUCCESS; - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetMaxGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetGlobalMaxGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSUplink && iUplinkInitialized) - { - gain = iCSUplink->MaxGain(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetGlobalGain(const guint gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - - iGlobalGain = gain; - if (iCSUplink && iUplinkInitialized) - { - iCSUplink->SetGain(gain); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetGlobalGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetGlobalGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_ILLEGAL_OPERATION); - if (iCSUplink && iUplinkInitialized) - { - gain = iCSUplink->Gain(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetCodecMode(const TMSFormatType /*fmttype*/, - const TMSStreamType /*strmtype*/, gint& /*mode*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetCodecMode(const TMSFormatType /*fmttype*/, - const TMSStreamType /*strmtype*/, const gint /*mode*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetSupportedBitRatesCount -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetSupportedBitRatesCount(guint& /*count*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetSupportedBitRates -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetSupportedBitRates(CBufFlat*& brbuffer) - { - TRACE_PRN_FN_ENT; - TRAPD(status, GetSupportedBitRatesL(brbuffer)); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetSupportedBitRatesL -// -// GetSupportedBitRates implementation which can leave. -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::GetSupportedBitRatesL(CBufFlat*& /*brbuffer*/) - { - User::Leave(TMS_RESULT_FEATURE_NOT_SUPPORTED); - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetBitRate -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetBitRate(guint& /*bitrate*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetBitRate -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetBitRate(const guint /*bitrate*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetVAD -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetVAD(const TMSFormatType /*fmttype*/, gboolean& /*vad*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetVAD -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetVAD(const TMSFormatType /*fmttype*/, const gboolean /*vad*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetCNG -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetCNG(const TMSFormatType /*fmttype*/, gboolean& /*cng*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetCNG -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetCNG(const TMSFormatType /*fmttype*/, - const gboolean /*cng*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetPlc(const TMSFormatType /*fmttype*/, gboolean& /*plc*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetPlc(const TMSFormatType /*fmttype*/, - const gboolean /*plc*/) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetOutput -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::SetOutput(TMSAudioOutput output) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - - if (iRouting) - { - CTelephonyAudioRouting::TAudioOutput taroutput = TOTAROUTPUT(output); - TRAP(status, iRouting->SetOutputL(taroutput)); - if (status == KErrArgument) - { - status = TMS_RESULT_INVALID_ARGUMENT; - } - else - { - status = TMS_RESULT_SUCCESS; - } - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetOutput -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetOutput(TMSAudioOutput& output) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - - if (iRouting) - { - CTelephonyAudioRouting::TAudioOutput taroutput; - taroutput = iRouting->Output(); - status = TMS_RESULT_SUCCESS; - output = TOTMSOUTPUT(taroutput); - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetPreviousOutput -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetPreviousOutput(TMSAudioOutput& output) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - - if (iRouting) - { - CTelephonyAudioRouting::TAudioOutput taroutput; - taroutput = iRouting->PreviousOutput(); - status = TMS_RESULT_SUCCESS; - output = TOTMSOUTPUT(taroutput); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::GetAvailableOutputsL -// -// ----------------------------------------------------------------------------- -// -gint TMSCallCSAdpt::GetAvailableOutputsL(gint& count, CBufFlat*& outputsbuffer) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - TMSAudioOutput tmsoutput; - - if (iRouting) - { - RBufWriteStream stream; - stream.Open(*outputsbuffer); - CleanupClosePushL(stream); - - TArray availableOutputs = - iRouting->AvailableOutputs(); - - guint numOfItems = availableOutputs.Count(); - count = numOfItems; - for (guint i = 0; i < numOfItems; i++) - { - tmsoutput = TOTMSOUTPUT(availableOutputs[i]); - stream.WriteUint32L(tmsoutput); - //TRACE_PRN_N1(_L("TMS->CallIPAdpt: outputs: [%d]"), availableOutputs[i]); - } - - CleanupStack::PopAndDestroy(&stream); - status = TMS_RESULT_SUCCESS; - } - - TRACE_PRN_FN_EXT; - return status; - } - - -// From TMSCSPDevSoundObserver - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DownlinkInitCompleted -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::DownlinkInitCompleted(TInt status) - { - TRACE_PRN_FN_ENT; - NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status, 0); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::UplinkInitCompleted -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::UplinkInitCompleted(TInt status) - { - TRACE_PRN_FN_ENT; - NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status, 0); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::UplinkActivatedSuccessfully -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::UplinkActivatedSuccessfully() - { - TRACE_PRN_FN_ENT; - NotifyClient(iUplinkStreamId, ECmdUplinkStarted, KErrNone, 0); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DownlinkActivatedSuccessfully -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::DownlinkActivatedSuccessfully() - { - TRACE_PRN_FN_ENT; - NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, KErrNone, 0); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::UplinkActivationFailed -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::UplinkActivationFailed() - { - TRACE_PRN_FN_ENT; - NotifyClient(iUplinkStreamId, ECmdUplinkStarted, TMS_RESULT_FATAL_ERROR, 0); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::DownlinkActivationFailed -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::DownlinkActivationFailed() - { - TRACE_PRN_FN_ENT; - NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, - TMS_RESULT_FATAL_ERROR, 0); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::AvailableOutputsChanged -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::AvailableOutputsChanged( - CTelephonyAudioRouting& /*aTelephonyAudioRouting*/) - { - TRACE_PRN_FN_ENT; - TRoutingMsgBufPckg pckg; - pckg().iEvent = TMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED; - iTarSettings->SetTar(pckg, ETrue); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::OutputChanged -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::OutputChanged( - CTelephonyAudioRouting& aTelephonyAudioRouting) - { - TRACE_PRN_FN_ENT; - TRoutingMsgBufPckg pckg; - pckg().iEvent = TMS_EVENT_ROUTING_OUTPUT_CHANGED; - pckg().iOutput = TOTMSOUTPUT(aTelephonyAudioRouting.Output()); - iTarSettings->SetTar(pckg, ETrue); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::SetOutputComplete -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::SetOutputComplete( - CTelephonyAudioRouting& aTelephonyAudioRouting, gint /*aError*/) - { - TRACE_PRN_FN_ENT; - TRoutingMsgBufPckg pckg; - pckg().iEvent = TMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE; - pckg().iOutput = TOTMSOUTPUT(aTelephonyAudioRouting.Output()); - if (iTarSettings) - { - iTarSettings->SetTar(pckg, ETrue); - } - //TRACE_PRN_IF_ERR(aError); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallCSAdpt::NotifyClient -// -// ----------------------------------------------------------------------------- -// -void TMSCallCSAdpt::NotifyClient(const gint strmId, const gint aCommand, - const gint aStatus, const gint64 /*aInt64*/) - { - iMsgBuffer.iRequest = aCommand; - iMsgBuffer.iStatus = aStatus; - - if (strmId == iUplinkStreamId) - { - iMsgQueueUp.Send(iMsgBuffer); - } - else if (strmId == iDnlinkStreamId) - { - iMsgQueueDn.Send(iMsgBuffer); - } - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/callipadpt.cpp --- a/mmserv/tms/tmscallserver/src/callipadpt.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1402 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include "tmsutility.h" -#include "tmsclientserver.h" -#include "tmsshared.h" -#include "ipcallstream.h" -#include "callipadpt.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::NewL -// Symbian constructor. -// ----------------------------------------------------------------------------- -// -TMSCallIPAdpt* TMSCallIPAdpt::NewL() - { - TMSCallIPAdpt* self = new (ELeave) TMSCallIPAdpt(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::ConstructL -// 2-nd phase constructor. -// ----------------------------------------------------------------------------- -// -void TMSCallIPAdpt::ConstructL() - { - TRACE_PRN_FN_ENT; - iIPUplink = NULL; - iIPDownlink = NULL; - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::TMSCallIPAdpt -// -// ----------------------------------------------------------------------------- -// -TMSCallIPAdpt::TMSCallIPAdpt() - { - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::~TMSCallIPAdpt -// -// ----------------------------------------------------------------------------- -// -TMSCallIPAdpt::~TMSCallIPAdpt() - { - TRACE_PRN_FN_ENT; - - iCodecs.Reset(); - iCodecs.Close(); - iArrBitrates.Reset(); - - delete iIPUplink; - delete iIPDownlink; - - if (iMsgQueueUp.Handle() > 0) - { - iMsgQueueUp.Close(); - } - if (iMsgQueueDn.Handle() > 0) - { - iMsgQueueDn.Close(); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::PostConstruct -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::PostConstruct() - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - iNextStreamId = 1; - iUplinkInitialized = FALSE; - iDnlinkInitialized = FALSE; - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::CreateStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::CreateStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint& outStrmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - status = TMS_RESULT_ALREADY_EXIST; - if (!iUplinkInitialized) - { - iUplinkInitialized = TRUE; - iUplinkStreamId = iNextStreamId; - outStrmId = iUplinkStreamId; - iNextStreamId++; - status = TMS_RESULT_SUCCESS; - } - break; - } - case TMS_STREAM_DOWNLINK: - { - status = TMS_RESULT_ALREADY_EXIST; - if (!iDnlinkInitialized) - { - iDnlinkInitialized = TRUE; - iDnlinkStreamId = iNextStreamId; - outStrmId = iDnlinkStreamId; - iNextStreamId++; - status = TMS_RESULT_SUCCESS; - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::InitStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::InitStreamL(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId, TMSFormatType frmtType, - const RMessage2& aMessage) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - - TUint32 fourCC = TOFOURCC(frmtType); - if (fourCC == NULL) - { - return TMS_RESULT_INVALID_ARGUMENT; - } - - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - status = TMS_RESULT_DOES_NOT_EXIST; - if (strmId == iUplinkStreamId) - { - SetFormat(iUplinkStreamId, fourCC); - status = OpenUplinkL(aMessage); - NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status); - } - break; - } - case TMS_STREAM_DOWNLINK: - { - status = TMS_RESULT_DOES_NOT_EXIST; - if (strmId == iDnlinkStreamId) - { - SetFormat(iDnlinkStreamId, fourCC); - status = OpenDownlinkL(aMessage); - NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status); - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - - TRACE_PRN_IF_ERR(status); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::StartStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::StartStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - if (strmId == iUplinkStreamId && iIPUplink) - { - iIPUplink->Start(); - status = TMS_RESULT_SUCCESS; - NotifyClient(iUplinkStreamId, ECmdUplinkStarted, status); - } - break; - } - case TMS_STREAM_DOWNLINK: - { - if (strmId == iDnlinkStreamId && iIPDownlink) - { - iIPDownlink->Start(); - status = TMS_RESULT_SUCCESS; - NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, status); - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::PauseStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::PauseStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - if (strmId == iUplinkStreamId && iIPUplink) - { - iIPUplink->Stop(); - status = TMS_RESULT_SUCCESS; - NotifyClient(iUplinkStreamId, ECmdUplinkPaused, status); - } - break; - } - case TMS_STREAM_DOWNLINK: - { - if (strmId == iDnlinkStreamId && iIPDownlink) - { - iIPDownlink->Stop(); - status = TMS_RESULT_SUCCESS; - NotifyClient(iDnlinkStreamId, ECmdDownlinkPaused, status); - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::StopStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::StopStream(TMSCallType /*callType*/, TMSStreamType strmType, - gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - if (strmId == iUplinkStreamId && iIPUplink) - { - iIPUplink->Stop(); - status = TMS_RESULT_SUCCESS; - NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status); - } - break; - } - case TMS_STREAM_DOWNLINK: - { - if (strmId == iDnlinkStreamId && iIPDownlink) - { - iIPDownlink->Stop(); - status = TMS_RESULT_SUCCESS; - NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status); - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::DeinitStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::DeinitStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - if (strmId == iUplinkStreamId && iIPUplink) - { - iIPUplink->Stop(); - //iUplinkStreamId = -1; - iUplinkInitialized = FALSE; - status = TMS_RESULT_SUCCESS; - NotifyClient(iUplinkStreamId, ECmdDownlinkDeInitComplete, - status); - } - break; - } - case TMS_STREAM_DOWNLINK: - { - if (strmId == iDnlinkStreamId && iIPDownlink) - { - iIPDownlink->Stop(); - //iDnlinkStreamId = -1; - iDnlinkInitialized = FALSE; - status = TMS_RESULT_SUCCESS; - NotifyClient(iDnlinkStreamId, ECmdDownlinkDeInitComplete, - status); - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::DeleteStream -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::DeleteStream(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - // This is additional error checking - if (strmId == iUplinkStreamId) - { - iUplinkStreamId = -1; - iUplinkInitialized = FALSE; - } - break; - } - case TMS_STREAM_DOWNLINK: - { - // This is additional error checking - if (strmId == iDnlinkStreamId) - { - iDnlinkStreamId = -1; - iDnlinkInitialized = FALSE; - } - break; - } - default: - { - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::DataXferBufferEmptied -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::DataXferBufferEmptied(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_UPLINK: - { - if (strmId == iUplinkStreamId) - { - TRAP(status, BufferEmptiedL()); - } - break; - } - case TMS_STREAM_DOWNLINK: - status = TMS_RESULT_ILLEGAL_OPERATION; - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::DataXferBufferFilled -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::DataXferBufferFilled(TMSCallType /*callType*/, - TMSStreamType strmType, gint strmId, guint datasize) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_DOWNLINK: - if (strmId == iDnlinkStreamId) - { - TRAP(status, BufferFilledL(datasize)); - } - break; - case TMS_STREAM_UPLINK: - status = TMS_RESULT_ILLEGAL_OPERATION; - break; - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetDataXferBufferHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetDataXferBufferHndl(const TMSCallType /*callType*/, - const TMSStreamType strmType, const gint strmId, const guint32 key, - RChunk& chunk) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (strmType) - { - case TMS_STREAM_DOWNLINK: - { - if (strmId == iDnlinkStreamId) - { - TRAP(status, GetDataXferChunkHndl(strmType, key, chunk)); - } - break; - } - case TMS_STREAM_UPLINK: - { - if (strmId == iUplinkStreamId) - { - TRAP(status, GetDataXferChunkHndl(strmType, key, chunk)); - } - break; - } - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetMaxVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetMaxVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->GetMaxVolume(volume); - iMaxVolume = volume; - TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: GetMaxVolume [%d]"), iMaxVolume); - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetVolume(const guint volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->SetVolume(volume); - NotifyClient(iDnlinkStreamId, ECmdSetVolume, status); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->GetVolume(volume); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetMaxGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetMaxGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->GetMaxGain(gain); - iMaxGain = gain; - TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetMaxGain [%d]"), iMaxGain); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetGain(const guint gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->SetGain(gain); - NotifyClient(iUplinkStreamId, ECmdSetGain, status); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->GetGain(gain); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetGlobalMaxVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetGlobalMaxVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->GetMaxVolume(volume); - iMaxVolume = volume; - TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: GetMaxVolume [%d]"), iMaxVolume); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetGlobalVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetGlobalVolume(const guint volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->SetVolume(volume); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetGlobalVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetGlobalVolume(guint& volume) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->GetVolume(volume); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetGlobalMaxGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetGlobalMaxGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->GetMaxGain(gain); - iMaxGain = gain; - TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetMaxGain [%d]"), iMaxGain); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetGlobalGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetGlobalGain(const guint gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->SetGain(gain); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetGlobalGain -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetGlobalGain(guint& gain) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->GetGain(gain); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, gint& mode) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (fmttype) - { - case TMS_FORMAT_ILBC: - status = GetIlbcCodecMode(mode, strmtype); - break; - case TMS_FORMAT_G711: - status = GetG711CodecMode(mode, strmtype); - break; - default: - status = TMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetCodecMode(const TMSFormatType fmttype, - const TMSStreamType strmtype, const gint mode) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - switch (fmttype) - { - case TMS_FORMAT_ILBC: - status = SetIlbcCodecMode(mode, strmtype); - break; - case TMS_FORMAT_G711: - status = SetG711CodecMode(mode, strmtype); - break; - default: - status = TMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED; - break; - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetSupportedBitRatesCount -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetSupportedBitRatesCount(guint& count) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPUplink) - { - status = iIPUplink->GetSupportedBitrates(iArrBitrates); - count = iArrBitrates.Count(); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetSupportedBitRates -// -// Bitrates are already returned from the codec as a result of call to -// GetSupportedBitratesCount(). Just pack them into a descriptor and return -// back to the client. -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetSupportedBitRates(CBufFlat*& brbuffer) - { - TRAPD(status, GetSupportedBitRatesL(brbuffer)); - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetSupportedBitRatesL -// -// GetSupportedBitRates implementation which can leave. -// ----------------------------------------------------------------------------- -// -void TMSCallIPAdpt::GetSupportedBitRatesL(CBufFlat*& brbuffer) - { - TRACE_PRN_FN_ENT; - RBufWriteStream stream; - stream.Open(*brbuffer); - CleanupClosePushL(stream); - guint numOfItems = iArrBitrates.Count(); - - for (guint i = 0; i < numOfItems; i++) - { - stream.WriteUint32L(iArrBitrates[i]); - //TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: BR: [%d]"), iArrBitrates[i]); - } - - CleanupStack::PopAndDestroy(&stream); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetBitRate -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetBitRate(guint& bitrate) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPUplink) - { - status = iIPUplink->GetBitrate(bitrate); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetBitRate -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetBitRate(const guint bitrate) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPUplink) - { - status = iIPUplink->SetBitrate(bitrate); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetVAD -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetVAD(const TMSFormatType fmttype, gboolean& vad) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPUplink) - { - status = iIPUplink->GetVad(fmttype, vad); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetVAD -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetVAD(const TMSFormatType fmttype, const gboolean vad) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPUplink) - { - status = iIPUplink->SetVad(fmttype, vad); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetCNG -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetCNG(const TMSFormatType fmttype, gboolean& cng) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPDownlink) - { - status = iIPDownlink->GetCng(fmttype, cng); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetCNG -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetCNG(const TMSFormatType fmttype, const gboolean cng) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPDownlink) - { - status = iIPDownlink->SetCng(fmttype, cng); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetPlc(const TMSFormatType fmttype, gboolean& plc) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPDownlink) - { - status = iIPDownlink->GetPlc(fmttype, plc); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetPlc(const TMSFormatType fmttype, const gboolean plc) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_INVALID_STATE); - if (iIPDownlink) - { - status = iIPDownlink->SetPlc(fmttype, plc); - } - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::OpenDownlinkL -// Method for player initialization. -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::OpenDownlinkL(const RMessage2& aMessage) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - - // Clients must have MultimediaDD capability to use this priority/pref. - // TODO: Also, TMS will monitor for emergency call and if detected it - // will deny access to audio resources. - iPriority.iPref = KAudioPrefVoipAudioDownlink; - iPriority.iPriority = KAudioPriorityVoipAudioDownlink; - - if (!iIPDownlink) - { - iIPDownlink = TMSIPDownlink::NewL(iDnFourCC, iPriority); - } - - if (iIPDownlink) - { - // Open message queue for handling server notifications to the client - if (iMsgQueueDn.Handle() <= 0) - { - // Second argument in TMSCallProxy::InitStream - status = iMsgQueueDn.Open(aMessage, 1); - } - - if (status == TMS_RESULT_SUCCESS) - { - // For transfer data buffer processing - iIPDownlink->SetMsgQueue(iMsgQueueDn); - } - } - - TRACE_PRN_IF_ERR(status); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::OpenUplinkL -// Method for recorder initialization. -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& aMessage) - { - TRACE_PRN_FN_ENT; - gint status(TMS_RESULT_SUCCESS); - - // Ensure clients have MultimediaDD capability to use this priority/pref - iPriority.iPref = KAudioPrefVoipAudioUplink; - iPriority.iPriority = KAudioPriorityVoipAudioUplink; - - if (!iIPUplink) - { - iIPUplink = TMSIPUplink::NewL(iUpFourCC, iPriority); - } - - if (iIPUplink) - { - // Open message queue for handling server notifications to the client - if (iMsgQueueUp.Handle() <= 0) - { - // Second argument in TMSCallProxy::InitStream - status = iMsgQueueUp.Open(aMessage, 1); - } - - if (status == TMS_RESULT_SUCCESS) - { - // For transfer data buffer processing - iIPUplink->SetMsgQueue(iMsgQueueUp); - } - } - - TRACE_PRN_IF_ERR(status); - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetFormat -// -// ----------------------------------------------------------------------------- -// -void TMSCallIPAdpt::SetFormat(const gint strmId, const TUint32 aFormat) - { - if (strmId == iUplinkStreamId) - { - iUpFourCC = aFormat; - } - else if (strmId == iDnlinkStreamId) - { - iDnFourCC = aFormat; - } - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::BufferFilled -// -// ----------------------------------------------------------------------------- -// -void TMSCallIPAdpt::BufferFilledL(TUint dataSize) - { - if (iIPDownlink) - { - iIPDownlink->BufferFilled(dataSize); - } - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::BufferEmptied -// -// ----------------------------------------------------------------------------- -// -void TMSCallIPAdpt::BufferEmptiedL() - { - if (iIPUplink) - { - iIPUplink->BufferEmptied(); - } - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetDataXferChunkHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetDataXferChunkHndl(const TMSStreamType strmType, - const TUint32 key, RChunk& chunk) - { - TRACE_PRN_FN_ENT; - - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - switch (strmType) - { - case TMS_STREAM_DOWNLINK: - { - if (iIPDownlink) - { - status = iIPDownlink->GetDataXferChunkHndl(key, chunk); - } - break; - } - case TMS_STREAM_UPLINK: - { - if (iIPUplink) - { - status = iIPUplink->GetDataXferChunkHndl(key, chunk); - } - break; - } - default: - status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; - break; - } - - TRACE_PRN_FN_EXT; - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetIlbcCodecMode(const gint mode, - const TMSStreamType strmtype) - { - gint status(TMS_RESULT_INVALID_ARGUMENT); - - if (strmtype == TMS_STREAM_DOWNLINK) - { - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->SetIlbcCodecMode(mode); - } - } - else if (strmtype == TMS_STREAM_UPLINK) - { - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->SetIlbcCodecMode(mode); - } - } - - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetIlbcCodecMode(gint& mode, const TMSStreamType strmtype) - { - gint status(TMS_RESULT_INVALID_ARGUMENT); - - if (strmtype == TMS_STREAM_DOWNLINK) - { - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->GetIlbcCodecMode(mode); - } - } - else if (strmtype == TMS_STREAM_UPLINK) - { - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->GetIlbcCodecMode(mode); - } - } - - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetG711CodecMode(const gint mode, - const TMSStreamType strmtype) - { - gint status(TMS_RESULT_INVALID_ARGUMENT); - - if (strmtype == TMS_STREAM_DOWNLINK) - { - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->SetG711CodecMode(mode); - } - } - else if (strmtype == TMS_STREAM_UPLINK) - { - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->SetG711CodecMode(mode); - } - } - - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetG711CodecMode(gint& mode, const TMSStreamType strmtype) - { - gint status(TMS_RESULT_INVALID_ARGUMENT); - - if (strmtype == TMS_STREAM_DOWNLINK) - { - if (iDnlinkInitialized && iIPDownlink) - { - status = iIPDownlink->GetG711CodecMode(mode); - } - } - else if (strmtype == TMS_STREAM_UPLINK) - { - if (iUplinkInitialized && iIPUplink) - { - status = iIPUplink->GetG711CodecMode(mode); - } - } - - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::FrameModeRequiredForEC -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::FrameModeRqrdForEC(gboolean& frmodereq) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iIPDownlink) - { - status = iIPDownlink->FrameModeRqrdForEC(frmodereq); - } - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetFrameMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetFrameMode(const gboolean frmode) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iIPDownlink) - { - status = iIPDownlink->SetFrameMode(frmode); - } - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetFrameMode -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetFrameMode(gboolean& frmode) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iIPDownlink) - { - status = iIPDownlink->GetFrameMode(frmode); - } - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::ConcealErrorForNextBuffer -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::ConcealErrorForNextBuffer() - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iIPDownlink) - { - status = iIPDownlink->ConcealErrorForNextBuffer(); - } - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::BadLsfNextBuffer -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::BadLsfNextBuffer() - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iIPDownlink) - { - status = iIPDownlink->BadLsfNextBuffer(); - } - return status; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::SetOutput -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::SetOutput(TMSAudioOutput output) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDnlinkInitialized && iIPDownlink) - { - TRAP(status, iIPDownlink->SetAudioDeviceL(output)); - } - return status; - } -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetOutput -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetOutput(TMSAudioOutput& output) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDnlinkInitialized && iIPDownlink) - { - TRAP(status, iIPDownlink->GetAudioDeviceL(output)); - } - return status; - } -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetPreviousOutput -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetPreviousOutput(TMSAudioOutput& /*output*/) - { - return TMS_RESULT_FEATURE_NOT_SUPPORTED; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::GetAvailableOutputsL -// -// ----------------------------------------------------------------------------- -// -gint TMSCallIPAdpt::GetAvailableOutputsL(gint& /*count*/, - CBufFlat*& /*outputsbuffer*/) - { - return TMS_RESULT_FEATURE_NOT_SUPPORTED; - } - -// ----------------------------------------------------------------------------- -// TMSCallIPAdpt::NotifyClient -// ----------------------------------------------------------------------------- -// -void TMSCallIPAdpt::NotifyClient(const gint strmId, const TInt aCommand, - const TInt aStatus, const TInt64 /*aInt64*/) - { - iMsgBuffer.iRequest = aCommand; - iMsgBuffer.iStatus = aStatus; - - if (strmId == iUplinkStreamId) - { - iMsgQueueUp.Send(iMsgBuffer); - } - else if (strmId == iDnlinkStreamId) - { - iMsgQueueDn.Send(iMsgBuffer); - } - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/csdownlink.cpp --- a/mmserv/tms/tmscallserver/src/csdownlink.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include "csdownlink.h" -#include "mcspdevsoundobserver.h" - -using namespace TMS; - -const gint KDefaultVolume = 4; -const gint KDefaultMaxVolume = 10; - -// ----------------------------------------------------------------------------- -// Static constructor -// ----------------------------------------------------------------------------- -// -TMSCSDownlink* TMSCSDownlink::NewL(TMSCSPDevSoundObserver& aObserver) - { - TMSCSDownlink* self = new (ELeave) TMSCSDownlink(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// Destructor. -// ----------------------------------------------------------------------------- -// -TMSCSDownlink::~TMSCSDownlink() - { - } - -// ----------------------------------------------------------------------------- -// Sets volume -// ----------------------------------------------------------------------------- -// -void TMSCSDownlink::SetVolume(gint aVolume) - { - if (iDevSound) - { - gint maxVolume(iDevSound->MaxVolume()); - maxVolume = (maxVolume > 0) ? maxVolume : KDefaultMaxVolume; - gint scaledVolume = (aVolume * maxVolume) / KDefaultMaxVolume; - iDevSound->SetVolume(scaledVolume); - } - } - -// ----------------------------------------------------------------------------- -// Gives volume -// ----------------------------------------------------------------------------- -// -gint TMSCSDownlink::Volume() - { - gint vol = 0; - if (iDevSound) - { - vol = iDevSound->Volume(); - } - return vol; - } - -// ----------------------------------------------------------------------------- -// Gives max volume -// ----------------------------------------------------------------------------- -// -gint TMSCSDownlink::MaxVolume() - { - gint vol = 0; - if (iDevSound) - { - vol = iDevSound->MaxVolume(); - } - return vol; - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Downlink stream has been activated successfully. -// ----------------------------------------------------------------------------- -// -void TMSCSDownlink::BufferToBeFilled(CMMFBuffer* /*aBuffer*/) - { - //CSPLOGSTRING( CSPINT, "TMSCSDownlink:: activated" ); - // We dont react to devsound messages unless we are activating. - if (IsActivationOngoing()) - { - iActive = ETrue; - iActivationOngoing = EFalse; - iObserver.DownlinkActivatedSuccessfully(); - } - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Downlink stream activation failed -// ----------------------------------------------------------------------------- -// -void TMSCSDownlink::PlayError(TInt aError) - { - //CSPLOGSTRING( CSPINT, "TMSCSDownlink::PlayError" ); - - // We dont react to devsound messages unless we are activating. - if (IsActivationOngoing()) - { - //CSPLOGSTRING( CSPINT, "TMSCSDownlink::PlayError activation failed" ); - if (aError == KErrAccessDenied) - { - iActivationOngoing = EFalse; - iObserver.DownlinkActivationFailed(); - } - } - } - -// ----------------------------------------------------------------------------- -// From class CSPDevsound -// Tries to activate Downlink stream. -// ----------------------------------------------------------------------------- -// -void TMSCSDownlink::DoActivateL() - { - if (iDevSound) - { - iDevSound->PlayInitL(); - } - } - -// ----------------------------------------------------------------------------- -// Constructor -// ----------------------------------------------------------------------------- -// -TMSCSDownlink::TMSCSDownlink(TMSCSPDevSoundObserver& aObserver) : - TMSCSPDevSound(aObserver) - { - } - -// ----------------------------------------------------------------------------- -// Second phase constructor -// ----------------------------------------------------------------------------- -// -void TMSCSDownlink::ConstructL() - { - TMSCSPDevSound::ConstructL(EMMFStatePlaying, KAudioPrefCSCallDownlink, - KAudioPriorityCSCallDownlink); - - if (iDevSound) - { - iDevSound->SetVolume(KDefaultVolume); - } - } - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/cspdevsound.cpp --- a/mmserv/tms/tmscallserver/src/cspdevsound.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include -#include "cspdevsound.h" -#include "mcspdevsoundobserver.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSCSPDevSound -// ----------------------------------------------------------------------------- -// -TMSCSPDevSound::TMSCSPDevSound(TMSCSPDevSoundObserver& aObserver) : - iObserver(aObserver) - { - } - -// ----------------------------------------------------------------------------- -// ConstructL -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::ConstructL(TMMFState aMode, gint aAudioPreference, - gint aAudioPriority) - { - TMMFPrioritySettings audioPriority; - TFourCC modemFourCC; - modemFourCC.Set(KS60FourCCCodeModem); - iDevSound = CMMFDevSound::NewL(); - if (iDevSound) - { -#ifndef __WINSCW__ - iDevSound->InitializeL(*this, modemFourCC, aMode); -#else //For testing TMS in WINSCW - iDevSound->InitializeL(*this, KMMFFourCCCodePCM16, aMode); -#endif - iStreamType = aAudioPreference; - audioPriority.iPriority = aAudioPriority; - audioPriority.iPref = aAudioPreference; - audioPriority.iState = aMode; - iDevSound->SetPrioritySettings(audioPriority); - } - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -TMSCSPDevSound::~TMSCSPDevSound() - { - delete iDevSound; - } - -// ----------------------------------------------------------------------------- -// Tries to activate the audio stream if not active or activating -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::Activate() - { - if (!IsActive() && !IsActivationOngoing()) - { - iActivationOngoing = ETrue; - TRAP_IGNORE(DoActivateL()); - } - } - -// ----------------------------------------------------------------------------- -// Deactivates the audio device. -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::Deactivate() - { - if (iDevSound && (IsActive() || IsActivationOngoing())) - { - iDevSound->Stop(); - iActive = EFalse; - iActivationOngoing = EFalse; - } - } - -// ----------------------------------------------------------------------------- -// ActivationOngoing -// ----------------------------------------------------------------------------- -// -TBool TMSCSPDevSound::IsActivationOngoing() const - { - return iActivationOngoing; - } - -// ----------------------------------------------------------------------------- -// IsActive -// ----------------------------------------------------------------------------- -// -TBool TMSCSPDevSound::IsActive() const - { - return iActive; - } - -// ----------------------------------------------------------------------------- -// DevSound -// ----------------------------------------------------------------------------- -// -CMMFDevSound& TMSCSPDevSound::DevSound() - { - return *iDevSound; - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::InitializeComplete(TInt aError) - { - if (iStreamType == KAudioPrefCSCallDownlink) - { - iObserver.DownlinkInitCompleted(aError); - } - else - { - iObserver.UplinkInitCompleted(aError); - } - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::BufferToBeFilled(CMMFBuffer* /*aBuffer*/) - { - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::PlayError(TInt /*aError*/) - { - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::ToneFinished(TInt /*aError*/) - { - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) - { - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::RecordError(TInt /*aError*/) - { - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::ConvertError(TInt /*aError*/) - { - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Not implemented -// ----------------------------------------------------------------------------- -// -void TMSCSPDevSound::DeviceMessage(TUid /*aMessageType*/, - const TDesC8& /*aMsg*/) - { - } - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/csuplink.cpp --- a/mmserv/tms/tmscallserver/src/csuplink.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include "csuplink.h" -#include "mcspdevsoundobserver.h" - -using namespace TMS; - -// Mute value -const gint KSetMuteToDevSound = 0; - -// ----------------------------------------------------------------------------- -// Static constructor. -// ----------------------------------------------------------------------------- -// -TMSCSUplink* TMSCSUplink::NewL(TMSCSPDevSoundObserver& aObserver) - { - TMSCSUplink* self = new (ELeave) TMSCSUplink(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -TMSCSUplink::~TMSCSUplink() - { - } - -// ----------------------------------------------------------------------------- -// Gives mic mute state -// ----------------------------------------------------------------------------- -// -TBool TMSCSUplink::IsMuted() - { - TBool isMuted = EFalse; - gint gain = 0; - if (iDevSound) - { - gain = iDevSound->Gain(); - } - if (!gain) - { - // Mute is on - isMuted = ETrue; - } - // CSPLOGSTRING( CSPINT, "TMSCSUplink::IsMuted" ); - return isMuted; - } - -// ----------------------------------------------------------------------------- -// Set mic muted. -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::SetMuted() - { - if (iDevSound) - { - iDevSound->SetGain(KSetMuteToDevSound); - } - } - -// ----------------------------------------------------------------------------- -// Set mic unmuted -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::SetUnmuted() - { - if (iDevSound) - { - iDevSound->SetGain(iDevSound->MaxGain()); - } - } - -// ----------------------------------------------------------------------------- -// Sets gain -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::SetGain(gint aGain) - { - if (iDevSound) - { - iDevSound->SetGain(aGain); - } - } - -// ----------------------------------------------------------------------------- -// Gives volume -// ----------------------------------------------------------------------------- -// -gint TMSCSUplink::Gain() - { - gint gain = 0; - if (iDevSound) - { - gain = iDevSound->Gain(); - } - return gain; - } - -// ----------------------------------------------------------------------------- -// Gives max gain -// ----------------------------------------------------------------------------- -// -gint TMSCSUplink::MaxGain() - { - gint gain = 0; - if (iDevSound) - { - gain = iDevSound->MaxGain(); - } - return gain; - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Activation was successfull. -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) - { - // CSPLOGSTRING( CSPINT, "TMSCSUplink::BufferToBeEmptied" ); - - // We dont react to devsound messages unless we are activating. - if (IsActivationOngoing()) - { - iActive = ETrue; - iActivationOngoing = EFalse; - iObserver.UplinkActivatedSuccessfully(); - } - } - -// ----------------------------------------------------------------------------- -// From class MDevSoundObserver -// Activation feiled -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::RecordError(TInt aError) - { - // CSPLOGSTRING( CSPINT, "TMSCSUplink::RecordError" ); - - // We dont react to devsound messages unless we are activating. - if (IsActivationOngoing()) - { - if (aError == KErrAccessDenied) - { - iActivationOngoing = EFalse; - iObserver.UplinkActivationFailed(); - } - } - } - -// ----------------------------------------------------------------------------- -// From class TMSCSPDevSound -// Tries to activate mic stream. Stream becomes active when BufferToBeFilled -// gets called. -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::DoActivateL() - { - if (iDevSound) - { - iDevSound->RecordInitL(); - } - } - -// ----------------------------------------------------------------------------- -// Constructor -// ----------------------------------------------------------------------------- -// -TMSCSUplink::TMSCSUplink(TMSCSPDevSoundObserver& aObserver) : - TMSCSPDevSound(aObserver) - { - } - -// ----------------------------------------------------------------------------- -// Second phase constructor -// ----------------------------------------------------------------------------- -// -void TMSCSUplink::ConstructL() - { - TMSCSPDevSound::ConstructL(EMMFStateRecording, KAudioPrefCSCallUplink, - KAudioPriorityCSCallUplink); - } - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/delaytimer.cpp --- a/mmserv/tms/tmscallserver/src/delaytimer.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -// INCLUDE FILES -#include "delaytimer.h" -#include "tmsutility.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -TMSCallDelayTimer* TMSCallDelayTimer::NewL() - { - TRACE_PRN_FN_ENT; - TMSCallDelayTimer* self = new (ELeave) TMSCallDelayTimer; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - TRACE_PRN_FN_EXT; - return self; - } - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::TMSCallDelayTimer() -// C++ constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TMSCallDelayTimer::TMSCallDelayTimer() : - CActive(CActive::EPriorityStandard) - { - TRACE_PRN_FN_ENT; - CActiveScheduler::Add(this); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void TMSCallDelayTimer::ConstructL() - { - TRACE_PRN_FN_ENT; - User::LeaveIfError(iShutDownTimer.CreateLocal()); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::~TMSCallDelayTimer -// Destructor -// ----------------------------------------------------------------------------- -// -TMSCallDelayTimer::~TMSCallDelayTimer() - { - TRACE_PRN_FN_ENT; - Cancel(); - iShutDownTimer.Close(); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::SetDelay -// Request a timeout after aDelay -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void TMSCallDelayTimer::SetDelay(TTimeIntervalMicroSeconds32 aDelay) - { - TRACE_PRN_FN_ENT; - if (!IsActive()) - { - iStatus = KRequestPending; - SetActive(); - iShutDownTimer.After(iStatus, aDelay); - } - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::RunL -// Called by Active object framework when timer times out. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void TMSCallDelayTimer::RunL() - { - TRACE_PRN_FN_ENT; - CActiveScheduler::Stop(); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSCallDelayTimer::DoCancel -// Called by the Active object framework when user cancels active object. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void TMSCallDelayTimer::DoCancel() - { - TRACE_PRN_FN_ENT; - iShutDownTimer.Cancel(); - TRACE_PRN_FN_EXT; - } - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/ipcalldownlink.cpp --- a/mmserv/tms/tmscallserver/src/ipcalldownlink.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,911 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include -#include -#include "tmsutility.h" -#include "gsterrorconcealmentinterface.h" -#include "gstg711decoderinterface.h" -#include "gstilbcdecoderinterface.h" -#include "gstg729decoderinterface.h" -#include "ipcallstream.h" - -using namespace TMS; - -static TMSIPDownlink* iSelfDn; -#ifdef _DEBUG -static TInt iHeap; -#endif //_DEBUG -GstBuffer* gstDnlBuffer; -GstCaps* caps; -gint requestBufLen; - -#ifdef __PLAY_WAV_FROM_FILE__ -_LIT16(KTestFile1, "c:\\data\\sounds\\digital\\sample1.wav"); -#endif - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::cb_raw_playback_handoff -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::cb_raw_playback_handoff(GstElement* /*appsrc*/, - guint size) - { - TRACE_PRN_N(_L("TMS->DNL: cb_raw_playback_handoff")); - - requestBufLen = size; - -#ifdef _DEBUG - TInt block; - RHeap &heap = User::Heap(); - TInt avail = heap.Available(block); - RDebug::Print(_L("TMS->PRINT-HEAP-DN:Size[%d], Available[%d], delta[%d]"), - heap.Size(), avail, (iHeap - avail)); - iHeap = avail; -#endif //_DEBUG - iSelfDn->BufferToBeFilled(); - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::bus_call -// ----------------------------------------------------------------------------- -// -gboolean TMSIPDownlink::bus_call(GstBus* /*bus*/, GstMessage* msg, - gpointer /*data*/) - { - switch (GST_MESSAGE_TYPE(msg)) - { - case GST_MESSAGE_EOS: - { - gst_element_set_state(iSelfDn->iPipelinePlay, GST_STATE_NULL); - gst_object_unref(GST_OBJECT(iSelfDn->iPipelinePlay)); - break; - } - case GST_MESSAGE_ERROR: - { - gchar* debug; - GError* err; - gst_message_parse_error(msg, &err, &debug); - g_free(debug); - g_print("Error: %s\n", err->message); - g_error_free(err); - break; - } - default: - { - break; - } - } - - return ETrue; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::gst_initialize_play -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::gst_initialize_play() - { - TRACE_PRN_FN_ENT; - - gint err = KErrNone; - - // create elements - iPipelinePlay = gst_pipeline_new("pipelinePlay"); - iAppSrc = gst_element_factory_make("appsrc", "source"); - iSink = gst_element_factory_make("devsoundsink", "sink"); - - if (!iAppSrc || !iSink) - { - err = KErrNotFound; - TRACE_PRN_IF_ERR(err); - return err; - } - - iBusPlay = gst_pipeline_get_bus(GST_PIPELINE(iPipelinePlay)); - gst_bus_add_watch(iBusPlay, TMSIPDownlink::bus_call, NULL); - gst_object_unref(iBusPlay); - - iMaxBufLen = ConfigureMedia(iCodecID); - - g_object_set(iAppSrc, "stream-type", 0, "blocksize", iMaxBufLen, NULL); - gst_bin_add_many(GST_BIN(iPipelinePlay), iAppSrc, iSink, NULL); - gst_element_link(iAppSrc, iSink); - - caps = gst_caps_new_simple(iMediaType, - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "rate", G_TYPE_INT, 8000, - "channels", G_TYPE_INT, 1, - NULL); - - //NOTE: d/s is not ready at this time to return true maxvolume - TInt maxvol = 10; -#ifdef __WINSCW__ - maxvol = 10000; -#endif //__WINSCW__ - g_object_set(G_OBJECT(iSink), - "volume", maxvol, -#ifndef __WINSCW__ - "priority", (gint)iPriority.iPriority, - "preference", (gint)iPriority.iPref, -#endif - NULL); - - gst_app_src_set_caps(GST_APP_SRC(iAppSrc), caps); - gst_app_src_set_max_bytes(GST_APP_SRC(iAppSrc), iMaxBufLen); - err = SetCodecCi(); - //gst_element_set_state(iPipelinePlay, GST_STATE_READY); - - TRACE_PRN_FN_EXT; - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::gst_play_raw -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::gst_play_raw() - { - TRACE_PRN_FN_ENT; - - // start playback - gst_element_set_state(iPipelinePlay, GST_STATE_PLAYING); - - //configure the appsrc, we will push buffer to appsrc when it needs more data - g_signal_connect(iAppSrc, "need-data", - G_CALLBACK (cb_raw_playback_handoff), - NULL); - TRACE_PRN_FN_EXT; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::TMSIPDownlink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPDownlink::TMSIPDownlink() - { - iSelfDn = this; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::~TMSIPDownlink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPDownlink::~TMSIPDownlink() - { - TRACE_PRN_FN_ENT; - - Stop(); - gst_caps_unref(caps); - gst_object_unref(GST_OBJECT(iPipelinePlay)); - gst_deinit(); - - delete iErrConcealmentIntfc; - delete iG711DecoderIntfc; - delete iG729DecoderIntfc; - delete iIlbcDecoderIntfc; - -#ifdef __PLAY_WAV_FROM_FILE__ - iFs.Close(); - delete fbuf; -#endif - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::NewL -// Symbian two-phase constructor -// ----------------------------------------------------------------------------- -// -TMSIPDownlink* TMSIPDownlink::NewL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TMSIPDownlink* self = new (ELeave) TMSIPDownlink(); - CleanupStack::PushL(self); - self->ConstructL(codecID, priority); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::ConstructL -// Part two of Symbian two phase construction -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::ConstructL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TRACE_PRN_FN_ENT; - - iCodecID = codecID; - iPriority = priority; - // SetTime(); - gst_init(NULL, NULL); - // CalcLatency(); - // SetTime(); - - gint err = gst_initialize_play(); - if (err != TMS_RESULT_SUCCESS) - { - User::Leave(err); - } - - // Client must set these before querying! - iG711DecodeMode = TMS_G711_CODEC_MODE_ALAW; - iILBCDecodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; - -#ifdef __PLAY_WAV_FROM_FILE__ - iReadSize = KVoIPPCM16FrameLen; - err = iFs.Connect(); - if (err == KErrNone) - { - err = iFile.Open(iFs, KTestFile1, EFileShareAny | EFileRead); - } - if (err == KErrNone) - { - iFile.Size(fsize); - } - fbuf = HBufC8::NewL(fsize); - TPtr8 p = fbuf->Des(); - iFile.Read(p, fsize); - iFile.Close(); -#endif - // CalcLatency(); - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::Start -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::Start() - { - TRACE_PRN_FN_ENT; - - gst_play_raw(); - iStatus = EStreaming; - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::Stop -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::Stop() - { - TRACE_PRN_FN_ENT; - - if (iStatus == EStreaming) - { - if (iPipelinePlay != NULL && - iPipelinePlay->current_state == GST_STATE_PLAYING) - { - gst_element_set_state(iPipelinePlay, GST_STATE_NULL); - } - - iStatus = EReady; - } - - if (gstDnlBuffer) - { - gst_buffer_unref(gstDnlBuffer); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::BufferToBeFilled -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::BufferToBeFilled() - { - TRACE_PRN_N1(_L("TMS->DNL->BTBF: requestBufLen[%d]"), requestBufLen); - -#ifndef __PLAY_WAV_FROM_FILE__ - // Create or adjust the chunk - TInt err = DoChunk(requestBufLen, iMsgBuffer); - - if (err != TMS_RESULT_SUCCESS) - { - Stop(); - iMsgBuffer.iStatus = err; - } - else - { - // Notify client there is buffer ready to be filled - iMsgBuffer.iStatus = iChunk.Handle(); - iMsgBuffer.iInt = requestBufLen; - iStatus = EStreaming; - // If chunk is opened, we will expect a call from the client to - // get chunk handle. When we get a call to copy chunk handle, - // check these variables and see if they match. This is not - // completely secure, but will provide some level of security - if (iMsgBuffer.iBool == TRUE) - { - iWriteDataXferHndlToClient = TRUE; - iKey = iMsgBuffer.iUint32; - } - } - - iMsgBuffer.iRequest = ECmdFillBuffer; - iMsgQueue.Send(iMsgBuffer); - -#else //__PLAY_WAV_FROM_FILE__ - TInt err = KErrNone; - BufferFilled(); -#endif //__PLAY_WAV_FROM_FILE__ - TRACE_PRN_IF_ERR(err); - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::BufferFilled -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::BufferFilled(const guint buflen) - { -#ifndef __PLAY_WAV_FROM_FILE__ - gstDnlBuffer = gst_buffer_new(); - gst_buffer_set_caps(gstDnlBuffer, caps); - GST_BUFFER_SIZE(gstDnlBuffer) = buflen; - - //TODO: what if bufLen > requestBufLen? - - // IMPL#1: - // gstDnlBuffer->data pointer is set to use chunk pointer. - // Although unlikely in the pull mode, this may potentially result - // in data loss if chunk gets overwritten before it is consumed. - gst_buffer_set_data(gstDnlBuffer, iChunk.Base(), buflen); - - // IMPL#2 - // Alternative implementation with new buffer alloc and memcpy. - // GStreamer will free this memory when buffer refcount becomes 0. - //guint8* ptr = (guint8*)g_malloc(buflen); - //GST_BUFFER_MALLOCDATA(gstDnlBuffer) = GST_BUFFER_DATA(gstDnlBuffer) = ptr; - //memcpy(ptr, iChunk.Base(), buflen); - -#else //__PLAY_WAV_FROM_FILE__ - User::After(TTimeIntervalMicroSeconds32(150000)); - - TPtr8 p = fbuf->Des(); - TInt buflen = iReadSize; - gstDnlBuffer = gst_buffer_new_and_alloc(buflen); - gst_buffer_set_caps(gstDnlBuffer, caps); - unsigned char* ptr = (unsigned char*)((fbuf->Ptr())+iReadBytes); - gst_buffer_set_data(gstDnlBuffer, ptr, buflen); - - if ((iReadBytes + iReadSize> fsize)) - { - // start over from the beginning - iReadBytes = 0; - } - else - { - iReadBytes += iReadSize; - } - -#endif //__PLAY_WAV_FROM_FILE__ - gst_app_src_push_buffer(GST_APP_SRC(iAppSrc), gstDnlBuffer); - TRACE_PRN_N1(_L("TMS->DNL->BF: LEN[%d]"), buflen); - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetCodecCi -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetCodecCi() - { - TRAPD(err, SetCodecCiL()); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetCodecCiL -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::SetCodecCiL() - { - TRACE_PRN_FN_ENT; - - switch (iCodecID) - { - case KMccFourCCIdG711: - { - if (!iG711DecoderIntfc) - { - iG711DecoderIntfc = GST_G711_DECODER_GET_IFACE(iSink); - } - break; - } - case KMccFourCCIdG729: - { - if (!iG729DecoderIntfc) - { - iG729DecoderIntfc = GST_G729_DECODER_GET_IFACE(iSink); - } - break; - } - case KMccFourCCIdILBC: - { - if (!iIlbcDecoderIntfc) - { - iIlbcDecoderIntfc = GST_ILBC_DECODER_GET_IFACE(iSink); - } - break; - } - case KMccFourCCIdAMRNB: - case KMMFFourCCCodePCM16: - { - break; - } - default: - { - User::Leave(TMS_RESULT_INVALID_ARGUMENT); - } - } - - if (iCodecID == KMccFourCCIdG711 || - iCodecID == KMccFourCCIdG729 || - iCodecID == KMccFourCCIdILBC || - iCodecID == KMccFourCCIdAMRNB) - { - if (!iErrConcealmentIntfc) - { - iErrConcealmentIntfc = GST_ERROR_CONCEALMENT_GET_IFACE(iSink); - } - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetVolume(const guint volume) - { - g_object_set(G_OBJECT(iSink), "volume", volume, NULL); - TRACE_PRN_N1(_L("TMS->DNL: SetVolume [%d]"), volume); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetVolume(guint& volume) - { - g_object_get(G_OBJECT(iSink), "volume", &volume, NULL); - TRACE_PRN_N1(_L("TMS->DNL: GetVolume [%d]"), volume); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetMaxVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetMaxVolume(guint& volume) - { - g_object_get(G_OBJECT(iSink), "maxvolume", &volume, NULL); - TRACE_PRN_N1(_L("TMS->DNL: MaxVolume [%d]"), volume); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetDataXferChunkHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) - { - gint status = TMS_RESULT_DOES_NOT_EXIST; - - if (iChunk.Handle()) - { - if (iWriteDataXferHndlToClient && (iKey == key)) - { - chunk = iChunk; - iWriteDataXferHndlToClient = FALSE; - iKey = 0; - status = TMS_RESULT_SUCCESS; - } - else - { - status = TMS_RESULT_ILLEGAL_OPERATION; - } - } - - TRACE_PRN_IF_ERR(status); - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetIlbcCodecMode(gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iILBCDecodeMode = mode; - - if (iIlbcDecoderIntfc && iCodecID == KMccFourCCIdILBC) - { - if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) - { - err = iIlbcDecoderIntfc->SetDecoderMode(E20msFrame); - TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [20ms]")); - } - else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) - { - err = iIlbcDecoderIntfc->SetDecoderMode(E30msFrame); - TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [30ms]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetIlbcCodecMode(gint& mode) - { - // not available through CIs -> return cashed value - mode = iILBCDecodeMode; - TRACE_PRN_N1(_L("TMS->DNL: GetIlbcCodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetG711CodecMode(gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iG711DecodeMode = mode; - - if (iG711DecoderIntfc && iCodecID == KMccFourCCIdG711) - { - if (mode == TMS_G711_CODEC_MODE_ALAW) - { - err = iG711DecoderIntfc->SetDecoderMode(EDecALaw); - TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [ALaw]")); - } - else if (mode == TMS_G711_CODEC_MODE_MULAW) - { - err = iG711DecoderIntfc->SetDecoderMode(EDecULaw); - TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [uLaw]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetG711CodecMode(gint& mode) - { - // not available through CIs -> return cached value - mode = iG711DecodeMode; - TRACE_PRN_N1(_L("TMS->DNL: GetG711CodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::FrameModeRqrdForEC -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::FrameModeRqrdForEC(gboolean& frmodereq) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (iErrConcealmentIntfc) - { - err = iErrConcealmentIntfc->FrameModeRqrdForEC(&frmodereq); - TRACE_PRN_N1(_L("TMS->DNL: FrameModeRqrdForEC [%d]"), frmodereq); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetFrameMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetFrameMode(const gboolean frmode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iFrameMode = frmode; - - if (iErrConcealmentIntfc) - { - err = iErrConcealmentIntfc->SetFrameMode(frmode); - TRACE_PRN_N1(_L("TMS->DNL: SetFrameMode [%d]"), frmode); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetFrameMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetFrameMode(gboolean& frmode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iErrConcealmentIntfc) - { - // not available through CIs -> return cached value - frmode = iFrameMode; - TRACE_PRN_N1(_L("TMS->DNL: GetFrameMode [%d]"), frmode); - err = TMS_RESULT_SUCCESS; - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::ConcealErrorForNextBuffer -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::ConcealErrorForNextBuffer() - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iErrConcealmentIntfc) - { - err = iErrConcealmentIntfc->ConcealErrorForNextBuffer(); - TRACE_PRN_N(_L("TMS->DNL: ConcealErrorForNextBuffer")); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetCng -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetCng(const TMSFormatType fmttype, const gboolean cng) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - err = iG711DecoderIntfc->SetCng(cng); - TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); - } - else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) - { - err = iIlbcDecoderIntfc->SetCng(cng); - TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetCng -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetCng(const TMSFormatType fmttype, gboolean& cng) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - err = iG711DecoderIntfc->GetCng(&cng); - TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); - } - else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) - { - err = iIlbcDecoderIntfc->GetCng(&cng); - TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetPlc(const TMSFormatType fmttype, const gboolean plc) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - iPlc = plc; - err = iG711DecoderIntfc->SetPlc(iPlc); - TRACE_PRN_N1(_L("TMS->DNL: SetPlc [%d]"), plc); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetPlc(const TMSFormatType fmttype, gboolean& plc) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - // not available through CIs -> return cached value - plc = iPlc; - err = TMS_RESULT_SUCCESS; - TRACE_PRN_N1(_L("TMS->DNL: GetPlc [%d]"), plc); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::BadLsfNextBuffer -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::BadLsfNextBuffer() - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EStreaming) - { - if (iCodecID == KMccFourCCIdG729 && iG729DecoderIntfc) - { - err = iG729DecoderIntfc->BadLsfNextBuffer(); - TRACE_PRN_N(_L("TMS->DNL: BadLsfNextBuffer")); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetAudioDeviceL -// -// ----------------------------------------------------------------------------- -void TMSIPDownlink::SetAudioDeviceL(TMSAudioOutput output) - { - gint outputDev; - - // ENoPreference=0, EAll=1, ENoOutput=2, EPrivate=3, EPublic=4 - switch (output) - { - case TMS_AUDIO_OUTPUT_PRIVATE: - case TMS_AUDIO_OUTPUT_HANDSET: - outputDev = (gint)CAudioOutput::EPrivate; - break; - case TMS_AUDIO_OUTPUT_PUBLIC: - case TMS_AUDIO_OUTPUT_LOUDSPEAKER: - outputDev = (gint)CAudioOutput::EPublic; - break; - default: // Use default device routing - outputDev = (gint)CAudioOutput::ENoPreference; - break; - } - - g_object_set(G_OBJECT(iSink), "outputdevice", outputDev, NULL); - TRACE_PRN_N1(_L("TMS->DNL: SetAudioDeviceL [%d]"), outputDev); - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetAudioDeviceL -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::GetAudioDeviceL(TMSAudioOutput& output) - { - TRACE_PRN_FN_ENT; - - gint outputDev; - g_object_get(G_OBJECT(iSink), "outputdevice", &outputDev, NULL); - TRACE_PRN_N1(_L("TMS->DNL: GetAudioDevice [%d]"), outputDev); - - switch (outputDev) - { - case CAudioOutput::ENoPreference: - case CAudioOutput::EAll: - case CAudioOutput::ENoOutput: - case CAudioOutput::EPrivate: - output = TMS_AUDIO_OUTPUT_PRIVATE; - break; - case CAudioOutput::EPublic: - output = TMS_AUDIO_OUTPUT_PUBLIC; - break; - default: - output = TMS_AUDIO_OUTPUT_PRIVATE; - break; - } - - TRACE_PRN_FN_EXT; - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/ipcalldownlinkds.cpp --- a/mmserv/tms/tmscallserver/src/ipcalldownlinkds.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,815 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include "tmsutility.h" -#include "ipcallstream.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::TMSIPDownlink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPDownlink::TMSIPDownlink() - { - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::~TMSIPDownlink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPDownlink::~TMSIPDownlink() - { - TRACE_PRN_FN_ENT; - - Stop(); - - delete iAudioOutput; - delete iErrConcealmentIntfc; - delete iG711DecoderIntfc; - delete iG729DecoderIntfc; - delete iIlbcDecoderIntfc; - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::NewL -// Symbian two-phase constructor -// ----------------------------------------------------------------------------- -// -TMSIPDownlink* TMSIPDownlink::NewL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TMSIPDownlink* self = new (ELeave) TMSIPDownlink(); - CleanupStack::PushL(self); - self->ConstructL(codecID, priority); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::ConstructL -// Part two of Symbian two phase construction -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::ConstructL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TRACE_PRN_FN_ENT; - - iCodecID = codecID; - iPriority = priority; - - // Client must set these before querying! - iG711DecodeMode = TMS_G711_CODEC_MODE_ALAW; - iILBCDecodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; - - TRAPD(err, InitDevSoundL(EMMFStatePlaying, priority)); - if (err != TMS_RESULT_SUCCESS) - { - User::Leave(err); - } - - iMaxBufLen = ConfigureMedia(iCodecID); - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::Start -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::Start() - { - TRACE_PRN_FN_ENT; - - gint err = TMS_RESULT_ILLEGAL_OPERATION; - - if (iStatus == EReady && iDevSound) - { - TRAP(err, iDevSound->PlayInitL()); - TRACE_PRN_IF_ERR(err); - -#ifdef _DEBUG - iSamplesPlayedCount = 0; -#endif - if (err != TMS_RESULT_SUCCESS) - { - iStatus = EReady; - } - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::Stop -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::Stop() - { - TRACE_PRN_FN_ENT; - - if (iStatus == EStreaming && iDevSound) - { - iDevSound->Stop(); - iStatus = EReady; - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::BufferToBeFilled -// A reference to the buffer delivered from the DevSound is stored locally -// for later use. It will be filled with the data passed from the client -// when it calls BufferFilled. -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::BufferToBeFilled(CMMFBuffer* aBuffer) - { - // Store pointer to the received buffer - iDevSoundBufPtr = static_cast(aBuffer); - iBufLen = iDevSoundBufPtr->RequestSize(); - TRACE_PRN_N1(_L("TMS->DNL->BTBF: LEN[%d]"), iBufLen); - -#ifndef __WINSCW__ - //TODO: revisit this! - // The first AMR buffer returns 1 for no data frame. - /*if (iCodecID == KMccFourCCIdAMRNB) - { - iBufLen = iMaxBufLen; - }*/ -#endif //__WINSCW__ - // Create or adjust the chunk - gint err = DoChunk(iBufLen, iMsgBuffer); - - if (err != TMS_RESULT_SUCCESS) - { - Stop(); - iMsgBuffer.iStatus = err; - } - else - { - // Notify client there is buffer ready to be filled - iMsgBuffer.iStatus = err; - iMsgBuffer.iInt = iBufLen; - iStatus = EStreaming; - // If chunk is opened, we will expect a call from the client to - // get chunk handle. When we get a call to copy chunk handle, - // check these variables and see if they match. This is not - // completely secure, but will provide some level of security - if (iMsgBuffer.iBool == TRUE) - { - iWriteDataXferHndlToClient = TRUE; - iKey = iMsgBuffer.iUint32; - } - } - - iMsgBuffer.iRequest = ECmdFillBuffer; - err = iMsgQueue.Send(iMsgBuffer); - - TRACE_PRN_IF_ERR(err); - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::BufferFilled -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::BufferFilled(const guint buflen) - { - TRACE_PRN_N1(_L("TMS->DNL->BF: LEN[%d]"), buflen); - - // Copy data over from chunk - TPtr8 dataPtr(iChunk.Base(), buflen, iMaxBufLen); - // RDebug::RawPrint(dataPtr); - - if (iStatus == EStreaming && iDevSound && iDevSoundBufPtr) - { - // Fill D/S buffer and send it for playback - iDevSoundBufPtr->Data() = dataPtr; - TRAP_IGNORE(iDevSoundBufPtr->SetRequestSizeL(buflen)); - //try playing anyway - iDevSound->PlayData(); - } - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetCodecCi -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetCodecCi() - { - TRAPD(err, SetCodecCiL()); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetCodecCiL -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::SetCodecCiL() - { - TRACE_PRN_FN_ENT; - - switch (iCodecID) - { - case KMccFourCCIdG711: - { - if (!iG711DecoderIntfc) - { - iG711DecoderIntfc = CG711DecoderIntfc::NewL(*iDevSound); - } - break; - } - case KMccFourCCIdG729: - { - if (!iG729DecoderIntfc) - { - iG729DecoderIntfc = CG729DecoderIntfc::NewL(*iDevSound); - } - break; - } - case KMccFourCCIdILBC: - { - if (!iIlbcDecoderIntfc) - { - iIlbcDecoderIntfc = CIlbcDecoderIntfc::NewL(*iDevSound); - } - break; - } - case KMccFourCCIdAMRNB: - case KMMFFourCCCodePCM16: - { - break; - } - default: - { - User::Leave(TMS_RESULT_INVALID_ARGUMENT); - break; - } - } - - if (!iErrConcealmentIntfc && iCodecID != KMMFFourCCCodePCM16) - { - iErrConcealmentIntfc = CErrorConcealmentIntfc::NewL(*iDevSound); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetVolume(const guint volume) - { - gint ret(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDevSound) - { - iDevSound->SetVolume(volume); - ret = TMS_RESULT_SUCCESS; - } - TRACE_PRN_N1(_L("TMS->DNL: SetVolume [%d]"), volume); - return ret; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetVolume(guint& volume) - { - gint ret(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDevSound) - { - volume = iDevSound->Volume(); - ret = TMS_RESULT_SUCCESS; - } - TRACE_PRN_N1(_L("TMS->DNL: GetVolume [%d]"), volume); - return ret; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetMaxVolume -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetMaxVolume(guint& volume) - { - gint ret(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDevSound) - { - volume = iDevSound->MaxVolume(); - ret = TMS_RESULT_SUCCESS; - } - TRACE_PRN_N1(_L("TMS->DNL: MaxVolume [%d]"), volume); - return ret; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetDataXferChunkHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) - { - gint status = TMS_RESULT_DOES_NOT_EXIST; - - if (iChunk.Handle()) - { - if (iWriteDataXferHndlToClient && (iKey == key)) - { - chunk = iChunk; - iWriteDataXferHndlToClient = FALSE; - iKey = 0; - status = TMS_RESULT_SUCCESS; - } - else - { - status = TMS_RESULT_ILLEGAL_OPERATION; - } - } - - TRACE_PRN_IF_ERR(status); - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetIlbcCodecMode(gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iILBCDecodeMode = mode; - - if (iIlbcDecoderIntfc && iCodecID == KMccFourCCIdILBC) - { - if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) - { - err = iIlbcDecoderIntfc->SetDecoderMode( - CIlbcDecoderIntfc::E20msFrame); - TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [20ms]")); - } - else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) - { - err = iIlbcDecoderIntfc->SetDecoderMode( - CIlbcDecoderIntfc::E30msFrame); - TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [30ms]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetIlbcCodecMode(gint& mode) - { - // not available through CIs -> return cashed value - mode = iILBCDecodeMode; - TRACE_PRN_N1(_L("TMS->DNL: GetIlbcCodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetG711CodecMode(gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iG711DecodeMode = mode; - - if (iG711DecoderIntfc && iCodecID == KMccFourCCIdG711) - { - if (mode == TMS_G711_CODEC_MODE_ALAW) - { - err = iG711DecoderIntfc->SetDecoderMode( - CG711DecoderIntfc::EDecALaw); - TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [ALaw]")); - } - else if (mode == TMS_G711_CODEC_MODE_MULAW) - { - err = iG711DecoderIntfc->SetDecoderMode( - CG711DecoderIntfc::EDecULaw); - TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [uLaw]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetG711CodecMode(gint& mode) - { - // not available through CIs -> return cached value - mode = iG711DecodeMode; - TRACE_PRN_N1(_L("TMS->DNL: GetG711CodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::FrameModeRqrdForEC -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::FrameModeRqrdForEC(gboolean& frmodereq) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (iErrConcealmentIntfc) - { - err = iErrConcealmentIntfc->FrameModeRqrdForEC(frmodereq); - TRACE_PRN_N1(_L("TMS->DNL: FrameModeRqrdForEC [%d]"), frmodereq); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetFrameMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetFrameMode(const gboolean frmode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iFrameMode = frmode; - - if (iErrConcealmentIntfc) - { - err = iErrConcealmentIntfc->SetFrameMode(frmode); - TRACE_PRN_N1(_L("TMS->DNL: SetFrameMode [%d]"), frmode); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetFrameMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetFrameMode(gboolean& frmode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iErrConcealmentIntfc) - { - // not available through CIs -> return cached value - frmode = iFrameMode; - TRACE_PRN_N1(_L("TMS->DNL: GetFrameMode [%d]"), frmode); - err = TMS_RESULT_SUCCESS; - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::ConcealErrorForNextBuffer -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::ConcealErrorForNextBuffer() - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iErrConcealmentIntfc) - { - err = iErrConcealmentIntfc->ConcealErrorForNextBuffer(); - TRACE_PRN_N(_L("TMS->DNL: ConcealErrorForNextBuffer")); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetCng -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetCng(const TMSFormatType fmttype, const gboolean cng) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - err = iG711DecoderIntfc->SetCng(cng); - TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); - } - else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) - { - err = iIlbcDecoderIntfc->SetCng(cng); - TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetCng -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetCng(const TMSFormatType fmttype, gboolean& cng) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - err = iG711DecoderIntfc->GetCng(cng); - TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); - } - else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) - { - err = iIlbcDecoderIntfc->GetCng(cng); - TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::SetPlc(const TMSFormatType fmttype, const gboolean plc) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - iPlc = plc; - err = iG711DecoderIntfc->SetPlc(iPlc); - TRACE_PRN_N1(_L("TMS->DNL: SetPlc [%d]"), plc); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetPlc -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::GetPlc(const TMSFormatType fmttype, gboolean& plc) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) - { - // not available through CIs -> return cached value - plc = iPlc; - err = TMS_RESULT_SUCCESS; - TRACE_PRN_N1(_L("TMS->DNL: GetPlc [%d]"), plc); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::BadLsfNextBuffer -// -// ----------------------------------------------------------------------------- -// -gint TMSIPDownlink::BadLsfNextBuffer() - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EStreaming) - { - if (iCodecID == KMccFourCCIdG729 && iG729DecoderIntfc) - { - err = iG729DecoderIntfc->BadLsfNextBuffer(); - TRACE_PRN_N(_L("TMS->DNL: BadLsfNextBuffer")); - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::SetAudioDeviceL -// -// ----------------------------------------------------------------------------- -void TMSIPDownlink::SetAudioDeviceL(TMSAudioOutput output) - { - TRACE_PRN_FN_ENT; - - if (!iAudioOutput) - { - iAudioOutput = CAudioOutput::NewL(*iDevSound); - } - - if (iAudioOutput) - { - // ENoPreference=0, EAll=1, ENoOutput=2, EPrivate=3, EPublic=4 - CAudioOutput::TAudioOutputPreference outputDev; - - switch (output) - { - case TMS_AUDIO_OUTPUT_PRIVATE: - case TMS_AUDIO_OUTPUT_HANDSET: - outputDev = CAudioOutput::EPrivate; - break; - case TMS_AUDIO_OUTPUT_PUBLIC: - case TMS_AUDIO_OUTPUT_LOUDSPEAKER: - outputDev = CAudioOutput::EPublic; - break; - default: // Use default device routing - outputDev = CAudioOutput::ENoPreference; - break; - } - - iAudioOutput->SetAudioOutputL(outputDev); - TRACE_PRN_N1(_L("TMS->DNL: SetAudioDeviceL [%d]"), outputDev); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::GetAudioDeviceL -// -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::GetAudioDeviceL(TMSAudioOutput& output) - { - TRACE_PRN_FN_ENT; - - if (!iAudioOutput) - { - iAudioOutput = CAudioOutput::NewL(*iDevSound); - } - - if (iAudioOutput) - { - CAudioOutput::TAudioOutputPreference outputDev = - iAudioOutput->AudioOutput(); - - switch (outputDev) - { - case CAudioOutput::ENoPreference: - case CAudioOutput::EAll: - case CAudioOutput::ENoOutput: - case CAudioOutput::EPrivate: - output = TMS_AUDIO_OUTPUT_PRIVATE; - break; - case CAudioOutput::EPublic: - output = TMS_AUDIO_OUTPUT_PUBLIC; - break; - default: - output = TMS_AUDIO_OUTPUT_PRIVATE; - break; - } - } - - TRACE_PRN_FN_EXT; - } - -// CALLBACKS - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::InitializeComplete -// A callback from the DevSound indicating completion of the initialization. -// It will send config data to the D/S and configure the encoder via CI. -// If everything goes well, the state of the thread is set EReady. -// The initialization completion message is sent back to the main thread. -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::InitializeComplete(TInt aError) - { - TRACE_PRN_FN_ENT; - - gint err = aError; - - if (err == TMS_RESULT_SUCCESS && iDevSound) - { - TMMFCapabilities conf; - conf = iDevSound->Config(); - conf.iRate = EMMFSampleRate8000Hz; - conf.iChannels = EMMFMono; - TRAP(err, iDevSound->SetConfigL(conf)); - if (err == TMS_RESULT_SUCCESS) - { - // We are ready to stream even in case of later CI setting failure - iStatus = EReady; - iMaxVolume = iDevSound->MaxVolume(); - } - - // Init Custom Interface API to the decoder - err = SetCodecCi(); - if (err != TMS_RESULT_SUCCESS) - { - // DEBUG only - // Can ignore error - although decoder is not fully configured but - // it can still run in the default mode. - TRACE_PRN_IF_ERR(err); - } - } - - // TODO: Notify client - - TRACE_PRN_IF_ERR(err); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPDownlink::PlayError -// From MDevSoundObserver -// Record error is send to client over comm channel. -// The state of recorder is rolled back to EReady. -// ----------------------------------------------------------------------------- -// -void TMSIPDownlink::PlayError(TInt /*aError*/) - { - //TRACE_PRN_IF_ERR(aError); - -#ifdef _DEBUG - iSamplesPlayedCount = 0; -#endif - iStatus = EReady; - - // TODO: Notify client - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/ipcallstreambase.cpp --- a/mmserv/tms/tmscallserver/src/ipcallstreambase.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include "tmsutility.h" -#include "tmsshared.h" -#include "ipcallstream.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSIPCallStreamBase::~TMSIPCallStreamBase -// Destructor -// ----------------------------------------------------------------------------- -// -TMSIPCallStreamBase::~TMSIPCallStreamBase() - { - TRACE_PRN_FN_ENT; - - if (iChunk.Handle() > 0) - { - iChunk.Close(); - } - -#ifndef __USE_GSTREAMER__ - delete iDevSound; -#endif //__USE_GSTREAMER__ - TRACE_PRN_FN_EXT; - } - -#ifndef __USE_GSTREAMER__ -// ----------------------------------------------------------------------------- -// TMSIPCallStreamBase::InitDevSoundL -// -// ----------------------------------------------------------------------------- -// -void TMSIPCallStreamBase::InitDevSoundL(const TMMFState aDevSoundState, - const TMMFPrioritySettings priority) - { - TRACE_PRN_FN_ENT; - - if (!iDevSound) - { - // Create D/S recording/playing device - iDevSound = CMMFDevSound::NewL(); - } - - if (iDevSound) - { - iDevSound->InitializeL(*this, TFourCC(iCodecID), aDevSoundState); - iDevSound->SetPrioritySettings(priority); - } - } -#endif //__USE_GSTREAMER__ - -// ----------------------------------------------------------------------------- -// TMSIPCallStreamBase::SetMsgQueue -// -// ----------------------------------------------------------------------------- -// -void TMSIPCallStreamBase::SetMsgQueue(const RMsgQueue aMsgQueue) - { - iMsgQueue = aMsgQueue; - } - -// ----------------------------------------------------------------------------- -// TMSIPCallStreamBase::ConfigureMedia -// -// ----------------------------------------------------------------------------- -// -gint TMSIPCallStreamBase::ConfigureMedia(const guint32 aCodecID) - { - gint framelen = 0; - - switch (aCodecID) - { - case KMccFourCCIdG711: - iMediaType = "audio/x-alaw"; - // iMediaType = "audio/x-mulaw"; - framelen = KTMSG711FrameLen10ms; //TODO: may be H/W specific! - //framelen = KTMSG711FrameLen20ms; - break; - case KMccFourCCIdG729: - iMediaType = "audio/g729"; - framelen = KTMSG729FrameLen; - break; - case KMccFourCCIdILBC: - iMediaType = "audio/ilbc"; - framelen = KTMSILBCFrameLen20ms; - //framelen = KTMSILBCFrameLen30ms; - break; - case KMccFourCCIdAMRNB: - iMediaType = "audio/amr"; - framelen = KTMSAMRNBFrameLen; - //framelen = KTMSAMRNBFrameLenFM; - break; - case KMMFFourCCCodePCM16: - default: - iMediaType = "audio/x-raw-int"; - framelen = KTMSPCM16FrameLen; -#ifdef __WINSCW__ - framelen *= 4; //16kB -#endif - break; - } - - //TODO: DEVLON TEST - if (iCodecID != KMMFFourCCCodePCM16) - { - framelen *= 10; - } - //TODO: DEVLON TEST - - return framelen; - } - -// ----------------------------------------------------------------------------- -// TMSIPCallStreamBase::DoChunk -// Checks, adjusts and creates global RChunk. -// ----------------------------------------------------------------------------- -// -gint TMSIPCallStreamBase::DoChunk(const gint aDataLen, TmsMsgBuf& aMsgBuffer) - { - gint status(KErrNone); - - // If chunk already created, try to reuse it - if (iChunk.Handle()) - { - // committed size is smaller but chunk is large enough to hold data - if ((iChunk.Size() < aDataLen) && (aDataLen <= iChunk.MaxSize())) - { - status = iChunk.Adjust(aDataLen); - TRACE_PRN_N1(_L("IP_CALL: DoChunk->Chunk Adjusted [%d]"), aDataLen); - } - else if (aDataLen > iChunk.MaxSize()) - { - iChunk.Close(); - TRACE_PRN_N(_L("IP_CALL: DoChunk->Chunk Closed")); - } - } - RET_ERR_IF_ERR(status); - - // Request kernel to create global RChunk if needed - aMsgBuffer.iBool = FALSE; - if (!iChunk.Handle()) - { - // TODO consider using some max instead - status = iChunk.CreateGlobal(KNullDesC, aDataLen, aDataLen); - // Mark to re-open chunk handle - aMsgBuffer.iBool = TRUE; - aMsgBuffer.iUint32 = Math::Random(); - TRACE_PRN_N2(_L("IP_CALL: DoChunk->Chunk Created [%d]key[%d]"), - aDataLen, aMsgBuffer.iUint32); - } - TRACE_PRN_IF_ERR(status); - return status; - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/ipcalluplink.cpp --- a/mmserv/tms/tmscallserver/src/ipcalluplink.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,758 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include -#include "tmsutility.h" -#include "ipcallstream.h" - -using namespace TMS; - -static TMSIPUplink* iSelfUp; -GstBuffer* gstUplBuffer; -#ifdef _DEBUG -//static TInt iHeapUp; -#endif //_DEBUG - -// ----------------------------------------------------------------------------- -// TMSIPUplink::cb_record_raw_handoff -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::cb_record_raw_handoff(GstElement *sink) - { - TRACE_PRN_N(_L("TMS->UPL: cb_record_raw_handoff Enter")); - -#ifdef _DEBUG - /* TInt block; - RHeap &heap = User::Heap(); - TInt avail = heap.Available(block); - RDebug::Print(_L("VoIP->PRINT-HEAP-UP:Available:[%d], delta:[%d]"), - avail, iHeapUp-avail); - iHeapUp = avail;*/ -#endif - - gstUplBuffer = gst_app_sink_pull_buffer(GST_APP_SINK(sink)); - iSelfUp->BufferToBeEmptied(); - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::bus_call -// ----------------------------------------------------------------------------- -// -gboolean TMSIPUplink::bus_call(GstBus* /*bus*/, GstMessage* msg, - gpointer /*data*/) - { - switch (GST_MESSAGE_TYPE(msg)) - { - case GST_MESSAGE_EOS: - { - gst_element_set_state(iSelfUp->iPipelineRec, GST_STATE_NULL); - gst_object_unref(GST_OBJECT(iSelfUp->iPipelineRec)); - break; - } - case GST_MESSAGE_ERROR: - { - gchar *debug; - GError *err; - gst_message_parse_error(msg, &err, &debug); - g_free(debug); - g_print("Error: %s\n", err->message); - g_error_free(err); - break; - } - default: - { - break; - } - } - return ETrue; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::gst_initialize_record -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::gst_initialize_record() - { - TRACE_PRN_FN_ENT; - - gint err = KErrNone; - - // create a new bin to hold the elements - iPipelineRec = gst_pipeline_new("pipelineRec"); - iSource = gst_element_factory_make("devsoundsrc", "record_audio"); - iAppSink = gst_element_factory_make("appsink", "appsink"); - - if (!iSource || !iAppSink) - { - err = KErrNotFound; - TRACE_PRN_IF_ERR(err); - return err; - } - - iMaxBufLen = ConfigureMedia(iCodecID); - - GstCaps* caps = gst_caps_new_simple(iMediaType, - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "rate", G_TYPE_INT, 8000, - "channels", G_TYPE_INT, 1, - NULL); - - iBusRec = gst_pipeline_get_bus(GST_PIPELINE(iPipelineRec)); - gst_bus_add_watch(iBusRec, (TMSIPUplink::bus_call), NULL); - gst_object_unref(iBusRec); - - // add objects to the main iPipelineRec - gst_bin_add_many(GST_BIN(iPipelineRec), iSource, iAppSink, NULL); - - // link the elements - gst_element_link_filtered(iSource, iAppSink, caps); - - g_object_set(G_OBJECT(iAppSink), - "max-buffers", 1, - "emit-signals", TRUE, - "sync", FALSE, - NULL); - - g_signal_connect(iAppSink, "new-buffer", - G_CALLBACK(cb_record_raw_handoff), - NULL); - - gst_app_sink_set_caps(GST_APP_SINK(iAppSink), caps); - gst_caps_unref(caps); - - //NOTE: d/s is not ready at this time to return true maxgain - TInt maxgain = 1; -#ifdef __WINSCW__ - maxgain = 64; -#endif //__WINSCW__ - g_object_set(G_OBJECT(iSource), - "blocksize", iMaxBufLen, - "gain", maxgain, -#ifndef __WINSCW__ - "priority", (gint)iPriority.iPriority, - "preference", (gint)iPriority.iPref, -#endif - NULL); - - err = SetCodecCi(); - //gst_element_set_state(iPipelineRec, GST_STATE_READY); - - TRACE_PRN_FN_EXT; - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::gst_record_raw -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::gst_record_raw() - { - // start recording - gst_element_set_state(iPipelineRec, GST_STATE_PLAYING); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::TMSIPUplink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPUplink::TMSIPUplink() - { - iSelfUp = this; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::~TMSIPUplink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPUplink::~TMSIPUplink() - { - TRACE_PRN_FN_ENT; - - Stop(); - gst_object_unref(GST_OBJECT(iPipelineRec)); - gst_deinit(); - - delete iSpeechEncoderConfig; - delete iG711EncoderIntfc; - delete iG729EncoderIntfc; - delete iIlbcEncoderIntfc; - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::NewL -// Symbian two-phase constructor -// ----------------------------------------------------------------------------- -// -TMSIPUplink* TMSIPUplink::NewL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TMSIPUplink* self = new (ELeave) TMSIPUplink(); - CleanupStack::PushL(self); - self->ConstructL(codecID, priority); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::ConstructL -// Part two of Symbian two phase construction -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::ConstructL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TRACE_PRN_FN_ENT; - - iCodecID = codecID; - iPriority = priority; - // SetTime(); - gst_init(NULL, NULL); - // CalcLatency(); - // SetTime(); - gint err = gst_initialize_record(); - if (err != TMS_RESULT_SUCCESS) - { - User::Leave(err); - } - - // Client must set these before querying! - iG711EncodeMode = TMS_G711_CODEC_MODE_ALAW; - iILBCEncodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; - // CalcLatency(); - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::Start -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::Start() - { - TRACE_PRN_FN_ENT; - - gst_record_raw(); - iStatus = EStreaming; - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::Stop -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::Stop() - { - TRACE_PRN_FN_ENT; - - if (iStatus == EStreaming) - { - if (iPipelineRec != NULL && - iPipelineRec->current_state == GST_STATE_PLAYING) - { - GstStateChangeReturn ret; - ret = gst_element_set_state(iPipelineRec, GST_STATE_NULL); - if (ret == GST_STATE_CHANGE_FAILURE) - { - ;// retry??? - //GST_STATE_CHANGE_SUCCESS - } - } - iStatus = EReady; - } - - if (gstUplBuffer) - { - gst_buffer_unref(gstUplBuffer); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::BufferToBeEmptied -// From MDevSoundObserver -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::BufferToBeEmptied() - { - TInt buflen = GST_BUFFER_SIZE(gstUplBuffer); - TRACE_PRN_N1(_L("TMS->UPL: BTBE->LEN [%d]"), buflen); - - // Adjust/create RChunk if necessary - TInt err = DoChunk(buflen, iMsgBuffer); - - if (err != TMS_RESULT_SUCCESS) - { - Stop(); - iMsgBuffer.iStatus = err; - } - else - { - // Pass buffer parameters to the client - iMsgBuffer.iStatus = err; - iMsgBuffer.iInt = buflen; - - // Copy data over to RChunk - TPtr8 dataPtr(iChunk.Base(), buflen, iMaxBufLen); - dataPtr.Copy(GST_BUFFER_DATA(gstUplBuffer), buflen); - gst_buffer_unref(gstUplBuffer); - - //RDebug::RawPrint(dataPtr); - iStatus = EStreaming; - - // If chunk is opened, we will expect a call from the client to - // get chunk handle. When we get a call to copy chunk handle, - // check these variables and see if they match. This is not - // completely secure, but will provide some level of security. - if (iMsgBuffer.iBool == TRUE) - { - iWriteDataXferHndlToClient = TRUE; - iKey = iMsgBuffer.iUint32; - } - } - - // Notify client there is buffer ready to be emptied - iMsgBuffer.iRequest = ECmdEmptyBuffer; - err = iMsgQueue.Send(iMsgBuffer); - TRACE_PRN_IF_ERR(err); - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::BufferEmptied -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::BufferEmptied() - { - //TRACE_PRN_N(_L("TMS->UPL->BE")); - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetCodecCi -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetCodecCi() - { - TRAPD(err, SetCodecCiL()); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetCodecCiL -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::SetCodecCiL() - { - TRACE_PRN_FN_ENT; - - switch (iCodecID) - { - case KMccFourCCIdG711: - { - if (!iG711EncoderIntfc) - { - iG711EncoderIntfc = GST_G711_ENCODER_GET_IFACE(iSource); - } - break; - } - case KMccFourCCIdG729: - { - if (!iG729EncoderIntfc) - { - iG729EncoderIntfc = GST_G729_ENCODER_GET_IFACE(iSource); - } - break; - } - case KMccFourCCIdILBC: - { - if (!iIlbcEncoderIntfc) - { - iIlbcEncoderIntfc = GST_ILBC_ENCODER_GET_IFACE(iSource); - } - break; - } - case KMccFourCCIdAMRNB: - case KMMFFourCCCodePCM16: - { - break; - } - default: - { - User::Leave(TMS_RESULT_INVALID_ARGUMENT); - } - } - - if (!iSpeechEncoderConfig && iCodecID != KMMFFourCCCodePCM16) - { - iSpeechEncoderConfig = GST_SPEECH_ENCODER_CONFIG_GET_IFACE(iSource); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetGain(const guint gain) - { - g_object_set(G_OBJECT(iSource), "gain", gain, NULL); - TRACE_PRN_N1(_L("TMS->UPL: SetGain [%d]"), gain); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetGain(guint& gain) - { - g_object_get(G_OBJECT(iSource), "gain", &gain, NULL); - TRACE_PRN_N1(_L("TMS->UPL: GetGain [%d]"), gain); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetMaxGain -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetMaxGain(guint& gain) - { - g_object_get(G_OBJECT(iSource), "maxgain", &gain, NULL); - TRACE_PRN_N1(_L("TMS->UPL: MaxGain [%d]"), gain); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetDataXferChunkHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) - { - gint status = TMS_RESULT_SUCCESS; - - if (iChunk.Handle()) - { - if (iWriteDataXferHndlToClient && (iKey == key)) - { - chunk = iChunk; - iWriteDataXferHndlToClient = FALSE; - iKey = 0; - } - else - { - status = TMS_RESULT_ILLEGAL_OPERATION; - } - } - - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetIlbcCodecMode(const gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iILBCEncodeMode = mode; - - if (iIlbcEncoderIntfc && iCodecID == KMccFourCCIdILBC) - { - if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) - { - err = iIlbcEncoderIntfc->SetEncoderMode(EIlbc20msFrame); - TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [20ms Frame]")); - } - else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) - { - err = iIlbcEncoderIntfc->SetEncoderMode(EIlbc30msFrame); - TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [30ms Frame]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetIlbcCodecMode(gint& mode) - { - // not available through CIs -> return cached value - mode = iILBCEncodeMode; - TRACE_PRN_N1(_L("TMS->UPL: GetIlbcCodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetG711CodecMode(const gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iG711EncodeMode = mode; - - if (iG711EncoderIntfc && iCodecID == KMccFourCCIdG711) - { - if (mode == TMS_G711_CODEC_MODE_ALAW) - { - err = iG711EncoderIntfc->SetEncoderMode(EEncALaw); - TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [ALaw]")); - } - else if (mode == TMS_G711_CODEC_MODE_MULAW) - { - err = iG711EncoderIntfc->SetEncoderMode(EEncULaw); - TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [uLaw]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetG711CodecMode(gint& mode) - { - // not available through CIs -> return cached value - mode = iG711EncodeMode; - TRACE_PRN_N1(_L("TMS->UPL: GetG711CodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetSupportedBitrates -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetSupportedBitrates(RArray& bitrates) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - bitrates.Reset(); - - if (iSpeechEncoderConfig) - { - gint i = 0; - GList* gbitrates = NULL; - // GList* walk; - err = iSpeechEncoderConfig->GetSupportedBitrates(&gbitrates); - - //TODO: try returning GList and do not convert to RArray - for (; gbitrates; gbitrates = g_list_next (gbitrates)) - { - // guint br = GPOINTER_TO_INT(gbitrates->data); - guint br = GPOINTER_TO_UINT(gbitrates->data); - bitrates.Append(br); - TRACE_PRN_N2(_L("TMS->UPL: GetSupportedBitrates %d:[%d]"), i+1, br); - i++; - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetBitrate -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetBitrate(guint bitrate) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->SetBitrate(bitrate); - TRACE_PRN_N1(_L("TMS->UPL: SetBitrate [%d]"), bitrate); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetBitrate -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetBitrate(guint& bitrate) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->GetBitrate(&bitrate); - TRACE_PRN_N1(_L("TMS->UPL: GetBitrate [%d]"), bitrate); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetVad -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetVad(const TMSFormatType fmttype, const gboolean vad) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - switch (fmttype) - { - case TMS_FORMAT_G711: - { - if (iG711EncoderIntfc) - { - err = iG711EncoderIntfc->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_G729: - { - if (iG729EncoderIntfc) - { - err = iG729EncoderIntfc->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_ILBC: - { - if (iIlbcEncoderIntfc) - { - err = iIlbcEncoderIntfc->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_AMR: - { - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - default: - { - break; //TMS_RESULT_DOES_NOT_EXIST - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetVad -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetVad(const TMSFormatType fmttype, gboolean& vad) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - switch (fmttype) - { - case TMS_FORMAT_G711: - { - if (iG711EncoderIntfc) - { - err = iG711EncoderIntfc->GetVadMode(&vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_G729: - { - if (iG729EncoderIntfc) - { - err = iG729EncoderIntfc->GetVadMode(&vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_ILBC: - { - if (iIlbcEncoderIntfc) - { - err = iIlbcEncoderIntfc->GetVadMode(&vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_AMR: - { - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->GetVadMode(&vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - default: - { - break; //TMS_RESULT_DOES_NOT_EXIST - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/ipcalluplinkds.cpp --- a/mmserv/tms/tmscallserver/src/ipcalluplinkds.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,690 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -#include -#include -#include -#include -#include -#include -#include "tmsutility.h" -#include "ipcallstream.h" - -using namespace TMS; - -// ----------------------------------------------------------------------------- -// TMSIPUplink::TMSIPUplink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPUplink::TMSIPUplink() - { - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::~TMSIPUplink -// Standard Constructor -// ----------------------------------------------------------------------------- -// -TMSIPUplink::~TMSIPUplink() - { - TRACE_PRN_FN_ENT; - - Stop(); - - delete iSpeechEncoderConfig; - delete iG711EncoderIntfc; - delete iG729EncoderIntfc; - delete iIlbcEncoderIntfc; - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::NewL -// Symbian two-phase constructor -// ----------------------------------------------------------------------------- -// -TMSIPUplink* TMSIPUplink::NewL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TMSIPUplink* self = new (ELeave) TMSIPUplink(); - CleanupStack::PushL(self); - self->ConstructL(codecID, priority); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::ConstructL -// Part two of Symbian two phase construction -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::ConstructL(const guint32 codecID, - const TMMFPrioritySettings priority) - { - TRACE_PRN_FN_ENT; - - iCodecID = codecID; - iPriority = priority; - - // Client must set these before querying! - iG711EncodeMode = TMS_G711_CODEC_MODE_ALAW; - iILBCEncodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; - - TRAPD(err, InitDevSoundL(EMMFStateRecording, priority)); - if (err != TMS_RESULT_SUCCESS) - { - User::Leave(err); - } - - iMaxBufLen = ConfigureMedia(iCodecID); - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::Start -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::Start() - { - TRACE_PRN_FN_ENT; - - gint err = TMS_RESULT_ILLEGAL_OPERATION; - iWriteDataXferHndlToClient = FALSE; - - if (iStatus == EReady && iDevSound) - { - TRAP(err, iDevSound->RecordInitL()); - TRACE_PRN_IF_ERR(err); - - if (err != TMS_RESULT_SUCCESS) - { - //TODO: Notify main thread - iStatus = EReady; - } -#ifdef _DEBUG - else - { - iSamplesRecCount = 0; - } -#endif - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::Stop -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::Stop() - { - TRACE_PRN_FN_ENT; - - if (iStatus == EStreaming && iDevSound) - { - iDevSound->Stop(); - iStatus = EReady; - } - else - { - //TODO: Notify main thread - } - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::BufferToBeEmptied -// From MDevSoundObserver -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::BufferToBeEmptied(CMMFBuffer* aBuffer) - { - iDevSoundBufPtr = static_cast(aBuffer); - TDes8& data = iDevSoundBufPtr->Data(); - - iBufLen = iDevSoundBufPtr->BufferSize(); - TRACE_PRN_N1(_L("TMS->UPL: BTBE->LEN [%d]"), iBufLen); - - // Adjust/create RChunk if necessary - gint err = DoChunk(iBufLen, iMsgBuffer); - - if (err != TMS_RESULT_SUCCESS) - { - Stop(); - iMsgBuffer.iStatus = err; - } - else - { - // Pass buffer parameters to the client - iMsgBuffer.iStatus = err; - iMsgBuffer.iInt = iBufLen; - - // Copy data over to RChunk - TPtr8 dataPtr(iChunk.Base(), iBufLen, iBufLen); - dataPtr = data; - iStatus = EStreaming; - - // If chunk is opened, we will expect a call from the client to - // get chunk handle. When we get a call to copy chunk handle, - // check these variables and see if they match. This is not - // completely secure, but will provide some level of security. - if (iMsgBuffer.iBool == TRUE) - { - iWriteDataXferHndlToClient = TRUE; - iKey = iMsgBuffer.iUint32; - } - } - - // Notify client there is buffer ready to be emptied - iMsgBuffer.iRequest = ECmdEmptyBuffer; - err = iMsgQueue.Send(iMsgBuffer); - TRACE_PRN_IF_ERR(err); - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::BufferEmptied -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::BufferEmptied() - { - //TRACE_PRN_N(_L("TMS->UPL->BE")); - if (iDevSound) - { - iDevSound->RecordData(); - } - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetCodecCi -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetCodecCi() - { - TRAPD(err, SetCodecCiL()); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetCodecCiL -// -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::SetCodecCiL() - { - TRACE_PRN_FN_ENT; - - switch (iCodecID) - { - case KMccFourCCIdG711: - { - if (!iG711EncoderIntfc) - { - iG711EncoderIntfc = CG711EncoderIntfc::NewL(*iDevSound); - } - break; - } - case KMccFourCCIdG729: - { - if (!iG729EncoderIntfc) - { - iG729EncoderIntfc = CG729EncoderIntfc::NewL(*iDevSound); - } - break; - } - case KMccFourCCIdILBC: - { - if (!iIlbcEncoderIntfc) - { - iIlbcEncoderIntfc = CIlbcEncoderIntfc::NewL(*iDevSound); - } - break; - } - case KMccFourCCIdAMRNB: - case KMMFFourCCCodePCM16: - { - break; - } - default: - { - User::Leave(TMS_RESULT_INVALID_ARGUMENT); - break; - } - } - - if (!iSpeechEncoderConfig && iCodecID != KMMFFourCCCodePCM16) - { - iSpeechEncoderConfig = CSpeechEncoderConfig::NewL(*iDevSound); - } - - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetGain(const guint gain) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDevSound) - { - iDevSound->SetGain(gain); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_N1(_L("TMS->UPL: SetGain [%d]"), gain); - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetGain -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetGain(guint& gain) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDevSound) - { - gain = iDevSound->Gain(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_N1(_L("TMS->UPL: GetGain [%d]"), gain); - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetMaxGain -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetMaxGain(guint& gain) - { - gint status(TMS_RESULT_UNINITIALIZED_OBJECT); - if (iDevSound) - { - gain = iDevSound->MaxGain(); - status = TMS_RESULT_SUCCESS; - } - TRACE_PRN_N1(_L("TMS->UPL: MaxGain [%d]"), gain); - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetDataXferChunkHndl -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) - { - gint status = TMS_RESULT_SUCCESS; - - if (iChunk.Handle()) - { - if (iWriteDataXferHndlToClient && (iKey == key)) - { - chunk = iChunk; - iWriteDataXferHndlToClient = FALSE; - iKey = 0; - } - else - { - status = TMS_RESULT_ILLEGAL_OPERATION; - } - } - - return status; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetIlbcCodecMode(const gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iILBCEncodeMode = mode; - - if (iIlbcEncoderIntfc && iCodecID == KMccFourCCIdILBC) - { - if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) - { - err = iIlbcEncoderIntfc->SetEncoderMode( - CIlbcEncoderIntfc::E20msFrame); - TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [20ms Frame]")); - } - else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) - { - err = iIlbcEncoderIntfc->SetEncoderMode( - CIlbcEncoderIntfc::E30msFrame); - TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [30ms Frame]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetIlbcCodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetIlbcCodecMode(gint& mode) - { - // not available through CIs -> return cached value - mode = iILBCEncodeMode; - TRACE_PRN_N1(_L("TMS->UPL: GetIlbcCodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetG711CodecMode(const gint mode) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iStatus == EReady) - { - iG711EncodeMode = mode; - - if (iG711EncoderIntfc && iCodecID == KMccFourCCIdG711) - { - if (mode == TMS_G711_CODEC_MODE_ALAW) - { - err = iG711EncoderIntfc->SetEncoderMode( - CG711EncoderIntfc::EEncALaw); - TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [ALaw]")); - } - else if (mode == TMS_G711_CODEC_MODE_MULAW) - { - err = iG711EncoderIntfc->SetEncoderMode( - CG711EncoderIntfc::EEncULaw); - TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [uLaw]")); - } - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetG711CodecMode -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetG711CodecMode(gint& mode) - { - // not available through CIs -> return cached value - mode = iG711EncodeMode; - TRACE_PRN_N1(_L("TMS->UPL: GetG711CodecMode [%d]"), mode); - return TMS_RESULT_SUCCESS; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetSupportedBitrates -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetSupportedBitrates(RArray& bitrates) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - bitrates.Reset(); - - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->GetSupportedBitrates(bitrates); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetBitrate -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetBitrate(guint bitrate) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->SetBitrate(bitrate); - TRACE_PRN_N1(_L("TMS->UPL: SetBitrate [%d]"), bitrate); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetBitrate -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetBitrate(guint& bitrate) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->GetBitrate(bitrate); - TRACE_PRN_N1(_L("TMS->UPL: GetBitrate [%d]"), bitrate); - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::SetVad -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::SetVad(const TMSFormatType fmttype, const gboolean vad) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - switch (fmttype) - { - case TMS_FORMAT_G711: - { - if (iG711EncoderIntfc) - { - err = iG711EncoderIntfc->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_G729: - { - if (iG729EncoderIntfc) - { - err = iG729EncoderIntfc->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_ILBC: - { - if (iIlbcEncoderIntfc) - { - err = iIlbcEncoderIntfc->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_AMR: - { - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->SetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); - } - break; - } - default: - { - break; //TMS_RESULT_DOES_NOT_EXIST - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::GetVad -// -// ----------------------------------------------------------------------------- -// -gint TMSIPUplink::GetVad(const TMSFormatType fmttype, gboolean& vad) - { - gint err = TMS_RESULT_DOES_NOT_EXIST; - - switch (fmttype) - { - case TMS_FORMAT_G711: - { - if (iG711EncoderIntfc) - { - err = iG711EncoderIntfc->GetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_G729: - { - if (iG729EncoderIntfc) - { - err = iG729EncoderIntfc->GetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_ILBC: - { - if (iIlbcEncoderIntfc) - { - err = iIlbcEncoderIntfc->GetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - case TMS_FORMAT_AMR: - { - if (iSpeechEncoderConfig) - { - err = iSpeechEncoderConfig->GetVadMode(vad); - TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); - } - break; - } - default: - { - break; //TMS_RESULT_DOES_NOT_EXIST - } - } - - TRACE_PRN_IF_ERR(err); - return err; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::InitializeComplete -// A callback from the DevSound indicating completion of the initialization. -// It will send config data to the D/S and configure the encoder via CI. -// If everything goes well, the state of the thread is set EReady. -// The initialization completion message is sent back to the main thread. -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::InitializeComplete(TInt aError) - { - TRACE_PRN_FN_ENT; - - gint err = aError; - - if (err == TMS_RESULT_SUCCESS && iDevSound) - { - TMMFCapabilities conf; - conf = iDevSound->Config(); - conf.iRate = EMMFSampleRate8000Hz; - conf.iChannels = EMMFMono; - TRAP(err, iDevSound->SetConfigL(conf)); - if (err == TMS_RESULT_SUCCESS) - { - // We are ready to stream even in case of CI setting failure - iStatus = EReady; - iMaxGain = iDevSound->MaxGain(); - } - - // Init Custom Interface API to the Encoder - err = SetCodecCi(); - if (err != TMS_RESULT_SUCCESS) - { - // DEBUG only - // Can ignore error - although encoder is not fully configured but - // it can still run in the default mode. - TRACE_PRN_IF_ERR(err); - } - } - - // TODO: Notify client - - TRACE_PRN_IF_ERR(err); - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSIPUplink::RecordError -// From MDevSoundObserver -// Recording error is send to the main thread. -// The state of recorder is rolled back to EReady. -// ----------------------------------------------------------------------------- -// -void TMSIPUplink::RecordError(TInt /*aError*/) - { - //TRACE_PRN_IF_ERR(aError); - -#ifdef _DEBUG - iSamplesRecCount = 0; -#endif - iStatus = EReady; - - // TODO: Notify client - } - -// End of file - diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tarsettings.cpp --- a/mmserv/tms/tmscallserver/src/tarsettings.cpp Tue Apr 27 17:11:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: Telephony Multimedia Service - * - */ - -// INCLUDE FILES -#include "tarsettings.h" -#include "tmsclientserver.h" -#include "tmsutility.h" - -using namespace TMS; - -// CONSTANTS -_LIT_SECURITY_POLICY_PASS(KTMSServerReadPolicy); -_LIT_SECURITY_POLICY_C1(KTMSServerWritePolicy, ECapabilityWriteUserData); - -// ----------------------------------------------------------------------------- -// TMSTarSettings::TMSTarSettings -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -TMSTarSettings::TMSTarSettings() - { - } - -// ----------------------------------------------------------------------------- -// TMSTarSettings::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void TMSTarSettings::ConstructL() - { - TRACE_PRN_FN_ENT; - TInt err = RProperty::Define(ERoutingPs, RProperty::EByteArray, - KTMSServerReadPolicy, KTMSServerWritePolicy); - TRACE_PRN_N1(_L("TarSetting::ConstructL err:%d"),err); - - if (err != KErrAlreadyExists) - { - User::LeaveIfError(err); - } - TRACE_PRN_FN_EXT; - } - -// ----------------------------------------------------------------------------- -// TMSTarSettings::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -TMSTarSettings* TMSTarSettings::NewL() - { - TMSTarSettings* self = new (ELeave) TMSTarSettings(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// Destructor -TMSTarSettings::~TMSTarSettings() - { - TRACE_PRN_FN_ENT; - TInt err = RProperty::Delete(KTMSPropertyCategory, ERoutingPs); - TRACE_PRN_N1(_L("TarSetting::~TMSTarSettings err:%d"),err); - TRACE_PRN_FN_ENT; - } - -// ----------------------------------------------------------------------------- -// TMSTarSettings::SetVolume -// ----------------------------------------------------------------------------- -// -void TMSTarSettings::SetTar(TRoutingMsgBufPckg rountingpckg, TBool aPublish) - { - TRACE_PRN_FN_ENT; - // TInt err(KErrNone); - if (aPublish) - { - /*err =*/RProperty::Set(KTMSPropertyCategory, ERoutingPs, rountingpckg); - } - - //TRACE_PRN_N1(_L("TarSetting::SetTar err:%d"),err); - TRACE_PRN_FN_EXT; - } - -// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscalladpt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscalladpt.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include "tmscallipadpt.h" +#include "tmscallcsadpt.h" +#include "tmscalladpt.h" +#include "tmsutility.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSCallAdpt::TMSCallAdpt +// +// ----------------------------------------------------------------------------- +// +TMSCallAdpt::TMSCallAdpt() + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallAdpt::~TMSCallAdpt +// +// ----------------------------------------------------------------------------- +// +TMSCallAdpt::~TMSCallAdpt() + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallAdpt::CreateCallL +// +// ----------------------------------------------------------------------------- +// +gint TMSCallAdpt::CreateCallL(gint callType, TMSCallAdpt*& callAdpt) + { + TRACE_PRN_FN_ENT; + TMSCallAdpt* self(NULL); + gint retVal(TMS_RESULT_SUCCESS); + switch (callType) + { + case TMS_CALL_IP: + retVal = TMS_RESULT_INSUFFICIENT_MEMORY; + self = TMSCallIPAdpt::NewL(); + if (self) + { + retVal = self->PostConstruct(); + if (retVal != TMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + } + break; + + case TMS_CALL_CS: + retVal = TMS_RESULT_INSUFFICIENT_MEMORY; + self = new TMSCallCSAdpt(); + if (self) + { + retVal = self->PostConstruct(); + if (retVal != TMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + } + break; + default: + retVal = TMS_RESULT_CALL_TYPE_NOT_SUPPORTED; + break; + } + callAdpt = self; + TRACE_PRN_FN_EXT; + return retVal; + } + +// ----------------------------------------------------------------------------- +// TMSCallAdpt::PostConstruct +// +// ----------------------------------------------------------------------------- +// +gint TMSCallAdpt::PostConstruct() + { + return TMS_RESULT_SUCCESS; + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscallcsadpt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscallcsadpt.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,1057 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include +#include +#include "tmscsuplink.h" +#include "tmscsdownlink.h" +#include "tmscallcsadpt.h" +#include "tmsutility.h" +#include "tmsshared.h" +#include "tmsclientserver.h" +#include "tmstarsettings.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::TMSCallCSAdpt +// +// ----------------------------------------------------------------------------- +// +TMSCallCSAdpt::TMSCallCSAdpt() + { + TRACE_PRN_FN_ENT; + + iCSDownlink = NULL; + iCSUplink = NULL; + iRouting = NULL; + iTarSettings = NULL; + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::~TMSCallCSAdpt +// +// ----------------------------------------------------------------------------- +// +TMSCallCSAdpt::~TMSCallCSAdpt() + { + TRACE_PRN_FN_ENT; + delete iCSDownlink; + delete iCSUplink; + delete iRouting; + delete iTarSettings; + + if (iMsgQueueUp.Handle() > 0) + { + iMsgQueueUp.Close(); + } + + if (iMsgQueueDn.Handle() > 0) + { + iMsgQueueDn.Close(); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::PostConstruct +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::PostConstruct() + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + iNextStreamId = 1; + iUplinkInitialized = FALSE; + iDnlinkInitialized = FALSE; + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::CreateStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::CreateStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint& outStrmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + status = TMS_RESULT_ALREADY_EXIST; + if (!iUplinkInitialized) + { + iUplinkInitialized = TRUE; + iUplinkStreamId = iNextStreamId; + outStrmId = iUplinkStreamId; + iNextStreamId++; + iUplinkInitialized = TRUE; + status = TMS_RESULT_SUCCESS; + } + break; + case TMS_STREAM_DOWNLINK: + status = TMS_RESULT_ALREADY_EXIST; + if (!iDnlinkInitialized) + { + iDnlinkInitialized = TRUE; + iDnlinkStreamId = iNextStreamId; + outStrmId = iDnlinkStreamId; + iNextStreamId++; + iDnlinkInitialized = TRUE; + status = TMS_RESULT_SUCCESS; + } + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::InitStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::InitStreamL(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId, TMSFormatType /*frmtType*/, + const RMessage2& aMessage) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + + switch (strmType) + { + case TMS_STREAM_UPLINK: + if (strmId == iUplinkStreamId) + { + // Open message queue handling client-server communication + if (iMsgQueueUp.Handle() <= 0) + { + // Third argument in TMSCallProxy::InitStream + status = iMsgQueueUp.Open(aMessage, 1); + } + if (status == TMS_RESULT_SUCCESS) + { + TRAP(status, iCSUplink = TMSCSUplink::NewL(*this)); + } + iStrmtype = TMS_STREAM_UPLINK; + } + else + { + status = TMS_RESULT_DOES_NOT_EXIST; + } + break; + case TMS_STREAM_DOWNLINK: + if (strmId == iDnlinkStreamId) + { + // Open message queue handling client-server communication + if (iMsgQueueDn.Handle() <= 0) + { + // Third argument in TMSCallProxy::InitStream + status = iMsgQueueDn.Open(aMessage, 1); + } + if (status == TMS_RESULT_SUCCESS) + { + TRAP(status, iCSDownlink = TMSCSDownlink::NewL(*this)); + if (status == TMS_RESULT_SUCCESS) + { + TRAP(status, iRouting = + CTelephonyAudioRouting::NewL(*this)); + if (status == TMS_RESULT_SUCCESS) + { + iTarSettings = TMSTarSettings::NewL(); + } + } + } + iStrmtype = TMS_STREAM_DOWNLINK; + } + else + { + status = TMS_RESULT_DOES_NOT_EXIST; + } + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + + TRACE_PRN_IF_ERR(status); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::StartStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::StartStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + if (iCSUplink && strmId == iUplinkStreamId) + { + iCSUplink->Activate(); + } + break; + case TMS_STREAM_DOWNLINK: + if (iCSDownlink && strmId == iDnlinkStreamId) + { + iCSDownlink->Activate(); + } + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::PauseStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::PauseStream(TMSCallType /*callType*/, + TMSStreamType /*strmType*/, gint /*strmId*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::StopStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::StopStream(TMSCallType /*callType*/, TMSStreamType strmType, + gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + if (iCSUplink && strmId == iUplinkStreamId) + { + iCSUplink->Deactivate(); + NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, + status, 0); + } + break; + case TMS_STREAM_DOWNLINK: + if (iCSDownlink && strmId == iDnlinkStreamId) + { + iCSDownlink->Deactivate(); + NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, + status, 0); + } + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DeinitStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::DeinitStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + if (iCSUplink && strmId == iUplinkStreamId) + { + iCSUplink->Deactivate(); + iUplinkInitialized = FALSE; + NotifyClient(iUplinkStreamId, ECmdUplinkDeInitComplete, + status, 0); + } + break; + case TMS_STREAM_DOWNLINK: + if (iCSDownlink && strmId == iDnlinkStreamId) + { + iCSDownlink->Deactivate(); + iDnlinkInitialized = FALSE; + NotifyClient(iDnlinkStreamId, ECmdDownlinkDeInitComplete, + status, 0); + } + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DeleteStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::DeleteStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + if (strmId == iUplinkStreamId) + { + iUplinkStreamId = -1; + iUplinkInitialized = FALSE; + } + break; + case TMS_STREAM_DOWNLINK: + if (strmId == iDnlinkStreamId) + { + iDnlinkStreamId = -1; + iDnlinkInitialized = FALSE; + } + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DataXferBufferEmptied +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::DataXferBufferEmptied(TMSCallType /*callType*/, + TMSStreamType /*strmType*/, gint /*strmId*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DataXferBufferFilled +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::DataXferBufferFilled(TMSCallType /*callType*/, + TMSStreamType /*strmType*/, gint /*strmId*/, guint /*datasize*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetDataXferBufferHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetDataXferBufferHndl(const TMSCallType /*callType*/, + const TMSStreamType /*strmType*/, const gint /*strmId*/, + const guint32 /*key*/, RChunk& /*chunk*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetMaxVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetMaxVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSDownlink && iDnlinkInitialized) + { + volume = iCSDownlink->MaxVolume(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetVolume(const guint volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSDownlink && iDnlinkInitialized) + { + iCSDownlink->SetVolume(volume); + status = TMS_RESULT_SUCCESS; + NotifyClient(iDnlinkStreamId, ECmdSetVolume, status, 0); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSDownlink && iDnlinkInitialized) + { + volume = iCSDownlink->Volume(); + status = TMS_RESULT_SUCCESS; + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetMaxGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetMaxGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSUplink && iUplinkInitialized) + { + gain = iCSUplink->MaxGain(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetGain(const guint gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iUplinkInitialized) + { + iCSUplink->SetGain(gain); + status = TMS_RESULT_SUCCESS; + NotifyClient(iUplinkInitialized, ECmdSetGain, status, 0); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSUplink && iUplinkInitialized) + { + gain = iCSUplink->Gain(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetGlobalMaxVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetGlobalMaxVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSDownlink && iDnlinkInitialized) + { + volume = iCSDownlink->MaxVolume(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetGlobalVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetGlobalVolume(const guint volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + + iGlobalVol = volume; + if (iCSDownlink && iDnlinkInitialized) + { + iCSDownlink->SetVolume(volume); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetGlobalVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetGlobalVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSDownlink && iDnlinkInitialized) + { + volume = iCSDownlink->Volume(); + status = TMS_RESULT_SUCCESS; + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetMaxGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetGlobalMaxGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSUplink && iUplinkInitialized) + { + gain = iCSUplink->MaxGain(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetGlobalGain(const guint gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + + iGlobalGain = gain; + if (iCSUplink && iUplinkInitialized) + { + iCSUplink->SetGain(gain); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetGlobalGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetGlobalGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_ILLEGAL_OPERATION); + if (iCSUplink && iUplinkInitialized) + { + gain = iCSUplink->Gain(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetCodecMode(const TMSFormatType /*fmttype*/, + const TMSStreamType /*strmtype*/, gint& /*mode*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetCodecMode(const TMSFormatType /*fmttype*/, + const TMSStreamType /*strmtype*/, const gint /*mode*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetSupportedBitRatesCount +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetSupportedBitRatesCount(guint& /*count*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetSupportedBitRates +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetSupportedBitRates(CBufFlat*& brbuffer) + { + TRACE_PRN_FN_ENT; + TRAPD(status, GetSupportedBitRatesL(brbuffer)); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetSupportedBitRatesL +// +// GetSupportedBitRates implementation which can leave. +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::GetSupportedBitRatesL(CBufFlat*& /*brbuffer*/) + { + User::Leave(TMS_RESULT_FEATURE_NOT_SUPPORTED); + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetBitRate +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetBitRate(guint& /*bitrate*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetBitRate +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetBitRate(const guint /*bitrate*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetVAD +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetVAD(const TMSFormatType /*fmttype*/, gboolean& /*vad*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetVAD +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetVAD(const TMSFormatType /*fmttype*/, const gboolean /*vad*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetCNG +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetCNG(const TMSFormatType /*fmttype*/, gboolean& /*cng*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetCNG +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetCNG(const TMSFormatType /*fmttype*/, + const gboolean /*cng*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetPlc(const TMSFormatType /*fmttype*/, gboolean& /*plc*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetPlc(const TMSFormatType /*fmttype*/, + const gboolean /*plc*/) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_FEATURE_NOT_SUPPORTED); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetOutput +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::SetOutput(TMSAudioOutput output) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + + if (iRouting) + { + CTelephonyAudioRouting::TAudioOutput taroutput = TOTAROUTPUT(output); + TRAP(status, iRouting->SetOutputL(taroutput)); + if (status == KErrArgument) + { + status = TMS_RESULT_INVALID_ARGUMENT; + } + else + { + status = TMS_RESULT_SUCCESS; + } + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetOutput +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetOutput(TMSAudioOutput& output) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + + if (iRouting) + { + CTelephonyAudioRouting::TAudioOutput taroutput; + taroutput = iRouting->Output(); + status = TMS_RESULT_SUCCESS; + output = TOTMSOUTPUT(taroutput); + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetPreviousOutput +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetPreviousOutput(TMSAudioOutput& output) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + + if (iRouting) + { + CTelephonyAudioRouting::TAudioOutput taroutput; + taroutput = iRouting->PreviousOutput(); + status = TMS_RESULT_SUCCESS; + output = TOTMSOUTPUT(taroutput); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::GetAvailableOutputsL +// +// ----------------------------------------------------------------------------- +// +gint TMSCallCSAdpt::GetAvailableOutputsL(gint& count, CBufFlat*& outputsbuffer) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + TMSAudioOutput tmsoutput; + + if (iRouting) + { + RBufWriteStream stream; + stream.Open(*outputsbuffer); + CleanupClosePushL(stream); + + TArray availableOutputs = + iRouting->AvailableOutputs(); + + guint numOfItems = availableOutputs.Count(); + count = numOfItems; + for (guint i = 0; i < numOfItems; i++) + { + tmsoutput = TOTMSOUTPUT(availableOutputs[i]); + stream.WriteUint32L(tmsoutput); + //TRACE_PRN_N1(_L("TMS->CallIPAdpt: outputs: [%d]"), availableOutputs[i]); + } + + CleanupStack::PopAndDestroy(&stream); + status = TMS_RESULT_SUCCESS; + } + + TRACE_PRN_FN_EXT; + return status; + } + + +// From TMSCSPDevSoundObserver + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DownlinkInitCompleted +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::DownlinkInitCompleted(TInt status) + { + TRACE_PRN_FN_ENT; + NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status, 0); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::UplinkInitCompleted +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::UplinkInitCompleted(TInt status) + { + TRACE_PRN_FN_ENT; + NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status, 0); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::UplinkActivatedSuccessfully +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::UplinkActivatedSuccessfully() + { + TRACE_PRN_FN_ENT; + NotifyClient(iUplinkStreamId, ECmdUplinkStarted, KErrNone, 0); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DownlinkActivatedSuccessfully +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::DownlinkActivatedSuccessfully() + { + TRACE_PRN_FN_ENT; + NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, KErrNone, 0); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::UplinkActivationFailed +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::UplinkActivationFailed() + { + TRACE_PRN_FN_ENT; + NotifyClient(iUplinkStreamId, ECmdUplinkStarted, TMS_RESULT_FATAL_ERROR, 0); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::DownlinkActivationFailed +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::DownlinkActivationFailed() + { + TRACE_PRN_FN_ENT; + NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, + TMS_RESULT_FATAL_ERROR, 0); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::AvailableOutputsChanged +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::AvailableOutputsChanged( + CTelephonyAudioRouting& /*aTelephonyAudioRouting*/) + { + TRACE_PRN_FN_ENT; + TRoutingMsgBufPckg pckg; + pckg().iEvent = TMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED; + iTarSettings->SetTar(pckg, ETrue); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::OutputChanged +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::OutputChanged( + CTelephonyAudioRouting& aTelephonyAudioRouting) + { + TRACE_PRN_FN_ENT; + TRoutingMsgBufPckg pckg; + pckg().iEvent = TMS_EVENT_ROUTING_OUTPUT_CHANGED; + pckg().iOutput = TOTMSOUTPUT(aTelephonyAudioRouting.Output()); + iTarSettings->SetTar(pckg, ETrue); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::SetOutputComplete +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::SetOutputComplete( + CTelephonyAudioRouting& aTelephonyAudioRouting, gint /*aError*/) + { + TRACE_PRN_FN_ENT; + TRoutingMsgBufPckg pckg; + pckg().iEvent = TMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE; + pckg().iOutput = TOTMSOUTPUT(aTelephonyAudioRouting.Output()); + if (iTarSettings) + { + iTarSettings->SetTar(pckg, ETrue); + } + //TRACE_PRN_IF_ERR(aError); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallCSAdpt::NotifyClient +// +// ----------------------------------------------------------------------------- +// +void TMSCallCSAdpt::NotifyClient(const gint strmId, const gint aCommand, + const gint aStatus, const gint64 /*aInt64*/) + { + iMsgBuffer.iRequest = aCommand; + iMsgBuffer.iStatus = aStatus; + + if (strmId == iUplinkStreamId) + { + iMsgQueueUp.Send(iMsgBuffer); + } + else if (strmId == iDnlinkStreamId) + { + iMsgQueueDn.Send(iMsgBuffer); + } + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscallipadpt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscallipadpt.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,1402 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include "tmsutility.h" +#include "tmsclientserver.h" +#include "tmsshared.h" +#include "tmsipcallstream.h" +#include "tmscallipadpt.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::NewL +// Symbian constructor. +// ----------------------------------------------------------------------------- +// +TMSCallIPAdpt* TMSCallIPAdpt::NewL() + { + TMSCallIPAdpt* self = new (ELeave) TMSCallIPAdpt(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::ConstructL +// 2-nd phase constructor. +// ----------------------------------------------------------------------------- +// +void TMSCallIPAdpt::ConstructL() + { + TRACE_PRN_FN_ENT; + iIPUplink = NULL; + iIPDownlink = NULL; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::TMSCallIPAdpt +// +// ----------------------------------------------------------------------------- +// +TMSCallIPAdpt::TMSCallIPAdpt() + { + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::~TMSCallIPAdpt +// +// ----------------------------------------------------------------------------- +// +TMSCallIPAdpt::~TMSCallIPAdpt() + { + TRACE_PRN_FN_ENT; + + iCodecs.Reset(); + iCodecs.Close(); + iArrBitrates.Reset(); + + delete iIPUplink; + delete iIPDownlink; + + if (iMsgQueueUp.Handle() > 0) + { + iMsgQueueUp.Close(); + } + if (iMsgQueueDn.Handle() > 0) + { + iMsgQueueDn.Close(); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::PostConstruct +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::PostConstruct() + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + iNextStreamId = 1; + iUplinkInitialized = FALSE; + iDnlinkInitialized = FALSE; + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::CreateStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::CreateStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint& outStrmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + status = TMS_RESULT_ALREADY_EXIST; + if (!iUplinkInitialized) + { + iUplinkInitialized = TRUE; + iUplinkStreamId = iNextStreamId; + outStrmId = iUplinkStreamId; + iNextStreamId++; + status = TMS_RESULT_SUCCESS; + } + break; + } + case TMS_STREAM_DOWNLINK: + { + status = TMS_RESULT_ALREADY_EXIST; + if (!iDnlinkInitialized) + { + iDnlinkInitialized = TRUE; + iDnlinkStreamId = iNextStreamId; + outStrmId = iDnlinkStreamId; + iNextStreamId++; + status = TMS_RESULT_SUCCESS; + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::InitStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::InitStreamL(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId, TMSFormatType frmtType, + const RMessage2& aMessage) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + + TUint32 fourCC = TOFOURCC(frmtType); + if (fourCC == NULL) + { + return TMS_RESULT_INVALID_ARGUMENT; + } + + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + status = TMS_RESULT_DOES_NOT_EXIST; + if (strmId == iUplinkStreamId) + { + SetFormat(iUplinkStreamId, fourCC); + status = OpenUplinkL(aMessage); + NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status); + } + break; + } + case TMS_STREAM_DOWNLINK: + { + status = TMS_RESULT_DOES_NOT_EXIST; + if (strmId == iDnlinkStreamId) + { + SetFormat(iDnlinkStreamId, fourCC); + status = OpenDownlinkL(aMessage); + NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status); + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + + TRACE_PRN_IF_ERR(status); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::StartStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::StartStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + if (strmId == iUplinkStreamId && iIPUplink) + { + iIPUplink->Start(); + status = TMS_RESULT_SUCCESS; + NotifyClient(iUplinkStreamId, ECmdUplinkStarted, status); + } + break; + } + case TMS_STREAM_DOWNLINK: + { + if (strmId == iDnlinkStreamId && iIPDownlink) + { + iIPDownlink->Start(); + status = TMS_RESULT_SUCCESS; + NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, status); + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::PauseStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::PauseStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + if (strmId == iUplinkStreamId && iIPUplink) + { + iIPUplink->Stop(); + status = TMS_RESULT_SUCCESS; + NotifyClient(iUplinkStreamId, ECmdUplinkPaused, status); + } + break; + } + case TMS_STREAM_DOWNLINK: + { + if (strmId == iDnlinkStreamId && iIPDownlink) + { + iIPDownlink->Stop(); + status = TMS_RESULT_SUCCESS; + NotifyClient(iDnlinkStreamId, ECmdDownlinkPaused, status); + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::StopStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::StopStream(TMSCallType /*callType*/, TMSStreamType strmType, + gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + if (strmId == iUplinkStreamId && iIPUplink) + { + iIPUplink->Stop(); + status = TMS_RESULT_SUCCESS; + NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status); + } + break; + } + case TMS_STREAM_DOWNLINK: + { + if (strmId == iDnlinkStreamId && iIPDownlink) + { + iIPDownlink->Stop(); + status = TMS_RESULT_SUCCESS; + NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status); + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::DeinitStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::DeinitStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + if (strmId == iUplinkStreamId && iIPUplink) + { + iIPUplink->Stop(); + //iUplinkStreamId = -1; + iUplinkInitialized = FALSE; + status = TMS_RESULT_SUCCESS; + NotifyClient(iUplinkStreamId, ECmdDownlinkDeInitComplete, + status); + } + break; + } + case TMS_STREAM_DOWNLINK: + { + if (strmId == iDnlinkStreamId && iIPDownlink) + { + iIPDownlink->Stop(); + //iDnlinkStreamId = -1; + iDnlinkInitialized = FALSE; + status = TMS_RESULT_SUCCESS; + NotifyClient(iDnlinkStreamId, ECmdDownlinkDeInitComplete, + status); + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::DeleteStream +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::DeleteStream(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + // This is additional error checking + if (strmId == iUplinkStreamId) + { + iUplinkStreamId = -1; + iUplinkInitialized = FALSE; + } + break; + } + case TMS_STREAM_DOWNLINK: + { + // This is additional error checking + if (strmId == iDnlinkStreamId) + { + iDnlinkStreamId = -1; + iDnlinkInitialized = FALSE; + } + break; + } + default: + { + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::DataXferBufferEmptied +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::DataXferBufferEmptied(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_UPLINK: + { + if (strmId == iUplinkStreamId) + { + TRAP(status, BufferEmptiedL()); + } + break; + } + case TMS_STREAM_DOWNLINK: + status = TMS_RESULT_ILLEGAL_OPERATION; + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::DataXferBufferFilled +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::DataXferBufferFilled(TMSCallType /*callType*/, + TMSStreamType strmType, gint strmId, guint datasize) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_DOWNLINK: + if (strmId == iDnlinkStreamId) + { + TRAP(status, BufferFilledL(datasize)); + } + break; + case TMS_STREAM_UPLINK: + status = TMS_RESULT_ILLEGAL_OPERATION; + break; + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetDataXferBufferHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetDataXferBufferHndl(const TMSCallType /*callType*/, + const TMSStreamType strmType, const gint strmId, const guint32 key, + RChunk& chunk) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (strmType) + { + case TMS_STREAM_DOWNLINK: + { + if (strmId == iDnlinkStreamId) + { + TRAP(status, GetDataXferChunkHndl(strmType, key, chunk)); + } + break; + } + case TMS_STREAM_UPLINK: + { + if (strmId == iUplinkStreamId) + { + TRAP(status, GetDataXferChunkHndl(strmType, key, chunk)); + } + break; + } + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetMaxVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetMaxVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->GetMaxVolume(volume); + iMaxVolume = volume; + TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: GetMaxVolume [%d]"), iMaxVolume); + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetVolume(const guint volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->SetVolume(volume); + NotifyClient(iDnlinkStreamId, ECmdSetVolume, status); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->GetVolume(volume); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetMaxGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetMaxGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->GetMaxGain(gain); + iMaxGain = gain; + TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetMaxGain [%d]"), iMaxGain); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetGain(const guint gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->SetGain(gain); + NotifyClient(iUplinkStreamId, ECmdSetGain, status); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->GetGain(gain); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetGlobalMaxVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetGlobalMaxVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->GetMaxVolume(volume); + iMaxVolume = volume; + TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: GetMaxVolume [%d]"), iMaxVolume); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetGlobalVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetGlobalVolume(const guint volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->SetVolume(volume); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetGlobalVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetGlobalVolume(guint& volume) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->GetVolume(volume); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetGlobalMaxGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetGlobalMaxGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->GetMaxGain(gain); + iMaxGain = gain; + TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetMaxGain [%d]"), iMaxGain); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetGlobalGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetGlobalGain(const guint gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->SetGain(gain); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetGlobalGain +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetGlobalGain(guint& gain) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->GetGain(gain); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, gint& mode) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (fmttype) + { + case TMS_FORMAT_ILBC: + status = GetIlbcCodecMode(mode, strmtype); + break; + case TMS_FORMAT_G711: + status = GetG711CodecMode(mode, strmtype); + break; + default: + status = TMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetCodecMode(const TMSFormatType fmttype, + const TMSStreamType strmtype, const gint mode) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + switch (fmttype) + { + case TMS_FORMAT_ILBC: + status = SetIlbcCodecMode(mode, strmtype); + break; + case TMS_FORMAT_G711: + status = SetG711CodecMode(mode, strmtype); + break; + default: + status = TMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetSupportedBitRatesCount +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetSupportedBitRatesCount(guint& count) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPUplink) + { + status = iIPUplink->GetSupportedBitrates(iArrBitrates); + count = iArrBitrates.Count(); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetSupportedBitRates +// +// Bitrates are already returned from the codec as a result of call to +// GetSupportedBitratesCount(). Just pack them into a descriptor and return +// back to the client. +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetSupportedBitRates(CBufFlat*& brbuffer) + { + TRAPD(status, GetSupportedBitRatesL(brbuffer)); + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetSupportedBitRatesL +// +// GetSupportedBitRates implementation which can leave. +// ----------------------------------------------------------------------------- +// +void TMSCallIPAdpt::GetSupportedBitRatesL(CBufFlat*& brbuffer) + { + TRACE_PRN_FN_ENT; + RBufWriteStream stream; + stream.Open(*brbuffer); + CleanupClosePushL(stream); + guint numOfItems = iArrBitrates.Count(); + + for (guint i = 0; i < numOfItems; i++) + { + stream.WriteUint32L(iArrBitrates[i]); + //TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: BR: [%d]"), iArrBitrates[i]); + } + + CleanupStack::PopAndDestroy(&stream); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetBitRate +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetBitRate(guint& bitrate) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPUplink) + { + status = iIPUplink->GetBitrate(bitrate); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetBitRate +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetBitRate(const guint bitrate) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPUplink) + { + status = iIPUplink->SetBitrate(bitrate); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetVAD +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetVAD(const TMSFormatType fmttype, gboolean& vad) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPUplink) + { + status = iIPUplink->GetVad(fmttype, vad); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetVAD +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetVAD(const TMSFormatType fmttype, const gboolean vad) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPUplink) + { + status = iIPUplink->SetVad(fmttype, vad); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetCNG +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetCNG(const TMSFormatType fmttype, gboolean& cng) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPDownlink) + { + status = iIPDownlink->GetCng(fmttype, cng); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetCNG +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetCNG(const TMSFormatType fmttype, const gboolean cng) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPDownlink) + { + status = iIPDownlink->SetCng(fmttype, cng); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetPlc(const TMSFormatType fmttype, gboolean& plc) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPDownlink) + { + status = iIPDownlink->GetPlc(fmttype, plc); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetPlc(const TMSFormatType fmttype, const gboolean plc) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_INVALID_STATE); + if (iIPDownlink) + { + status = iIPDownlink->SetPlc(fmttype, plc); + } + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::OpenDownlinkL +// Method for player initialization. +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::OpenDownlinkL(const RMessage2& aMessage) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + + // Clients must have MultimediaDD capability to use this priority/pref. + // TODO: Also, TMS will monitor for emergency call and if detected it + // will deny access to audio resources. + iPriority.iPref = KAudioPrefVoipAudioDownlink; + iPriority.iPriority = KAudioPriorityVoipAudioDownlink; + + if (!iIPDownlink) + { + iIPDownlink = TMSIPDownlink::NewL(iDnFourCC, iPriority); + } + + if (iIPDownlink) + { + // Open message queue for handling server notifications to the client + if (iMsgQueueDn.Handle() <= 0) + { + // Second argument in TMSCallProxy::InitStream + status = iMsgQueueDn.Open(aMessage, 1); + } + + if (status == TMS_RESULT_SUCCESS) + { + // For transfer data buffer processing + iIPDownlink->SetMsgQueue(iMsgQueueDn); + } + } + + TRACE_PRN_IF_ERR(status); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::OpenUplinkL +// Method for recorder initialization. +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& aMessage) + { + TRACE_PRN_FN_ENT; + gint status(TMS_RESULT_SUCCESS); + + // Ensure clients have MultimediaDD capability to use this priority/pref + iPriority.iPref = KAudioPrefVoipAudioUplink; + iPriority.iPriority = KAudioPriorityVoipAudioUplink; + + if (!iIPUplink) + { + iIPUplink = TMSIPUplink::NewL(iUpFourCC, iPriority); + } + + if (iIPUplink) + { + // Open message queue for handling server notifications to the client + if (iMsgQueueUp.Handle() <= 0) + { + // Second argument in TMSCallProxy::InitStream + status = iMsgQueueUp.Open(aMessage, 1); + } + + if (status == TMS_RESULT_SUCCESS) + { + // For transfer data buffer processing + iIPUplink->SetMsgQueue(iMsgQueueUp); + } + } + + TRACE_PRN_IF_ERR(status); + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetFormat +// +// ----------------------------------------------------------------------------- +// +void TMSCallIPAdpt::SetFormat(const gint strmId, const TUint32 aFormat) + { + if (strmId == iUplinkStreamId) + { + iUpFourCC = aFormat; + } + else if (strmId == iDnlinkStreamId) + { + iDnFourCC = aFormat; + } + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::BufferFilled +// +// ----------------------------------------------------------------------------- +// +void TMSCallIPAdpt::BufferFilledL(TUint dataSize) + { + if (iIPDownlink) + { + iIPDownlink->BufferFilled(dataSize); + } + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::BufferEmptied +// +// ----------------------------------------------------------------------------- +// +void TMSCallIPAdpt::BufferEmptiedL() + { + if (iIPUplink) + { + iIPUplink->BufferEmptied(); + } + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetDataXferChunkHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetDataXferChunkHndl(const TMSStreamType strmType, + const TUint32 key, RChunk& chunk) + { + TRACE_PRN_FN_ENT; + + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + switch (strmType) + { + case TMS_STREAM_DOWNLINK: + { + if (iIPDownlink) + { + status = iIPDownlink->GetDataXferChunkHndl(key, chunk); + } + break; + } + case TMS_STREAM_UPLINK: + { + if (iIPUplink) + { + status = iIPUplink->GetDataXferChunkHndl(key, chunk); + } + break; + } + default: + status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + + TRACE_PRN_FN_EXT; + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetIlbcCodecMode(const gint mode, + const TMSStreamType strmtype) + { + gint status(TMS_RESULT_INVALID_ARGUMENT); + + if (strmtype == TMS_STREAM_DOWNLINK) + { + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->SetIlbcCodecMode(mode); + } + } + else if (strmtype == TMS_STREAM_UPLINK) + { + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->SetIlbcCodecMode(mode); + } + } + + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetIlbcCodecMode(gint& mode, const TMSStreamType strmtype) + { + gint status(TMS_RESULT_INVALID_ARGUMENT); + + if (strmtype == TMS_STREAM_DOWNLINK) + { + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->GetIlbcCodecMode(mode); + } + } + else if (strmtype == TMS_STREAM_UPLINK) + { + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->GetIlbcCodecMode(mode); + } + } + + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetG711CodecMode(const gint mode, + const TMSStreamType strmtype) + { + gint status(TMS_RESULT_INVALID_ARGUMENT); + + if (strmtype == TMS_STREAM_DOWNLINK) + { + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->SetG711CodecMode(mode); + } + } + else if (strmtype == TMS_STREAM_UPLINK) + { + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->SetG711CodecMode(mode); + } + } + + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetG711CodecMode(gint& mode, const TMSStreamType strmtype) + { + gint status(TMS_RESULT_INVALID_ARGUMENT); + + if (strmtype == TMS_STREAM_DOWNLINK) + { + if (iDnlinkInitialized && iIPDownlink) + { + status = iIPDownlink->GetG711CodecMode(mode); + } + } + else if (strmtype == TMS_STREAM_UPLINK) + { + if (iUplinkInitialized && iIPUplink) + { + status = iIPUplink->GetG711CodecMode(mode); + } + } + + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::FrameModeRequiredForEC +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::FrameModeRqrdForEC(gboolean& frmodereq) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iIPDownlink) + { + status = iIPDownlink->FrameModeRqrdForEC(frmodereq); + } + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetFrameMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetFrameMode(const gboolean frmode) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iIPDownlink) + { + status = iIPDownlink->SetFrameMode(frmode); + } + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetFrameMode +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetFrameMode(gboolean& frmode) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iIPDownlink) + { + status = iIPDownlink->GetFrameMode(frmode); + } + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::ConcealErrorForNextBuffer +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::ConcealErrorForNextBuffer() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iIPDownlink) + { + status = iIPDownlink->ConcealErrorForNextBuffer(); + } + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::BadLsfNextBuffer +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::BadLsfNextBuffer() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iIPDownlink) + { + status = iIPDownlink->BadLsfNextBuffer(); + } + return status; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::SetOutput +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::SetOutput(TMSAudioOutput output) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDnlinkInitialized && iIPDownlink) + { + TRAP(status, iIPDownlink->SetAudioDeviceL(output)); + } + return status; + } +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetOutput +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetOutput(TMSAudioOutput& output) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDnlinkInitialized && iIPDownlink) + { + TRAP(status, iIPDownlink->GetAudioDeviceL(output)); + } + return status; + } +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetPreviousOutput +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetPreviousOutput(TMSAudioOutput& /*output*/) + { + return TMS_RESULT_FEATURE_NOT_SUPPORTED; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::GetAvailableOutputsL +// +// ----------------------------------------------------------------------------- +// +gint TMSCallIPAdpt::GetAvailableOutputsL(gint& /*count*/, + CBufFlat*& /*outputsbuffer*/) + { + return TMS_RESULT_FEATURE_NOT_SUPPORTED; + } + +// ----------------------------------------------------------------------------- +// TMSCallIPAdpt::NotifyClient +// ----------------------------------------------------------------------------- +// +void TMSCallIPAdpt::NotifyClient(const gint strmId, const TInt aCommand, + const TInt aStatus, const TInt64 /*aInt64*/) + { + iMsgBuffer.iRequest = aCommand; + iMsgBuffer.iStatus = aStatus; + + if (strmId == iUplinkStreamId) + { + iMsgQueueUp.Send(iMsgBuffer); + } + else if (strmId == iDnlinkStreamId) + { + iMsgQueueDn.Send(iMsgBuffer); + } + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscallserver.cpp --- a/mmserv/tms/tmscallserver/src/tmscallserver.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmscallserver/src/tmscallserver.cpp Tue May 11 16:42:02 2010 +0300 @@ -16,7 +16,7 @@ */ #include "tmscallserver.h" -#include "delaytimer.h" +#include "tmsdelaytimer.h" #include "tmsutility.h" #include "tmscallsession.h" diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscallsession.cpp --- a/mmserv/tms/tmscallserver/src/tmscallsession.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmscallserver/src/tmscallsession.cpp Tue May 11 16:42:02 2010 +0300 @@ -17,7 +17,7 @@ #include "tmsutility.h" #include "tmsutility.h" -#include "calladpt.h" +#include "tmscalladpt.h" #include "tmscallserver.h" #include "tmscallclisrv.h" #include "tmscallsession.h" diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscsdevsound.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscsdevsound.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include +#include "tmscsdevsound.h" +#include "tmscsdevsoundobserver.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSCSPDevSound +// ----------------------------------------------------------------------------- +// +TMSCSPDevSound::TMSCSPDevSound(TMSCSPDevSoundObserver& aObserver) : + iObserver(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// ConstructL +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::ConstructL(TMMFState aMode, gint aAudioPreference, + gint aAudioPriority) + { + TMMFPrioritySettings audioPriority; + TFourCC modemFourCC; + modemFourCC.Set(KS60FourCCCodeModem); + iDevSound = CMMFDevSound::NewL(); + if (iDevSound) + { +#ifndef __WINSCW__ + iDevSound->InitializeL(*this, modemFourCC, aMode); +#else //For testing TMS in WINSCW + iDevSound->InitializeL(*this, KMMFFourCCCodePCM16, aMode); +#endif + iStreamType = aAudioPreference; + audioPriority.iPriority = aAudioPriority; + audioPriority.iPref = aAudioPreference; + audioPriority.iState = aMode; + iDevSound->SetPrioritySettings(audioPriority); + } + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +TMSCSPDevSound::~TMSCSPDevSound() + { + delete iDevSound; + } + +// ----------------------------------------------------------------------------- +// Tries to activate the audio stream if not active or activating +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::Activate() + { + if (!IsActive() && !IsActivationOngoing()) + { + iActivationOngoing = ETrue; + TRAP_IGNORE(DoActivateL()); + } + } + +// ----------------------------------------------------------------------------- +// Deactivates the audio device. +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::Deactivate() + { + if (iDevSound && (IsActive() || IsActivationOngoing())) + { + iDevSound->Stop(); + iActive = EFalse; + iActivationOngoing = EFalse; + } + } + +// ----------------------------------------------------------------------------- +// ActivationOngoing +// ----------------------------------------------------------------------------- +// +TBool TMSCSPDevSound::IsActivationOngoing() const + { + return iActivationOngoing; + } + +// ----------------------------------------------------------------------------- +// IsActive +// ----------------------------------------------------------------------------- +// +TBool TMSCSPDevSound::IsActive() const + { + return iActive; + } + +// ----------------------------------------------------------------------------- +// DevSound +// ----------------------------------------------------------------------------- +// +CMMFDevSound& TMSCSPDevSound::DevSound() + { + return *iDevSound; + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::InitializeComplete(TInt aError) + { + if (iStreamType == KAudioPrefCSCallDownlink) + { + iObserver.DownlinkInitCompleted(aError); + } + else + { + iObserver.UplinkInitCompleted(aError); + } + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::BufferToBeFilled(CMMFBuffer* /*aBuffer*/) + { + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::PlayError(TInt /*aError*/) + { + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::ToneFinished(TInt /*aError*/) + { + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) + { + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::RecordError(TInt /*aError*/) + { + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::ConvertError(TInt /*aError*/) + { + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Not implemented +// ----------------------------------------------------------------------------- +// +void TMSCSPDevSound::DeviceMessage(TUid /*aMessageType*/, + const TDesC8& /*aMsg*/) + { + } + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscsdownlink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscsdownlink.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include "tmscsdownlink.h" +#include "tmscsdevsoundobserver.h" + +using namespace TMS; + +const gint KDefaultVolume = 4; +const gint KDefaultMaxVolume = 10; + +// ----------------------------------------------------------------------------- +// Static constructor +// ----------------------------------------------------------------------------- +// +TMSCSDownlink* TMSCSDownlink::NewL(TMSCSPDevSoundObserver& aObserver) + { + TMSCSDownlink* self = new (ELeave) TMSCSDownlink(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +// +TMSCSDownlink::~TMSCSDownlink() + { + } + +// ----------------------------------------------------------------------------- +// Sets volume +// ----------------------------------------------------------------------------- +// +void TMSCSDownlink::SetVolume(gint aVolume) + { + if (iDevSound) + { + gint maxVolume(iDevSound->MaxVolume()); + maxVolume = (maxVolume > 0) ? maxVolume : KDefaultMaxVolume; + gint scaledVolume = (aVolume * maxVolume) / KDefaultMaxVolume; + iDevSound->SetVolume(scaledVolume); + } + } + +// ----------------------------------------------------------------------------- +// Gives volume +// ----------------------------------------------------------------------------- +// +gint TMSCSDownlink::Volume() + { + gint vol = 0; + if (iDevSound) + { + vol = iDevSound->Volume(); + } + return vol; + } + +// ----------------------------------------------------------------------------- +// Gives max volume +// ----------------------------------------------------------------------------- +// +gint TMSCSDownlink::MaxVolume() + { + gint vol = 0; + if (iDevSound) + { + vol = iDevSound->MaxVolume(); + } + return vol; + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Downlink stream has been activated successfully. +// ----------------------------------------------------------------------------- +// +void TMSCSDownlink::BufferToBeFilled(CMMFBuffer* /*aBuffer*/) + { + //CSPLOGSTRING( CSPINT, "TMSCSDownlink:: activated" ); + // We dont react to devsound messages unless we are activating. + if (IsActivationOngoing()) + { + iActive = ETrue; + iActivationOngoing = EFalse; + iObserver.DownlinkActivatedSuccessfully(); + } + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Downlink stream activation failed +// ----------------------------------------------------------------------------- +// +void TMSCSDownlink::PlayError(TInt aError) + { + //CSPLOGSTRING( CSPINT, "TMSCSDownlink::PlayError" ); + + // We dont react to devsound messages unless we are activating. + if (IsActivationOngoing()) + { + //CSPLOGSTRING( CSPINT, "TMSCSDownlink::PlayError activation failed" ); + if (aError == KErrAccessDenied) + { + iActivationOngoing = EFalse; + iObserver.DownlinkActivationFailed(); + } + } + } + +// ----------------------------------------------------------------------------- +// From class CSPDevsound +// Tries to activate Downlink stream. +// ----------------------------------------------------------------------------- +// +void TMSCSDownlink::DoActivateL() + { + if (iDevSound) + { + iDevSound->PlayInitL(); + } + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +TMSCSDownlink::TMSCSDownlink(TMSCSPDevSoundObserver& aObserver) : + TMSCSPDevSound(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// Second phase constructor +// ----------------------------------------------------------------------------- +// +void TMSCSDownlink::ConstructL() + { + TMSCSPDevSound::ConstructL(EMMFStatePlaying, KAudioPrefCSCallDownlink, + KAudioPriorityCSCallDownlink); + + if (iDevSound) + { + iDevSound->SetVolume(KDefaultVolume); + } + } + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmscsuplink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscsuplink.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include "tmscsuplink.h" +#include "tmscsdevsoundobserver.h" + +using namespace TMS; + +// Mute value +const gint KSetMuteToDevSound = 0; + +// ----------------------------------------------------------------------------- +// Static constructor. +// ----------------------------------------------------------------------------- +// +TMSCSUplink* TMSCSUplink::NewL(TMSCSPDevSoundObserver& aObserver) + { + TMSCSUplink* self = new (ELeave) TMSCSUplink(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +TMSCSUplink::~TMSCSUplink() + { + } + +// ----------------------------------------------------------------------------- +// Gives mic mute state +// ----------------------------------------------------------------------------- +// +TBool TMSCSUplink::IsMuted() + { + TBool isMuted = EFalse; + gint gain = 0; + if (iDevSound) + { + gain = iDevSound->Gain(); + } + if (!gain) + { + // Mute is on + isMuted = ETrue; + } + // CSPLOGSTRING( CSPINT, "TMSCSUplink::IsMuted" ); + return isMuted; + } + +// ----------------------------------------------------------------------------- +// Set mic muted. +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::SetMuted() + { + if (iDevSound) + { + iDevSound->SetGain(KSetMuteToDevSound); + } + } + +// ----------------------------------------------------------------------------- +// Set mic unmuted +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::SetUnmuted() + { + if (iDevSound) + { + iDevSound->SetGain(iDevSound->MaxGain()); + } + } + +// ----------------------------------------------------------------------------- +// Sets gain +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::SetGain(gint aGain) + { + if (iDevSound) + { + iDevSound->SetGain(aGain); + } + } + +// ----------------------------------------------------------------------------- +// Gives volume +// ----------------------------------------------------------------------------- +// +gint TMSCSUplink::Gain() + { + gint gain = 0; + if (iDevSound) + { + gain = iDevSound->Gain(); + } + return gain; + } + +// ----------------------------------------------------------------------------- +// Gives max gain +// ----------------------------------------------------------------------------- +// +gint TMSCSUplink::MaxGain() + { + gint gain = 0; + if (iDevSound) + { + gain = iDevSound->MaxGain(); + } + return gain; + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Activation was successfull. +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) + { + // CSPLOGSTRING( CSPINT, "TMSCSUplink::BufferToBeEmptied" ); + + // We dont react to devsound messages unless we are activating. + if (IsActivationOngoing()) + { + iActive = ETrue; + iActivationOngoing = EFalse; + iObserver.UplinkActivatedSuccessfully(); + } + } + +// ----------------------------------------------------------------------------- +// From class MDevSoundObserver +// Activation feiled +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::RecordError(TInt aError) + { + // CSPLOGSTRING( CSPINT, "TMSCSUplink::RecordError" ); + + // We dont react to devsound messages unless we are activating. + if (IsActivationOngoing()) + { + if (aError == KErrAccessDenied) + { + iActivationOngoing = EFalse; + iObserver.UplinkActivationFailed(); + } + } + } + +// ----------------------------------------------------------------------------- +// From class TMSCSPDevSound +// Tries to activate mic stream. Stream becomes active when BufferToBeFilled +// gets called. +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::DoActivateL() + { + if (iDevSound) + { + iDevSound->RecordInitL(); + } + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +TMSCSUplink::TMSCSUplink(TMSCSPDevSoundObserver& aObserver) : + TMSCSPDevSound(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// Second phase constructor +// ----------------------------------------------------------------------------- +// +void TMSCSUplink::ConstructL() + { + TMSCSPDevSound::ConstructL(EMMFStateRecording, KAudioPrefCSCallUplink, + KAudioPriorityCSCallUplink); + } + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmsdelaytimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsdelaytimer.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +// INCLUDE FILES +#include "tmsdelaytimer.h" +#include "tmsutility.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +TMSCallDelayTimer* TMSCallDelayTimer::NewL() + { + TRACE_PRN_FN_ENT; + TMSCallDelayTimer* self = new (ELeave) TMSCallDelayTimer; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + TRACE_PRN_FN_EXT; + return self; + } + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::TMSCallDelayTimer() +// C++ constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TMSCallDelayTimer::TMSCallDelayTimer() : + CActive(CActive::EPriorityStandard) + { + TRACE_PRN_FN_ENT; + CActiveScheduler::Add(this); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void TMSCallDelayTimer::ConstructL() + { + TRACE_PRN_FN_ENT; + User::LeaveIfError(iShutDownTimer.CreateLocal()); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::~TMSCallDelayTimer +// Destructor +// ----------------------------------------------------------------------------- +// +TMSCallDelayTimer::~TMSCallDelayTimer() + { + TRACE_PRN_FN_ENT; + Cancel(); + iShutDownTimer.Close(); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::SetDelay +// Request a timeout after aDelay +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void TMSCallDelayTimer::SetDelay(TTimeIntervalMicroSeconds32 aDelay) + { + TRACE_PRN_FN_ENT; + if (!IsActive()) + { + iStatus = KRequestPending; + SetActive(); + iShutDownTimer.After(iStatus, aDelay); + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::RunL +// Called by Active object framework when timer times out. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void TMSCallDelayTimer::RunL() + { + TRACE_PRN_FN_ENT; + CActiveScheduler::Stop(); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallDelayTimer::DoCancel +// Called by the Active object framework when user cancels active object. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void TMSCallDelayTimer::DoCancel() + { + TRACE_PRN_FN_ENT; + iShutDownTimer.Cancel(); + TRACE_PRN_FN_EXT; + } + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmsipcalldownlink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsipcalldownlink.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,911 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include +#include +#include "tmsutility.h" +#include "gsterrorconcealmentinterface.h" +#include "gstg711decoderinterface.h" +#include "gstilbcdecoderinterface.h" +#include "gstg729decoderinterface.h" +#include "ipcallstream.h" + +using namespace TMS; + +static TMSIPDownlink* iSelfDn; +#ifdef _DEBUG +static TInt iHeap; +#endif //_DEBUG +GstBuffer* gstDnlBuffer; +GstCaps* caps; +gint requestBufLen; + +#ifdef __PLAY_WAV_FROM_FILE__ +_LIT16(KTestFile1, "c:\\data\\sounds\\digital\\sample1.wav"); +#endif + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::cb_raw_playback_handoff +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::cb_raw_playback_handoff(GstElement* /*appsrc*/, + guint size) + { + TRACE_PRN_N(_L("TMS->DNL: cb_raw_playback_handoff")); + + requestBufLen = size; + +#ifdef _DEBUG + TInt block; + RHeap &heap = User::Heap(); + TInt avail = heap.Available(block); + RDebug::Print(_L("TMS->PRINT-HEAP-DN:Size[%d], Available[%d], delta[%d]"), + heap.Size(), avail, (iHeap - avail)); + iHeap = avail; +#endif //_DEBUG + iSelfDn->BufferToBeFilled(); + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::bus_call +// ----------------------------------------------------------------------------- +// +gboolean TMSIPDownlink::bus_call(GstBus* /*bus*/, GstMessage* msg, + gpointer /*data*/) + { + switch (GST_MESSAGE_TYPE(msg)) + { + case GST_MESSAGE_EOS: + { + gst_element_set_state(iSelfDn->iPipelinePlay, GST_STATE_NULL); + gst_object_unref(GST_OBJECT(iSelfDn->iPipelinePlay)); + break; + } + case GST_MESSAGE_ERROR: + { + gchar* debug; + GError* err; + gst_message_parse_error(msg, &err, &debug); + g_free(debug); + g_print("Error: %s\n", err->message); + g_error_free(err); + break; + } + default: + { + break; + } + } + + return ETrue; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::gst_initialize_play +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::gst_initialize_play() + { + TRACE_PRN_FN_ENT; + + gint err = KErrNone; + + // create elements + iPipelinePlay = gst_pipeline_new("pipelinePlay"); + iAppSrc = gst_element_factory_make("appsrc", "source"); + iSink = gst_element_factory_make("devsoundsink", "sink"); + + if (!iAppSrc || !iSink) + { + err = KErrNotFound; + TRACE_PRN_IF_ERR(err); + return err; + } + + iBusPlay = gst_pipeline_get_bus(GST_PIPELINE(iPipelinePlay)); + gst_bus_add_watch(iBusPlay, TMSIPDownlink::bus_call, NULL); + gst_object_unref(iBusPlay); + + iMaxBufLen = ConfigureMedia(iCodecID); + + g_object_set(iAppSrc, "stream-type", 0, "blocksize", iMaxBufLen, NULL); + gst_bin_add_many(GST_BIN(iPipelinePlay), iAppSrc, iSink, NULL); + gst_element_link(iAppSrc, iSink); + + caps = gst_caps_new_simple(iMediaType, + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "signed", G_TYPE_BOOLEAN, TRUE, + "endianness", G_TYPE_INT, G_BYTE_ORDER, + "rate", G_TYPE_INT, 8000, + "channels", G_TYPE_INT, 1, + NULL); + + //NOTE: d/s is not ready at this time to return true maxvolume + TInt maxvol = 10; +#ifdef __WINSCW__ + maxvol = 10000; +#endif //__WINSCW__ + g_object_set(G_OBJECT(iSink), + "volume", maxvol, +#ifndef __WINSCW__ + "priority", (gint)iPriority.iPriority, + "preference", (gint)iPriority.iPref, +#endif + NULL); + + gst_app_src_set_caps(GST_APP_SRC(iAppSrc), caps); + gst_app_src_set_max_bytes(GST_APP_SRC(iAppSrc), iMaxBufLen); + err = SetCodecCi(); + //gst_element_set_state(iPipelinePlay, GST_STATE_READY); + + TRACE_PRN_FN_EXT; + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::gst_play_raw +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::gst_play_raw() + { + TRACE_PRN_FN_ENT; + + // start playback + gst_element_set_state(iPipelinePlay, GST_STATE_PLAYING); + + //configure the appsrc, we will push buffer to appsrc when it needs more data + g_signal_connect(iAppSrc, "need-data", + G_CALLBACK (cb_raw_playback_handoff), + NULL); + TRACE_PRN_FN_EXT; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::TMSIPDownlink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPDownlink::TMSIPDownlink() + { + iSelfDn = this; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::~TMSIPDownlink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPDownlink::~TMSIPDownlink() + { + TRACE_PRN_FN_ENT; + + Stop(); + gst_caps_unref(caps); + gst_object_unref(GST_OBJECT(iPipelinePlay)); + gst_deinit(); + + delete iErrConcealmentIntfc; + delete iG711DecoderIntfc; + delete iG729DecoderIntfc; + delete iIlbcDecoderIntfc; + +#ifdef __PLAY_WAV_FROM_FILE__ + iFs.Close(); + delete fbuf; +#endif + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::NewL +// Symbian two-phase constructor +// ----------------------------------------------------------------------------- +// +TMSIPDownlink* TMSIPDownlink::NewL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TMSIPDownlink* self = new (ELeave) TMSIPDownlink(); + CleanupStack::PushL(self); + self->ConstructL(codecID, priority); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::ConstructL +// Part two of Symbian two phase construction +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::ConstructL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TRACE_PRN_FN_ENT; + + iCodecID = codecID; + iPriority = priority; + // SetTime(); + gst_init(NULL, NULL); + // CalcLatency(); + // SetTime(); + + gint err = gst_initialize_play(); + if (err != TMS_RESULT_SUCCESS) + { + User::Leave(err); + } + + // Client must set these before querying! + iG711DecodeMode = TMS_G711_CODEC_MODE_ALAW; + iILBCDecodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; + +#ifdef __PLAY_WAV_FROM_FILE__ + iReadSize = KVoIPPCM16FrameLen; + err = iFs.Connect(); + if (err == KErrNone) + { + err = iFile.Open(iFs, KTestFile1, EFileShareAny | EFileRead); + } + if (err == KErrNone) + { + iFile.Size(fsize); + } + fbuf = HBufC8::NewL(fsize); + TPtr8 p = fbuf->Des(); + iFile.Read(p, fsize); + iFile.Close(); +#endif + // CalcLatency(); + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::Start +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::Start() + { + TRACE_PRN_FN_ENT; + + gst_play_raw(); + iStatus = EStreaming; + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::Stop +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::Stop() + { + TRACE_PRN_FN_ENT; + + if (iStatus == EStreaming) + { + if (iPipelinePlay != NULL && + iPipelinePlay->current_state == GST_STATE_PLAYING) + { + gst_element_set_state(iPipelinePlay, GST_STATE_NULL); + } + + iStatus = EReady; + } + + if (gstDnlBuffer) + { + gst_buffer_unref(gstDnlBuffer); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::BufferToBeFilled +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::BufferToBeFilled() + { + TRACE_PRN_N1(_L("TMS->DNL->BTBF: requestBufLen[%d]"), requestBufLen); + +#ifndef __PLAY_WAV_FROM_FILE__ + // Create or adjust the chunk + TInt err = DoChunk(requestBufLen, iMsgBuffer); + + if (err != TMS_RESULT_SUCCESS) + { + Stop(); + iMsgBuffer.iStatus = err; + } + else + { + // Notify client there is buffer ready to be filled + iMsgBuffer.iStatus = iChunk.Handle(); + iMsgBuffer.iInt = requestBufLen; + iStatus = EStreaming; + // If chunk is opened, we will expect a call from the client to + // get chunk handle. When we get a call to copy chunk handle, + // check these variables and see if they match. This is not + // completely secure, but will provide some level of security + if (iMsgBuffer.iBool == TRUE) + { + iWriteDataXferHndlToClient = TRUE; + iKey = iMsgBuffer.iUint32; + } + } + + iMsgBuffer.iRequest = ECmdFillBuffer; + iMsgQueue.Send(iMsgBuffer); + +#else //__PLAY_WAV_FROM_FILE__ + TInt err = KErrNone; + BufferFilled(); +#endif //__PLAY_WAV_FROM_FILE__ + TRACE_PRN_IF_ERR(err); + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::BufferFilled +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::BufferFilled(const guint buflen) + { +#ifndef __PLAY_WAV_FROM_FILE__ + gstDnlBuffer = gst_buffer_new(); + gst_buffer_set_caps(gstDnlBuffer, caps); + GST_BUFFER_SIZE(gstDnlBuffer) = buflen; + + //TODO: what if bufLen > requestBufLen? + + // IMPL#1: + // gstDnlBuffer->data pointer is set to use chunk pointer. + // Although unlikely in the pull mode, this may potentially result + // in data loss if chunk gets overwritten before it is consumed. + gst_buffer_set_data(gstDnlBuffer, iChunk.Base(), buflen); + + // IMPL#2 + // Alternative implementation with new buffer alloc and memcpy. + // GStreamer will free this memory when buffer refcount becomes 0. + //guint8* ptr = (guint8*)g_malloc(buflen); + //GST_BUFFER_MALLOCDATA(gstDnlBuffer) = GST_BUFFER_DATA(gstDnlBuffer) = ptr; + //memcpy(ptr, iChunk.Base(), buflen); + +#else //__PLAY_WAV_FROM_FILE__ + User::After(TTimeIntervalMicroSeconds32(150000)); + + TPtr8 p = fbuf->Des(); + TInt buflen = iReadSize; + gstDnlBuffer = gst_buffer_new_and_alloc(buflen); + gst_buffer_set_caps(gstDnlBuffer, caps); + unsigned char* ptr = (unsigned char*)((fbuf->Ptr())+iReadBytes); + gst_buffer_set_data(gstDnlBuffer, ptr, buflen); + + if ((iReadBytes + iReadSize> fsize)) + { + // start over from the beginning + iReadBytes = 0; + } + else + { + iReadBytes += iReadSize; + } + +#endif //__PLAY_WAV_FROM_FILE__ + gst_app_src_push_buffer(GST_APP_SRC(iAppSrc), gstDnlBuffer); + TRACE_PRN_N1(_L("TMS->DNL->BF: LEN[%d]"), buflen); + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetCodecCi +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetCodecCi() + { + TRAPD(err, SetCodecCiL()); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetCodecCiL +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::SetCodecCiL() + { + TRACE_PRN_FN_ENT; + + switch (iCodecID) + { + case KMccFourCCIdG711: + { + if (!iG711DecoderIntfc) + { + iG711DecoderIntfc = GST_G711_DECODER_GET_IFACE(iSink); + } + break; + } + case KMccFourCCIdG729: + { + if (!iG729DecoderIntfc) + { + iG729DecoderIntfc = GST_G729_DECODER_GET_IFACE(iSink); + } + break; + } + case KMccFourCCIdILBC: + { + if (!iIlbcDecoderIntfc) + { + iIlbcDecoderIntfc = GST_ILBC_DECODER_GET_IFACE(iSink); + } + break; + } + case KMccFourCCIdAMRNB: + case KMMFFourCCCodePCM16: + { + break; + } + default: + { + User::Leave(TMS_RESULT_INVALID_ARGUMENT); + } + } + + if (iCodecID == KMccFourCCIdG711 || + iCodecID == KMccFourCCIdG729 || + iCodecID == KMccFourCCIdILBC || + iCodecID == KMccFourCCIdAMRNB) + { + if (!iErrConcealmentIntfc) + { + iErrConcealmentIntfc = GST_ERROR_CONCEALMENT_GET_IFACE(iSink); + } + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetVolume(const guint volume) + { + g_object_set(G_OBJECT(iSink), "volume", volume, NULL); + TRACE_PRN_N1(_L("TMS->DNL: SetVolume [%d]"), volume); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetVolume(guint& volume) + { + g_object_get(G_OBJECT(iSink), "volume", &volume, NULL); + TRACE_PRN_N1(_L("TMS->DNL: GetVolume [%d]"), volume); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetMaxVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetMaxVolume(guint& volume) + { + g_object_get(G_OBJECT(iSink), "maxvolume", &volume, NULL); + TRACE_PRN_N1(_L("TMS->DNL: MaxVolume [%d]"), volume); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetDataXferChunkHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) + { + gint status = TMS_RESULT_DOES_NOT_EXIST; + + if (iChunk.Handle()) + { + if (iWriteDataXferHndlToClient && (iKey == key)) + { + chunk = iChunk; + iWriteDataXferHndlToClient = FALSE; + iKey = 0; + status = TMS_RESULT_SUCCESS; + } + else + { + status = TMS_RESULT_ILLEGAL_OPERATION; + } + } + + TRACE_PRN_IF_ERR(status); + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetIlbcCodecMode(gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iILBCDecodeMode = mode; + + if (iIlbcDecoderIntfc && iCodecID == KMccFourCCIdILBC) + { + if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) + { + err = iIlbcDecoderIntfc->SetDecoderMode(E20msFrame); + TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [20ms]")); + } + else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) + { + err = iIlbcDecoderIntfc->SetDecoderMode(E30msFrame); + TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [30ms]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetIlbcCodecMode(gint& mode) + { + // not available through CIs -> return cashed value + mode = iILBCDecodeMode; + TRACE_PRN_N1(_L("TMS->DNL: GetIlbcCodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetG711CodecMode(gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iG711DecodeMode = mode; + + if (iG711DecoderIntfc && iCodecID == KMccFourCCIdG711) + { + if (mode == TMS_G711_CODEC_MODE_ALAW) + { + err = iG711DecoderIntfc->SetDecoderMode(EDecALaw); + TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [ALaw]")); + } + else if (mode == TMS_G711_CODEC_MODE_MULAW) + { + err = iG711DecoderIntfc->SetDecoderMode(EDecULaw); + TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [uLaw]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetG711CodecMode(gint& mode) + { + // not available through CIs -> return cached value + mode = iG711DecodeMode; + TRACE_PRN_N1(_L("TMS->DNL: GetG711CodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::FrameModeRqrdForEC +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::FrameModeRqrdForEC(gboolean& frmodereq) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (iErrConcealmentIntfc) + { + err = iErrConcealmentIntfc->FrameModeRqrdForEC(&frmodereq); + TRACE_PRN_N1(_L("TMS->DNL: FrameModeRqrdForEC [%d]"), frmodereq); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetFrameMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetFrameMode(const gboolean frmode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iFrameMode = frmode; + + if (iErrConcealmentIntfc) + { + err = iErrConcealmentIntfc->SetFrameMode(frmode); + TRACE_PRN_N1(_L("TMS->DNL: SetFrameMode [%d]"), frmode); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetFrameMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetFrameMode(gboolean& frmode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iErrConcealmentIntfc) + { + // not available through CIs -> return cached value + frmode = iFrameMode; + TRACE_PRN_N1(_L("TMS->DNL: GetFrameMode [%d]"), frmode); + err = TMS_RESULT_SUCCESS; + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::ConcealErrorForNextBuffer +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::ConcealErrorForNextBuffer() + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iErrConcealmentIntfc) + { + err = iErrConcealmentIntfc->ConcealErrorForNextBuffer(); + TRACE_PRN_N(_L("TMS->DNL: ConcealErrorForNextBuffer")); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetCng +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetCng(const TMSFormatType fmttype, const gboolean cng) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + err = iG711DecoderIntfc->SetCng(cng); + TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); + } + else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) + { + err = iIlbcDecoderIntfc->SetCng(cng); + TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetCng +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetCng(const TMSFormatType fmttype, gboolean& cng) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + err = iG711DecoderIntfc->GetCng(&cng); + TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); + } + else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) + { + err = iIlbcDecoderIntfc->GetCng(&cng); + TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetPlc(const TMSFormatType fmttype, const gboolean plc) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + iPlc = plc; + err = iG711DecoderIntfc->SetPlc(iPlc); + TRACE_PRN_N1(_L("TMS->DNL: SetPlc [%d]"), plc); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetPlc(const TMSFormatType fmttype, gboolean& plc) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + // not available through CIs -> return cached value + plc = iPlc; + err = TMS_RESULT_SUCCESS; + TRACE_PRN_N1(_L("TMS->DNL: GetPlc [%d]"), plc); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::BadLsfNextBuffer +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::BadLsfNextBuffer() + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EStreaming) + { + if (iCodecID == KMccFourCCIdG729 && iG729DecoderIntfc) + { + err = iG729DecoderIntfc->BadLsfNextBuffer(); + TRACE_PRN_N(_L("TMS->DNL: BadLsfNextBuffer")); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetAudioDeviceL +// +// ----------------------------------------------------------------------------- +void TMSIPDownlink::SetAudioDeviceL(TMSAudioOutput output) + { + gint outputDev; + + // ENoPreference=0, EAll=1, ENoOutput=2, EPrivate=3, EPublic=4 + switch (output) + { + case TMS_AUDIO_OUTPUT_PRIVATE: + case TMS_AUDIO_OUTPUT_HANDSET: + outputDev = (gint)CAudioOutput::EPrivate; + break; + case TMS_AUDIO_OUTPUT_PUBLIC: + case TMS_AUDIO_OUTPUT_LOUDSPEAKER: + outputDev = (gint)CAudioOutput::EPublic; + break; + default: // Use default device routing + outputDev = (gint)CAudioOutput::ENoPreference; + break; + } + + g_object_set(G_OBJECT(iSink), "outputdevice", outputDev, NULL); + TRACE_PRN_N1(_L("TMS->DNL: SetAudioDeviceL [%d]"), outputDev); + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetAudioDeviceL +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::GetAudioDeviceL(TMSAudioOutput& output) + { + TRACE_PRN_FN_ENT; + + gint outputDev; + g_object_get(G_OBJECT(iSink), "outputdevice", &outputDev, NULL); + TRACE_PRN_N1(_L("TMS->DNL: GetAudioDevice [%d]"), outputDev); + + switch (outputDev) + { + case CAudioOutput::ENoPreference: + case CAudioOutput::EAll: + case CAudioOutput::ENoOutput: + case CAudioOutput::EPrivate: + output = TMS_AUDIO_OUTPUT_PRIVATE; + break; + case CAudioOutput::EPublic: + output = TMS_AUDIO_OUTPUT_PUBLIC; + break; + default: + output = TMS_AUDIO_OUTPUT_PRIVATE; + break; + } + + TRACE_PRN_FN_EXT; + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmsipcalldownlinkds.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsipcalldownlinkds.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,815 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include "tmsutility.h" +#include "tmsipcallstream.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::TMSIPDownlink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPDownlink::TMSIPDownlink() + { + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::~TMSIPDownlink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPDownlink::~TMSIPDownlink() + { + TRACE_PRN_FN_ENT; + + Stop(); + + delete iAudioOutput; + delete iErrConcealmentIntfc; + delete iG711DecoderIntfc; + delete iG729DecoderIntfc; + delete iIlbcDecoderIntfc; + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::NewL +// Symbian two-phase constructor +// ----------------------------------------------------------------------------- +// +TMSIPDownlink* TMSIPDownlink::NewL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TMSIPDownlink* self = new (ELeave) TMSIPDownlink(); + CleanupStack::PushL(self); + self->ConstructL(codecID, priority); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::ConstructL +// Part two of Symbian two phase construction +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::ConstructL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TRACE_PRN_FN_ENT; + + iCodecID = codecID; + iPriority = priority; + + // Client must set these before querying! + iG711DecodeMode = TMS_G711_CODEC_MODE_ALAW; + iILBCDecodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; + + TRAPD(err, InitDevSoundL(EMMFStatePlaying, priority)); + if (err != TMS_RESULT_SUCCESS) + { + User::Leave(err); + } + + iMaxBufLen = ConfigureMedia(iCodecID); + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::Start +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::Start() + { + TRACE_PRN_FN_ENT; + + gint err = TMS_RESULT_ILLEGAL_OPERATION; + + if (iStatus == EReady && iDevSound) + { + TRAP(err, iDevSound->PlayInitL()); + TRACE_PRN_IF_ERR(err); + +#ifdef _DEBUG + iSamplesPlayedCount = 0; +#endif + if (err != TMS_RESULT_SUCCESS) + { + iStatus = EReady; + } + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::Stop +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::Stop() + { + TRACE_PRN_FN_ENT; + + if (iStatus == EStreaming && iDevSound) + { + iDevSound->Stop(); + iStatus = EReady; + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::BufferToBeFilled +// A reference to the buffer delivered from the DevSound is stored locally +// for later use. It will be filled with the data passed from the client +// when it calls BufferFilled. +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::BufferToBeFilled(CMMFBuffer* aBuffer) + { + // Store pointer to the received buffer + iDevSoundBufPtr = static_cast(aBuffer); + iBufLen = iDevSoundBufPtr->RequestSize(); + TRACE_PRN_N1(_L("TMS->DNL->BTBF: LEN[%d]"), iBufLen); + +#ifndef __WINSCW__ + //TODO: revisit this! + // The first AMR buffer returns 1 for no data frame. + /*if (iCodecID == KMccFourCCIdAMRNB) + { + iBufLen = iMaxBufLen; + }*/ +#endif //__WINSCW__ + // Create or adjust the chunk + gint err = DoChunk(iBufLen, iMsgBuffer); + + if (err != TMS_RESULT_SUCCESS) + { + Stop(); + iMsgBuffer.iStatus = err; + } + else + { + // Notify client there is buffer ready to be filled + iMsgBuffer.iStatus = err; + iMsgBuffer.iInt = iBufLen; + iStatus = EStreaming; + // If chunk is opened, we will expect a call from the client to + // get chunk handle. When we get a call to copy chunk handle, + // check these variables and see if they match. This is not + // completely secure, but will provide some level of security + if (iMsgBuffer.iBool == TRUE) + { + iWriteDataXferHndlToClient = TRUE; + iKey = iMsgBuffer.iUint32; + } + } + + iMsgBuffer.iRequest = ECmdFillBuffer; + err = iMsgQueue.Send(iMsgBuffer); + + TRACE_PRN_IF_ERR(err); + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::BufferFilled +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::BufferFilled(const guint buflen) + { + TRACE_PRN_N1(_L("TMS->DNL->BF: LEN[%d]"), buflen); + + // Copy data over from chunk + TPtr8 dataPtr(iChunk.Base(), buflen, iMaxBufLen); + // RDebug::RawPrint(dataPtr); + + if (iStatus == EStreaming && iDevSound && iDevSoundBufPtr) + { + // Fill D/S buffer and send it for playback + iDevSoundBufPtr->Data() = dataPtr; + TRAP_IGNORE(iDevSoundBufPtr->SetRequestSizeL(buflen)); + //try playing anyway + iDevSound->PlayData(); + } + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetCodecCi +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetCodecCi() + { + TRAPD(err, SetCodecCiL()); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetCodecCiL +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::SetCodecCiL() + { + TRACE_PRN_FN_ENT; + + switch (iCodecID) + { + case KMccFourCCIdG711: + { + if (!iG711DecoderIntfc) + { + iG711DecoderIntfc = CG711DecoderIntfc::NewL(*iDevSound); + } + break; + } + case KMccFourCCIdG729: + { + if (!iG729DecoderIntfc) + { + iG729DecoderIntfc = CG729DecoderIntfc::NewL(*iDevSound); + } + break; + } + case KMccFourCCIdILBC: + { + if (!iIlbcDecoderIntfc) + { + iIlbcDecoderIntfc = CIlbcDecoderIntfc::NewL(*iDevSound); + } + break; + } + case KMccFourCCIdAMRNB: + case KMMFFourCCCodePCM16: + { + break; + } + default: + { + User::Leave(TMS_RESULT_INVALID_ARGUMENT); + break; + } + } + + if (!iErrConcealmentIntfc && iCodecID != KMMFFourCCCodePCM16) + { + iErrConcealmentIntfc = CErrorConcealmentIntfc::NewL(*iDevSound); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetVolume(const guint volume) + { + gint ret(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDevSound) + { + iDevSound->SetVolume(volume); + ret = TMS_RESULT_SUCCESS; + } + TRACE_PRN_N1(_L("TMS->DNL: SetVolume [%d]"), volume); + return ret; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetVolume(guint& volume) + { + gint ret(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDevSound) + { + volume = iDevSound->Volume(); + ret = TMS_RESULT_SUCCESS; + } + TRACE_PRN_N1(_L("TMS->DNL: GetVolume [%d]"), volume); + return ret; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetMaxVolume +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetMaxVolume(guint& volume) + { + gint ret(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDevSound) + { + volume = iDevSound->MaxVolume(); + ret = TMS_RESULT_SUCCESS; + } + TRACE_PRN_N1(_L("TMS->DNL: MaxVolume [%d]"), volume); + return ret; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetDataXferChunkHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) + { + gint status = TMS_RESULT_DOES_NOT_EXIST; + + if (iChunk.Handle()) + { + if (iWriteDataXferHndlToClient && (iKey == key)) + { + chunk = iChunk; + iWriteDataXferHndlToClient = FALSE; + iKey = 0; + status = TMS_RESULT_SUCCESS; + } + else + { + status = TMS_RESULT_ILLEGAL_OPERATION; + } + } + + TRACE_PRN_IF_ERR(status); + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetIlbcCodecMode(gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iILBCDecodeMode = mode; + + if (iIlbcDecoderIntfc && iCodecID == KMccFourCCIdILBC) + { + if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) + { + err = iIlbcDecoderIntfc->SetDecoderMode( + CIlbcDecoderIntfc::E20msFrame); + TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [20ms]")); + } + else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) + { + err = iIlbcDecoderIntfc->SetDecoderMode( + CIlbcDecoderIntfc::E30msFrame); + TRACE_PRN_N(_L("TMS->DNL: iLBC Mode Set [30ms]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetIlbcCodecMode(gint& mode) + { + // not available through CIs -> return cashed value + mode = iILBCDecodeMode; + TRACE_PRN_N1(_L("TMS->DNL: GetIlbcCodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetG711CodecMode(gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iG711DecodeMode = mode; + + if (iG711DecoderIntfc && iCodecID == KMccFourCCIdG711) + { + if (mode == TMS_G711_CODEC_MODE_ALAW) + { + err = iG711DecoderIntfc->SetDecoderMode( + CG711DecoderIntfc::EDecALaw); + TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [ALaw]")); + } + else if (mode == TMS_G711_CODEC_MODE_MULAW) + { + err = iG711DecoderIntfc->SetDecoderMode( + CG711DecoderIntfc::EDecULaw); + TRACE_PRN_N(_L("TMS->DNL: G711 Mode Set [uLaw]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetG711CodecMode(gint& mode) + { + // not available through CIs -> return cached value + mode = iG711DecodeMode; + TRACE_PRN_N1(_L("TMS->DNL: GetG711CodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::FrameModeRqrdForEC +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::FrameModeRqrdForEC(gboolean& frmodereq) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (iErrConcealmentIntfc) + { + err = iErrConcealmentIntfc->FrameModeRqrdForEC(frmodereq); + TRACE_PRN_N1(_L("TMS->DNL: FrameModeRqrdForEC [%d]"), frmodereq); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetFrameMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetFrameMode(const gboolean frmode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iFrameMode = frmode; + + if (iErrConcealmentIntfc) + { + err = iErrConcealmentIntfc->SetFrameMode(frmode); + TRACE_PRN_N1(_L("TMS->DNL: SetFrameMode [%d]"), frmode); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetFrameMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetFrameMode(gboolean& frmode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iErrConcealmentIntfc) + { + // not available through CIs -> return cached value + frmode = iFrameMode; + TRACE_PRN_N1(_L("TMS->DNL: GetFrameMode [%d]"), frmode); + err = TMS_RESULT_SUCCESS; + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::ConcealErrorForNextBuffer +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::ConcealErrorForNextBuffer() + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iErrConcealmentIntfc) + { + err = iErrConcealmentIntfc->ConcealErrorForNextBuffer(); + TRACE_PRN_N(_L("TMS->DNL: ConcealErrorForNextBuffer")); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetCng +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetCng(const TMSFormatType fmttype, const gboolean cng) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + err = iG711DecoderIntfc->SetCng(cng); + TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); + } + else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) + { + err = iIlbcDecoderIntfc->SetCng(cng); + TRACE_PRN_N1(_L("TMS->DNL: SetCng [%d]"), cng); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetCng +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetCng(const TMSFormatType fmttype, gboolean& cng) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + err = iG711DecoderIntfc->GetCng(cng); + TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); + } + else if (fmttype == TMS_FORMAT_ILBC && iIlbcDecoderIntfc) + { + err = iIlbcDecoderIntfc->GetCng(cng); + TRACE_PRN_N1(_L("TMS->DNL: GetCng [%d]"), cng); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::SetPlc(const TMSFormatType fmttype, const gboolean plc) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + iPlc = plc; + err = iG711DecoderIntfc->SetPlc(iPlc); + TRACE_PRN_N1(_L("TMS->DNL: SetPlc [%d]"), plc); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetPlc +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::GetPlc(const TMSFormatType fmttype, gboolean& plc) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (fmttype == TMS_FORMAT_G711 && iG711DecoderIntfc) + { + // not available through CIs -> return cached value + plc = iPlc; + err = TMS_RESULT_SUCCESS; + TRACE_PRN_N1(_L("TMS->DNL: GetPlc [%d]"), plc); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::BadLsfNextBuffer +// +// ----------------------------------------------------------------------------- +// +gint TMSIPDownlink::BadLsfNextBuffer() + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EStreaming) + { + if (iCodecID == KMccFourCCIdG729 && iG729DecoderIntfc) + { + err = iG729DecoderIntfc->BadLsfNextBuffer(); + TRACE_PRN_N(_L("TMS->DNL: BadLsfNextBuffer")); + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::SetAudioDeviceL +// +// ----------------------------------------------------------------------------- +void TMSIPDownlink::SetAudioDeviceL(TMSAudioOutput output) + { + TRACE_PRN_FN_ENT; + + if (!iAudioOutput) + { + iAudioOutput = CAudioOutput::NewL(*iDevSound); + } + + if (iAudioOutput) + { + // ENoPreference=0, EAll=1, ENoOutput=2, EPrivate=3, EPublic=4 + CAudioOutput::TAudioOutputPreference outputDev; + + switch (output) + { + case TMS_AUDIO_OUTPUT_PRIVATE: + case TMS_AUDIO_OUTPUT_HANDSET: + outputDev = CAudioOutput::EPrivate; + break; + case TMS_AUDIO_OUTPUT_PUBLIC: + case TMS_AUDIO_OUTPUT_LOUDSPEAKER: + outputDev = CAudioOutput::EPublic; + break; + default: // Use default device routing + outputDev = CAudioOutput::ENoPreference; + break; + } + + iAudioOutput->SetAudioOutputL(outputDev); + TRACE_PRN_N1(_L("TMS->DNL: SetAudioDeviceL [%d]"), outputDev); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::GetAudioDeviceL +// +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::GetAudioDeviceL(TMSAudioOutput& output) + { + TRACE_PRN_FN_ENT; + + if (!iAudioOutput) + { + iAudioOutput = CAudioOutput::NewL(*iDevSound); + } + + if (iAudioOutput) + { + CAudioOutput::TAudioOutputPreference outputDev = + iAudioOutput->AudioOutput(); + + switch (outputDev) + { + case CAudioOutput::ENoPreference: + case CAudioOutput::EAll: + case CAudioOutput::ENoOutput: + case CAudioOutput::EPrivate: + output = TMS_AUDIO_OUTPUT_PRIVATE; + break; + case CAudioOutput::EPublic: + output = TMS_AUDIO_OUTPUT_PUBLIC; + break; + default: + output = TMS_AUDIO_OUTPUT_PRIVATE; + break; + } + } + + TRACE_PRN_FN_EXT; + } + +// CALLBACKS + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::InitializeComplete +// A callback from the DevSound indicating completion of the initialization. +// It will send config data to the D/S and configure the encoder via CI. +// If everything goes well, the state of the thread is set EReady. +// The initialization completion message is sent back to the main thread. +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::InitializeComplete(TInt aError) + { + TRACE_PRN_FN_ENT; + + gint err = aError; + + if (err == TMS_RESULT_SUCCESS && iDevSound) + { + TMMFCapabilities conf; + conf = iDevSound->Config(); + conf.iRate = EMMFSampleRate8000Hz; + conf.iChannels = EMMFMono; + TRAP(err, iDevSound->SetConfigL(conf)); + if (err == TMS_RESULT_SUCCESS) + { + // We are ready to stream even in case of later CI setting failure + iStatus = EReady; + iMaxVolume = iDevSound->MaxVolume(); + } + + // Init Custom Interface API to the decoder + err = SetCodecCi(); + if (err != TMS_RESULT_SUCCESS) + { + // DEBUG only + // Can ignore error - although decoder is not fully configured but + // it can still run in the default mode. + TRACE_PRN_IF_ERR(err); + } + } + + // TODO: Notify client + + TRACE_PRN_IF_ERR(err); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPDownlink::PlayError +// From MDevSoundObserver +// Record error is send to client over comm channel. +// The state of recorder is rolled back to EReady. +// ----------------------------------------------------------------------------- +// +void TMSIPDownlink::PlayError(TInt /*aError*/) + { + //TRACE_PRN_IF_ERR(aError); + +#ifdef _DEBUG + iSamplesPlayedCount = 0; +#endif + iStatus = EReady; + + // TODO: Notify client + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmsipcallstreambase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsipcallstreambase.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include "tmsutility.h" +#include "tmsshared.h" +#include "tmsipcallstream.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSIPCallStreamBase::~TMSIPCallStreamBase +// Destructor +// ----------------------------------------------------------------------------- +// +TMSIPCallStreamBase::~TMSIPCallStreamBase() + { + TRACE_PRN_FN_ENT; + + if (iChunk.Handle() > 0) + { + iChunk.Close(); + } + +#ifndef __USE_GSTREAMER__ + delete iDevSound; +#endif //__USE_GSTREAMER__ + TRACE_PRN_FN_EXT; + } + +#ifndef __USE_GSTREAMER__ +// ----------------------------------------------------------------------------- +// TMSIPCallStreamBase::InitDevSoundL +// +// ----------------------------------------------------------------------------- +// +void TMSIPCallStreamBase::InitDevSoundL(const TMMFState aDevSoundState, + const TMMFPrioritySettings priority) + { + TRACE_PRN_FN_ENT; + + if (!iDevSound) + { + // Create D/S recording/playing device + iDevSound = CMMFDevSound::NewL(); + } + + if (iDevSound) + { + iDevSound->InitializeL(*this, TFourCC(iCodecID), aDevSoundState); + iDevSound->SetPrioritySettings(priority); + } + } +#endif //__USE_GSTREAMER__ + +// ----------------------------------------------------------------------------- +// TMSIPCallStreamBase::SetMsgQueue +// +// ----------------------------------------------------------------------------- +// +void TMSIPCallStreamBase::SetMsgQueue(const RMsgQueue aMsgQueue) + { + iMsgQueue = aMsgQueue; + } + +// ----------------------------------------------------------------------------- +// TMSIPCallStreamBase::ConfigureMedia +// +// ----------------------------------------------------------------------------- +// +gint TMSIPCallStreamBase::ConfigureMedia(const guint32 aCodecID) + { + gint framelen = 0; + + switch (aCodecID) + { + case KMccFourCCIdG711: + iMediaType = "audio/x-alaw"; + // iMediaType = "audio/x-mulaw"; + framelen = KTMSG711FrameLen10ms; //TODO: may be H/W specific! + //framelen = KTMSG711FrameLen20ms; + break; + case KMccFourCCIdG729: + iMediaType = "audio/g729"; + framelen = KTMSG729FrameLen; + break; + case KMccFourCCIdILBC: + iMediaType = "audio/ilbc"; + framelen = KTMSILBCFrameLen20ms; + //framelen = KTMSILBCFrameLen30ms; + break; + case KMccFourCCIdAMRNB: + iMediaType = "audio/amr"; + framelen = KTMSAMRNBFrameLen; + //framelen = KTMSAMRNBFrameLenFM; + break; + case KMMFFourCCCodePCM16: + default: + iMediaType = "audio/x-raw-int"; + framelen = KTMSPCM16FrameLen; +#ifdef __WINSCW__ + framelen *= 4; //16kB +#endif + break; + } + + //TODO: DEVLON TEST + if (iCodecID != KMMFFourCCCodePCM16) + { + framelen *= 10; + } + //TODO: DEVLON TEST + + return framelen; + } + +// ----------------------------------------------------------------------------- +// TMSIPCallStreamBase::DoChunk +// Checks, adjusts and creates global RChunk. +// ----------------------------------------------------------------------------- +// +gint TMSIPCallStreamBase::DoChunk(const gint aDataLen, TmsMsgBuf& aMsgBuffer) + { + gint status(KErrNone); + + // If chunk already created, try to reuse it + if (iChunk.Handle()) + { + // committed size is smaller but chunk is large enough to hold data + if ((iChunk.Size() < aDataLen) && (aDataLen <= iChunk.MaxSize())) + { + status = iChunk.Adjust(aDataLen); + TRACE_PRN_N1(_L("IP_CALL: DoChunk->Chunk Adjusted [%d]"), aDataLen); + } + else if (aDataLen > iChunk.MaxSize()) + { + iChunk.Close(); + TRACE_PRN_N(_L("IP_CALL: DoChunk->Chunk Closed")); + } + } + RET_ERR_IF_ERR(status); + + // Request kernel to create global RChunk if needed + aMsgBuffer.iBool = FALSE; + if (!iChunk.Handle()) + { + // TODO consider using some max instead + status = iChunk.CreateGlobal(KNullDesC, aDataLen, aDataLen); + // Mark to re-open chunk handle + aMsgBuffer.iBool = TRUE; + aMsgBuffer.iUint32 = Math::Random(); + TRACE_PRN_N2(_L("IP_CALL: DoChunk->Chunk Created [%d]key[%d]"), + aDataLen, aMsgBuffer.iUint32); + } + TRACE_PRN_IF_ERR(status); + return status; + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmsipcalluplink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsipcalluplink.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,758 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include +#include "tmsutility.h" +#include "ipcallstream.h" + +using namespace TMS; + +static TMSIPUplink* iSelfUp; +GstBuffer* gstUplBuffer; +#ifdef _DEBUG +//static TInt iHeapUp; +#endif //_DEBUG + +// ----------------------------------------------------------------------------- +// TMSIPUplink::cb_record_raw_handoff +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::cb_record_raw_handoff(GstElement *sink) + { + TRACE_PRN_N(_L("TMS->UPL: cb_record_raw_handoff Enter")); + +#ifdef _DEBUG + /* TInt block; + RHeap &heap = User::Heap(); + TInt avail = heap.Available(block); + RDebug::Print(_L("VoIP->PRINT-HEAP-UP:Available:[%d], delta:[%d]"), + avail, iHeapUp-avail); + iHeapUp = avail;*/ +#endif + + gstUplBuffer = gst_app_sink_pull_buffer(GST_APP_SINK(sink)); + iSelfUp->BufferToBeEmptied(); + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::bus_call +// ----------------------------------------------------------------------------- +// +gboolean TMSIPUplink::bus_call(GstBus* /*bus*/, GstMessage* msg, + gpointer /*data*/) + { + switch (GST_MESSAGE_TYPE(msg)) + { + case GST_MESSAGE_EOS: + { + gst_element_set_state(iSelfUp->iPipelineRec, GST_STATE_NULL); + gst_object_unref(GST_OBJECT(iSelfUp->iPipelineRec)); + break; + } + case GST_MESSAGE_ERROR: + { + gchar *debug; + GError *err; + gst_message_parse_error(msg, &err, &debug); + g_free(debug); + g_print("Error: %s\n", err->message); + g_error_free(err); + break; + } + default: + { + break; + } + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::gst_initialize_record +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::gst_initialize_record() + { + TRACE_PRN_FN_ENT; + + gint err = KErrNone; + + // create a new bin to hold the elements + iPipelineRec = gst_pipeline_new("pipelineRec"); + iSource = gst_element_factory_make("devsoundsrc", "record_audio"); + iAppSink = gst_element_factory_make("appsink", "appsink"); + + if (!iSource || !iAppSink) + { + err = KErrNotFound; + TRACE_PRN_IF_ERR(err); + return err; + } + + iMaxBufLen = ConfigureMedia(iCodecID); + + GstCaps* caps = gst_caps_new_simple(iMediaType, + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "signed", G_TYPE_BOOLEAN, TRUE, + "endianness", G_TYPE_INT, G_BYTE_ORDER, + "rate", G_TYPE_INT, 8000, + "channels", G_TYPE_INT, 1, + NULL); + + iBusRec = gst_pipeline_get_bus(GST_PIPELINE(iPipelineRec)); + gst_bus_add_watch(iBusRec, (TMSIPUplink::bus_call), NULL); + gst_object_unref(iBusRec); + + // add objects to the main iPipelineRec + gst_bin_add_many(GST_BIN(iPipelineRec), iSource, iAppSink, NULL); + + // link the elements + gst_element_link_filtered(iSource, iAppSink, caps); + + g_object_set(G_OBJECT(iAppSink), + "max-buffers", 1, + "emit-signals", TRUE, + "sync", FALSE, + NULL); + + g_signal_connect(iAppSink, "new-buffer", + G_CALLBACK(cb_record_raw_handoff), + NULL); + + gst_app_sink_set_caps(GST_APP_SINK(iAppSink), caps); + gst_caps_unref(caps); + + //NOTE: d/s is not ready at this time to return true maxgain + TInt maxgain = 1; +#ifdef __WINSCW__ + maxgain = 64; +#endif //__WINSCW__ + g_object_set(G_OBJECT(iSource), + "blocksize", iMaxBufLen, + "gain", maxgain, +#ifndef __WINSCW__ + "priority", (gint)iPriority.iPriority, + "preference", (gint)iPriority.iPref, +#endif + NULL); + + err = SetCodecCi(); + //gst_element_set_state(iPipelineRec, GST_STATE_READY); + + TRACE_PRN_FN_EXT; + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::gst_record_raw +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::gst_record_raw() + { + // start recording + gst_element_set_state(iPipelineRec, GST_STATE_PLAYING); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::TMSIPUplink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPUplink::TMSIPUplink() + { + iSelfUp = this; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::~TMSIPUplink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPUplink::~TMSIPUplink() + { + TRACE_PRN_FN_ENT; + + Stop(); + gst_object_unref(GST_OBJECT(iPipelineRec)); + gst_deinit(); + + delete iSpeechEncoderConfig; + delete iG711EncoderIntfc; + delete iG729EncoderIntfc; + delete iIlbcEncoderIntfc; + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::NewL +// Symbian two-phase constructor +// ----------------------------------------------------------------------------- +// +TMSIPUplink* TMSIPUplink::NewL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TMSIPUplink* self = new (ELeave) TMSIPUplink(); + CleanupStack::PushL(self); + self->ConstructL(codecID, priority); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::ConstructL +// Part two of Symbian two phase construction +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::ConstructL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TRACE_PRN_FN_ENT; + + iCodecID = codecID; + iPriority = priority; + // SetTime(); + gst_init(NULL, NULL); + // CalcLatency(); + // SetTime(); + gint err = gst_initialize_record(); + if (err != TMS_RESULT_SUCCESS) + { + User::Leave(err); + } + + // Client must set these before querying! + iG711EncodeMode = TMS_G711_CODEC_MODE_ALAW; + iILBCEncodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; + // CalcLatency(); + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::Start +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::Start() + { + TRACE_PRN_FN_ENT; + + gst_record_raw(); + iStatus = EStreaming; + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::Stop +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::Stop() + { + TRACE_PRN_FN_ENT; + + if (iStatus == EStreaming) + { + if (iPipelineRec != NULL && + iPipelineRec->current_state == GST_STATE_PLAYING) + { + GstStateChangeReturn ret; + ret = gst_element_set_state(iPipelineRec, GST_STATE_NULL); + if (ret == GST_STATE_CHANGE_FAILURE) + { + ;// retry??? + //GST_STATE_CHANGE_SUCCESS + } + } + iStatus = EReady; + } + + if (gstUplBuffer) + { + gst_buffer_unref(gstUplBuffer); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::BufferToBeEmptied +// From MDevSoundObserver +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::BufferToBeEmptied() + { + TInt buflen = GST_BUFFER_SIZE(gstUplBuffer); + TRACE_PRN_N1(_L("TMS->UPL: BTBE->LEN [%d]"), buflen); + + // Adjust/create RChunk if necessary + TInt err = DoChunk(buflen, iMsgBuffer); + + if (err != TMS_RESULT_SUCCESS) + { + Stop(); + iMsgBuffer.iStatus = err; + } + else + { + // Pass buffer parameters to the client + iMsgBuffer.iStatus = err; + iMsgBuffer.iInt = buflen; + + // Copy data over to RChunk + TPtr8 dataPtr(iChunk.Base(), buflen, iMaxBufLen); + dataPtr.Copy(GST_BUFFER_DATA(gstUplBuffer), buflen); + gst_buffer_unref(gstUplBuffer); + + //RDebug::RawPrint(dataPtr); + iStatus = EStreaming; + + // If chunk is opened, we will expect a call from the client to + // get chunk handle. When we get a call to copy chunk handle, + // check these variables and see if they match. This is not + // completely secure, but will provide some level of security. + if (iMsgBuffer.iBool == TRUE) + { + iWriteDataXferHndlToClient = TRUE; + iKey = iMsgBuffer.iUint32; + } + } + + // Notify client there is buffer ready to be emptied + iMsgBuffer.iRequest = ECmdEmptyBuffer; + err = iMsgQueue.Send(iMsgBuffer); + TRACE_PRN_IF_ERR(err); + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::BufferEmptied +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::BufferEmptied() + { + //TRACE_PRN_N(_L("TMS->UPL->BE")); + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetCodecCi +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetCodecCi() + { + TRAPD(err, SetCodecCiL()); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetCodecCiL +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::SetCodecCiL() + { + TRACE_PRN_FN_ENT; + + switch (iCodecID) + { + case KMccFourCCIdG711: + { + if (!iG711EncoderIntfc) + { + iG711EncoderIntfc = GST_G711_ENCODER_GET_IFACE(iSource); + } + break; + } + case KMccFourCCIdG729: + { + if (!iG729EncoderIntfc) + { + iG729EncoderIntfc = GST_G729_ENCODER_GET_IFACE(iSource); + } + break; + } + case KMccFourCCIdILBC: + { + if (!iIlbcEncoderIntfc) + { + iIlbcEncoderIntfc = GST_ILBC_ENCODER_GET_IFACE(iSource); + } + break; + } + case KMccFourCCIdAMRNB: + case KMMFFourCCCodePCM16: + { + break; + } + default: + { + User::Leave(TMS_RESULT_INVALID_ARGUMENT); + } + } + + if (!iSpeechEncoderConfig && iCodecID != KMMFFourCCCodePCM16) + { + iSpeechEncoderConfig = GST_SPEECH_ENCODER_CONFIG_GET_IFACE(iSource); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetGain(const guint gain) + { + g_object_set(G_OBJECT(iSource), "gain", gain, NULL); + TRACE_PRN_N1(_L("TMS->UPL: SetGain [%d]"), gain); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetGain(guint& gain) + { + g_object_get(G_OBJECT(iSource), "gain", &gain, NULL); + TRACE_PRN_N1(_L("TMS->UPL: GetGain [%d]"), gain); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetMaxGain +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetMaxGain(guint& gain) + { + g_object_get(G_OBJECT(iSource), "maxgain", &gain, NULL); + TRACE_PRN_N1(_L("TMS->UPL: MaxGain [%d]"), gain); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetDataXferChunkHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) + { + gint status = TMS_RESULT_SUCCESS; + + if (iChunk.Handle()) + { + if (iWriteDataXferHndlToClient && (iKey == key)) + { + chunk = iChunk; + iWriteDataXferHndlToClient = FALSE; + iKey = 0; + } + else + { + status = TMS_RESULT_ILLEGAL_OPERATION; + } + } + + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetIlbcCodecMode(const gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iILBCEncodeMode = mode; + + if (iIlbcEncoderIntfc && iCodecID == KMccFourCCIdILBC) + { + if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) + { + err = iIlbcEncoderIntfc->SetEncoderMode(EIlbc20msFrame); + TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [20ms Frame]")); + } + else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) + { + err = iIlbcEncoderIntfc->SetEncoderMode(EIlbc30msFrame); + TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [30ms Frame]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetIlbcCodecMode(gint& mode) + { + // not available through CIs -> return cached value + mode = iILBCEncodeMode; + TRACE_PRN_N1(_L("TMS->UPL: GetIlbcCodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetG711CodecMode(const gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iG711EncodeMode = mode; + + if (iG711EncoderIntfc && iCodecID == KMccFourCCIdG711) + { + if (mode == TMS_G711_CODEC_MODE_ALAW) + { + err = iG711EncoderIntfc->SetEncoderMode(EEncALaw); + TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [ALaw]")); + } + else if (mode == TMS_G711_CODEC_MODE_MULAW) + { + err = iG711EncoderIntfc->SetEncoderMode(EEncULaw); + TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [uLaw]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetG711CodecMode(gint& mode) + { + // not available through CIs -> return cached value + mode = iG711EncodeMode; + TRACE_PRN_N1(_L("TMS->UPL: GetG711CodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetSupportedBitrates +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetSupportedBitrates(RArray& bitrates) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + bitrates.Reset(); + + if (iSpeechEncoderConfig) + { + gint i = 0; + GList* gbitrates = NULL; + // GList* walk; + err = iSpeechEncoderConfig->GetSupportedBitrates(&gbitrates); + + //TODO: try returning GList and do not convert to RArray + for (; gbitrates; gbitrates = g_list_next (gbitrates)) + { + // guint br = GPOINTER_TO_INT(gbitrates->data); + guint br = GPOINTER_TO_UINT(gbitrates->data); + bitrates.Append(br); + TRACE_PRN_N2(_L("TMS->UPL: GetSupportedBitrates %d:[%d]"), i+1, br); + i++; + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetBitrate +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetBitrate(guint bitrate) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->SetBitrate(bitrate); + TRACE_PRN_N1(_L("TMS->UPL: SetBitrate [%d]"), bitrate); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetBitrate +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetBitrate(guint& bitrate) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->GetBitrate(&bitrate); + TRACE_PRN_N1(_L("TMS->UPL: GetBitrate [%d]"), bitrate); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetVad +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetVad(const TMSFormatType fmttype, const gboolean vad) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + switch (fmttype) + { + case TMS_FORMAT_G711: + { + if (iG711EncoderIntfc) + { + err = iG711EncoderIntfc->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_G729: + { + if (iG729EncoderIntfc) + { + err = iG729EncoderIntfc->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_ILBC: + { + if (iIlbcEncoderIntfc) + { + err = iIlbcEncoderIntfc->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_AMR: + { + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + default: + { + break; //TMS_RESULT_DOES_NOT_EXIST + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetVad +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetVad(const TMSFormatType fmttype, gboolean& vad) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + switch (fmttype) + { + case TMS_FORMAT_G711: + { + if (iG711EncoderIntfc) + { + err = iG711EncoderIntfc->GetVadMode(&vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_G729: + { + if (iG729EncoderIntfc) + { + err = iG729EncoderIntfc->GetVadMode(&vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_ILBC: + { + if (iIlbcEncoderIntfc) + { + err = iIlbcEncoderIntfc->GetVadMode(&vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_AMR: + { + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->GetVadMode(&vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + default: + { + break; //TMS_RESULT_DOES_NOT_EXIST + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// End of file diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmsipcalluplinkds.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsipcalluplinkds.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,690 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +#include +#include +#include +#include +#include +#include +#include "tmsutility.h" +#include "tmsipcallstream.h" + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSIPUplink::TMSIPUplink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPUplink::TMSIPUplink() + { + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::~TMSIPUplink +// Standard Constructor +// ----------------------------------------------------------------------------- +// +TMSIPUplink::~TMSIPUplink() + { + TRACE_PRN_FN_ENT; + + Stop(); + + delete iSpeechEncoderConfig; + delete iG711EncoderIntfc; + delete iG729EncoderIntfc; + delete iIlbcEncoderIntfc; + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::NewL +// Symbian two-phase constructor +// ----------------------------------------------------------------------------- +// +TMSIPUplink* TMSIPUplink::NewL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TMSIPUplink* self = new (ELeave) TMSIPUplink(); + CleanupStack::PushL(self); + self->ConstructL(codecID, priority); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::ConstructL +// Part two of Symbian two phase construction +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::ConstructL(const guint32 codecID, + const TMMFPrioritySettings priority) + { + TRACE_PRN_FN_ENT; + + iCodecID = codecID; + iPriority = priority; + + // Client must set these before querying! + iG711EncodeMode = TMS_G711_CODEC_MODE_ALAW; + iILBCEncodeMode = TMS_ILBC_CODEC_MODE_20MS_FRAME; + + TRAPD(err, InitDevSoundL(EMMFStateRecording, priority)); + if (err != TMS_RESULT_SUCCESS) + { + User::Leave(err); + } + + iMaxBufLen = ConfigureMedia(iCodecID); + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::Start +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::Start() + { + TRACE_PRN_FN_ENT; + + gint err = TMS_RESULT_ILLEGAL_OPERATION; + iWriteDataXferHndlToClient = FALSE; + + if (iStatus == EReady && iDevSound) + { + TRAP(err, iDevSound->RecordInitL()); + TRACE_PRN_IF_ERR(err); + + if (err != TMS_RESULT_SUCCESS) + { + //TODO: Notify main thread + iStatus = EReady; + } +#ifdef _DEBUG + else + { + iSamplesRecCount = 0; + } +#endif + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::Stop +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::Stop() + { + TRACE_PRN_FN_ENT; + + if (iStatus == EStreaming && iDevSound) + { + iDevSound->Stop(); + iStatus = EReady; + } + else + { + //TODO: Notify main thread + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::BufferToBeEmptied +// From MDevSoundObserver +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::BufferToBeEmptied(CMMFBuffer* aBuffer) + { + iDevSoundBufPtr = static_cast(aBuffer); + TDes8& data = iDevSoundBufPtr->Data(); + + iBufLen = iDevSoundBufPtr->BufferSize(); + TRACE_PRN_N1(_L("TMS->UPL: BTBE->LEN [%d]"), iBufLen); + + // Adjust/create RChunk if necessary + gint err = DoChunk(iBufLen, iMsgBuffer); + + if (err != TMS_RESULT_SUCCESS) + { + Stop(); + iMsgBuffer.iStatus = err; + } + else + { + // Pass buffer parameters to the client + iMsgBuffer.iStatus = err; + iMsgBuffer.iInt = iBufLen; + + // Copy data over to RChunk + TPtr8 dataPtr(iChunk.Base(), iBufLen, iBufLen); + dataPtr = data; + iStatus = EStreaming; + + // If chunk is opened, we will expect a call from the client to + // get chunk handle. When we get a call to copy chunk handle, + // check these variables and see if they match. This is not + // completely secure, but will provide some level of security. + if (iMsgBuffer.iBool == TRUE) + { + iWriteDataXferHndlToClient = TRUE; + iKey = iMsgBuffer.iUint32; + } + } + + // Notify client there is buffer ready to be emptied + iMsgBuffer.iRequest = ECmdEmptyBuffer; + err = iMsgQueue.Send(iMsgBuffer); + TRACE_PRN_IF_ERR(err); + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::BufferEmptied +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::BufferEmptied() + { + //TRACE_PRN_N(_L("TMS->UPL->BE")); + if (iDevSound) + { + iDevSound->RecordData(); + } + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetCodecCi +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetCodecCi() + { + TRAPD(err, SetCodecCiL()); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetCodecCiL +// +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::SetCodecCiL() + { + TRACE_PRN_FN_ENT; + + switch (iCodecID) + { + case KMccFourCCIdG711: + { + if (!iG711EncoderIntfc) + { + iG711EncoderIntfc = CG711EncoderIntfc::NewL(*iDevSound); + } + break; + } + case KMccFourCCIdG729: + { + if (!iG729EncoderIntfc) + { + iG729EncoderIntfc = CG729EncoderIntfc::NewL(*iDevSound); + } + break; + } + case KMccFourCCIdILBC: + { + if (!iIlbcEncoderIntfc) + { + iIlbcEncoderIntfc = CIlbcEncoderIntfc::NewL(*iDevSound); + } + break; + } + case KMccFourCCIdAMRNB: + case KMMFFourCCCodePCM16: + { + break; + } + default: + { + User::Leave(TMS_RESULT_INVALID_ARGUMENT); + break; + } + } + + if (!iSpeechEncoderConfig && iCodecID != KMMFFourCCCodePCM16) + { + iSpeechEncoderConfig = CSpeechEncoderConfig::NewL(*iDevSound); + } + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetGain(const guint gain) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDevSound) + { + iDevSound->SetGain(gain); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_N1(_L("TMS->UPL: SetGain [%d]"), gain); + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetGain +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetGain(guint& gain) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDevSound) + { + gain = iDevSound->Gain(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_N1(_L("TMS->UPL: GetGain [%d]"), gain); + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetMaxGain +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetMaxGain(guint& gain) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iDevSound) + { + gain = iDevSound->MaxGain(); + status = TMS_RESULT_SUCCESS; + } + TRACE_PRN_N1(_L("TMS->UPL: MaxGain [%d]"), gain); + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetDataXferChunkHndl +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetDataXferChunkHndl(const TUint32 key, RChunk& chunk) + { + gint status = TMS_RESULT_SUCCESS; + + if (iChunk.Handle()) + { + if (iWriteDataXferHndlToClient && (iKey == key)) + { + chunk = iChunk; + iWriteDataXferHndlToClient = FALSE; + iKey = 0; + } + else + { + status = TMS_RESULT_ILLEGAL_OPERATION; + } + } + + return status; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetIlbcCodecMode(const gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iILBCEncodeMode = mode; + + if (iIlbcEncoderIntfc && iCodecID == KMccFourCCIdILBC) + { + if (mode == TMS_ILBC_CODEC_MODE_20MS_FRAME) + { + err = iIlbcEncoderIntfc->SetEncoderMode( + CIlbcEncoderIntfc::E20msFrame); + TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [20ms Frame]")); + } + else if (mode == TMS_ILBC_CODEC_MODE_30MS_FRAME) + { + err = iIlbcEncoderIntfc->SetEncoderMode( + CIlbcEncoderIntfc::E30msFrame); + TRACE_PRN_N(_L("TMS->UPL: SetIlbcCodecMode [30ms Frame]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetIlbcCodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetIlbcCodecMode(gint& mode) + { + // not available through CIs -> return cached value + mode = iILBCEncodeMode; + TRACE_PRN_N1(_L("TMS->UPL: GetIlbcCodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetG711CodecMode(const gint mode) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iStatus == EReady) + { + iG711EncodeMode = mode; + + if (iG711EncoderIntfc && iCodecID == KMccFourCCIdG711) + { + if (mode == TMS_G711_CODEC_MODE_ALAW) + { + err = iG711EncoderIntfc->SetEncoderMode( + CG711EncoderIntfc::EEncALaw); + TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [ALaw]")); + } + else if (mode == TMS_G711_CODEC_MODE_MULAW) + { + err = iG711EncoderIntfc->SetEncoderMode( + CG711EncoderIntfc::EEncULaw); + TRACE_PRN_N(_L("TMS->UPL: SetG711CodecMode [uLaw]")); + } + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetG711CodecMode +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetG711CodecMode(gint& mode) + { + // not available through CIs -> return cached value + mode = iG711EncodeMode; + TRACE_PRN_N1(_L("TMS->UPL: GetG711CodecMode [%d]"), mode); + return TMS_RESULT_SUCCESS; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetSupportedBitrates +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetSupportedBitrates(RArray& bitrates) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + bitrates.Reset(); + + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->GetSupportedBitrates(bitrates); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetBitrate +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetBitrate(guint bitrate) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->SetBitrate(bitrate); + TRACE_PRN_N1(_L("TMS->UPL: SetBitrate [%d]"), bitrate); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetBitrate +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetBitrate(guint& bitrate) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->GetBitrate(bitrate); + TRACE_PRN_N1(_L("TMS->UPL: GetBitrate [%d]"), bitrate); + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::SetVad +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::SetVad(const TMSFormatType fmttype, const gboolean vad) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + switch (fmttype) + { + case TMS_FORMAT_G711: + { + if (iG711EncoderIntfc) + { + err = iG711EncoderIntfc->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_G729: + { + if (iG729EncoderIntfc) + { + err = iG729EncoderIntfc->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_ILBC: + { + if (iIlbcEncoderIntfc) + { + err = iIlbcEncoderIntfc->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_AMR: + { + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->SetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: SetVad [%d]"), vad); + } + break; + } + default: + { + break; //TMS_RESULT_DOES_NOT_EXIST + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::GetVad +// +// ----------------------------------------------------------------------------- +// +gint TMSIPUplink::GetVad(const TMSFormatType fmttype, gboolean& vad) + { + gint err = TMS_RESULT_DOES_NOT_EXIST; + + switch (fmttype) + { + case TMS_FORMAT_G711: + { + if (iG711EncoderIntfc) + { + err = iG711EncoderIntfc->GetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_G729: + { + if (iG729EncoderIntfc) + { + err = iG729EncoderIntfc->GetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_ILBC: + { + if (iIlbcEncoderIntfc) + { + err = iIlbcEncoderIntfc->GetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + case TMS_FORMAT_AMR: + { + if (iSpeechEncoderConfig) + { + err = iSpeechEncoderConfig->GetVadMode(vad); + TRACE_PRN_N1(_L("TMS->UPL: GetVad [%d]"), vad); + } + break; + } + default: + { + break; //TMS_RESULT_DOES_NOT_EXIST + } + } + + TRACE_PRN_IF_ERR(err); + return err; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::InitializeComplete +// A callback from the DevSound indicating completion of the initialization. +// It will send config data to the D/S and configure the encoder via CI. +// If everything goes well, the state of the thread is set EReady. +// The initialization completion message is sent back to the main thread. +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::InitializeComplete(TInt aError) + { + TRACE_PRN_FN_ENT; + + gint err = aError; + + if (err == TMS_RESULT_SUCCESS && iDevSound) + { + TMMFCapabilities conf; + conf = iDevSound->Config(); + conf.iRate = EMMFSampleRate8000Hz; + conf.iChannels = EMMFMono; + TRAP(err, iDevSound->SetConfigL(conf)); + if (err == TMS_RESULT_SUCCESS) + { + // We are ready to stream even in case of CI setting failure + iStatus = EReady; + iMaxGain = iDevSound->MaxGain(); + } + + // Init Custom Interface API to the Encoder + err = SetCodecCi(); + if (err != TMS_RESULT_SUCCESS) + { + // DEBUG only + // Can ignore error - although encoder is not fully configured but + // it can still run in the default mode. + TRACE_PRN_IF_ERR(err); + } + } + + // TODO: Notify client + + TRACE_PRN_IF_ERR(err); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSIPUplink::RecordError +// From MDevSoundObserver +// Recording error is send to the main thread. +// The state of recorder is rolled back to EReady. +// ----------------------------------------------------------------------------- +// +void TMSIPUplink::RecordError(TInt /*aError*/) + { + //TRACE_PRN_IF_ERR(aError); + +#ifdef _DEBUG + iSamplesRecCount = 0; +#endif + iStatus = EReady; + + // TODO: Notify client + } + +// End of file + diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmscallserver/src/tmstarsettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmstarsettings.cpp Tue May 11 16:42:02 2010 +0300 @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: Telephony Multimedia Service + * + */ + +// INCLUDE FILES +#include "tmstarsettings.h" +#include "tmsclientserver.h" +#include "tmsutility.h" + +using namespace TMS; + +// CONSTANTS +_LIT_SECURITY_POLICY_PASS(KTMSServerReadPolicy); +_LIT_SECURITY_POLICY_C1(KTMSServerWritePolicy, ECapabilityWriteUserData); + +// ----------------------------------------------------------------------------- +// TMSTarSettings::TMSTarSettings +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +TMSTarSettings::TMSTarSettings() + { + } + +// ----------------------------------------------------------------------------- +// TMSTarSettings::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void TMSTarSettings::ConstructL() + { + TRACE_PRN_FN_ENT; + TInt err = RProperty::Define(ERoutingPs, RProperty::EByteArray, + KTMSServerReadPolicy, KTMSServerWritePolicy); + TRACE_PRN_N1(_L("TarSetting::ConstructL err:%d"),err); + + if (err != KErrAlreadyExists) + { + User::LeaveIfError(err); + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSTarSettings::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +TMSTarSettings* TMSTarSettings::NewL() + { + TMSTarSettings* self = new (ELeave) TMSTarSettings(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// Destructor +TMSTarSettings::~TMSTarSettings() + { + TRACE_PRN_FN_ENT; + TInt err = RProperty::Delete(KTMSPropertyCategory, ERoutingPs); + TRACE_PRN_N1(_L("TarSetting::~TMSTarSettings err:%d"),err); + TRACE_PRN_FN_ENT; + } + +// ----------------------------------------------------------------------------- +// TMSTarSettings::SetVolume +// ----------------------------------------------------------------------------- +// +void TMSTarSettings::SetTar(TRoutingMsgBufPckg rountingpckg, TBool aPublish) + { + TRACE_PRN_FN_ENT; + // TInt err(KErrNone); + if (aPublish) + { + /*err =*/RProperty::Set(KTMSPropertyCategory, ERoutingPs, rountingpckg); + } + + //TRACE_PRN_N1(_L("TarSetting::SetTar err:%d"),err); + TRACE_PRN_FN_EXT; + } + +// End of File diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsimpl/eabi/tmsimpl.def --- a/mmserv/tms/tmsimpl/eabi/tmsimpl.def Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsimpl/eabi/tmsimpl.def Tue May 11 16:42:02 2010 +0300 @@ -15,84 +15,82 @@ _ZN3TMS20TMSGlobalRoutingImpl6DeleteERPNS_16TMSGlobalRoutingE @ 14 NONAME _ZTIN3TMS11TMSCallImplE @ 15 NONAME _ZTIN3TMS12TMSMemBufferE @ 16 NONAME - _ZTIN3TMS13TMSFormatImplE @ 17 NONAME - _ZTIN3TMS13TMSStreamImplE @ 18 NONAME - _ZTIN3TMS15TMSCallBodyImplE @ 19 NONAME - _ZTIN3TMS16TMSAMRFormatImplE @ 20 NONAME - _ZTIN3TMS16TMSMicSourceImplE @ 21 NONAME - _ZTIN3TMS16TMSModemSinkImplE @ 22 NONAME - _ZTIN3TMS16TMSPCMFormatImplE @ 23 NONAME - _ZTIN3TMS17TMSCSCallBodyImplE @ 24 NONAME - _ZTIN3TMS17TMSClientSinkImplE @ 25 NONAME - _ZTIN3TMS17TMSFormatBodyImplE @ 26 NONAME - _ZTIN3TMS17TMSG711FormatImplE @ 27 NONAME - _ZTIN3TMS17TMSG729FormatImplE @ 28 NONAME - _ZTIN3TMS17TMSGainEffectImplE @ 29 NONAME - _ZTIN3TMS17TMSILBCFormatImplE @ 30 NONAME - _ZTIN3TMS17TMSIPCallBodyImplE @ 31 NONAME - _ZTIN3TMS17TMSStreamBodyImplE @ 32 NONAME - _ZTIN3TMS18TMSModemSourceImplE @ 33 NONAME - _ZTIN3TMS18TMSSpeakerSinkImplE @ 34 NONAME - _ZTIN3TMS19TMSClientSourceImplE @ 35 NONAME - _ZTIN3TMS19TMSVolumeEffectImplE @ 36 NONAME - _ZTIN3TMS20TMSAMRFormatBodyImplE @ 37 NONAME - _ZTIN3TMS20TMSGlobalRoutingImplE @ 38 NONAME - _ZTIN3TMS20TMSMicSourceBodyImplE @ 39 NONAME - _ZTIN3TMS20TMSModemSinkBodyImplE @ 40 NONAME - _ZTIN3TMS20TMSPCMFormatBodyImplE @ 41 NONAME - _ZTIN3TMS21TMSClientSinkBodyImplE @ 42 NONAME - _ZTIN3TMS21TMSG711FormatBodyImplE @ 43 NONAME - _ZTIN3TMS21TMSG729FormatBodyImplE @ 44 NONAME - _ZTIN3TMS21TMSGainEffectBodyImplE @ 45 NONAME - _ZTIN3TMS21TMSILBCFormatBodyImplE @ 46 NONAME - _ZTIN3TMS22TMSGlobalVolEffectImplE @ 47 NONAME - _ZTIN3TMS22TMSModemSourceBodyImplE @ 48 NONAME - _ZTIN3TMS22TMSSpeakerSinkBodyImplE @ 49 NONAME - _ZTIN3TMS23TMSClientSourceBodyImplE @ 50 NONAME - _ZTIN3TMS23TMSGlobalGainEffectImplE @ 51 NONAME - _ZTIN3TMS23TMSVolumeEffectBodyImplE @ 52 NONAME - _ZTIN3TMS24TMSGlobalRoutingBodyImplE @ 53 NONAME - _ZTIN3TMS26TMSGlobalVolEffectBodyImplE @ 54 NONAME - _ZTIN3TMS27TMSGlobalGainEffectBodyImplE @ 55 NONAME - _ZTVN3TMS11TMSCallImplE @ 56 NONAME - _ZTVN3TMS12TMSMemBufferE @ 57 NONAME - _ZTVN3TMS13TMSFormatImplE @ 58 NONAME - _ZTVN3TMS13TMSStreamImplE @ 59 NONAME - _ZTVN3TMS15TMSCallBodyImplE @ 60 NONAME - _ZTVN3TMS16TMSAMRFormatImplE @ 61 NONAME - _ZTVN3TMS16TMSMicSourceImplE @ 62 NONAME - _ZTVN3TMS16TMSModemSinkImplE @ 63 NONAME - _ZTVN3TMS16TMSPCMFormatImplE @ 64 NONAME - _ZTVN3TMS17TMSCSCallBodyImplE @ 65 NONAME - _ZTVN3TMS17TMSClientSinkImplE @ 66 NONAME - _ZTVN3TMS17TMSFormatBodyImplE @ 67 NONAME - _ZTVN3TMS17TMSG711FormatImplE @ 68 NONAME - _ZTVN3TMS17TMSG729FormatImplE @ 69 NONAME - _ZTVN3TMS17TMSGainEffectImplE @ 70 NONAME - _ZTVN3TMS17TMSILBCFormatImplE @ 71 NONAME - _ZTVN3TMS17TMSIPCallBodyImplE @ 72 NONAME - _ZTVN3TMS17TMSStreamBodyImplE @ 73 NONAME - _ZTVN3TMS18TMSModemSourceImplE @ 74 NONAME - _ZTVN3TMS18TMSSpeakerSinkImplE @ 75 NONAME - _ZTVN3TMS19TMSClientSourceImplE @ 76 NONAME - _ZTVN3TMS19TMSVolumeEffectImplE @ 77 NONAME - _ZTVN3TMS20TMSAMRFormatBodyImplE @ 78 NONAME - _ZTVN3TMS20TMSGlobalRoutingImplE @ 79 NONAME - _ZTVN3TMS20TMSMicSourceBodyImplE @ 80 NONAME - _ZTVN3TMS20TMSModemSinkBodyImplE @ 81 NONAME - _ZTVN3TMS20TMSPCMFormatBodyImplE @ 82 NONAME - _ZTVN3TMS21TMSClientSinkBodyImplE @ 83 NONAME - _ZTVN3TMS21TMSG711FormatBodyImplE @ 84 NONAME - _ZTVN3TMS21TMSG729FormatBodyImplE @ 85 NONAME - _ZTVN3TMS21TMSGainEffectBodyImplE @ 86 NONAME - _ZTVN3TMS21TMSILBCFormatBodyImplE @ 87 NONAME - _ZTVN3TMS22TMSGlobalVolEffectImplE @ 88 NONAME - _ZTVN3TMS22TMSModemSourceBodyImplE @ 89 NONAME - _ZTVN3TMS22TMSSpeakerSinkBodyImplE @ 90 NONAME - _ZTVN3TMS23TMSClientSourceBodyImplE @ 91 NONAME - _ZTVN3TMS23TMSGlobalGainEffectImplE @ 92 NONAME - _ZTVN3TMS23TMSVolumeEffectBodyImplE @ 93 NONAME - _ZTVN3TMS24TMSGlobalRoutingBodyImplE @ 94 NONAME - _ZTVN3TMS26TMSGlobalVolEffectBodyImplE @ 95 NONAME - _ZTVN3TMS27TMSGlobalGainEffectBodyImplE @ 96 NONAME + _ZTIN3TMS13TMSStreamImplE @ 17 NONAME + _ZTIN3TMS15TMSCallBodyImplE @ 18 NONAME + _ZTIN3TMS16TMSAMRFormatImplE @ 19 NONAME + _ZTIN3TMS16TMSMicSourceImplE @ 20 NONAME + _ZTIN3TMS16TMSModemSinkImplE @ 21 NONAME + _ZTIN3TMS16TMSPCMFormatImplE @ 22 NONAME + _ZTIN3TMS17TMSCSCallBodyImplE @ 23 NONAME + _ZTIN3TMS17TMSClientSinkImplE @ 24 NONAME + _ZTIN3TMS17TMSFormatBodyImplE @ 25 NONAME + _ZTIN3TMS17TMSG711FormatImplE @ 26 NONAME + _ZTIN3TMS17TMSG729FormatImplE @ 27 NONAME + _ZTIN3TMS17TMSGainEffectImplE @ 28 NONAME + _ZTIN3TMS17TMSILBCFormatImplE @ 29 NONAME + _ZTIN3TMS17TMSIPCallBodyImplE @ 30 NONAME + _ZTIN3TMS17TMSStreamBodyImplE @ 31 NONAME + _ZTIN3TMS18TMSModemSourceImplE @ 32 NONAME + _ZTIN3TMS18TMSSpeakerSinkImplE @ 33 NONAME + _ZTIN3TMS19TMSClientSourceImplE @ 34 NONAME + _ZTIN3TMS19TMSVolumeEffectImplE @ 35 NONAME + _ZTIN3TMS20TMSAMRFormatBodyImplE @ 36 NONAME + _ZTIN3TMS20TMSGlobalRoutingImplE @ 37 NONAME + _ZTIN3TMS20TMSMicSourceBodyImplE @ 38 NONAME + _ZTIN3TMS20TMSModemSinkBodyImplE @ 39 NONAME + _ZTIN3TMS20TMSPCMFormatBodyImplE @ 40 NONAME + _ZTIN3TMS21TMSClientSinkBodyImplE @ 41 NONAME + _ZTIN3TMS21TMSG711FormatBodyImplE @ 42 NONAME + _ZTIN3TMS21TMSG729FormatBodyImplE @ 43 NONAME + _ZTIN3TMS21TMSGainEffectBodyImplE @ 44 NONAME + _ZTIN3TMS21TMSILBCFormatBodyImplE @ 45 NONAME + _ZTIN3TMS22TMSGlobalVolEffectImplE @ 46 NONAME + _ZTIN3TMS22TMSModemSourceBodyImplE @ 47 NONAME + _ZTIN3TMS22TMSSpeakerSinkBodyImplE @ 48 NONAME + _ZTIN3TMS23TMSClientSourceBodyImplE @ 49 NONAME + _ZTIN3TMS23TMSGlobalGainEffectImplE @ 50 NONAME + _ZTIN3TMS23TMSVolumeEffectBodyImplE @ 51 NONAME + _ZTIN3TMS24TMSGlobalRoutingBodyImplE @ 52 NONAME + _ZTIN3TMS26TMSGlobalVolEffectBodyImplE @ 53 NONAME + _ZTIN3TMS27TMSGlobalGainEffectBodyImplE @ 54 NONAME + _ZTVN3TMS11TMSCallImplE @ 55 NONAME + _ZTVN3TMS12TMSMemBufferE @ 56 NONAME + _ZTVN3TMS13TMSStreamImplE @ 57 NONAME + _ZTVN3TMS15TMSCallBodyImplE @ 58 NONAME + _ZTVN3TMS16TMSAMRFormatImplE @ 59 NONAME + _ZTVN3TMS16TMSMicSourceImplE @ 60 NONAME + _ZTVN3TMS16TMSModemSinkImplE @ 61 NONAME + _ZTVN3TMS16TMSPCMFormatImplE @ 62 NONAME + _ZTVN3TMS17TMSCSCallBodyImplE @ 63 NONAME + _ZTVN3TMS17TMSClientSinkImplE @ 64 NONAME + _ZTVN3TMS17TMSFormatBodyImplE @ 65 NONAME + _ZTVN3TMS17TMSG711FormatImplE @ 66 NONAME + _ZTVN3TMS17TMSG729FormatImplE @ 67 NONAME + _ZTVN3TMS17TMSGainEffectImplE @ 68 NONAME + _ZTVN3TMS17TMSILBCFormatImplE @ 69 NONAME + _ZTVN3TMS17TMSIPCallBodyImplE @ 70 NONAME + _ZTVN3TMS17TMSStreamBodyImplE @ 71 NONAME + _ZTVN3TMS18TMSModemSourceImplE @ 72 NONAME + _ZTVN3TMS18TMSSpeakerSinkImplE @ 73 NONAME + _ZTVN3TMS19TMSClientSourceImplE @ 74 NONAME + _ZTVN3TMS19TMSVolumeEffectImplE @ 75 NONAME + _ZTVN3TMS20TMSAMRFormatBodyImplE @ 76 NONAME + _ZTVN3TMS20TMSGlobalRoutingImplE @ 77 NONAME + _ZTVN3TMS20TMSMicSourceBodyImplE @ 78 NONAME + _ZTVN3TMS20TMSModemSinkBodyImplE @ 79 NONAME + _ZTVN3TMS20TMSPCMFormatBodyImplE @ 80 NONAME + _ZTVN3TMS21TMSClientSinkBodyImplE @ 81 NONAME + _ZTVN3TMS21TMSG711FormatBodyImplE @ 82 NONAME + _ZTVN3TMS21TMSG729FormatBodyImplE @ 83 NONAME + _ZTVN3TMS21TMSGainEffectBodyImplE @ 84 NONAME + _ZTVN3TMS21TMSILBCFormatBodyImplE @ 85 NONAME + _ZTVN3TMS22TMSGlobalVolEffectImplE @ 86 NONAME + _ZTVN3TMS22TMSModemSourceBodyImplE @ 87 NONAME + _ZTVN3TMS22TMSSpeakerSinkBodyImplE @ 88 NONAME + _ZTVN3TMS23TMSClientSourceBodyImplE @ 89 NONAME + _ZTVN3TMS23TMSGlobalGainEffectImplE @ 90 NONAME + _ZTVN3TMS23TMSVolumeEffectBodyImplE @ 91 NONAME + _ZTVN3TMS24TMSGlobalRoutingBodyImplE @ 92 NONAME + _ZTVN3TMS26TMSGlobalVolEffectBodyImplE @ 93 NONAME + _ZTVN3TMS27TMSGlobalGainEffectBodyImplE @ 94 NONAME diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsimpl/src/tmsbufferimpl.cpp --- a/mmserv/tms/tmsimpl/src/tmsbufferimpl.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsimpl/src/tmsbufferimpl.cpp Tue May 11 16:42:02 2010 +0300 @@ -21,18 +21,6 @@ using namespace TMS; -TMSBufferImpl::TMSBufferImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -TMSBufferImpl::~TMSBufferImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - EXPORT_C gint TMSBufferImpl::Create(TMSBufferType buffertype, guint size, TMSBuffer*& tmsbuffer) { diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsimpl/src/tmseffectimpl.cpp --- a/mmserv/tms/tmsimpl/src/tmseffectimpl.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsimpl/src/tmseffectimpl.cpp Tue May 11 16:42:02 2010 +0300 @@ -24,18 +24,6 @@ using namespace TMS; -TMSEffectImpl::TMSEffectImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -TMSEffectImpl::~TMSEffectImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - EXPORT_C gint TMSEffectImpl::Create(TMSEffectType effecttype, TMSEffect*& tmseffect) { diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsimpl/src/tmsformatimpl.cpp --- a/mmserv/tms/tmsimpl/src/tmsformatimpl.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsimpl/src/tmsformatimpl.cpp Tue May 11 16:42:02 2010 +0300 @@ -26,18 +26,6 @@ using namespace TMS; -TMSFormatImpl::TMSFormatImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -TMSFormatImpl::~TMSFormatImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - EXPORT_C gint TMSFormatImpl::Create(TMSFormatType fmttype, TMSFormat*& tmsfmt) { gint ret(TMS_RESULT_INSUFFICIENT_MEMORY); diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsimpl/src/tmssinkimpl.cpp --- a/mmserv/tms/tmsimpl/src/tmssinkimpl.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsimpl/src/tmssinkimpl.cpp Tue May 11 16:42:02 2010 +0300 @@ -23,18 +23,6 @@ using namespace TMS; -TMSSinkImpl::TMSSinkImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -TMSSinkImpl::~TMSSinkImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - EXPORT_C gint TMSSinkImpl::Create(TMSSinkType sinktype, TMSSink*& tmssink) { gint ret(TMS_RESULT_INSUFFICIENT_MEMORY); diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsimpl/src/tmssourceimpl.cpp --- a/mmserv/tms/tmsimpl/src/tmssourceimpl.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsimpl/src/tmssourceimpl.cpp Tue May 11 16:42:02 2010 +0300 @@ -23,18 +23,6 @@ using namespace TMS; -TMSSourceImpl::TMSSourceImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - -TMSSourceImpl::~TMSSourceImpl() - { - TRACE_PRN_FN_ENT; - TRACE_PRN_FN_EXT; - } - EXPORT_C gint TMSSourceImpl::Create(TMSSourceType sourcetype, TMSSource*& tmssource) { diff -r f5c5c82a163e -r 3570217d8c21 mmserv/tms/tmsserver/src/tmsserver.cpp --- a/mmserv/tms/tmsserver/src/tmsserver.cpp Tue Apr 27 17:11:02 2010 +0300 +++ b/mmserv/tms/tmsserver/src/tmsserver.cpp Tue May 11 16:42:02 2010 +0300 @@ -80,7 +80,7 @@ iUplCodecs.Close(); delete iEffectSettings; delete iTarHandler; - CancelCenRepHandler(); + delete iAudioCenRepHandler; TRACE_PRN_FN_EXT; }