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

Commit 54b3cf8f authored by Juyu Chen's avatar Juyu Chen Committed by Android (Google) Code Review
Browse files

Merge "audio: fix memory corruption."

parents 9300c1c4 bf6571fb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -581,7 +581,7 @@ int audio_extn_utils_get_snd_card_num()
        }

        /* Initialize snd card name specific ids and/or backends*/
        if (snd_card_info_init(platform_info_file, my_data,
        if (platform_info_init(platform_info_file, my_data, false,
                               &acdb_set_parameters) < 0) {
            ALOGE("Failed to find platform_info_file");
            goto cleanup;
+2 −1
Original line number Diff line number Diff line
@@ -1132,7 +1132,8 @@ void *platform_init(struct audio_device *adev)
    /* Initialize ACDB and PCM ID's */
    strlcpy(platform_info_path, PLATFORM_INFO_XML_PATH, MAX_MIXER_XML_PATH);
    resolve_config_file(platform_info_path);
    platform_info_init(platform_info_path, my_data);
    platform_info_init(platform_info_path, my_data,
                       true, &platform_set_parameters);

    my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
    if (my_data->acdb_handle == NULL) {
+2 −1
Original line number Diff line number Diff line
@@ -1653,7 +1653,8 @@ void *platform_init(struct audio_device *adev)

    my_data->declared_mic_count = 0;
    /* Initialize platform specific ids and/or backends*/
    platform_info_init(platform_info_file, my_data);
    platform_info_init(platform_info_file, my_data,
                       true, &platform_set_parameters);

    ALOGD("%s: Loading mixer file: %s", __func__, mixer_xml_file);
    adev->audio_route = audio_route_init(snd_card_num, mixer_xml_file);
+4 −4
Original line number Diff line number Diff line
@@ -117,11 +117,11 @@ int platform_set_snd_device_backend(snd_device_t snd_device, const char * backen

bool platform_sound_trigger_usecase_needs_event(audio_usecase_t uc_id);

/* From platform_info.c */
int platform_info_init(const char *filename, void *);

typedef int (*set_parameters_fn)(void *platform, struct str_parms *parms);
int snd_card_info_init(const char *filename, void *, set_parameters_fn);

/* From platform_info.c */
int platform_info_init(const char *filename, void *,
                       bool do_full_parse, set_parameters_fn);

int platform_get_usecase_index(const char * usecase);
int platform_set_usecase_pcm_id(audio_usecase_t usecase, int32_t type, int32_t pcm_id);
+18 −16
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "platform_api.h"
#include <platform.h>
#include <math.h>
#include <pthread.h>

/*
 * Mandatory microphone characteristics include: device_id, type, address, location, group,
@@ -82,17 +83,19 @@ static section_process_fn section_table[] = {
    [ACDB_METAINFO_KEY] = process_acdb_metainfo_key,
};

static set_parameters_fn set_parameters = &platform_set_parameters;

static section_t section;

struct platform_info {
    pthread_mutex_t   lock;
    bool              do_full_parse;
    void             *platform;
    struct str_parms *kvpairs;
    set_parameters_fn set_parameters;
};

static struct platform_info my_data = {true, NULL, NULL};
static struct platform_info my_data = {PTHREAD_MUTEX_INITIALIZER,
                                       true, NULL, NULL,
                                       &platform_set_parameters};

struct audio_string_to_enum {
    const char* name;
@@ -415,7 +418,7 @@ static void process_config_params(const XML_Char **attr)
    }

    str_parms_add_str(my_data.kvpairs, (char*)attr[1], (char*)attr[3]);
    set_parameters(my_data.platform, my_data.kvpairs);
    my_data.set_parameters(my_data.platform, my_data.kvpairs);
done:
    return;
}
@@ -857,14 +860,8 @@ static void end_tag(void *userdata __unused, const XML_Char *tag_name)
    }
}

int snd_card_info_init(const char *filename, void *platform, set_parameters_fn fn)
{
    set_parameters = fn;
    my_data.do_full_parse = false;
    return platform_info_init(filename, platform);
}

int platform_info_init(const char *filename, void *platform)
int platform_info_init(const char *filename, void *platform,
                       bool do_full_parse, set_parameters_fn fn)
{
    XML_Parser      parser;
    FILE            *file;
@@ -873,7 +870,6 @@ int platform_info_init(const char *filename, void *platform)
    void            *buf;
    static const uint32_t kBufSize = 1024;
    char   platform_info_file_name[MIXER_PATH_MAX_LENGTH]= {0};
    section = ROOT;

    if (filename == NULL) {
        strlcpy(platform_info_file_name, PLATFORM_INFO_XML_PATH, MIXER_PATH_MAX_LENGTH);
@@ -899,8 +895,12 @@ int platform_info_init(const char *filename, void *platform)
        goto err_close_file;
    }

    pthread_mutex_lock(&my_data.lock);
    section = ROOT;
    my_data.do_full_parse = do_full_parse;
    my_data.platform = platform;
    my_data.kvpairs = str_parms_create();
    my_data.set_parameters = fn;

    XML_SetElementHandler(parser, start_tag, end_tag);

@@ -931,10 +931,12 @@ int platform_info_init(const char *filename, void *platform)
            break;
    }

    set_parameters = &platform_set_parameters;
    my_data.do_full_parse = true;

err_free_parser:
    if (my_data.kvpairs != NULL) {
        str_parms_destroy(my_data.kvpairs);
        my_data.kvpairs = NULL;
    }
    pthread_mutex_unlock(&my_data.lock);
    XML_ParserFree(parser);
err_close_file:
    fclose(file);