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

Commit c9d88600 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Media Quality] Support setting Picture Profile handle as a parameter in CCodec" into main

parents 0494773d 4b9205d6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ cc_library_shared {
        "libSurfaceFlingerProperties",
        "aconfig_mediacodec_flags_c_lib",
        "android.media.codec-aconfig-cc",
        "android.media.tv.flags-aconfig-cc",
    ],

    shared_libs: [
+10 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <chrono>

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

#include <C2AllocatorGralloc.h>
#include <C2PlatformSupport.h>
@@ -61,6 +62,7 @@
#include <mediadrm/ICrypto.h>
#include <server_configurable_flags/get_flags.h>
#include <system/window.h>
#include <ui/PictureProfileHandle.h>

#include "CCodecBufferChannel.h"
#include "Codec2Buffer.h"
@@ -1456,6 +1458,14 @@ status_t CCodecBufferChannel::renderOutputBuffer(

    qbi.setSurfaceDamage(Region::INVALID_REGION); // we don't have dirty regions
    qbi.getFrameTimestamps = true; // we need to know when a frame is rendered

    int64_t pictureProfileHandle;
    if (android::media::tv::flags::apply_picture_profiles() &&
                buffer->format()->findInt64(KEY_PICTURE_PROFILE_HANDLE, &pictureProfileHandle)) {
        PictureProfileHandle handle(static_cast<PictureProfileId>(pictureProfileHandle));
        qbi.setPictureProfileHandle(handle);
    }

    IGraphicBufferProducer::QueueBufferOutput qbo;
    status_t result = std::atomic_load(&mComponent)->queueToOutputSurface(block, qbi, &qbo);
    if (result != OK) {
+6 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <initializer_list>

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

#include <cutils/properties.h>
#include <log/log.h>
@@ -1047,6 +1048,11 @@ void CCodecConfig::initializeStandardParams() {
            return C2Value();
        }));

    if (android::media::tv::flags::apply_picture_profiles()) {
        add(ConfigMapper(KEY_PICTURE_PROFILE_HANDLE, C2_PARAMKEY_DISPLAY_PROCESSING_TOKEN, "value")
                    .limitTo(D::VIDEO & D::RAW & D::DECODER));
    }

    /* still to do
       not yet used by MediaCodec, but defined as MediaFormat
    KEY_AUDIO_SESSION_ID // we use "audio-hw-sync"
+1 −0
Original line number Diff line number Diff line
@@ -1022,6 +1022,7 @@ inline constexpr char KEY_VIDEO_QP_MIN[] = "video-qp-min";
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";

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