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

Commit c9e9e2ca authored by Venkata Narendra Kumar Gutta's avatar Venkata Narendra Kumar Gutta Committed by Divya Narayanan Poojary
Browse files

hal: Enhance VoIP call auto recovery if SSR occurs during call

Enhance support for VoIP auto recovery if SSR occurs during
the VoIP call.

CRs-Fixed: 689087
Change-Id: Id69cb9d17fc78fd98754b19bf84539290ff54cd9
parent 369dd68f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -275,7 +275,7 @@ static int enable_audio_route_for_voice_usecases(struct audio_device *adev,
    return 0;
}

static int get_snd_card_state(struct audio_device *adev)
int get_snd_card_state(struct audio_device *adev)
{
    int snd_scard_state;

+3 −0
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ struct stream_out {
    struct pcm *pcm;
    struct compress *compr;
    int standby;
    bool voip_out_avail;
    int pcm_device_id;
    unsigned int sample_rate;
    audio_channel_mask_t channel_mask;
@@ -182,6 +183,7 @@ struct stream_in {
    struct pcm_config config;
    struct pcm *pcm;
    int standby;
    bool voip_in_avail;
    int source;
    int pcm_device_id;
    audio_devices_t device;
@@ -272,6 +274,7 @@ struct audio_usecase *get_usecase_from_list(struct audio_device *adev,
                                                   audio_usecase_t uc_id);

int pcm_ioctl(struct pcm *pcm, int request, ...);
int get_snd_card_state(struct audio_device *adev);

#define LITERAL_TO_STRING(x) #x
#define CHECK(condition) LOG_ALWAYS_FATAL_IF(!(condition), "%s",\
+18 −0
Original line number Diff line number Diff line
@@ -558,9 +558,16 @@ int voice_extn_compress_voip_start_output_stream(struct stream_out *out)
    int ret = 0;
    struct audio_device *adev = out->dev;
    struct audio_usecase *uc_info;
    int snd_card_status = get_snd_card_state(adev);

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

    if (SND_CARD_STATE_OFFLINE == snd_card_status) {
        ret = -ENETRESET;
        ALOGE("%s: sound card is not active/SSR returning error %d ", __func__, ret);
        goto error;
    }

    if (!voip_data.out_stream_count)
        ret = voice_extn_compress_voip_open_output_stream(out);

@@ -570,6 +577,7 @@ int voice_extn_compress_voip_start_output_stream(struct stream_out *out)
    uc_info->stream.out = out;
    uc_info->devices = out->devices;

error:
    ALOGV("%s: exit: status(%d)", __func__, ret);
    return ret;
}
@@ -579,15 +587,23 @@ int voice_extn_compress_voip_start_input_stream(struct stream_in *in)
    int ret = 0;
    struct audio_usecase *uc_info;
    struct audio_device *adev = in->dev;
    int snd_card_status = get_snd_card_state(adev);

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

    if (SND_CARD_STATE_OFFLINE == snd_card_status) {
        ret = -ENETRESET;
        ALOGE("%s: sound card is not active/SSR returning error %d ", __func__, ret);
        goto error;
    }

    if (!voip_data.in_stream_count)
        ret = voice_extn_compress_voip_open_input_stream(in);

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

error:
    ALOGV("%s: exit: status(%d)", __func__, ret);
    return ret;
}
@@ -603,6 +619,7 @@ int voice_extn_compress_voip_close_output_stream(struct audio_stream *stream)
        voip_data.out_stream_count--;
        ret = voip_stop_call(adev);
        voip_data.out_stream = NULL;
        out->pcm = NULL;
    }

    ALOGV("%s: exit: status(%d)", __func__, ret);
@@ -643,6 +660,7 @@ int voice_extn_compress_voip_close_input_stream(struct audio_stream *stream)
    if(voip_data.in_stream_count > 0) {
       voip_data.in_stream_count--;
       status = voip_stop_call(adev);
       in->pcm = NULL;
    }

    ALOGV("%s: exit: status(%d)", __func__, status);