audio: Directly link voice data <-> session
authorChristopher N. Hesse <raymanfx@gmail.com>
Mon, 29 Jan 2018 02:28:10 +0000 (03:28 +0100)
committerJan Altensen <info@stricted.net>
Tue, 5 Feb 2019 19:11:25 +0000 (20:11 +0100)
This is part of a cleanup series.
In the future, we should reconsider the struct usage and (maybe?) move
the members into one common place.

Change-Id: I3218d75acb0c4965332ba0de30b40ca7821596a7

audio/audio_hw.h
audio/voice.c
audio/voice.h

index 4677f298f2e527a875bb371ada2daa7326ea4c7d..820d355090a36b8062e67dcda388825238027409 100644 (file)
@@ -372,7 +372,7 @@ struct voice_data {
     float volume;
     bool  bluetooth_nrec;
     bool  bluetooth_wb;
-    void  *session;
+    struct voice_session *session;
 };
 
 struct audio_device {
index 5b5adf64eed8d26538f302426f1c3b33ab09b06a..a4cc03a2e77ac5cfed165c49cc5b513fcefee9d3 100644 (file)
 #include "audience.h"
 #endif
 
-/**
- * container_of - cast a member of a structure out to the containing structure
- * @ptr:    the pointer to the member.
- * @type:   the type of the container struct this is embedded in.
- * @member: the name of the member within the struct.
- *
- */
-#define container_of(ptr, type, member) ({              \
-    void *__mptr = (void *)(ptr);                   \
-    ((type *)((uintptr_t)__mptr - offsetof(type, member))); })
-
 static struct pcm_config pcm_config_voicecall = {
     .channels = 2,
     .rate = 8000,
@@ -170,7 +159,6 @@ static void stop_voice_session_bt_sco(struct voice_session *session) {
 void start_voice_session_bt_sco(struct voice_session *session)
 {
     struct pcm_config *voice_sco_config;
-    struct voice_data *vdata = container_of(session, struct voice_data, session);
 
     if (session->pcm_sco_rx != NULL || session->pcm_sco_tx != NULL) {
         ALOGW("%s: SCO PCMs already open!\n", __func__);
@@ -179,7 +167,7 @@ void start_voice_session_bt_sco(struct voice_session *session)
 
     ALOGV("%s: Opening SCO PCMs", __func__);
 
-    if (vdata->bluetooth_wb) {
+    if (session->vdata->bluetooth_wb) {
         ALOGV("%s: pcm_config wideband", __func__);
         voice_sco_config = &pcm_config_voice_sco_wb;
     } else {
@@ -383,10 +371,8 @@ bool voice_session_uses_twomic(struct voice_session *session)
 
 bool voice_session_uses_wideband(struct voice_session *session)
 {
-    struct voice_data *vdata = container_of(session, struct voice_data, session);
-
     if (session->out_device & AUDIO_DEVICE_OUT_ALL_SCO) {
-        return vdata->bluetooth_wb;
+        return session->vdata->bluetooth_wb;
     }
 
     return session->wb_amr_type >= 1;
@@ -473,6 +459,8 @@ struct voice_session *voice_session_init(struct audio_device *adev)
         }
     }
 
+    session->vdata = &adev->voice;
+
     return session;
 }
 
index 630221ff93e04e8d26f88a0c5e52f09708ed7eb2..01c6aac5714d23f3df9a70d3ac11b1d0d1d214be 100644 (file)
@@ -34,6 +34,9 @@ struct voice_session {
 
     /* from uc_info */
     audio_devices_t out_device;
+
+    /* parent container */
+    struct voice_data *vdata;
 };
 
 void prepare_voice_session(struct voice_session *session,