Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a70cf2dc authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "hal: Fix framesize issue for compress VoIP"

parents 3f4c02d9 1eceff80
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -2021,15 +2021,13 @@ static int adev_open_output_stream(struct audio_hw_device *dev,
        out->config.period_size = HDMI_MULTI_PERIOD_BYTES / (out->config.channels * 2);
    } else if ((out->dev->mode == AUDIO_MODE_IN_COMMUNICATION) &&
               (out->flags == (AUDIO_OUTPUT_FLAG_DIRECT | AUDIO_OUTPUT_FLAG_VOIP_RX)) &&
               (voice_extn_compress_voip_is_format_supported(out->format))) {
               (voice_extn_compress_voip_is_config_supported(config))) {
        ret = voice_extn_compress_voip_open_output_stream(out);
        if (ret != 0) {
            ALOGE("%s: Compress voip output cannot be opened, error:%d",
                  __func__, ret);
            goto error_open;
        }
        out->config.rate = config->sample_rate;
        out->sample_rate = config->sample_rate;
    } else if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) {
        if (config->offload_info.version != AUDIO_INFO_INITIALIZER.version ||
            config->offload_info.size != AUDIO_INFO_INITIALIZER.size) {
@@ -2289,6 +2287,7 @@ static char* adev_get_parameters(const struct audio_hw_device *dev,
    pthread_mutex_lock(&adev->lock);

    audio_extn_get_parameters(adev, query, reply);
    voice_extn_get_parameters(adev, query, reply);
    platform_get_parameters(adev->platform, query, reply);
    str = str_parms_to_str(reply);
    str_parms_destroy(query);
@@ -2421,7 +2420,7 @@ static int adev_open_input_stream(struct audio_hw_device *dev,
    in->format = config->format;

    if ((in->dev->mode == AUDIO_MODE_IN_COMMUNICATION) &&
        (voice_extn_compress_voip_is_format_supported(in->format))) {
        (voice_extn_compress_voip_is_config_supported(config))) {
        ret = voice_extn_compress_voip_open_input_stream(in);
        if (ret != 0)
        {
+52 −16
Original line number Diff line number Diff line
@@ -36,12 +36,21 @@
#include "platform.h"
#include "voice_extn.h"

#define COMPRESS_VOIP_IO_BUF_SIZE 320
#define COMPRESS_VOIP_IO_BUF_SIZE_NB 320
#define COMPRESS_VOIP_IO_BUF_SIZE_WB 640

struct pcm_config pcm_config_voip = {
struct pcm_config pcm_config_voip_nb = {
    .channels = 1,
    .rate = 8000, /* changed when the stream is opened */
    .period_size = COMPRESS_VOIP_IO_BUF_SIZE/2,
    .period_size = COMPRESS_VOIP_IO_BUF_SIZE_NB/2,
    .period_count = 10,
    .format = PCM_FORMAT_S16_LE,
};

struct pcm_config pcm_config_voip_wb = {
    .channels = 1,
    .rate = 16000, /* changed when the stream is opened */
    .period_size = COMPRESS_VOIP_IO_BUF_SIZE_WB/2,
    .period_count = 10,
    .format = PCM_FORMAT_S16_LE,
};
@@ -83,7 +92,8 @@ static int voip_set_evrc_min_max_rate(struct audio_device *adev, int min_rate,
                               int max_rate);
static int voip_set_dtx(struct audio_device *adev, bool enable);
static int voip_stop_call(struct audio_device *adev);
static int voip_start_call(struct audio_device *adev);
static int voip_start_call(struct audio_device *adev,
                           struct pcm_config *voip_config);

static int audio_format_to_voip_mode(int format)
{
@@ -304,12 +314,12 @@ static int voip_stop_call(struct audio_device *adev)
    return ret;
}

static int voip_start_call(struct audio_device *adev)
static int voip_start_call(struct audio_device *adev,
                           struct pcm_config *voip_config)
{
    int i, ret = 0;
    struct audio_usecase *uc_info;
    int pcm_dev_rx_id, pcm_dev_tx_id;
    struct pcm_config voip_config = pcm_config_voip;

    ALOGD("%s: enter", __func__);

@@ -341,7 +351,7 @@ static int voip_start_call(struct audio_device *adev)
              __func__, SOUND_CARD, pcm_dev_rx_id);
        voip_data.pcm_rx = pcm_open(SOUND_CARD,
                                    pcm_dev_rx_id,
                                    PCM_OUT, &voip_config);
                                    PCM_OUT, voip_config);
        if (voip_data.pcm_rx && !pcm_is_ready(voip_data.pcm_rx)) {
            ALOGE("%s: %s", __func__, pcm_get_error(voip_data.pcm_rx));
            pcm_close(voip_data.pcm_rx);
@@ -354,7 +364,7 @@ static int voip_start_call(struct audio_device *adev)
              __func__, SOUND_CARD, pcm_dev_tx_id);
        voip_data.pcm_tx = pcm_open(SOUND_CARD,
                                    pcm_dev_tx_id,
                                    PCM_IN, &voip_config);
                                    PCM_IN, voip_config);
        if (voip_data.pcm_tx && !pcm_is_ready(voip_data.pcm_tx)) {
            ALOGE("%s: %s", __func__, pcm_get_error(voip_data.pcm_tx));
            pcm_close(voip_data.pcm_rx);
@@ -483,12 +493,18 @@ void voice_extn_compress_voip_in_get_parameters(struct stream_in *in,

int voice_extn_compress_voip_out_get_buffer_size(struct stream_out *out)
{
    return COMPRESS_VOIP_IO_BUF_SIZE;
    if (out->config.rate == 16000)
        return COMPRESS_VOIP_IO_BUF_SIZE_WB;
    else
        return COMPRESS_VOIP_IO_BUF_SIZE_NB;
}

int voice_extn_compress_voip_in_get_buffer_size(struct stream_in *in)
{
    return COMPRESS_VOIP_IO_BUF_SIZE;
    if (in->config.rate == 16000)
        return COMPRESS_VOIP_IO_BUF_SIZE_WB;
    else
        return COMPRESS_VOIP_IO_BUF_SIZE_NB;
}

int voice_extn_compress_voip_start_output_stream(struct stream_out *out)
@@ -499,7 +515,7 @@ int voice_extn_compress_voip_start_output_stream(struct stream_out *out)

    ALOGD("%s: enter", __func__);

    ret = voip_start_call(adev);
    ret = voip_start_call(adev, &out->config);
    out->pcm = voip_data.pcm_rx;
    uc_info = get_usecase_from_list(adev, USECASE_COMPRESS_VOIP_CALL);
    uc_info->stream.out = out;
@@ -517,7 +533,7 @@ int voice_extn_compress_voip_start_input_stream(struct stream_in *in)

    ALOGD("%s: enter", __func__);

    ret = voip_start_call(adev);
    ret = voip_start_call(adev, &in->config);
    in->pcm = voip_data.pcm_tx;

    ALOGV("%s: exit: status(%d)", __func__, ret);
@@ -548,7 +564,11 @@ int voice_extn_compress_voip_open_output_stream(struct stream_out *out)
    out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_MONO;
    out->channel_mask = AUDIO_CHANNEL_OUT_MONO;
    out->usecase = USECASE_COMPRESS_VOIP_CALL;
    out->config = pcm_config_voip;
    if (out->sample_rate == 16000)
        out->config = pcm_config_voip_wb;
    else
        out->config = pcm_config_voip_nb;

    voip_data.out_stream = out;

    ret = voip_set_mode(out->dev, out->format);
@@ -581,9 +601,10 @@ int voice_extn_compress_voip_open_input_stream(struct stream_in *in)
    ALOGD("%s: enter", __func__);

    in->usecase = USECASE_COMPRESS_VOIP_CALL;
    sample_rate = in->config.rate;
    in->config = pcm_config_voip;
    in->config.rate = sample_rate;
    if (in->config.rate == 16000)
        in->config = pcm_config_voip_wb;
    else
        in->config = pcm_config_voip_nb;

    ret = voip_set_mode(in->dev, in->format);

@@ -674,3 +695,18 @@ bool voice_extn_compress_voip_is_format_supported(audio_format_t format)
        return false;
    }
}

bool voice_extn_compress_voip_is_config_supported(struct audio_config *config)
{
    bool ret = false;

    ret = voice_extn_compress_voip_is_format_supported(config->format);
    if (ret) {
        if ((popcount(config->channel_mask) == 1) &&
            (config->sample_rate == 8000 || config->sample_rate == 16000))
            ret = true;
        else
            ret = false;
    }
    return ret;
}
+17 −0
Original line number Diff line number Diff line
@@ -434,6 +434,23 @@ done:
    return ret;
}

void voice_extn_get_parameters(const struct audio_device *adev,
                               struct str_parms *query,
                               struct str_parms *reply)
{
    int ret;
    char value[32]={0};
    char *str = NULL;

    ret = str_parms_get_str(query, "audio_mode", value,
                            sizeof(value));
    if (ret >= 0) {
        str_parms_add_int(reply, "audio_mode", adev->mode);
    }

    ALOGV("%s: returns %s", __func__, str_parms_to_str(reply));
}

void voice_extn_out_get_parameters(struct stream_out *out,
                                   struct str_parms *query,
                                   struct str_parms *reply)
+17 −0
Original line number Diff line number Diff line
@@ -29,6 +29,9 @@ int voice_extn_get_session_from_use_case(struct audio_device *adev,
void voice_extn_init(struct audio_device *adev);
int voice_extn_set_parameters(struct audio_device *adev,
                              struct str_parms *parms);
void voice_extn_get_parameters(const struct audio_device *adev,
                               struct str_parms *query,
                               struct str_parms *reply);
int voice_extn_is_in_call(struct audio_device *adev, bool *in_call);
int voice_extn_get_active_session_id(struct audio_device *adev,
                                     uint32_t *session_id);
@@ -66,6 +69,12 @@ static int voice_extn_set_parameters(struct audio_device *adev,
    return -ENOSYS;
}

static void voice_extn_get_parameters(const struct audio_device *adev,
                                      struct str_parms *query,
                                      struct str_parms *reply)
{
}

static int voice_extn_is_in_call(struct audio_device *adev, bool *in_call)
{
    return -ENOSYS;
@@ -131,6 +140,7 @@ void voice_extn_compress_voip_in_get_parameters(struct stream_in *in,
bool voice_extn_compress_voip_pcm_prop_check();
bool voice_extn_compress_voip_is_active(struct audio_device *adev);
bool voice_extn_compress_voip_is_format_supported(audio_format_t format);
bool voice_extn_compress_voip_is_config_supported(struct audio_config *config);
#else
static int voice_extn_compress_voip_close_output_stream(struct audio_stream *stream)
{
@@ -231,11 +241,18 @@ static bool voice_extn_compress_voip_is_active(struct audio_device *adev)
    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
    return false;
}

static bool voice_extn_compress_voip_is_format_supported(audio_format_t format)
{
    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
    return true;
}

static bool voice_extn_compress_voip_is_config_supported(struct audio_config *config)
{
    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
    return true;
}
#endif

#endif //VOICE_EXTN_H