gst_plugins_symbian/gst/devsound/devsoundsrcwrapper.cpp
changeset 26 69c7080681bf
parent 20 7e3786c5ed27
child 28 4ed5253bb6ba
equal deleted inserted replaced
24:bc39b352897e 26:69c7080681bf
    25 #include <mmcccodecinformation.h>
    25 #include <mmcccodecinformation.h>
    26 #include "debugtracemacros.h"
    26 #include "debugtracemacros.h"
    27 
    27 
    28 DevSoundWrapperSrc::DevSoundWrapperSrc()
    28 DevSoundWrapperSrc::DevSoundWrapperSrc()
    29     {
    29     {
    30     init_complete = 0;
    30     //init_complete = 0;
    31     dev_sound = NULL;
    31     dev_sound = NULL;
    32     buffersize = 0;
    32     buffersize = 0;
    33     dev_count = 0;
    33     dev_count = 0;
       
    34     speechbitrate = 0;
    34     caps.iRate = EMMFSampleRate8000Hz;
    35     caps.iRate = EMMFSampleRate8000Hz;
    35     caps.iEncoding = EMMFSoundEncoding16BitPCM;
    36     caps.iEncoding = EMMFSoundEncoding16BitPCM;
    36     caps.iChannels = EMMFMono;
    37     caps.iChannels = EMMFMono;
    37     fourcc = KMMFFourCCCodePCM16;
    38     fourcc = KMMFFourCCCodePCM16;
    38     iCallbackError = KErrNone;
    39     iCallbackError = KErrNone;
    46 void DevSoundWrapperSrc::InitializeComplete(TInt aError)
    47 void DevSoundWrapperSrc::InitializeComplete(TInt aError)
    47     {
    48     {
    48     TRACE_PRN_FN_ENT;
    49     TRACE_PRN_FN_ENT;
    49     TRequestStatus* stat = &(AL->iStatus);
    50     TRequestStatus* stat = &(AL->iStatus);
    50 
    51 
    51     if (aError == KErrNone)
    52     iCallbackError = aError;
    52         {
       
    53         init_complete = 1;
       
    54         }
       
    55     else
       
    56         {
       
    57         init_complete = 0;
       
    58         }
       
    59 
       
    60     User::RequestComplete(stat, aError);
    53     User::RequestComplete(stat, aError);
    61     TRACE_PRN_FN_EXT;
    54     TRACE_PRN_FN_EXT;
    62     }
    55     }
    63 /************************************************************/
    56 /************************************************************/
    64 
    57 
   100 void DevSoundWrapperSrc::RecordError(TInt aError)
    93 void DevSoundWrapperSrc::RecordError(TInt aError)
   101     {
    94     {
   102     TRACE_PRN_FN_ENT;
    95     TRACE_PRN_FN_ENT;
   103     TRACE_PRN_N1(_L("DevSoundWrapperSrc::RecordError %d"),aError);
    96     TRACE_PRN_N1(_L("DevSoundWrapperSrc::RecordError %d"),aError);
   104     iCallbackError = aError;
    97     iCallbackError = aError;
       
    98     TRequestStatus* stat = &(AL->iStatus);
       
    99     /// need to check this, error can occure before and after calling 
       
   100     /// the StartActiveScheduler and might and might not be waiting for 
       
   101     /// completing the request
       
   102     if( AL->IsActive() )
       
   103         {
       
   104     /// need to complete the request for coming out from blocking call.
       
   105         User::RequestComplete(stat, aError);
       
   106         iCallbackError = aError;    
       
   107         }
   105     TRACE_PRN_FN_EXT;
   108     TRACE_PRN_FN_EXT;
   106     }
   109     }
   107 /**********************************************************/
   110 /**********************************************************/
   108 
   111 
   109 void DevSoundWrapperSrc::ConvertError(TInt /*aError*/)
   112 void DevSoundWrapperSrc::ConvertError(TInt /*aError*/)
   174 
   177 
   175 /*******************************************************/
   178 /*******************************************************/
   176 int initialize_devsound(GstDevsoundSrc* ds)
   179 int initialize_devsound(GstDevsoundSrc* ds)
   177     {
   180     {
   178     TRACE_PRN_FN_ENT;
   181     TRACE_PRN_FN_ENT;
   179     int ret = 0;
   182     //int ret = 0;
   180     DevSoundWrapperSrc* handle = (DevSoundWrapperSrc*) ds->handle;
   183     DevSoundWrapperSrc* handle = (DevSoundWrapperSrc*) ds->handle;
   181 
   184 
   182     handle->AL->InitialiseActiveListener();
   185     handle->AL->InitialiseActiveListener();
   183 
   186 
   184         TRAP(ret, handle->dev_sound->InitializeL(*handle, handle->fourcc, EMMFStateRecording));
   187         TRAP(handle->iCallbackError, handle->dev_sound->InitializeL(*handle, handle->fourcc, EMMFStateRecording));
   185 
   188 
   186     if (ret)
   189     if ( handle->iCallbackError )
   187         {
   190         {
   188         TRACE_PRN_FN_EXT;
   191         TRACE_PRN_FN_EXT;
   189         return ret;
   192         return handle->iCallbackError;
   190         }
   193         }
   191 
   194 
   192     handle->AL->StartActiveScheduler();
   195     handle->AL->StartActiveScheduler();
   193 
   196 
   194     if (handle->init_complete == 1)
   197     if (KErrNone == handle->iCallbackError )
   195         {
   198         {
   196         TMMFPrioritySettings temp;
   199         TMMFPrioritySettings temp;
   197         temp.iPref = (TMdaPriorityPreference) ds->preference;
   200         temp.iPref = (TMdaPriorityPreference) ds->preference;
   198         temp.iPriority = ds->priority;
   201         temp.iPriority = ds->priority;
   199         handle->dev_sound->SetPrioritySettings(temp);
   202         handle->dev_sound->SetPrioritySettings(temp);
   200 
   203 
   201         SetConfigurations(handle);
   204         handle->iCallbackError = SetConfigurations(handle);
   202         ret = KErrNone;
   205         
   203         }
   206         }
   204     else
   207 
   205         {
   208 
   206         ret = KErrNotFound;
   209     TRACE_PRN_IF_ERR(handle->iCallbackError);
   207         }
   210     TRACE_PRN_FN_EXT;
   208 
   211     return handle->iCallbackError;
   209     TRACE_PRN_IF_ERR(ret);
       
   210     TRACE_PRN_FN_EXT;
       
   211     return ret;
       
   212     }
   212     }
   213 /*********************************************************/
   213 /*********************************************************/
   214 
   214 
   215 int stop_devsound(GstDevsoundSrc *ds)
   215 int stop_devsound(GstDevsoundSrc *ds)
   216     {
   216     {
   223 
   223 
   224 int pause_devsound(GstDevsoundSrc *ds)
   224 int pause_devsound(GstDevsoundSrc *ds)
   225     {
   225     {
   226     TRACE_PRN_FN_ENT;
   226     TRACE_PRN_FN_ENT;
   227     DevSoundWrapperSrc* handle = (DevSoundWrapperSrc*) ds->handle;
   227     DevSoundWrapperSrc* handle = (DevSoundWrapperSrc*) ds->handle;
   228     if(handle->dev_sound->IsResumeSupported())
       
   229         {
       
   230         handle->dev_sound->Pause();
   228         handle->dev_sound->Pause();
   231         }
       
   232     else
       
   233         {
       
   234         handle->iSamplesRecorded = handle->dev_sound->SamplesRecorded();
       
   235         handle->dev_sound->Stop();
       
   236         }
       
   237     TRACE_PRN_FN_EXT;
   229     TRACE_PRN_FN_EXT;
   238     return 0;
   230     return 0;
   239     }
   231     }
   240 
   232 
   241 int resume_devsound(GstDevsoundSrc *ds)
   233 int resume_devsound(GstDevsoundSrc *ds)
   242     {
   234     {
   243     TRACE_PRN_FN_ENT;
   235     TRACE_PRN_FN_ENT;
   244     DevSoundWrapperSrc* handle = (DevSoundWrapperSrc*) ds->handle;
   236     DevSoundWrapperSrc* handle = (DevSoundWrapperSrc*) ds->handle;
   245     if(handle->dev_sound->IsResumeSupported())
   237     if(handle->dev_sound->IsResumeSupported())
   246         {
   238         {
   247         handle->dev_sound->Resume();
   239 
       
   240         handle->iCallbackError = handle->dev_sound->Resume();
   248         }
   241         }
   249     else
   242     else
   250         {
   243         {
   251         recordinit(handle);
   244         if( KErrNone == recordinit(handle) )
   252         initproperties(ds);
   245             initproperties(ds);
   253         }
   246         }
   254     TRACE_PRN_FN_EXT;
   247     TRACE_PRN_FN_EXT;
   255     return 0;
   248     return 0;
   256     }
   249     }
   257 
   250 
   258 int open_device(DevSoundWrapperSrc **handle)
   251 int open_device(DevSoundWrapperSrc **handle)
   259     {
   252     {
   260     int retcode = KErrNone;
   253     (*handle)->iCallbackError = KErrNone;
   261     TRACE_PRN_FN_ENT;
   254     TRACE_PRN_FN_ENT;
   262 
   255 
   263     (*handle)->dev_count++;
   256     (*handle)->dev_count++;
   264 
   257 
   265     (*handle)->as = CActiveScheduler::Current();
   258     (*handle)->as = CActiveScheduler::Current();
   274         }
   267         }
   275 
   268 
   276     (*handle)->AL = new CActiveListener;
   269     (*handle)->AL = new CActiveListener;
   277     ((*handle)->AL)->asw = new CActiveSchedulerWait();
   270     ((*handle)->AL)->asw = new CActiveSchedulerWait();
   278 
   271 
   279         TRAP( retcode,(*handle)->dev_sound = CMMFDevSound::NewL() );
   272         TRAP( (*handle)->iCallbackError,(*handle)->dev_sound = CMMFDevSound::NewL() );
   280 
   273 
   281     if (!(*handle)->AL || !((*handle)->AL)->asw || !(*handle)->dev_sound
   274     if (!(*handle)->AL || !((*handle)->AL)->asw || !(*handle)->dev_sound
   282             || !(*handle)->as)
   275             || !(*handle)->as)
   283         {
   276         {
   284         retcode = KErrNoMemory;
   277         return KErrNoMemory;
   285         }
   278         }
   286     
   279     
   287     TRAP(retcode ,(*handle)->iAudoInputRecord = CAudioInput::NewL(*(*handle)->dev_sound));
   280     TRAP((*handle)->iCallbackError ,(*handle)->iAudoInputRecord = CAudioInput::NewL(*(*handle)->dev_sound));
   288     RArray<CAudioInput::TAudioInputPreference> inputArray;
   281     if ( KErrNone == (*handle)->iCallbackError )
       
   282 	{
       
   283 	RArray<CAudioInput::TAudioInputPreference> inputArray;
   289     inputArray.Append( CAudioInput::EDefaultMic );
   284     inputArray.Append( CAudioInput::EDefaultMic );
   290     // Set Audio Input
   285     // Set Audio Input
   291     (*handle)->iAudoInputRecord->SetAudioInputL( inputArray.Array( ) );
   286     (*handle)->iAudoInputRecord->SetAudioInputL( inputArray.Array( ) );
   292     inputArray.Close();
   287     inputArray.Close();
   293 
   288 	}
   294     TRACE_PRN_FN_EXT;
   289     TRACE_PRN_FN_EXT;
   295 
   290 
   296     return retcode;
   291     return (*handle)->iCallbackError;
   297     }
   292     }
   298 
   293 
   299 /*********************************************************/
   294 /*********************************************************/
   300 
   295 
   301 int close_devsound(GstDevsoundSrc *ds)
   296 int close_devsound(GstDevsoundSrc *ds)
   302     {
   297     {
   303     TRACE_PRN_FN_ENT;
   298     TRACE_PRN_FN_ENT;
   304     (STATIC_CAST(DevSoundWrapperSrc*, ds->handle))->dev_sound->Stop();
   299     CMMFDevSound    *dev_sound= 0;
       
   300     dev_sound = (STATIC_CAST(DevSoundWrapperSrc*, ds->handle))->dev_sound;
       
   301     dev_sound->Stop();
   305     g_list_foreach(ds->supportedbitrates, (GFunc) g_free, NULL);
   302     g_list_foreach(ds->supportedbitrates, (GFunc) g_free, NULL);
   306     g_list_free(ds->supportedbitrates);
   303     g_list_free(ds->supportedbitrates);
   307 
   304 
   308     g_list_foreach(ds->fmt, (GFunc) g_free, NULL);
   305     g_list_foreach(ds->fmt, (GFunc) g_free, NULL);
   309     g_list_free(ds->fmt);
   306     g_list_free(ds->fmt);
   310     ds->fmt = NULL;
   307     ds->fmt = NULL;
   311     delete (STATIC_CAST(DevSoundWrapperSrc*, ds->handle))->iAudoInputRecord;
   308     delete (STATIC_CAST(DevSoundWrapperSrc*, ds->handle))->iAudoInputRecord;
       
   309     delete dev_sound;
   312     delete ds->handle;
   310     delete ds->handle;
   313     TRACE_PRN_FN_EXT;
   311     TRACE_PRN_FN_EXT;
   314     return 0;
   312     return 0;
       
   313     }
       
   314 /************************************************************/
       
   315 void update_devsound_speech_bitrate(DevSoundWrapperSrc *handle, TUint bitrate)
       
   316     {
       
   317     handle->speechbitrate = bitrate;
   315     }
   318     }
   316 /************************************************************/
   319 /************************************************************/
   317 
   320 
   318 int SetConfigurations(DevSoundWrapperSrc *handle)
   321 int SetConfigurations(DevSoundWrapperSrc *handle)
   319     {
   322     {
   324     temp_caps = (handle->dev_sound)->Capabilities();
   327     temp_caps = (handle->dev_sound)->Capabilities();
   325 
   328 
   326     handle->gain = (handle->dev_sound)->MaxGain();
   329     handle->gain = (handle->dev_sound)->MaxGain();
   327     (handle->dev_sound)->SetGain(handle->gain);
   330     (handle->dev_sound)->SetGain(handle->gain);
   328     handle->caps.iBufferSize = temp_caps.iBufferSize;
   331     handle->caps.iBufferSize = temp_caps.iBufferSize;
   329 
   332     
   330         TRAP(ret, (handle->dev_sound)->SetConfigL(handle->caps) );
       
   331     if (ret)
       
   332         {
       
   333         return ret;
       
   334         }
       
   335 
       
   336     (handle->caps) = (handle->dev_sound)->Config();
       
   337 
       
   338     switch (handle->fourcc)
   333     switch (handle->fourcc)
   339         {
   334         {
   340         case KMccFourCCIdG711:
   335         case KMccFourCCIdG711:
   341             {
   336             {
   342             if (!handle->iG711EncoderIntfc)
   337             if (!handle->iG711EncoderIntfc)
   371             {
   366             {
   372             break;
   367             break;
   373             }
   368             }
   374         }
   369         }
   375 
   370 
       
   371     if (ret)
       
   372         return ret;
       
   373     
   376     if (!handle->iSpeechEncoderConfig && handle->fourcc
   374     if (!handle->iSpeechEncoderConfig && handle->fourcc
   377             != KMMFFourCCCodePCM16)
   375             != KMMFFourCCCodePCM16)
   378         {
   376         {
   379 
   377 
   380             TRAP(ret, handle->iSpeechEncoderConfig
   378             TRAP(ret, handle->iSpeechEncoderConfig
   381                     = CSpeechEncoderConfig::NewL(*handle->dev_sound));
   379                     = CSpeechEncoderConfig::NewL(*handle->dev_sound));
   382         }
   380         if (ret)
       
   381             return ret;
       
   382         
       
   383         if(handle->speechbitrate > 0)
       
   384             {
       
   385             ret = set_speech_encoder_bit_rate(handle,handle->speechbitrate);
       
   386             if(ret)
       
   387                 return ret;
       
   388             }
       
   389         }
       
   390     
       
   391      TRAP(ret, (handle->dev_sound)->SetConfigL(handle->caps) );
       
   392      if (ret)
       
   393          {
       
   394          return ret;
       
   395          }
       
   396 
       
   397      (handle->caps) = (handle->dev_sound)->Config();
   383 
   398 
   384     TRACE_PRN_FN_EXT;
   399     TRACE_PRN_FN_EXT;
   385     return ret;
   400     return ret;
   386     }
   401     }
   387 
   402 
   619 /*******************************************************************/
   634 /*******************************************************************/
   620 
   635 
   621 int recordinit(DevSoundWrapperSrc *handle)
   636 int recordinit(DevSoundWrapperSrc *handle)
   622     {
   637     {
   623     TRACE_PRN_FN_ENT;
   638     TRACE_PRN_FN_ENT;
   624     int ret = 0;
   639 
   625     ((handle)->AL)->InitialiseActiveListener();
   640     ((handle)->AL)->InitialiseActiveListener();
   626     handle->iCallbackError = KErrNone;
   641     handle->iCallbackError = KErrNone;
   627 
   642 
   628         TRAP(ret, (handle->dev_sound)->RecordInitL() );
   643         TRAP(handle->iCallbackError, (handle->dev_sound)->RecordInitL() );
   629 
   644 
   630     if (ret)
   645     if (!handle->iCallbackError)
   631         {
   646         {
   632         TRACE_PRN_FN_EXT;
   647         ((handle)->AL)->StartActiveScheduler();
   633         return ret;
   648         }
   634         }
   649     TRACE_PRN_FN_EXT;
   635     ((handle)->AL)->StartActiveScheduler();
   650     return handle->iCallbackError;
   636 
       
   637     if ((handle->iCallbackError) != KErrNone)
       
   638         {
       
   639         TRACE_PRN_FN_EXT;
       
   640         return (handle->iCallbackError);
       
   641         }
       
   642     TRACE_PRN_FN_EXT;
       
   643     return KErrNone;
       
   644 
       
   645     }
   651     }
   646 
   652 
   647 /*******************************************************************/
   653 /*******************************************************************/
   648 int record_data(DevSoundWrapperSrc *handle)
   654 int record_data(DevSoundWrapperSrc *handle)
   649     {
   655     {
   660 /*********************************************************************/
   666 /*********************************************************************/
   661 
   667 
   662 int pre_init_setconf(GstDevsoundSrc *ds)
   668 int pre_init_setconf(GstDevsoundSrc *ds)
   663     {
   669     {
   664     TRACE_PRN_FN_ENT;
   670     TRACE_PRN_FN_ENT;
   665     int ret = 0;
       
   666     DevSoundWrapperSrc* dsPtr = STATIC_CAST(DevSoundWrapperSrc*, ds->handle);
   671     DevSoundWrapperSrc* dsPtr = STATIC_CAST(DevSoundWrapperSrc*, ds->handle);
   667 
   672     dsPtr->iCallbackError = 0;
   668     // NOTE: it is too late for setting prio/pref here
   673     // NOTE: it is too late for setting prio/pref here
   669     if (ds->pending.preferenceupdate == 1 || ds->pending.priorityupdate == 1)
   674     if (ds->pending.preferenceupdate == 1 || ds->pending.priorityupdate == 1)
   670         {
   675         {
   671         ds->pending.preferenceupdate = FALSE;
   676         ds->pending.preferenceupdate = FALSE;
   672         ds->pending.priorityupdate = FALSE;
   677         ds->pending.priorityupdate = FALSE;
   679 
   684 
   680     if (ds->pending.leftbalanceupdate == 1 || ds->pending.rightbalanceupdate
   685     if (ds->pending.leftbalanceupdate == 1 || ds->pending.rightbalanceupdate
   681             == 1)
   686             == 1)
   682         {
   687         {
   683 
   688 
   684             TRAP( ret, (dsPtr->dev_sound)->SetRecordBalanceL(ds->leftbalance,
   689             TRAP( dsPtr->iCallbackError, (dsPtr->dev_sound)->SetRecordBalanceL(ds->leftbalance,
   685                             ds->rightbalance) );
   690                             ds->rightbalance) );
   686         ds->pending.leftbalanceupdate = FALSE;
   691         ds->pending.leftbalanceupdate = FALSE;
   687         ds->pending.rightbalanceupdate = FALSE;
   692         ds->pending.rightbalanceupdate = FALSE;
   688         }
   693         }
   689     TRACE_PRN_FN_EXT;
   694     TRACE_PRN_FN_EXT;
   690     return ret;
   695     return dsPtr->iCallbackError;
   691     }
   696     }
   692 /*********************************************************/
   697 /*********************************************************/
   693 void getsupporteddatatypes(GstDevsoundSrc *ds)
   698 void getsupporteddatatypes(GstDevsoundSrc *ds)
   694     {
   699     {
   695     TRACE_PRN_FN_ENT;
   700     TRACE_PRN_FN_ENT;
   743     get_g729_vad_mode(dsPtr, &ds->g729vadmode);
   748     get_g729_vad_mode(dsPtr, &ds->g729vadmode);
   744     get_ilbc_vad_mode(dsPtr, &ds->ilbcvadmode);
   749     get_ilbc_vad_mode(dsPtr, &ds->ilbcvadmode);
   745     TRACE_PRN_FN_EXT;
   750     TRACE_PRN_FN_EXT;
   746     }
   751     }
   747 
   752 
       
   753 int call_back_error(DevSoundWrapperSrc* dsPtr)
       
   754     {
       
   755     TRACE_PRN_FN_ENT;
       
   756     return dsPtr->iCallbackError;
       
   757     TRACE_PRN_FN_EXT;
       
   758     }
       
   759