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

Commit 5ba97838 authored by Alec Mouri's avatar Alec Mouri
Browse files

Support TextureView/ImageView HDR for COLOR_MODE_HDR

Bug: 284006942
Test: HwAccelerationTest
Change-Id: I040f3090c2eca8b89ba1db70ef5cbfae02dcb33b
parent 78add906
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <log/log.h>
// libshaders only exists on Android devices
#ifdef __ANDROID__
#include <renderthread/CanvasContext.h>
#include <shaders/shaders.h>
#endif

@@ -53,8 +54,17 @@ static sk_sp<SkColorFilter> createLinearEffectColorFilter(const shaders::LinearE

    ColorFilterRuntimeEffectBuilder effectBuilder(std::move(runtimeEffect));

    auto colorTransform = android::mat4();
    const auto* context = renderthread::CanvasContext::getActiveContext();
    if (context) {
        const auto ratio = context->targetSdrHdrRatio();
        if (ratio > 1.0f) {
            colorTransform = android::mat4::scale(vec4(ratio, ratio, ratio, 1.f));
        }
    }

    const auto uniforms =
            shaders::buildLinearEffectUniforms(linearEffect, android::mat4(), maxDisplayLuminance,
            shaders::buildLinearEffectUniforms(linearEffect, colorTransform, maxDisplayLuminance,
                                               currentDisplayLuminanceNits, maxLuminance);

    for (const auto& uniform : uniforms) {
+38 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.test.hwui;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorSpace;
@@ -72,6 +73,10 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb
    private int[] mGradientEndColors = {0xFFFFFFFF, 0xFFFF0000, 0xFF00FF00, 0xFF0000FF};
    private String[] mGradientColorNames = {"Grayscale", "Red", "Green", "Blue"};

    private int mColorMode = ActivityInfo.COLOR_MODE_DEFAULT;
    private int[] mColorModes = {ActivityInfo.COLOR_MODE_DEFAULT, ActivityInfo.COLOR_MODE_HDR};
    private String[] mColorModeNames = {"DEFAULT", "HDR"};

    private final ExecutorService mBufferFenceExecutor = Executors.newFixedThreadPool(1);
    private final ExecutorService mBufferExecutor = Executors.newFixedThreadPool(1);

@@ -139,6 +144,15 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb
            gradientColorSpinner
                    .setOnItemSelectedListener(new GradientColorOnItemSelectedListener());

            ArrayAdapter<String> colorModeAdapter = new ArrayAdapter<>(
                    this, android.R.layout.simple_spinner_item, mColorModeNames);

            colorModeAdapter
                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            Spinner colorModeSpinner = new Spinner(this);
            colorModeSpinner.setAdapter(colorModeAdapter);
            colorModeSpinner.setOnItemSelectedListener(new ColorModeOnItemSelectedListener());

            mGradientBuffer = getGradientBuffer().get();

            LinearLayout linearLayout = new LinearLayout(this);
@@ -169,6 +183,10 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT));

            spinnerLayout.addView(colorModeSpinner, new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT));

            linearLayout.addView(spinnerLayout, new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT));
@@ -187,6 +205,8 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb
            linearLayout.addView(mSurfaceView, new LinearLayout.LayoutParams(WIDTH, HEIGHT));

            setContentView(linearLayout);

            getWindow().setColorMode(mColorMode);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
@@ -312,4 +332,22 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb

        }
    }

    private final class ColorModeOnItemSelectedListener
            implements AdapterView.OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ColorBitmapActivity.this.mColorMode = ColorBitmapActivity.this.mColorModes[position];
            ColorBitmapActivity.this.getMainExecutor()
                    .execute(() -> {
                        ColorBitmapActivity.this.getWindow().setColorMode(mColorMode);
                    });
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    }
}