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

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

Merge "hal: Avoid multiple mixer open calls during init" into audio-hal.lnx.5.0

parents 77580624 9fee7c65
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -61,11 +61,7 @@ int acdb_init(int snd_card_num)
{

    int result = -1;
    char *cvd_version = NULL;

    const char *snd_card_name = NULL;
    struct mixer *mixer = NULL;
    struct acdb_platform_data *my_data = NULL;

    if(snd_card_num < 0) {
        ALOGE("invalid sound card number");
@@ -76,7 +72,25 @@ int acdb_init(int snd_card_num)
    if (!mixer) {
        ALOGE("%s: Unable to open the mixer card: %d", __func__,
               snd_card_num);
        goto cleanup;
        return result;
    }
    result = acdb_init_v2(mixer);
    mixer_close(mixer);
    return result;
}

int acdb_init_v2(struct mixer *mixer)
{

    int result = -1;
    char *cvd_version = NULL;

    const char *snd_card_name = NULL;
    struct acdb_platform_data *my_data = NULL;

    if (!mixer) {
       ALOGE("Invalid mixer handle");
       return result;
    }

    my_data = calloc(1, sizeof(struct acdb_platform_data));
@@ -200,9 +214,6 @@ cleanup:
        free(my_data);
    }

    if (mixer)
        mixer_close(mixer);

    if (cvd_version)
        free(cvd_version);

+2 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ enum {
        ACDB_LOADER_INIT_V4,
};

struct mixer;
/* Audio calibration related functions */
typedef void (*acdb_deallocate_t)();
typedef int  (*acdb_init_t)();
@@ -86,6 +87,7 @@ struct acdb_platform_data {
};

int acdb_init(int);
int acdb_init_v2(struct mixer *);

int acdb_set_metainfo_key(void *platform, char *name, int key);
#endif //ACDB_H
+2 −0
Original line number Diff line number Diff line
@@ -634,6 +634,8 @@ void audio_extn_utils_update_stream_app_type_cfg_for_usecase(
                                  struct audio_device *adev,
                                  struct audio_usecase *usecase);
int audio_extn_utils_get_snd_card_num();
int audio_extn_utils_open_snd_mixer(struct mixer **mixer_handle);
void audio_extn_utils_close_snd_mixer(struct mixer *mixer);
bool audio_extn_is_dsp_bit_width_enforce_mode_supported(audio_output_flags_t flags);
bool audio_extn_utils_is_dolby_format(audio_format_t format);
int audio_extn_utils_get_bit_width_from_string(const char *);
+25 −3
Original line number Diff line number Diff line
@@ -2077,6 +2077,17 @@ int audio_extn_utils_compress_set_start_delay(
#define RETRY_NUMBER 40

int audio_extn_utils_get_snd_card_num()
{
    int snd_card_num = 0;
    struct mixer *mixer = NULL;

    snd_card_num = audio_extn_utils_open_snd_mixer(&mixer);
    if (mixer)
        mixer_close(mixer);
    return snd_card_num;
}

int audio_extn_utils_open_snd_mixer(struct mixer **mixer_handle)
{

    void *hw_info = NULL;
@@ -2085,6 +2096,11 @@ int audio_extn_utils_get_snd_card_num()
    int snd_card_num = 0, min_snd_card_num = 0;
    char* snd_card_name = NULL;

    if (!mixer_handle) {
        ALOGE("invalid mixer handle");
        return -1;
    }
    *mixer_handle = NULL;
    /*
    * Try with all the sound cards ( 0 to 8 ) and if none of them were detected
    * sleep for 1 sec and try detections with sound card 0 again.
@@ -2138,9 +2154,6 @@ int audio_extn_utils_get_snd_card_num()
    if (snd_card_name)
        free(snd_card_name);

    if (mixer)
        mixer_close(mixer);

    if (hw_info)
        hw_info_deinit(hw_info);

@@ -2149,9 +2162,18 @@ int audio_extn_utils_get_snd_card_num()
        return -1;
    }

    if (mixer)
        *mixer_handle = mixer;

    return snd_card_num;
}

void audio_extn_utils_close_snd_mixer(struct mixer *mixer)
{
    if (mixer)
        mixer_close(mixer);
}

#ifdef SNDRV_COMPRESS_ENABLE_ADJUST_SESSION_CLOCK
int audio_extn_utils_compress_enable_drift_correction(
        struct stream_out *out,
+4 −11
Original line number Diff line number Diff line
@@ -2172,7 +2172,7 @@ void *platform_init(struct audio_device *adev)
    const char *id_string = NULL;
    int cfg_value = -1;

    snd_card_num = audio_extn_utils_get_snd_card_num();
    snd_card_num = audio_extn_utils_open_snd_mixer(&adev->mixer);
    if(snd_card_num < 0) {
        ALOGE("%s: Unable to find correct sound card", __func__);
        return NULL;
@@ -2181,13 +2181,6 @@ void *platform_init(struct audio_device *adev)
    adev->snd_card = snd_card_num;
    ALOGD("%s: Opened sound card:%d", __func__, snd_card_num);

    adev->mixer = mixer_open(snd_card_num);
    if (!adev->mixer) {
        ALOGE("%s: Unable to open the mixer card: %d", __func__,
               snd_card_num);
        return NULL;
    }

    snd_card_name = mixer_get_name(adev->mixer);
    ALOGD("%s: snd_card_name: %s", __func__, snd_card_name);

@@ -2217,7 +2210,7 @@ void *platform_init(struct audio_device *adev)
        ALOGE("%s: Failed to init audio route controls, aborting.",
               __func__);
        free(my_data);
        mixer_close(adev->mixer);
        audio_extn_utils_close_snd_mixer(adev->mixer);
        return NULL;
    }
    update_codec_type(snd_card_name);
@@ -2445,7 +2438,7 @@ void *platform_init(struct audio_device *adev)
            goto acdb_init_fail;
        }

        int result = acdb_init(adev->snd_card);
        int result = acdb_init_v2(adev->mixer);
        if (!result) {
            my_data->is_acdb_initialized = true;
            ALOGD("ACDB initialized");
@@ -2740,7 +2733,7 @@ void platform_deinit(void *platform)
    }

    if (my_data->adev->mixer) {
        mixer_close(my_data->adev->mixer);
        audio_extn_utils_close_snd_mixer(my_data->adev->mixer);
        my_data->adev->mixer = NULL;
    }

Loading