LOCAL_SRC_FILES := \
audio_hw.c \
compress_offload.c \
- ril_interface.c
+ ril_interface.c \
+ voice.c
# TODO: remove resampler if possible when AudioFlinger supports downsampling from 48 to 8
LOCAL_SHARED_LIBRARIES := \
#include <audio_effects/effect_ns.h>
#include "audio_hw.h"
#include "compress_offload.h"
+#include "voice.h"
#include "sound/compress_params.h"
static int adev_close(hw_device_t *device)
{
struct audio_device *adev = (struct audio_device *)device;
+ voice_session_deinit(adev->voice.session);
audio_device_ref_count--;
free(adev->snd_dev_ref_cnt);
free_mixer_list(adev);
free(device);
+
return 0;
}
}
}
+ adev->voice.session = voice_session_init();
+ if (adev->voice.session == NULL) {
+ ALOGE("%s: Failed to initialize voice session data", __func__);
+
+ free(adev->snd_dev_ref_cnt);
+ free(adev);
+
+ *device = NULL;
+ return -EINVAL;
+ }
*device = &adev->device.common;
bool in_call;
float volume;
bool bluetooth_nrec;
+ void *session;
};
struct audio_device {
--- /dev/null
+/*
+ * Copyright (C) 2017 Christopher N. Hesse <raymanfx@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "audio_hw_voice"
+#define LOG_NDEBUG 0
+/*#define VERY_VERY_VERBOSE_LOGGING*/
+#ifdef VERY_VERY_VERBOSE_LOGGING
+#define ALOGVV ALOGV
+#else
+#define ALOGVV(a...) do { } while(0)
+#endif
+
+#include <stdlib.h>
+#include <pthread.h>
+
+#include "audio_hw.h"
+#include "voice.h"
+
+struct voice_session *voice_session_init(void)
+{
+ struct voice_session *session;
+ int ret;
+
+ session = calloc(1, sizeof(struct voice_session));
+ if (session == NULL) {
+ return NULL;
+ }
+
+ /* Do this as the last step so we do not have to close it on error */
+ ret = ril_open(&session->ril);
+ if (ret != 0) {
+ free(session);
+ return NULL;
+ }
+
+ return session;
+}
+
+void voice_session_deinit(struct voice_session *session)
+{
+ ril_close(&session->ril);
+ free(session);
+}
--- /dev/null
+/*
+ * Copyright (C) 2017 Christopher N. Hesse <raymanfx@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef VOICE_CALL_H
+#define VOICE_CALL_H
+
+#include "ril_interface.h"
+
+struct voice_session {
+ struct ril_handle ril;
+
+ struct pcm *pcm_voice_rx;
+ struct pcm *pcm_voice_tx;
+
+ bool wb_amr;
+ bool two_mic_control;
+ bool two_mic_disabled;
+
+ /* from uc_info */
+ audio_devices_t out_device;
+};
+
+struct voice_session *voice_session_init(void);
+void voice_session_deinit(struct voice_session *s);
+
+#endif /* VOICE_CALL_H */