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

Commit 11b63766 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 13258483 from 838594ae to 25Q2-release

Change-Id: I923023c89c3a3e2dac4198de7fd89edecd91e2f2
parents b5f0bbea 838594ae
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -322,11 +322,13 @@ cc_library {
        "libaconfig_storage_read_api_cc",
        "aconfig_mediacodec_flags_c_lib",
        "camera_platform_flags_c_lib",
        "media_quality_aidl_interface-cpp",
    ],

    static_libs: [
        "android.media.codec-aconfig-cc",
        "android.media.extractor.flags-aconfig-cc",
        "android.media.tv.flags-aconfig-cc",
        "com.android.media.flags.editing-aconfig-cc",
        "framework-permission-aidl-cpp",
        "libmedia_ndkformatpriv",
@@ -346,6 +348,7 @@ cc_library {
        "libnativeloader-headers",
        "libstagefright_xmlparser_headers",
        "media_ndk_headers",
        "media_quality_headers",
    ],

    export_shared_lib_headers: [
+71 −1
Original line number Diff line number Diff line
@@ -33,11 +33,13 @@
#include "include/SoftwareRenderer.h"

#include <android_media_codec.h>
#include <android_media_tv_flags.h>

#include <android/api-level.h>
#include <android/content/pm/IPackageManagerNative.h>
#include <android/hardware/cas/native/1.0/IDescrambler.h>
#include <android/hardware/media/omx/1.0/IGraphicBufferSource.h>
#include <android/media/quality/IMediaQualityManager.h>

#include <aidl/android/media/BnResourceManagerClient.h>
#include <aidl/android/media/IResourceManagerService.h>
@@ -95,9 +97,10 @@ namespace android {

using Status = ::ndk::ScopedAStatus;
using aidl::android::media::BnResourceManagerClient;
using aidl::android::media::ClientInfoParcel;
using aidl::android::media::IResourceManagerClient;
using aidl::android::media::IResourceManagerService;
using aidl::android::media::ClientInfoParcel;
using media::quality::IMediaQualityManager;
using server_configurable_flags::GetServerConfigurableFlag;
using FreezeEvent = VideoRenderQualityTracker::FreezeEvent;
using JudderEvent = VideoRenderQualityTracker::JudderEvent;
@@ -2088,6 +2091,66 @@ void MediaCodec::updateCodecImportance(const sp<AMessage>& msg) {
    }
}

void MediaCodec::updatePictureProfile(const sp<AMessage>& msg, bool applyDefaultProfile) {
    if (!(msg->contains(KEY_PICTURE_PROFILE_HANDLE) || msg->contains(KEY_PICTURE_PROFILE_ID) ||
          applyDefaultProfile)) {
        return;
    }

    sp<IMediaQualityManager> mediaQualityMgr =
            waitForDeclaredService<IMediaQualityManager>(String16("media_quality"));
    if (mediaQualityMgr == nullptr) {
        ALOGE("Media Quality Service not found.");
        return;
    }

    int64_t pictureProfileHandle;
    AString pictureProfileId;

    if (msg->findInt64(KEY_PICTURE_PROFILE_HANDLE, &pictureProfileHandle)) {
        binder::Status status =
                mediaQualityMgr->notifyPictureProfileHandleSelection(pictureProfileHandle, 0);
        if (!status.isOk()) {
            ALOGE("unexpected status when calling "
                  "MediaQualityManager.notifyPictureProfileHandleSelection(): %s",
                  status.toString8().c_str());
        }
        msg->setInt64(KEY_PICTURE_PROFILE_HANDLE, pictureProfileHandle);
        return;
    } else if (msg->findString(KEY_PICTURE_PROFILE_ID, &pictureProfileId)) {
        binder::Status status = mediaQualityMgr->getPictureProfileHandleValue(
                String16(pictureProfileId.c_str()), 0, &pictureProfileHandle);
        if (status.isOk()) {
            if (pictureProfileHandle != -1) {
                msg->setInt64(KEY_PICTURE_PROFILE_HANDLE, pictureProfileHandle);
            } else {
                ALOGW("PictureProfileHandle not found for pictureProfileId %s",
                      pictureProfileId.c_str());
            }
        } else {
            ALOGE("unexpected status when calling "
                  "MediaQualityManager.getPictureProfileHandleValue(): %s",
                  status.toString8().c_str());
        }
        return;
    } else {  // applyDefaultProfile
        binder::Status status =
                mediaQualityMgr->getDefaultPictureProfileHandleValue(0, &pictureProfileHandle);
        if (status.isOk()) {
            if (pictureProfileHandle != -1) {
                msg->setInt64(KEY_PICTURE_PROFILE_HANDLE, pictureProfileHandle);
            } else {
                ALOGW("Default PictureProfileHandle not found");
            }
        } else {
            ALOGE("unexpected status when calling "
                  "MediaQualityManager.getDefaultPictureProfileHandleValue(): %s",
                  status.toString8().c_str());
        }
        return;
    }
}

constexpr const char *MediaCodec::asString(TunnelPeekState state, const char *default_string){
    switch(state) {
        case TunnelPeekState::kLegacyMode:
@@ -2771,6 +2834,10 @@ status_t MediaCodec::configure(
    // Update the codec importance.
    updateCodecImportance(format);

    if (android::media::tv::flags::apply_picture_profiles()) {
        updatePictureProfile(format, true /* applyDefaultProfile */);
    }

    // Create and set up metrics for this codec.
    status_t err = OK;
    mediametrics_handle_t nextMetricsHandle = createMediaMetrics(format, flags, &err);
@@ -7524,6 +7591,9 @@ status_t MediaCodec::onSetParameters(const sp<AMessage> &params) {
    }
    updateLowLatency(params);
    updateCodecImportance(params);
    if (android::media::tv::flags::apply_picture_profiles()) {
        updatePictureProfile(params, false /* applyDefaultProfile */);
    }
    mapFormat(mComponentName, params, nullptr, false);
    updateTunnelPeek(params);
    mCodec->signalSetParameters(params);
+1 −0
Original line number Diff line number Diff line
@@ -547,6 +547,7 @@ private:
    void updateEphemeralMediametrics(mediametrics_handle_t item);
    void updateLowLatency(const sp<AMessage> &msg);
    void updateCodecImportance(const sp<AMessage>& msg);
    void updatePictureProfile(const sp<AMessage>& msg, bool applyDefaultProfile);
    void onGetMetrics(const sp<AMessage>& msg);
    constexpr const char *asString(TunnelPeekState state, const char *default_string="?");
    void updateTunnelPeek(const sp<AMessage> &msg);
+1 −0
Original line number Diff line number Diff line
@@ -1025,6 +1025,7 @@ inline constexpr char KEY_VIDEO_QP_P_MAX[] = "video-qp-p-max";
inline constexpr char KEY_VIDEO_QP_P_MIN[] = "video-qp-p-min";
inline constexpr char KEY_WIDTH[] = "width";
inline constexpr char KEY_PICTURE_PROFILE_HANDLE[] = "picture-profile-handle";
inline constexpr char KEY_PICTURE_PROFILE_ID[] = "picture-profile-id";

// from MediaCodec.java
inline constexpr int32_t ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4;