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

Commit 747f2392 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6063671 from 2ace9190 to rvc-release

Change-Id: Ib915124922bb59ea8b0f846620400ddbcb5e6836
parents 57e39365 2ace9190
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -40,21 +40,6 @@ LOCAL_C_INCLUDES := \
	frameworks/av/media/libmedia \
	external/sonic \

# If AUDIOSERVER_MULTILIB in device.mk is non-empty then it is used to control
# the LOCAL_MULTILIB for all audioserver exclusive libraries.
# This is relevant for 64 bit architectures where either or both
# 32 and 64 bit libraries may be built.
#
# AUDIOSERVER_MULTILIB may be set as follows:
#   32      to build 32 bit audioserver libraries and 32 bit audioserver.
#   64      to build 64 bit audioserver libraries and 64 bit audioserver.
#   both    to build both 32 bit and 64 bit libraries,
#           and use primary target architecture (32 or 64) for audioserver.
#   first   to build libraries and audioserver for the primary target architecture only.
#   <empty> to build both 32 and 64 bit libraries and primary target audioserver.

LOCAL_MULTILIB := $(AUDIOSERVER_MULTILIB)

LOCAL_MODULE := audioserver

LOCAL_INIT_RC := audioserver.rc
+16 −7
Original line number Diff line number Diff line
@@ -700,8 +700,8 @@ struct IspeBox : public FullBox, public ItemProperty {
    }

private:
    uint32_t mWidth;
    uint32_t mHeight;
    int32_t mWidth;
    int32_t mHeight;
};

status_t IspeBox::parse(off64_t offset, size_t size) {
@@ -715,12 +715,19 @@ status_t IspeBox::parse(off64_t offset, size_t size) {
    if (size < 8) {
        return ERROR_MALFORMED;
    }
    if (!source()->getUInt32(offset, &mWidth)
            || !source()->getUInt32(offset + 4, &mHeight)) {
    if (!source()->getUInt32(offset, (uint32_t *)&mWidth)
            || !source()->getUInt32(offset + 4, (uint32_t *)&mHeight)) {
        return ERROR_IO;
    }
    ALOGV("property ispe: %dx%d", mWidth, mHeight);

    // Validate that the dimension doesn't cause overflow on calculated max input size.
    // Max input size is width*height*1.5, restrict width*height to 1<<29 so that
    // we don't need to cast to int64_t when doing mults.
    if (mWidth <= 0 || mHeight <= 0 || mWidth > (1 << 29) / mHeight) {
        return ERROR_MALFORMED;
    }

    ALOGV("property ispe: %dx%d", mWidth, mHeight);
    return OK;
}

@@ -1524,8 +1531,9 @@ AMediaFormat *ItemTable::getImageMeta(const uint32_t imageIndex) {
            default: break; // don't set if invalid
        }
    }
    // we validated no overflow in IspeBox::parse()
    AMediaFormat_setInt32(meta,
            AMEDIAFORMAT_KEY_MAX_INPUT_SIZE, image->width * image->height * 1.5);
            AMEDIAFORMAT_KEY_MAX_INPUT_SIZE, image->width * image->height * 3 / 2);

    if (!image->thumbnails.empty()) {
        ssize_t thumbItemIndex = mItemIdToItemMap.indexOfKey(image->thumbnails[0]);
@@ -1561,8 +1569,9 @@ AMediaFormat *ItemTable::getImageMeta(const uint32_t imageIndex) {
                AMEDIAFORMAT_KEY_TILE_WIDTH, image->width);
        AMediaFormat_setInt32(meta,
                AMEDIAFORMAT_KEY_TILE_HEIGHT, image->height);
        // we validated no overflow in IspeBox::parse()
        AMediaFormat_setInt32(meta,
                AMEDIAFORMAT_KEY_MAX_INPUT_SIZE, image->width * image->height * 1.5);
                AMEDIAFORMAT_KEY_MAX_INPUT_SIZE, image->width * image->height * 3 / 2);
    }

    if (image->hvcc == NULL) {
+29 −0
Original line number Diff line number Diff line
@@ -1532,6 +1532,35 @@ bool AudioSystem::isCallScreenModeSupported()
    return aps->isCallScreenModeSupported();
}

status_t AudioSystem::setPreferredDeviceForStrategy(product_strategy_t strategy,
                                                    const AudioDeviceTypeAddr &device)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }
    return aps->setPreferredDeviceForStrategy(strategy, device);
}

status_t AudioSystem::removePreferredDeviceForStrategy(product_strategy_t strategy)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }
    return aps->removePreferredDeviceForStrategy(strategy);
}

