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

Commit ffa81f86 authored by John Reck's avatar John Reck
Browse files

Add setDataSpace SurfaceControl API

Also change DataSpace from long to int (HAL & native are both ints)

Bug: 217776226
Fixes: 218320444
Test: make && SurfaceControlTest#testSurfaceTransaction_setDataSpace
Change-Id: Ic2b9ccb1d0ba3c1d049839310b4fef0881a3d2e2
parent 8b60c745
Loading
Loading
Loading
Loading
+51 −50
Original line number Diff line number Diff line
@@ -15459,7 +15459,7 @@ package android.graphics {
    ctor public SurfaceTexture(boolean);
    method public void attachToGLContext(int);
    method public void detachFromGLContext();
    method public long getDataSpace();
    method public int getDataSpace();
    method public long getTimestamp();
    method public void getTransformMatrix(float[]);
    method public boolean isReleased();
@@ -16694,49 +16694,49 @@ package android.hardware {
  }
  public final class DataSpace {
    method public static long getRange(long);
    method public static long getStandard(long);
    method public static long getTransfer(long);
    method public static long pack(long, long, long);
    field public static final long DATASPACE_ADOBE_RGB = 151715840L; // 0x90b0000L
    field public static final long DATASPACE_BT2020 = 147193856L; // 0x8c60000L
    field public static final long DATASPACE_BT2020_PQ = 163971072L; // 0x9c60000L
    field public static final long DATASPACE_BT601_525 = 281280512L; // 0x10c40000L
    field public static final long DATASPACE_BT601_625 = 281149440L; // 0x10c20000L
    field public static final long DATASPACE_BT709 = 281083904L; // 0x10c10000L
    field public static final long DATASPACE_DCI_P3 = 155844608L; // 0x94a0000L
    field public static final long DATASPACE_DISPLAY_P3 = 143261696L; // 0x88a0000L
    field public static final long DATASPACE_JFIF = 146931712L; // 0x8c20000L
    field public static final long DATASPACE_SCRGB = 411107328L; // 0x18810000L
    field public static final long DATASPACE_SCRGB_LINEAR = 406913024L; // 0x18410000L
    field public static final long DATASPACE_SRGB = 142671872L; // 0x8810000L
    field public static final long DATASPACE_SRGB_LINEAR = 138477568L; // 0x8410000L
    field public static final long DATASPACE_UNKNOWN = 0L; // 0x0L
    field public static final long RANGE_EXTENDED = 402653184L; // 0x18000000L
    field public static final long RANGE_FULL = 134217728L; // 0x8000000L
    field public static final long RANGE_LIMITED = 268435456L; // 0x10000000L
    field public static final long RANGE_UNSPECIFIED = 0L; // 0x0L
    field public static final long STANDARD_ADOBE_RGB = 720896L; // 0xb0000L
    field public static final long STANDARD_BT2020 = 393216L; // 0x60000L
    field public static final long STANDARD_BT2020_CONSTANT_LUMINANCE = 458752L; // 0x70000L
    field public static final long STANDARD_BT470M = 524288L; // 0x80000L
    field public static final long STANDARD_BT601_525 = 262144L; // 0x40000L
    field public static final long STANDARD_BT601_525_UNADJUSTED = 327680L; // 0x50000L
    field public static final long STANDARD_BT601_625 = 131072L; // 0x20000L
    field public static final long STANDARD_BT601_625_UNADJUSTED = 196608L; // 0x30000L
    field public static final long STANDARD_BT709 = 65536L; // 0x10000L
    field public static final long STANDARD_DCI_P3 = 655360L; // 0xa0000L
    field public static final long STANDARD_FILM = 589824L; // 0x90000L
    field public static final long STANDARD_UNSPECIFIED = 0L; // 0x0L
    field public static final long TRANSFER_GAMMA2_2 = 16777216L; // 0x1000000L
    field public static final long TRANSFER_GAMMA2_6 = 20971520L; // 0x1400000L
    field public static final long TRANSFER_GAMMA2_8 = 25165824L; // 0x1800000L
    field public static final long TRANSFER_HLG = 33554432L; // 0x2000000L
    field public static final long TRANSFER_LINEAR = 4194304L; // 0x400000L
    field public static final long TRANSFER_SMPTE_170M = 12582912L; // 0xc00000L
    field public static final long TRANSFER_SRGB = 8388608L; // 0x800000L
    field public static final long TRANSFER_ST2084 = 29360128L; // 0x1c00000L
    field public static final long TRANSFER_UNSPECIFIED = 0L; // 0x0L
    method public static int getRange(int);
    method public static int getStandard(int);
    method public static int getTransfer(int);
    method public static int pack(int, int, int);
    field public static final int DATASPACE_ADOBE_RGB = 151715840; // 0x90b0000
    field public static final int DATASPACE_BT2020 = 147193856; // 0x8c60000
    field public static final int DATASPACE_BT2020_PQ = 163971072; // 0x9c60000
    field public static final int DATASPACE_BT601_525 = 281280512; // 0x10c40000
    field public static final int DATASPACE_BT601_625 = 281149440; // 0x10c20000
    field public static final int DATASPACE_BT709 = 281083904; // 0x10c10000
    field public static final int DATASPACE_DCI_P3 = 155844608; // 0x94a0000
    field public static final int DATASPACE_DISPLAY_P3 = 143261696; // 0x88a0000
    field public static final int DATASPACE_JFIF = 146931712; // 0x8c20000
    field public static final int DATASPACE_SCRGB = 411107328; // 0x18810000
    field public static final int DATASPACE_SCRGB_LINEAR = 406913024; // 0x18410000
    field public static final int DATASPACE_SRGB = 142671872; // 0x8810000
    field public static final int DATASPACE_SRGB_LINEAR = 138477568; // 0x8410000
    field public static final int DATASPACE_UNKNOWN = 0; // 0x0
    field public static final int RANGE_EXTENDED = 402653184; // 0x18000000
    field public static final int RANGE_FULL = 134217728; // 0x8000000
    field public static final int RANGE_LIMITED = 268435456; // 0x10000000
    field public static final int RANGE_UNSPECIFIED = 0; // 0x0
    field public static final int STANDARD_ADOBE_RGB = 720896; // 0xb0000
    field public static final int STANDARD_BT2020 = 393216; // 0x60000
    field public static final int STANDARD_BT2020_CONSTANT_LUMINANCE = 458752; // 0x70000
    field public static final int STANDARD_BT470M = 524288; // 0x80000
    field public static final int STANDARD_BT601_525 = 262144; // 0x40000
    field public static final int STANDARD_BT601_525_UNADJUSTED = 327680; // 0x50000
    field public static final int STANDARD_BT601_625 = 131072; // 0x20000
    field public static final int STANDARD_BT601_625_UNADJUSTED = 196608; // 0x30000
    field public static final int STANDARD_BT709 = 65536; // 0x10000
    field public static final int STANDARD_DCI_P3 = 655360; // 0xa0000
    field public static final int STANDARD_FILM = 589824; // 0x90000
    field public static final int STANDARD_UNSPECIFIED = 0; // 0x0
    field public static final int TRANSFER_GAMMA2_2 = 16777216; // 0x1000000
    field public static final int TRANSFER_GAMMA2_6 = 20971520; // 0x1400000
    field public static final int TRANSFER_GAMMA2_8 = 25165824; // 0x1800000
    field public static final int TRANSFER_HLG = 33554432; // 0x2000000
    field public static final int TRANSFER_LINEAR = 4194304; // 0x400000
    field public static final int TRANSFER_SMPTE_170M = 12582912; // 0xc00000
    field public static final int TRANSFER_SRGB = 8388608; // 0x800000
    field public static final int TRANSFER_ST2084 = 29360128; // 0x1c00000
    field public static final int TRANSFER_UNSPECIFIED = 0; // 0x0
  }
  public class GeomagneticField {
@@ -20836,7 +20836,7 @@ package android.media {
  public abstract class Image implements java.lang.AutoCloseable {
    method public abstract void close();
    method public android.graphics.Rect getCropRect();
    method public long getDataSpace();
    method public int getDataSpace();
    method @NonNull public android.hardware.SyncFence getFence() throws java.io.IOException;
    method public abstract int getFormat();
    method @Nullable public android.hardware.HardwareBuffer getHardwareBuffer();
@@ -20845,7 +20845,7 @@ package android.media {
    method public abstract long getTimestamp();
    method public abstract int getWidth();
    method public void setCropRect(android.graphics.Rect);
    method public void setDataSpace(long);
    method public void setDataSpace(int);
    method public void setFence(@NonNull android.hardware.SyncFence) throws java.io.IOException;
    method public void setTimestamp(long);
  }
@@ -20861,7 +20861,7 @@ package android.media {
    method public android.media.Image acquireNextImage();
    method public void close();
    method public void discardFreeBuffers();
    method public long getDataSpace();
    method public int getDataSpace();
    method public int getHardwareBufferFormat();
    method public int getHeight();
    method public int getImageFormat();
@@ -20877,7 +20877,7 @@ package android.media {
  public static final class ImageReader.Builder {
    ctor public ImageReader.Builder(@IntRange(from=1) int, @IntRange(from=1) int);
    method @NonNull public android.media.ImageReader build();
    method @NonNull public android.media.ImageReader.Builder setDefaultDataSpace(long);
    method @NonNull public android.media.ImageReader.Builder setDefaultDataSpace(int);
    method @NonNull public android.media.ImageReader.Builder setDefaultHardwareBufferFormat(int);
    method @NonNull public android.media.ImageReader.Builder setImageFormat(int);
    method @NonNull public android.media.ImageReader.Builder setMaxImages(int);
@@ -20891,7 +20891,7 @@ package android.media {
  public class ImageWriter implements java.lang.AutoCloseable {
    method public void close();
    method public android.media.Image dequeueInputImage();
    method public long getDataSpace();
    method public int getDataSpace();
    method public int getFormat();
    method public int getHardwareBufferFormat();
    method public int getHeight();
@@ -20907,7 +20907,7 @@ package android.media {
  public static final class ImageWriter.Builder {
    ctor public ImageWriter.Builder(@NonNull android.view.Surface);
    method @NonNull public android.media.ImageWriter build();
    method @NonNull public android.media.ImageWriter.Builder setDataSpace(long);
    method @NonNull public android.media.ImageWriter.Builder setDataSpace(int);
    method @NonNull public android.media.ImageWriter.Builder setHardwareBufferFormat(int);
    method @NonNull public android.media.ImageWriter.Builder setImageFormat(int);
    method @NonNull public android.media.ImageWriter.Builder setMaxImages(@IntRange(from=1) int);
@@ -49166,6 +49166,7 @@ package android.view {
    method @NonNull public android.view.SurfaceControl.Transaction setBufferTransform(@NonNull android.view.SurfaceControl, int);
    method @NonNull public android.view.SurfaceControl.Transaction setCrop(@NonNull android.view.SurfaceControl, @Nullable android.graphics.Rect);
    method @NonNull public android.view.SurfaceControl.Transaction setDamageRegion(@NonNull android.view.SurfaceControl, @Nullable android.graphics.Region);
    method @NonNull public android.view.SurfaceControl.Transaction setDataSpace(@NonNull android.view.SurfaceControl, int);
    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int);
    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int, int);
    method @NonNull public android.view.SurfaceControl.Transaction setGeometry(@NonNull android.view.SurfaceControl, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, int);
+57 −57

File changed.

Preview size limit exceeded, changes collapsed.

+25 −3
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
import android.gui.DropInputMode;
import android.hardware.DataSpace;
import android.hardware.HardwareBuffer;
import android.hardware.display.DeviceProductInfo;
import android.hardware.display.DisplayedContentSample;
@@ -210,8 +211,8 @@ public final class SurfaceControl implements Parcelable {
            HardwareBuffer buffer);
    private static native void nativeSetBufferTransform(long transactionObj, long nativeObject,
            int transform);
    private static native void nativeSetColorSpace(long transactionObj, long nativeObject,
            int colorSpace);
    private static native void nativeSetDataSpace(long transactionObj, long nativeObject,
            @DataSpace.NamedDataSpace int dataSpace);
    private static native void nativeSetDamageRegion(long transactionObj, long nativeObject,
            Region region);

@@ -3719,10 +3720,31 @@ public final class SurfaceControl implements Parcelable {
         * SurfaceControls that were created as type {@link #FX_SURFACE_BLAST}
         *
         * @hide
         * @deprecated use {@link #setDataSpace(SurfaceControl, long)} instead
         */
        @Deprecated
        public Transaction setColorSpace(SurfaceControl sc, ColorSpace colorSpace) {
            checkPreconditions(sc);
            nativeSetColorSpace(mNativeObject, sc.mNativeObject, colorSpace.getId());
            if (colorSpace.getId() == ColorSpace.Named.DCI_P3.ordinal()) {
                setDataSpace(sc, DataSpace.DATASPACE_DCI_P3);
            } else {
                setDataSpace(sc, DataSpace.DATASPACE_SRGB);
            }
            return this;
        }

        /**
         * Set the dataspace for the SurfaceControl. This will control how the buffer
         * set with {@link #setBuffer(SurfaceControl, HardwareBuffer)} is displayed.
         *
         * @param sc The SurfaceControl to update
         * @param dataspace The dataspace to set it to
         * @return this
         */
        public @NonNull Transaction setDataSpace(@NonNull SurfaceControl sc,
                @DataSpace.NamedDataSpace int dataspace) {
            checkPreconditions(sc);
            nativeSetDataSpace(mNativeObject, sc.mNativeObject, dataspace);
            return this;
        }

+2 −2
Original line number Diff line number Diff line
@@ -346,7 +346,7 @@ static jlong SurfaceTexture_getTimestamp(JNIEnv* env, jobject thiz)
    return surfaceTexture->getTimestamp();
}

static jlong SurfaceTexture_getDataSpace(JNIEnv* env, jobject thiz) {
static jint SurfaceTexture_getDataSpace(JNIEnv* env, jobject thiz) {
    sp<SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    return surfaceTexture->getCurrentDataSpace();
}
@@ -375,7 +375,7 @@ static const JNINativeMethod gSurfaceTextureMethods[] = {
        {"nativeAttachToGLContext", "(I)I", (void*)SurfaceTexture_attachToGLContext},
        {"nativeGetTransformMatrix", "([F)V", (void*)SurfaceTexture_getTransformMatrix},
        {"nativeGetTimestamp", "()J", (void*)SurfaceTexture_getTimestamp},
        {"nativeGetDataSpace", "()J", (void*)SurfaceTexture_getDataSpace},
        {"nativeGetDataSpace", "()I", (void*)SurfaceTexture_getDataSpace},
        {"nativeRelease", "()V", (void*)SurfaceTexture_release},
        {"nativeIsReleased", "()Z", (void*)SurfaceTexture_isReleased},
};
+5 −14
Original line number Diff line number Diff line
@@ -263,15 +263,6 @@ constexpr jint fromDataspaceToNamedColorSpaceValue(const ui::Dataspace dataspace
    }
}

constexpr ui::Dataspace fromNamedColorSpaceValueToDataspace(const jint colorSpace) {
    switch (colorSpace) {
        case JNamedColorSpace::DISPLAY_P3:
            return ui::Dataspace::DISPLAY_P3;
        default:
            return ui::Dataspace::V0_SRGB;
    }
}

constexpr ui::Dataspace pickDataspaceFromColorMode(const ui::ColorMode colorMode) {
    switch (colorMode) {
        case ui::ColorMode::DISPLAY_P3:
@@ -645,11 +636,11 @@ static void nativeSetBufferTransform(JNIEnv* env, jclass clazz, jlong transactio
    transaction->setTransformToDisplayInverse(ctrl, transformToInverseDisplay);
}

static void nativeSetColorSpace(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject,
                                jint colorSpace) {
static void nativeSetDataSpace(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject,
                               jint dataSpace) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
    ui::Dataspace dataspace = fromNamedColorSpaceValueToDataspace(colorSpace);
    ui::Dataspace dataspace = static_cast<ui::Dataspace>(dataSpace);
    transaction->setDataspace(ctrl, dataspace);
}

@@ -2122,8 +2113,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
    {"nativeSetBuffer", "(JJLandroid/hardware/HardwareBuffer;)V",
            (void*)nativeSetBuffer },
    {"nativeSetBufferTransform", "(JJI)V", (void*) nativeSetBufferTransform},
    {"nativeSetColorSpace", "(JJI)V",
            (void*)nativeSetColorSpace },
    {"nativeSetDataSpace", "(JJI)V",
            (void*)nativeSetDataSpace },
    {"nativeSyncInputWindows", "(J)V",
            (void*)nativeSyncInputWindows },
    {"nativeGetDisplayBrightnessSupport", "(Landroid/os/IBinder;)Z",
Loading