@@ -88,6 +88,15 @@ void spreader_create
8888 pData -> interpolatorFadeIn [t ] = ((float )t + 1.0f )/(float )TIME_SLOTS ;
8989 pData -> interpolatorFadeOut [t ] = 1.0f - ((float )t + 1.0f )/(float )TIME_SLOTS ;
9090 }
91+
92+ // Hotfix:
93+ pData -> _tmpFrame = malloc1d (MAX_NUM_CHANNELS * TIME_SLOTS * sizeof (float_complex ));
94+ pData -> _H_tmp = malloc1d (MAX_NUM_CHANNELS * sizeof (float_complex ));
95+ pData -> _Cy = malloc1d (MAX_NUM_CHANNELS * MAX_NUM_CHANNELS * sizeof (float_complex ));
96+ pData -> _E_dir = malloc1d (MAX_NUM_CHANNELS * MAX_NUM_CHANNELS * sizeof (float_complex ));
97+ pData -> _V = malloc1d (MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS * sizeof (float_complex ));
98+ pData -> _D = malloc1d (MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS * sizeof (float_complex ));
99+ pData -> _Cproto = malloc1d (MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS * sizeof (float_complex ));
91100
92101 /* Optimal mixing */
93102 pData -> hCdf = NULL ;
@@ -157,6 +166,15 @@ void spreader_destroy
157166 free (pData -> interp_Mr );
158167 free (pData -> interp_Mr_cmplx );
159168
169+ // Hotfix:
170+ free (pData -> _tmpFrame );
171+ free (pData -> _H_tmp );
172+ free (pData -> _Cy );
173+ free (pData -> _E_dir );
174+ free (pData -> _V );
175+ free (pData -> _D );
176+ free (pData -> _Cproto );
177+
160178 /* Optimal mixing */
161179 cdf4sap_cmplx_destroy (& (pData -> hCdf ));
162180 cdf4sap_destroy (& (pData -> hCdf_res ));
@@ -354,9 +372,6 @@ void spreader_process
354372 float trace , Ey , Eproto , Gcomp ;
355373 float src_dirs_deg [SPREADER_MAX_NUM_SOURCES ][2 ], src_dir_xyz [3 ], CprotoDiag [MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS ], src_spread [MAX_NUM_OUTPUTS ];
356374 float_complex scaleC , tmp ;
357- float_complex tmpFrame [MAX_NUM_CHANNELS ][TIME_SLOTS ], H_tmp [MAX_NUM_CHANNELS ], Cy [MAX_NUM_CHANNELS * MAX_NUM_CHANNELS ];
358- float_complex E_dir [MAX_NUM_CHANNELS * MAX_NUM_CHANNELS ], V [MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS ], D [MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS ];
359- float_complex Cproto [MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS ];
360375#if 0
361376 float_complex Cx [MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS ];
362377 float CxDiag [MAX_NUM_OUTPUTS * MAX_NUM_OUTPUTS ];
@@ -407,11 +422,11 @@ void spreader_process
407422 for (band = 0 ; band < HYBRID_BANDS ; band ++ ){
408423 if (pData -> freqVector [band ]< MAX_SPREAD_FREQ ){
409424 /* Loop over all angles, and sum the H_grid's within the spreading area */
410- memset (H_tmp , 0 , Q * sizeof (float_complex ));
425+ memset (pData -> _H_tmp , 0 , Q * sizeof (float_complex ));
411426 for (ng = 0 ,nSpread = 0 ; ng < pData -> nGrid ; ng ++ ){
412427 if (pData -> angles [ng ] <= (src_spread [src ]/2.0f )){
413428 for (q = 0 ; q < Q ; q ++ )
414- H_tmp [q ] = ccaddf (H_tmp [q ], pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + ng ]);
429+ pData -> _H_tmp [q ] = ccaddf (pData -> _H_tmp [q ], pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + ng ]);
415430 nSpread ++ ;
416431 pData -> dirActive [src ][ng ] = 1 ;
417432 }
@@ -425,13 +440,13 @@ void spreader_process
425440 /* If no directions found in the spread area, then just include the nearest one */
426441 if (nSpread == 0 ){
427442 for (q = 0 ; q < Q ; q ++ )
428- H_tmp [q ] = pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + centre_ind ];
443+ pData -> _H_tmp [q ] = pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + centre_ind ];
429444 nSpread = 1 ;
430445 }
431446
432447 /* Apply */
433448 cblas_cgemm (CblasRowMajor , CblasNoTrans , CblasNoTrans , Q , TIME_SLOTS , 1 , & calpha ,
434- H_tmp , 1 ,
449+ pData -> _H_tmp , 1 ,
435450 pData -> inputframeTF [band ][src ], TIME_SLOTS , & cbeta ,
436451 FLATTEN2D (pData -> protoframeTF [band ]), TIME_SLOTS );
437452
@@ -476,22 +491,22 @@ void spreader_process
476491 cblas_cgemm (CblasRowMajor , CblasNoTrans , CblasConjTrans , Q , Q , TIME_SLOTS , & calpha ,
477492 FLATTEN2D (pData -> protoframeTF [band ]), TIME_SLOTS ,
478493 FLATTEN2D (pData -> protoframeTF [band ]), TIME_SLOTS , & cbeta ,
479- Cproto , Q );
494+ pData -> _Cproto , Q );
480495 cblas_sscal (/*re+im*/ 2 * Q * Q , pData -> covAvgCoeff , (float * )pData -> Cproto [src ][band ], 1 );
481- cblas_saxpy (/*re+im*/ 2 * Q * Q , 1.0f - pData -> covAvgCoeff , (float * )Cproto , 1 , (float * )pData -> Cproto [src ][band ], 1 );
496+ cblas_saxpy (/*re+im*/ 2 * Q * Q , 1.0f - pData -> covAvgCoeff , (float * )pData -> _Cproto , 1 , (float * )pData -> Cproto [src ][band ], 1 );
482497 }
483498
484499 /* Define target covariance matrices */
485500 for (band = 0 ; band < HYBRID_BANDS ; band ++ ){
486501 /* Sum the H_array outer product matrices for the whole spreading area */
487502 if (pData -> freqVector [band ]< MAX_SPREAD_FREQ ){
488- memset (Cy , 0 , Q * Q * sizeof (float_complex ));
489- memset (H_tmp , 0 , Q * sizeof (float_complex ));
503+ memset (pData -> _Cy , 0 , Q * Q * sizeof (float_complex ));
504+ memset (pData -> _H_tmp , 0 , Q * sizeof (float_complex ));
490505 for (ng = 0 , nSpread = 0 ; ng < pData -> nGrid ; ng ++ ){
491506 if (pData -> angles [ng ] <= (src_spread [src ]/2.0f )){
492- cblas_caxpy (Q * Q , & calpha , pData -> HHH [band ][ng ], 1 , Cy , 1 );
507+ cblas_caxpy (Q * Q , & calpha , pData -> HHH [band ][ng ], 1 , pData -> _Cy , 1 );
493508 for (q = 0 ; q < Q ; q ++ )
494- H_tmp [q ] = ccaddf (H_tmp [q ], pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + ng ]);
509+ pData -> _H_tmp [q ] = ccaddf (pData -> _H_tmp [q ], pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + ng ]);
495510 nSpread ++ ;
496511 pData -> dirActive [src ][ng ] = 1 ;
497512 }
@@ -504,9 +519,9 @@ void spreader_process
504519
505520 /* If no directions found in the spread area, then just include the nearest one */
506521 if (nSpread == 0 ) {
507- cblas_caxpy (Q * Q , & calpha , pData -> HHH [band ][centre_ind ], 1 , Cy , 1 );
522+ cblas_caxpy (Q * Q , & calpha , pData -> HHH [band ][centre_ind ], 1 , pData -> _Cy , 1 );
508523 for (q = 0 ; q < Q ; q ++ )
509- H_tmp [q ] = pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + centre_ind ];
524+ pData -> _H_tmp [q ] = pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + centre_ind ];
510525 nSpread ++ ;
511526 }
512527#if 1
@@ -515,31 +530,31 @@ void spreader_process
515530 /* Normalise Cy */
516531 trace = 0.0f ;
517532 for (q = 0 ; q < Q ; q ++ )
518- trace += crealf (Cy [q * Q + q ]);
519- cblas_sscal (/*re+im*/ 2 * Q * Q , 1.0f /(trace + 2.23e-9f ), (float * )Cy , 1 );
533+ trace += crealf (pData -> _Cy [q * Q + q ]);
534+ cblas_sscal (/*re+im*/ 2 * Q * Q , 1.0f /(trace + 2.23e-9f ), (float * )pData -> _Cy , 1 );
520535
521536 /* Compute signals for the centre of the spread */
522537 for (q = 0 ; q < Q ; q ++ )
523- H_tmp [q ] = pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + centre_ind ];
538+ pData -> _H_tmp [q ] = pData -> H_grid [band * Q * pData -> nGrid + q * pData -> nGrid + centre_ind ];
524539 cblas_cgemm (CblasRowMajor , CblasNoTrans , CblasNoTrans , Q , TIME_SLOTS , 1 , & calpha ,
525- H_tmp , 1 ,
540+ pData -> _H_tmp , 1 ,
526541 pData -> inputframeTF [band ][src ], TIME_SLOTS , & cbeta ,
527- tmpFrame , TIME_SLOTS );
542+ pData -> _tmpFrame , TIME_SLOTS );
528543
529544 /* Introduce their channel energies into the target */
530545 cblas_cgemm (CblasRowMajor , CblasNoTrans , CblasConjTrans , Q , Q , TIME_SLOTS , & calpha ,
531- tmpFrame , TIME_SLOTS ,
532- tmpFrame , TIME_SLOTS , & cbeta ,
533- E_dir , Q );
546+ pData -> _tmpFrame , TIME_SLOTS ,
547+ pData -> _tmpFrame , TIME_SLOTS , & cbeta ,
548+ pData -> _E_dir , Q );
534549 trace = 0.0f ;
535550 for (q = 0 ; q < Q ; q ++ )
536- trace += crealf (E_dir [q * Q + q ]);
537- cblas_sscal (/*re+im*/ 2 * Q * Q , trace , (float * )Cy , 1 );
551+ trace += crealf (pData -> _E_dir [q * Q + q ]);
552+ cblas_sscal (/*re+im*/ 2 * Q * Q , trace , (float * )pData -> _Cy , 1 );
538553 }
539554#endif
540555 /* Average over time */
541556 cblas_sscal (/*re+im*/ 2 * Q * Q , pData -> covAvgCoeff , (float * )pData -> Cy [src ][band ], 1 );
542- cblas_saxpy (/*re+im*/ 2 * Q * Q , 1.0f - pData -> covAvgCoeff , (float * )Cy , 1 , (float * )pData -> Cy [src ][band ], 1 );
557+ cblas_saxpy (/*re+im*/ 2 * Q * Q , 1.0f - pData -> covAvgCoeff , (float * )pData -> _Cy , 1 , (float * )pData -> Cy [src ][band ], 1 );
543558 }
544559
545560 /* Formulate mixing matrices */
@@ -558,15 +573,15 @@ void spreader_process
558573
559574 /* Compute mixing matrix per band */
560575 for (band = 0 ; band < HYBRID_BANDS ; band ++ ){
561- memcpy (Cy , pData -> Cy [src ][band ], Q * Q * sizeof (float_complex ));
562- cblas_sscal (/*re+im*/ 2 * Q * Q , Gcomp , (float * )Cy , 1 );
563- utility_cseig (NULL , Cy , Q , 1 , V , D , NULL );
576+ memcpy (pData -> _Cy , pData -> Cy [src ][band ], Q * Q * sizeof (float_complex ));
577+ cblas_sscal (/*re+im*/ 2 * Q * Q , Gcomp , (float * )pData -> _Cy , 1 );
578+ utility_cseig (NULL , pData -> _Cy , Q , 1 , pData -> _V , pData -> _D , NULL );
564579 for (i = 0 ; i < Q ; i ++ )
565580 for (j = 0 ; j < Q ; j ++ )
566- D [i * Q + j ] = i == j ? csqrtf (D [i * Q + j ]) : cmplxf (0.0f , 0.0f );
581+ pData -> _D [i * Q + j ] = i == j ? csqrtf (pData -> _D [i * Q + j ]) : cmplxf (0.0f , 0.0f );
567582 cblas_cgemm (CblasRowMajor , CblasNoTrans , CblasNoTrans , Q , Q , Q , & calpha ,
568- V , Q ,
569- D , Q , & cbeta ,
583+ pData -> _V , Q ,
584+ pData -> _D , Q , & cbeta ,
570585 pData -> new_M [band ], Q );
571586 }
572587 break ;
@@ -576,17 +591,17 @@ void spreader_process
576591 if (pData -> freqVector [band ]< MAX_SPREAD_FREQ ){
577592#if 1
578593 /* Diagonalise and diagonally load the Cproto matrices */
579- cblas_ccopy (Q * Q , pData -> Cproto [src ][band ], 1 , Cproto , 1 );
594+ cblas_ccopy (Q * Q , pData -> Cproto [src ][band ], 1 , pData -> _Cproto , 1 );
580595 for (i = 0 ; i < Q ; i ++ ){
581596 for (j = 0 ; j < Q ; j ++ ){
582597 if (i == j )
583- Cproto [i * Q + i ] = craddf (Cproto [i * Q + i ], 0.00001f );
584- CprotoDiag [i * Q + j ] = i == j ? crealf (Cproto [i * Q + i ]) : 0.0f ;
598+ pData -> _Cproto [i * Q + i ] = craddf (pData -> _Cproto [i * Q + i ], 0.00001f );
599+ CprotoDiag [i * Q + j ] = i == j ? crealf (pData -> _Cproto [i * Q + i ]) : 0.0f ;
585600 }
586601 }
587602
588603 /* Compute mixing matrices */
589- formulate_M_and_Cr_cmplx (pData -> hCdf , Cproto , pData -> Cy [src ][band ], pData -> Qmix_cmplx , 0 , 0.2f , pData -> new_M [band ], pData -> Cr_cmplx );
604+ formulate_M_and_Cr_cmplx (pData -> hCdf , pData -> _Cproto , pData -> Cy [src ][band ], pData -> Qmix_cmplx , 0 , 0.2f , pData -> new_M [band ], pData -> Cr_cmplx );
590605 for (i = 0 ; i < Q * Q ; i ++ )
591606 pData -> Cr [i ] = crealf (pData -> Cr_cmplx [i ]);
592607 formulate_M_and_Cr (pData -> hCdf_res , CprotoDiag , pData -> Cr , pData -> Qmix , 0 , 0.2f , pData -> new_Mr [band ], NULL );
0 commit comments