Browse Source

cmDspKr.c : Added compiled bypass flag and parameter setters to EchoCancel.

master
kevin 8 years ago
parent
commit
0d1824b9c3
1 changed files with 45 additions and 15 deletions
  1. 45
    15
      dsp/cmDspKr.c

+ 45
- 15
dsp/cmDspKr.c View File

@@ -3778,20 +3778,20 @@ cmDspInst_t*  _cmDspEchoCancelAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, uns
3778 3778
   */
3779 3779
 
3780 3780
   cmDspEchoCancel_t* p = cmDspInstAllocV(cmDspEchoCancel_t,ctx,classPtr,instSymId,id,storeSymId,va_cnt,vl,
3781
-    1,   "mu",     kMuEcId,       0,0, kInDsvFl   | kDoubleDsvFl,  "NLSM mu coefficient.",
3782
-    1,   "irN",    kImpRespN_EcId, 0,0, kInDsvFl   | kUIntDsvFl,    "Filter impulse response length in samples.",
3783
-    1,   "delayN", kDelayN_EcId,  0,0, kInDsvFl   | kUIntDsvFl,    "Fixed feedback delay in samples.",
3784
-    1,   "uf_in",  kUnfiltInEcId, 0,1, kInDsvFl   | kAudioBufDsvFl,"Unfiltered audio input",
3785
-    1,   "f_in",   kFiltInEcId,   0,1, kInDsvFl   | kAudioBufDsvFl,"Filtered audio input",
3786
-    1,   "out",    kOutEcId,      0,1, kOutDsvFl  | kAudioBufDsvFl,"Audio output",
3781
+    1,   "mu",     kMuEcId,        0,0, kInDsvFl   | kDoubleDsvFl,   "NLSM mu coefficient.",
3782
+    1,   "irN",    kImpRespN_EcId, 0,0, kInDsvFl   | kUIntDsvFl,     "Filter impulse response length in samples.",
3783
+    1,   "delayN", kDelayN_EcId,   0,0, kInDsvFl   | kUIntDsvFl,     "Fixed feedback delay in samples.",
3784
+    1,   "uf_in",  kUnfiltInEcId,  0,1, kInDsvFl   | kAudioBufDsvFl, "Unfiltered audio input",
3785
+    1,   "f_in",   kFiltInEcId,    0,1, kInDsvFl   | kAudioBufDsvFl, "Filtered audio input",
3786
+    1,   "out",    kOutEcId,       0,1, kOutDsvFl  | kAudioBufDsvFl, "Audio output",
3787 3787
     0 );
3788 3788
 
3789 3789
 
3790
-  p->r = cmNlmsEcAlloc(ctx->cmProcCtx, NULL, 0,0,0 );
3790
+  p->r = cmNlmsEcAlloc(ctx->cmProcCtx, NULL, 0, 0,0,0 );
3791 3791
   
3792 3792
   cmDspSetDefaultDouble( ctx, &p->inst, kMuEcId,        0, 0.1);
3793 3793
   cmDspSetDefaultUInt(   ctx, &p->inst, kImpRespN_EcId, 0, 2048);
3794
-  cmDspSetDefaultUInt(   ctx, &p->inst, kDelayN_EcId,   0, 3963);
3794
+  cmDspSetDefaultUInt(   ctx, &p->inst, kDelayN_EcId,   0, 1906);
3795 3795
 
3796 3796
   return &p->inst;
3797 3797
 }
@@ -3804,7 +3804,7 @@ cmDspRC_t _cmDspEchoCancelSetup( cmDspCtx_t* ctx, cmDspInst_t* inst )
3804 3804
   unsigned           hN     = cmDspUInt(inst,kImpRespN_EcId);
3805 3805
   unsigned           delayN = cmDspUInt(inst,kDelayN_EcId);
3806 3806
 
