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

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

Merge "audio: Enable secure MS12 playback for LATV"

parents c4efbf0a d5694243
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -63,6 +63,9 @@ AUDIO_FEATURE_ENABLED_SOURCE_TRACKING := true
AUDIO_FEATURE_ENABLED_GEF_SUPPORT := true
BOARD_SUPPORTS_QAHW := true
AUDIO_FEATURE_ENABLED_QAF := true
AUDIO_FEATURE_IP_HDLR_ENABLED := true
MM_AUDIO_IP_HDLR_ENABLED := true
AUDIO_FEATURE_ENABLED_MS12_SECURITY := true
AUDIO_FEATURE_ENABLED_RAS := true
AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
@@ -144,7 +147,7 @@ persist.vendor.audio.ras.enabled=false

#Buffer size in kbytes for compress offload playback
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.offload.buffer.size.kb=32
vendor.audio.offload.buffer.size.kb=2

#Enable offload audio video playback by default
PRODUCT_PROPERTY_OVERRIDES += \
@@ -203,6 +206,30 @@ vendor.audio.offload.gapless.enabled=true
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.safx.pbe.enabled=true

#enable QAF
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.qaf.enabled=true

#QAF Library
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.qaf.library=/vendor/lib/libdolby_ms12_wrapper.so

#Disable reencode
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.qaf.reencode=false

#HDMI passthrough out
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.qaf.hdmi.out=ddp

#AV streaming offload
PRODUCT_PROPERTY_OVERRIDES += \
av.streaming.offload.enable=true

#Enable multi offload
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.offload.multiple.enabled=true

#parser input buffer size(256kb) in byte stream mode
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.parser.ip.buffer.size=262144
+5 −5
Original line number Diff line number Diff line
@@ -261,6 +261,11 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_SPLIT_A2DP)),true)
    LOCAL_SRC_FILES += audio_extn/a2dp.c
endif

ifeq ($(strip $(AUDIO_FEATURE_IP_HDLR_ENABLED)),true)
    LOCAL_CFLAGS += -DAUDIO_EXTN_IP_HDLR_ENABLED
    LOCAL_SRC_FILES += audio_extn/ip_hdlr_intf.c
endif

ifeq ($(strip $(AUDIO_FEATURE_ENABLED_QAF)),true)
    LOCAL_CFLAGS += -DQAF_EXTN_ENABLED
    LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/qaf/
@@ -363,11 +368,6 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DYNAMIC_LOG)), true)
    LOCAL_SHARED_LIBRARIES += libaudio_log_utils
endif

ifeq ($(strip $($AUDIO_FEATURE_IP_HDLR_ENABLED)),true)
    LOCAL_CFLAGS += -DAUDIO_EXTN_IP_HDLR_ENABLED
    LOCAL_SRC_FILES += audio_extn/ip_hdlr_intf.c
endif

ifeq ($(strip $($AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS)),true)
    LOCAL_CFLAGS += -DDYNAMIC_ECNS_ENABLED
endif
+8 −10
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@
#include <dlfcn.h>
#include <cutils/log.h>
#include <sound/asound.h>
#include <cutils/properties.h>

#include "audio_hw.h"
#include "audio_defs.h"
@@ -136,7 +137,7 @@ bool audio_extn_ip_hdlr_intf_supported(audio_format_t format,
        return false;
}

