audio: Remove HAL, UCM dependency on acdb and csd client modules

b/6815609

- acdb and csd client modules are linked into HAL, UCM
  at compile time.
- Remove the compile time dependency by loading the modules at
  runtime.

Change-Id: Iab9684a4564e5dccd8eb6e07017959886d2f57b1
Signed-off-by: Iliyan Malchev <malchev@google.com>
diff --git a/alsa_sound/AudioStreamInALSA.cpp b/alsa_sound/AudioStreamInALSA.cpp
index e63d606..6a04b83 100644
--- a/alsa_sound/AudioStreamInALSA.cpp
+++ b/alsa_sound/AudioStreamInALSA.cpp
@@ -39,7 +39,10 @@
 extern "C" {
 #ifdef QCOM_CSDCLIENT_ENABLED
 #include "csd_client.h"
+static int (*csd_start_record)(int);
+static int (*csd_stop_record)(void);
 #endif
+
 #ifdef QCOM_SSR_ENABLED
 #include "surround_filters_interface.h"
 #endif
@@ -67,8 +70,8 @@
         AudioSystem::audio_in_acoustics audio_acoustics) :
     ALSAStreamOps(parent, handle),
     mFramesLost(0),
-    mParent(parent),
-    mAcoustics(audio_acoustics)
+    mAcoustics(audio_acoustics),
+    mParent(parent)
 #ifdef QCOM_SSR_ENABLED
     , mFp_4ch(NULL),
     mFp_6ch(NULL),
@@ -129,7 +132,7 @@
 
     int n;
     status_t          err;
-    size_t            read = 0;
+    ssize_t            read = 0;
     char *use_case;
     int newMode = mParent->mode();
 
@@ -149,8 +152,8 @@
                         mParent->mALSADevice->setVocRecMode(INCALL_REC_STEREO);
                         strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_VOICE,
                                 sizeof(mHandle->useCase));
-                        csd_client_start_record(INCALL_REC_STEREO);
-                    } else 
+                        start_csd_record(INCALL_REC_STEREO);
+                    } else
 #endif
                     {
                         strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_VOICE_UL_DL,
@@ -162,8 +165,8 @@
                         mParent->mALSADevice->setVocRecMode(INCALL_REC_MONO);
                         strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_VOICE,
                                 sizeof(mHandle->useCase));
-                        csd_client_start_record(INCALL_REC_MONO);
-                    } else 
+                        start_csd_record(INCALL_REC_MONO);
+                    } else
 #endif
                     {
                         strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_VOICE_DL,
@@ -198,8 +201,8 @@
                         mParent->mALSADevice->setVocRecMode(INCALL_REC_STEREO);
                         strlcpy(mHandle->useCase, SND_USE_CASE_VERB_INCALL_REC,
                                 sizeof(mHandle->useCase));
-                        csd_client_start_record(INCALL_REC_STEREO);
-                    } else 
+                        start_csd_record(INCALL_REC_STEREO);
+                    } else
 #endif
                     {
                         strlcpy(mHandle->useCase, SND_USE_CASE_VERB_UL_DL_REC,
@@ -211,9 +214,9 @@
                        mParent->mALSADevice->setVocRecMode(INCALL_REC_MONO);
                        strlcpy(mHandle->useCase, SND_USE_CASE_VERB_INCALL_REC,
                                sizeof(mHandle->useCase));
-                       csd_client_start_record(INCALL_REC_MONO);
+                       start_csd_record(INCALL_REC_MONO);
                    } else
-#endif            
+#endif
                    {
                        strlcpy(mHandle->useCase, SND_USE_CASE_VERB_DL_REC,
                                sizeof(mHandle->useCase));
@@ -443,7 +446,7 @@
             else {
                 read += static_cast<ssize_t>((period_size));
                 read_pending -= period_size;
-                buffer += period_size;
+                buffer = ((uint8_t *)buffer) + period_size;
             }
 
         } while (mHandle->handle && read < bytes);
@@ -500,7 +503,7 @@
     if (mParent->mFusion3Platform) {
        if((!strcmp(mHandle->useCase, SND_USE_CASE_VERB_INCALL_REC)) ||
            (!strcmp(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_VOICE))) {
-           csd_client_stop_record();
+           stop_csd_record();
        }
     }
 #endif
@@ -572,7 +575,7 @@
        if((!strcmp(mHandle->useCase, SND_USE_CASE_VERB_INCALL_REC)) ||
            (!strcmp(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_VOICE))) {
            ALOGD(" into standby, stop record");
-           csd_client_stop_record();
+           stop_csd_record();
        }
     }
 #endif
@@ -843,4 +846,35 @@
 }
 #endif
 
+#ifdef QCOM_CSDCLIENT_ENABLED
+int AudioStreamInALSA::start_csd_record(int param)
+{
+    int err = NO_ERROR;
+
+    if (mParent->mCsdHandle != NULL) {
+        csd_start_record = (int (*)(int))::dlsym(mParent->mCsdHandle,"csd_client_start_record");
+        if (csd_start_record == NULL) {
+            ALOGE("dlsym:Error:%s Loading csd_client_start_record", dlerror());
+        } else {
+            err = csd_start_record(param);
+        }
+    }
+    return err;
+}
+
+int AudioStreamInALSA::stop_csd_record()
+{
+    int err = NO_ERROR;
+    if (mParent->mCsdHandle != NULL) {
+        csd_stop_record = (int (*)())::dlsym(mParent->mCsdHandle,"csd_client_stop_record");
+        if (csd_start_record == NULL) {
+            ALOGE("dlsym:Error:%s Loading csd_client_start_record", dlerror());
+        } else {
+            csd_stop_record();
+        }
+    }
+    return err;
+}
+#endif
+
 }       // namespace android_audio_legacy