3807
-  if( cmNlmsEcInit(p->r,mu,hN,delayN) != cmOkRC )
3807
+  if( cmNlmsEcInit(p->r,cmDspSampleRate(ctx),mu,hN,delayN) != cmOkRC )
3808 3808
     rc = cmErrMsg(&inst->classPtr->err, kSubSysFailDspRC, "Unable to initialize the internal echo canceller.");
3809 3809
 
3810 3810
   return rc;
@@ -3833,8 +3833,9 @@ cmDspRC_t _cmDspEchoCancelReset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspE
3833 3833
 
3834 3834
 cmDspRC_t _cmDspEchoCancelExec(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
3835 3835
 {
3836
-  cmDspRC_t           rc = kOkDspRC;
3837
-  cmDspEchoCancel_t*  p  = (cmDspEchoCancel_t*)inst;
3836
+  cmDspRC_t          rc       = kOkDspRC;
3837
+  cmDspEchoCancel_t* p        = (cmDspEchoCancel_t*)inst;
3838
+  bool               bypassFl = false;
3838 3839
   
3839 3840
   const cmSample_t*   fV = cmDspAudioBuf(ctx,inst,kFiltInEcId,0);
3840 3841
   unsigned            fN = cmDspAudioBufSmpCount(ctx,inst,kFiltInEcId,0);
@@ -3845,10 +3846,19 @@ cmDspRC_t _cmDspEchoCancelExec(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEv
3845 3846
   cmSample_t*         yV = cmDspAudioBuf(ctx,inst,kOutEcId,0);
3846 3847
   unsigned            yN = cmDspAudioBufSmpCount(ctx,inst,kOutEcId,0);
3847 3848
 
3848
-  if( fV !=NULL && uV != NULL && yV != NULL )
3849
+  assert( fN==uN && fN==yN );
3850
+  
3851
+  if( bypassFl )
3849 3852
   {
3850
-    assert( uN == yN && fN == yN );
3851
-    cmNlmsEcExec(p->r,uV,fV,yV,yN);
3853
+    cmVOS_Copy(yV,yN,fV);
3854
+  }
3855
+  else
3856
+  {
3857
+    if( fV !=NULL && uV != NULL && yV != NULL )
3858
+    {
3859
+      assert( uN == yN && fN == yN );
3860
+      cmNlmsEcExec(p->r,uV,fV,yV,yN);
3861
+    }
3852 3862
   }
3853 3863
   
3854 3864
   return rc;
@@ -3856,10 +3866,30 @@ cmDspRC_t _cmDspEchoCancelExec(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEv
3856 3866
 
3857 3867
 cmDspRC_t _cmDspEchoCancelRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
3858 3868
 {
3859
-//cmDspEchoCancel_t*  p         = (cmDspEchoCancel_t*)inst;
3869
+  cmDspEchoCancel_t*  p = (cmDspEchoCancel_t*)inst;
3860 3870
 
3861 3871
   cmDspSetEvent(ctx,inst,evt);
3862 3872
 
3873
+  if( p->r != NULL )
3874
+  {
3875
+    switch(evt->dstVarId)
3876
+    {
3877
+      case kMuEcId:
3878
+        cmNlmsEcSetMu( p->r, cmDspReal(inst,kMuEcId));
3879
+        break;
3880
+        
3881
+      case kImpRespN_EcId:
3882
+        cmNlmsEcSetIrN( p->r, cmDspUInt(inst,kImpRespN_EcId));
3883
+        break;
3884
+      
3885
+      case kDelayN_EcId:
3886
+        cmNlmsEcSetDelayN( p->r, cmDspUInt(inst,kDelayN_EcId));
3887
+        break;
3888
+    }
3889
+  }
3890
+
3891
+  printf("mu:%f dN:%i hN:%i\n",p->r->mu,p->r->delayN,p->r->hN);
3892
+  
3863 3893
   return kOkDspRC;
3864 3894
 }
3865 3895
 

Loading…
Cancel
Save