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

Commit 6b09c110 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6272866 from 6d435719 to rvc-release

Change-Id: Iefe36b9120e5ed91ffabdf7b6fd5f53cd4f0edfb
parents 12e4783a 6d435719
Loading
Loading
Loading
Loading
+78 −34
Original line number Diff line number Diff line
@@ -446,17 +446,19 @@ void AudioPolicyService::updateUidStates_l()

    sp<AudioRecordClient> topActive;
    sp<AudioRecordClient> latestActive;
    sp<AudioRecordClient> topSensitiveActive;
    sp<AudioRecordClient> latestSensitiveActive;

    nsecs_t topStartNs = 0;
    nsecs_t latestStartNs = 0;
    nsecs_t topSensitiveStartNs = 0;
    nsecs_t latestSensitiveStartNs = 0;
    bool isA11yOnTop = mUidPolicy->isA11yOnTop();
    bool isAssistantOnTop = false;
    bool isSensitiveActive = false;
    bool isInCall = mPhoneState == AUDIO_MODE_IN_CALL;
    bool rttCallActive =
            (mPhoneState == AUDIO_MODE_IN_CALL || mPhoneState == AUDIO_MODE_IN_COMMUNICATION)
    bool isInCommunication = mPhoneState == AUDIO_MODE_IN_COMMUNICATION;
    bool rttCallActive = (isInCall || isInCommunication)
            && mUidPolicy->isRttEnabled();
    bool onlyHotwordActive = true;

