audio: Directly link voice data <-> session

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
tirimbino
Christopher N. Hesse 7 years ago committed by Jan Altensen
parent b8250d0f58
commit 6a960023b9
No known key found for this signature in database
GPG Key ID: 3E45BB95F7AD33DA
  1. 2
      audio/audio_hw.h
  2. 20
      audio/voice.c
  3. 3
      audio/voice.h

@ -372,7 +372,7 @@ struct voice_data {
float volume; float volume;
bool bluetooth_nrec; bool bluetooth_nrec;
bool bluetooth_wb; bool bluetooth_wb;
void *session; struct voice_session *session;
}; };
struct audio_device { struct audio_device {

@ -38,17 +38,6 @@
#include "audience.h" #include "audience.h"
#endif #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 = { static struct pcm_config pcm_config_voicecall = {
.channels = 2, .channels = 2,
.rate = 8000, .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) void start_voice_session_bt_sco(struct voice_session *session)
{ {
struct pcm_config *voice_sco_config; 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) { if (session->pcm_sco_rx != NULL || session->pcm_sco_tx != NULL) {
ALOGW("%s: SCO PCMs already open!\n", __func__); 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__); ALOGV("%s: Opening SCO PCMs", __func__);
if (vdata->bluetooth_wb) { if (session->vdata->bluetooth_wb) {
ALOGV("%s: pcm_config wideband", __func__); ALOGV("%s: pcm_config wideband", __func__);
voice_sco_config = &pcm_config_voice_sco_wb; voice_sco_config = &pcm_config_voice_sco_wb;
} else { } else {
@ -383,10 +371,8 @@ bool voice_session_uses_twomic(struct voice_session *session)
bool voice_session_uses_wideband(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) { if (session->out_device & AUDIO_DEVICE_OUT_ALL_SCO) {
return vdata->bluetooth_wb; return session->vdata->bluetooth_wb;
} }
return session->wb_amr_type >= 1; 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; return session;
} }

@ -34,6 +34,9 @@ struct voice_session {
/* from uc_info */ /* from uc_info */
audio_devices_t out_device; audio_devices_t out_device;
/* parent container */
struct voice_data *vdata;
}; };
void prepare_voice_session(struct voice_session *session, void prepare_voice_session(struct voice_session *session,

Loading…
Cancel
Save