status_t AudioSystem::getPreferredDeviceForStrategy(product_strategy_t strategy,
        AudioDeviceTypeAddr &device)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }
    return aps->getPreferredDeviceForStrategy(strategy, device);
}

// ---------------------------------------------------------------------------

int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
+91 −2
Original line number Diff line number Diff line
@@ -105,7 +105,10 @@ enum {
    SET_ALLOWED_CAPTURE_POLICY,
    MOVE_EFFECTS_TO_IO,
    SET_RTT_ENABLED,
    IS_CALL_SCREEN_MODE_SUPPORTED
    IS_CALL_SCREEN_MODE_SUPPORTED,
    SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
    REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
    GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
};

#define MAX_ITEMS_PER_LIST 1024
@@ -1296,6 +1299,55 @@ public:
        }
        return reply.readBool();
    }

    virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy,
            const AudioDeviceTypeAddr &device)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeUint32(static_cast<uint32_t>(strategy));
        status_t status = device.writeToParcel(&data);
        if (status != NO_ERROR) {
            return BAD_VALUE;
        }
        status = remote()->transact(SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
                data, &reply);
        if (status != NO_ERROR) {
           return status;
        }
        return static_cast<status_t>(reply.readInt32());
    }

    virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeUint32(static_cast<uint32_t>(strategy));
        status_t status = remote()->transact(REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
                data, &reply);
        if (status != NO_ERROR) {
           return status;
        }
        return static_cast<status_t>(reply.readInt32());
    }

    virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy,
            AudioDeviceTypeAddr &device)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeUint32(static_cast<uint32_t>(strategy));
        status_t status = remote()->transact(GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
                data, &reply);
        if (status != NO_ERROR) {
            return status;
        }
        status = device.readFromParcel(&reply);
        if (status != NO_ERROR) {
            return status;
        }
        return static_cast<status_t>(reply.readInt32());
    }
};

IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService");
@@ -1359,7 +1411,10 @@ status_t BnAudioPolicyService::onTransact(
        case LIST_AUDIO_VOLUME_GROUPS:
        case GET_VOLUME_GROUP_FOR_ATTRIBUTES:
        case SET_RTT_ENABLED:
        case IS_CALL_SCREEN_MODE_SUPPORTED: {
        case IS_CALL_SCREEN_MODE_SUPPORTED:
        case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY:
        case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY:
        case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            if (!isServiceUid(IPCThreadState::self()->getCallingUid())) {
                ALOGW("%s: transaction %d received from PID %d unauthorized UID %d",
                      __func__, code, IPCThreadState::self()->getCallingPid(),
@@ -2388,6 +2443,40 @@ status_t BnAudioPolicyService::onTransact(
            return NO_ERROR;
        }

        case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            product_strategy_t strategy = (product_strategy_t) data.readUint32();
            AudioDeviceTypeAddr device;
            status_t status = device.readFromParcel((Parcel*)&data);
            if (status != NO_ERROR) {
                return status;
            }
            status = setPreferredDeviceForStrategy(strategy, device);
            reply->writeInt32(status);
            return NO_ERROR;
        }

        case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            product_strategy_t strategy = (product_strategy_t) data.readUint32();
            status_t status = removePreferredDeviceForStrategy(strategy);
            reply->writeInt32(status);
            return NO_ERROR;
        }

        case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            product_strategy_t strategy = (product_strategy_t) data.readUint32();
            AudioDeviceTypeAddr device;
            status_t status = getPreferredDeviceForStrategy(strategy, device);
            status_t marshall_status = device.writeToParcel(reply);
            if (marshall_status != NO_ERROR) {
                return marshall_status;
            }
            reply->writeInt32(status);
            return NO_ERROR;
        }

        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+11 −0
Original line number Diff line number Diff line
@@ -405,6 +405,17 @@ public:
     */
    static status_t setAudioHalPids(const std::vector<pid_t>& pids);

    static status_t setPreferredDeviceForStrategy(product_strategy_t strategy,
            const AudioDeviceTypeAddr &device);

    static status_t removePreferredDeviceForStrategy(product_strategy_t strategy);

    static status_t getPreferredDeviceForStrategy(product_strategy_t strategy,
            AudioDeviceTypeAddr &device);

    static status_t getDeviceForStrategy(product_strategy_t strategy,
            AudioDeviceTypeAddr &device);

    // ----------------------------------------------------------------------------

    class AudioVolumeGroupCallback : public RefBase
Loading