@@ -479,32 +481,46 @@ void AudioPolicyService::updateUidStates_l()
            continue;
        }

        bool isAssistant = mUidPolicy->isAssistantUid(current->uid);
        bool isAccessibility = mUidPolicy->isA11yUid(current->uid);
        if (appState == APP_STATE_TOP && !isAccessibility) {
        // Clients capturing for Accessibility services are not considered
        // for top or latest active to avoid masking regular clients started before
        if (!isAccessibility) {
            bool isAssistant = mUidPolicy->isAssistantUid(current->uid);
            bool isPrivacySensitive =
                    (current->attributes.flags & AUDIO_FLAG_CAPTURE_PRIVATE) != 0;
            if (appState == APP_STATE_TOP) {
                if (isPrivacySensitive) {
                    if (current->startTimeNs > topSensitiveStartNs) {
                        topSensitiveActive = current;
                        topSensitiveStartNs = current->startTimeNs;
                    }
                } else {
                    if (current->startTimeNs > topStartNs) {
                        topActive = current;
                        topStartNs = current->startTimeNs;
                    }
                }
                if (isAssistant) {
                    isAssistantOnTop = true;
                }
            }
        // Client capturing for HOTWORD or Accessibility services not considered
            // Clients capturing for HOTWORD are not considered
            // for latest active to avoid masking regular clients started before
        if (current->startTimeNs > latestStartNs
                && !(current->attributes.source == AUDIO_SOURCE_HOTWORD
                        || ((isA11yOnTop || rttCallActive) && isAssistant))
                && !isAccessibility) {
            latestActive = current;
            latestStartNs = current->startTimeNs;
        }
        if ((current->attributes.flags & AUDIO_FLAG_CAPTURE_PRIVATE) != 0) {
            if (!(current->attributes.source == AUDIO_SOURCE_HOTWORD
                    || ((isA11yOnTop || rttCallActive) && isAssistant))) {
                if (isPrivacySensitive) {
                    if (current->startTimeNs > latestSensitiveStartNs) {
                        latestSensitiveActive = current;
                        latestSensitiveStartNs = current->startTimeNs;
                    }
                    isSensitiveActive = true;
                } else {
                    if (current->startTimeNs > latestStartNs) {
                        latestActive = current;
                        latestStartNs = current->startTimeNs;
                    }
                }
            }
        }
        if (current->attributes.source != AUDIO_SOURCE_HOTWORD) {
            onlyHotwordActive = false;
@@ -514,6 +530,21 @@ void AudioPolicyService::updateUidStates_l()
    // if no active client with UI on Top, consider latest active as top
    if (topActive == nullptr) {
        topActive = latestActive;
        topStartNs = latestStartNs;
    }
    if (topSensitiveActive == nullptr) {
        topSensitiveActive = latestSensitiveActive;
        topSensitiveStartNs = latestSensitiveStartNs;
    }

    // If both privacy sensitive and regular capture are active:
    //  if the regular capture is privileged
    //    allow concurrency
    //  else
    //    favor the privacy sensitive case
    if (topActive != nullptr && topSensitiveActive != nullptr
            && !topActive->canCaptureCallOrOutput) {
        topActive = nullptr;
    }

    for (size_t i =0; i < mAudioRecordClients.size(); i++) {
@@ -524,8 +555,17 @@ void AudioPolicyService::updateUidStates_l()

        audio_source_t source = current->attributes.source;
        bool isTopOrLatestActive = topActive == nullptr ? false : current->uid == topActive->uid;
        bool isLatestSensitive = latestSensitiveActive == nullptr ?
                                 false : current->uid == latestSensitiveActive->uid;
        bool isTopOrLatestSensitive = topSensitiveActive == nullptr ?
                                 false : current->uid == topSensitiveActive->uid;

        auto canCaptureIfInCallOrCommunication = [&](const auto &recordClient) {
            bool canCaptureCall = recordClient->canCaptureCallOrOutput;
            bool canCaptureCommunication = recordClient->canCaptureCallOrOutput
                || recordClient->uid == mPhoneStateOwnerUid
                || isServiceUid(mPhoneStateOwnerUid);
            return !(isInCall && !canCaptureCall)
                && !(isInCommunication && !canCaptureCommunication);
        };

        // By default allow capture if:
        //     The assistant is not on TOP
@@ -533,9 +573,10 @@ void AudioPolicyService::updateUidStates_l()
        //     AND there is no active privacy sensitive capture or call
        //             OR client has CAPTURE_AUDIO_OUTPUT privileged permission
        bool allowCapture = !isAssistantOnTop
                && ((isTopOrLatestActive && !isLatestSensitive) || isLatestSensitive)
                && !(isSensitiveActive && !(isLatestSensitive || current->canCaptureCallOrOutput))
                && !(isInCall && !current->canCaptureCallOrOutput);
                && (isTopOrLatestActive || isTopOrLatestSensitive)
                && !(isSensitiveActive
                    && !(isTopOrLatestSensitive || current->canCaptureCallOrOutput))
                && canCaptureIfInCallOrCommunication(current);

        if (isVirtualSource(source)) {
            // Allow capture for virtual (remote submix, call audio TX or RX...) sources
@@ -554,8 +595,9 @@ void AudioPolicyService::updateUidStates_l()
                }
            } else {
                if (((isAssistantOnTop && source == AUDIO_SOURCE_VOICE_RECOGNITION) ||
                        source == AUDIO_SOURCE_HOTWORD) &&
                        (!(isSensitiveActive || isInCall) || current->canCaptureCallOrOutput)) {
                        source == AUDIO_SOURCE_HOTWORD)
                        && !(isSensitiveActive && !current->canCaptureCallOrOutput)
                        && canCaptureIfInCallOrCommunication(current)) {
                    allowCapture = true;
                }
            }
@@ -567,7 +609,8 @@ void AudioPolicyService::updateUidStates_l()
            //     OR
            //         Is on TOP AND the source is VOICE_RECOGNITION or HOTWORD
            if (!isAssistantOnTop
                    && (!(isSensitiveActive || isInCall) || current->canCaptureCallOrOutput)) {
                    && !(isSensitiveActive && !current->canCaptureCallOrOutput)
                    && canCaptureIfInCallOrCommunication(current)) {
                allowCapture = true;
            }
            if (isA11yOnTop) {
@@ -580,7 +623,8 @@ void AudioPolicyService::updateUidStates_l()
            //     All active clients are using HOTWORD source
            //     AND no call is active
            //         OR client has CAPTURE_AUDIO_OUTPUT privileged permission
            if (onlyHotwordActive && !(isInCall && !current->canCaptureCallOrOutput)) {
            if (onlyHotwordActive
                    && canCaptureIfInCallOrCommunication(current)) {
                allowCapture = true;
            }
        }
+6 −0
Original line number Diff line number Diff line
@@ -91,6 +91,8 @@ bool HeicEncoderInfoManager::isSizeSupported(int32_t width, int32_t height, bool
            // The "measured-frame-rate-WIDTHxHEIGHT-range" key is optional.
            // Hardcode to some default value (3.33ms * tile count) based on resolution.
            *stall = 3333333LL * width * height / (kGridWidth * kGridHeight);
            *useHeic = chooseHeic;
            *useGrid = enableGrid;
            return true;
        }

@@ -275,9 +277,13 @@ bool HeicEncoderInfoManager::getHevcCodecDetails(
            ALOGE("%s: Failed to get codec info for %s", __FUNCTION__, mime);
            break;
        }
        ALOGV("%s: [%s] codec found", __FUNCTION__,
                info->getCodecName());

        // Filter out software ones as they may be too slow
        if (!(info->getAttributes() & MediaCodecInfo::kFlagIsHardwareAccelerated)) {
            ALOGV("%s: [%s] Filter out software ones as they may be too slow", __FUNCTION__,
                    info->getCodecName());
            continue;
        }

+21 −8
Original line number Diff line number Diff line
@@ -326,8 +326,11 @@ status_t CameraProviderManager::setTorchMode(const std::string &id, bool enabled

    // Pass the camera ID to start interface so that it will save it to the map of ICameraProviders
    // that are currently in use.
    const sp<provider::V2_4::ICameraProvider> interface =
            deviceInfo->mParentProvider->startProviderInterface();
    sp<ProviderInfo> parentProvider = deviceInfo->mParentProvider.promote();
    if (parentProvider == nullptr) {
        return DEAD_OBJECT;
    }
    const sp<provider::V2_4::ICameraProvider> interface = parentProvider->startProviderInterface();
    if (interface == nullptr) {
        return DEAD_OBJECT;
    }
@@ -380,8 +383,11 @@ status_t CameraProviderManager::openSession(const std::string &id,
    if (deviceInfo == nullptr) return NAME_NOT_FOUND;

    auto *deviceInfo3 = static_cast<ProviderInfo::DeviceInfo3*>(deviceInfo);
    const sp<provider::V2_4::ICameraProvider> provider =
            deviceInfo->mParentProvider->startProviderInterface();
    sp<ProviderInfo> parentProvider = deviceInfo->mParentProvider.promote();
    if (parentProvider == nullptr) {
        return DEAD_OBJECT;
    }
    const sp<provider::V2_4::ICameraProvider> provider = parentProvider->startProviderInterface();
    if (provider == nullptr) {
        return DEAD_OBJECT;
    }
@@ -423,8 +429,11 @@ status_t CameraProviderManager::openSession(const std::string &id,
    if (deviceInfo == nullptr) return NAME_NOT_FOUND;

    auto *deviceInfo1 = static_cast<ProviderInfo::DeviceInfo1*>(deviceInfo);
    const sp<provider::V2_4::ICameraProvider> provider =
            deviceInfo->mParentProvider->startProviderInterface();
    sp<ProviderInfo> parentProvider = deviceInfo->mParentProvider.promote();
    if (parentProvider == nullptr) {
        return DEAD_OBJECT;
    }
    const sp<provider::V2_4::ICameraProvider> provider = parentProvider->startProviderInterface();
    if (provider == nullptr) {
        return DEAD_OBJECT;
    }
@@ -999,7 +1008,8 @@ status_t CameraProviderManager::ProviderInfo::DeviceInfo3::fillHeicStreamCombina
        if (sizeAvail) continue;

        int64_t stall = 0;
        bool useHeic, useGrid;
        bool useHeic = false;
        bool useGrid = false;
        if (camera3::HeicCompositeStream::isSizeSupportedByHeifEncoder(
                halStreamConfigs.data.i32[i+1], halStreamConfigs.data.i32[i+2],
                &useHeic, &useGrid, &stall)) {
@@ -2044,7 +2054,10 @@ sp<InterfaceT> CameraProviderManager::ProviderInfo::DeviceInfo::startDeviceInter
    sp<InterfaceT> device;
    ATRACE_CALL();
    if (mSavedInterface == nullptr) {
        device = mParentProvider->startDeviceInterface<InterfaceT>(mName);
        sp<ProviderInfo> parentProvider = mParentProvider.promote();
        if (parentProvider != nullptr) {
            device = parentProvider->startDeviceInterface<InterfaceT>(mName);
        }
    } else {
        device = (InterfaceT *) mSavedInterface.get();
    }
+1 −1
Original line number Diff line number Diff line
@@ -447,7 +447,7 @@ private:
            std::map<std::string, hardware::camera::common::V1_0::CameraDeviceStatus>
                    mPhysicalStatus;

            sp<ProviderInfo> mParentProvider;
            wp<ProviderInfo> mParentProvider;

            bool hasFlashUnit() const { return mHasFlashUnit; }
            bool supportNativeZoomRatio() const { return mSupportNativeZoomRatio; }
+3 −1
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ status_t MediaMetricsService::submitInternal(mediametrics::Item *item, bool rele
    case AID_MEDIA_CODEC:
    case AID_MEDIA_EX:
    case AID_MEDIA_DRM:
    // case AID_SHELL: // DEBUG ONLY - used for mediametrics_tests to add new keys
    case AID_SYSTEM:
        // trusted source, only override default values
        isTrusted = true;
@@ -145,9 +146,10 @@ status_t MediaMetricsService::submitInternal(mediametrics::Item *item, bool rele
        }
    }

    ALOGV("%s: given uid %d; sanitized uid: %d sanitized pkg: %s "
    ALOGV("%s: isTrusted:%d given uid %d; sanitized uid: %d sanitized pkg: %s "
          "sanitized pkg version: %lld",
          __func__,
          (int)isTrusted,
          uid_given, item->getUid(),
          item->getPkgName().c_str(),
          (long long)item->getPkgVersionCode());
Loading