int audio_extn_ip_hdlr_intf_event(void *stream_handle, void *payload, void *ip_hdlr_handle)
int audio_extn_ip_hdlr_intf_event(void *stream_handle __unused, void *payload, void *ip_hdlr_handle )
{
    ALOGVV("%s:[%d] handle = %p",__func__, ip_hdlr->ref_cnt, ip_hdlr_handle);

@@ -149,7 +150,6 @@ int audio_extn_ip_hdlr_intf_rtic_ack(void *aud_sess_handle, struct rtic_ack_info
    int ret = 0;
    int pcm_device_id = 0;
    struct mixer_ctl *ctl = NULL;
    struct stream_out *out = (struct stream_out *)aud_sess_handle;
    struct rtic_ack_param param;
    struct listnode *node, *tempnode;
    struct ip_hdlr_stream *stream_info;
@@ -234,7 +234,7 @@ int audio_extn_ip_hdlr_intf_rtic_fail(void *aud_sess_handle)
            pthread_mutex_unlock(&inout->pre_lock);
            ALOGVV("%s:[%d] calling client callback", __func__, ip_hdlr->ref_cnt);
            if (inout && inout->client_callback)
                inout->client_callback(AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, inout->client_cookie);
                inout->client_callback((stream_callback_event_t)AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, inout->client_cookie);
            pthread_mutex_unlock(&inout->lock);
            break;
        } else if (stream_info->stream == aud_sess_handle) {
@@ -244,7 +244,7 @@ int audio_extn_ip_hdlr_intf_rtic_fail(void *aud_sess_handle)
            pthread_mutex_unlock(&out->pre_lock);
            ALOGVV("%s:[%d] calling client callback", __func__, ip_hdlr->ref_cnt);
            if (out && out->client_callback)
                out->client_callback(AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, out->client_cookie);
                out->client_callback((stream_callback_event_t)AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, out->client_cookie);
            pthread_mutex_unlock(&out->lock);
            break;
        }
@@ -259,8 +259,6 @@ static int audio_extn_ip_hdlr_intf_open_dsp(void *handle, void *stream_handle, a
    int ret = 0, fd = 0, pcm_device_id = 0;
    struct audio_adsp_event *param;
    struct reg_event *reg_ev;
    size_t shm_size;
    void  *shm_buf;;
    struct stream_out *out;
    struct stream_inout *inout;
    void *adsp_hdlr_stream_handle;
@@ -302,7 +300,7 @@ static int audio_extn_ip_hdlr_intf_open_dsp(void *handle, void *stream_handle, a
                                                     audio_extn_ip_hdlr_intf_event,
                                                     handle);
    if (ret < 0) {
        ALOGE("%s:[%d] failed to register event",__func__, ip_hdlr->ref_cnt, ret);
        ALOGE("%s:[%d] failed to register event %d",__func__, ip_hdlr->ref_cnt, ret);
        goto done;
    }

@@ -313,7 +311,7 @@ static int audio_extn_ip_hdlr_intf_open_dsp(void *handle, void *stream_handle, a
    ret = snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
                   "Playback ION FD %d", pcm_device_id);
    if (ret < 0) {
        ALOGE("%s:[%d] snprintf failed",__func__, ip_hdlr->ref_cnt, ret);
        ALOGE("%s:[%d] snprintf failed %d",__func__, ip_hdlr->ref_cnt, ret);
        goto done;
    }
    ALOGV("%s: fd = %d  pcm_id = %d", __func__, fd, pcm_device_id);
@@ -371,11 +369,11 @@ int audio_extn_ip_hdlr_intf_open(void *handle, bool is_dsp_decode,
    pthread_mutex_lock(&ip_hdlr->stream_list_lock);
    list_add_tail(&ip_hdlr->stream_list, &stream_info->list);
    pthread_mutex_unlock(&ip_hdlr->stream_list_lock);
done:

    return ret;
}

int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle)
int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle __unused)
{
    struct audio_adsp_event param;
    void *adsp_hdlr_stream_handle;
+18 −7
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@
#include "audio_extn.h"
#include <qti_audio.h>
#include "sound/compress_params.h"
#include "ip_hdlr_intf.h"

#ifdef DYNAMIC_LOG_ENABLED
#include <log_xml_parser.h>
@@ -936,14 +937,20 @@ static int qaf_get_rendered_frames(struct stream_out *out, uint64_t *frames)
    if ((qaf_mod->stream_out[QAF_OUT_OFFLOAD] != NULL)
        || (qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH] != NULL)) {
        unsigned int sample_rate = 0;
        audio_usecase_t platform_latency = 0;

        if (qaf_mod->stream_out[QAF_OUT_OFFLOAD])
            sample_rate = qaf_mod->stream_out[QAF_OUT_OFFLOAD]->sample_rate;
        else if (qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH])
            sample_rate = qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH]->sample_rate;

        audio_usecase_t platform_latency =
        if (qaf_mod->stream_out[QAF_OUT_OFFLOAD])
            platform_latency =
                platform_render_latency(qaf_mod->stream_out[QAF_OUT_OFFLOAD]->usecase);
        else
            platform_latency =
                platform_render_latency(qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH]->usecase);

        dsp_latency = (platform_latency * sample_rate) / 1000000LL;
    } else if (qaf_mod->stream_out[QAF_OUT_TRANSCODE_PASSTHROUGH] != NULL) {
        unsigned int sample_rate = 0;
@@ -1283,7 +1290,7 @@ static void notify_event_callback(audio_session_handle_t session_handle __unused
    config.offload_info.channel_mask = config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;

    if (event_id == AUDIO_SEC_FAIL_EVENT) {
        DEBUG_MSG("%s Security failed, closing session");
        DEBUG_MSG("%s Security failed, closing session", __func__);
        qaf_session_close(qaf_mod);
        pthread_mutex_unlock(&p_qaf->lock);
        return;
@@ -1857,9 +1864,9 @@ static int audio_extn_qaf_session_open(mm_module_type mod_type, struct stream_ou
{
    ALOGV("%s %d", __func__, __LINE__);
    unsigned char* license_data = NULL;
    device_license_config_t lic_config = {NULL, 0, 0};
    int ret = -ENOSYS, size = 0;
    char value[PROPERTY_VALUE_MAX] = {0};
    device_license_config_t lic_config = {0};
    int ret = -ENOSYS;

    struct qaf_module *qaf_mod = NULL;

    if (mod_type >= MAX_MM_MODULE_TYPE || !(p_qaf->qaf_mod[mod_type].qaf_audio_session_open))
@@ -1877,6 +1884,9 @@ static int audio_extn_qaf_session_open(mm_module_type mod_type, struct stream_ou
    }

#ifndef AUDIO_EXTN_IP_HDLR_ENABLED
 {
    int size=0;
    char value[PROPERTY_VALUE_MAX] = {0};
    if (mod_type == MS12) {
        //Getting the license
        license_data = platform_get_license((struct audio_hw_device *)(p_qaf->adev->platform),
@@ -1905,6 +1915,7 @@ static int audio_extn_qaf_session_open(mm_module_type mod_type, struct stream_ou
            goto exit;
        }
    }
}
#endif

    ret = qaf_mod->qaf_audio_session_open(&qaf_mod->session_handle,
@@ -1934,7 +1945,7 @@ static int audio_extn_qaf_session_open(mm_module_type mod_type, struct stream_ou
    if (mod_type == MS12) {
        ret = audio_extn_ip_hdlr_intf_open(qaf_mod->ip_hdlr_hdl, false, qaf_mod->session_handle, out->usecase);
        if (ret < 0) {
            ERROR_MSG("audio_extn_ip_hdlr_intf_open failed, ret = %d", __func__, ret);
            ERROR_MSG("%s audio_extn_ip_hdlr_intf_open failed, ret = %d", __func__, ret);
            goto exit;
        }
    }
+1 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@
#include <platform.h>
#include "audio_extn.h"
#include "voice_extn.h"
#include "ip_hdlr_intf.h"

#include "sound/compress_params.h"
#include "sound/asound.h"