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

Commit 0d210d8b authored by Neti Ravi Kumar's avatar Neti Ravi Kumar Committed by Giulio Cervera
Browse files

Surfaceflinger: Modify setFormat() API to set 3D format.

setFormat() API is modified to accept 3D formats from applications.
This change is required for 3D game usecase so each layer can be
marked as 3D and can be sent to overlay for rendering.

Change-Id: I9266d9ab367c5eccb8fb182f3f517234415a9897
parent 82876a4d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -22833,6 +22833,7 @@ package android.view {
    method public android.graphics.Canvas lockCanvas(android.graphics.Rect) throws java.lang.IllegalArgumentException, android.view.Surface.OutOfResourcesException;
    method public void readFromParcel(android.os.Parcel);
    method public void release();
    method public void setStereoscopic3DFormat(int format);
    method public void unlockCanvas(android.graphics.Canvas);
    method public void unlockCanvasAndPost(android.graphics.Canvas);
    method public void writeToParcel(android.os.Parcel, int);
@@ -22866,6 +22867,10 @@ package android.view {
    field public static final deprecated int SURFACE_TYPE_HARDWARE = 1; // 0x1
    field public static final deprecated int SURFACE_TYPE_NORMAL = 0; // 0x0
    field public static final deprecated int SURFACE_TYPE_PUSH_BUFFERS = 3; // 0x3
    field public static final int STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE_HALF_L_R = 65536; // 0x10000
    field public static final int STEREOSCOPIC_3D_FORMAT_TOP_BOTTOM   = 131072; // 0x20000
    field public static final int STEREOSCOPIC_3D_FORMAT_INTERLEAVED  = 262144; // 0x40000
    field public static final int STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE_R_L = 524288; // 0x80000
  }
  public static class SurfaceHolder.BadSurfaceTypeException extends java.lang.RuntimeException {
+6 −0
Original line number Diff line number Diff line
@@ -76,6 +76,12 @@ public class Surface implements Parcelable {
        return lockCanvasNative(dirty);
    }

    public void setStereoscopic3DFormat(int format) {
        setStereoscopic3DFormatNative(format);
    }

    private native void setStereoscopic3DFormatNative(int format);

    /** unlock the surface and asks a page flip */
    public native   void unlockCanvasAndPost(Canvas canvas);

+17 −0
Original line number Diff line number Diff line
@@ -45,6 +45,23 @@ public interface SurfaceHolder {
    @Deprecated
    public static final int SURFACE_TYPE_PUSH_BUFFERS = 3;

    /**
     * Stereoscopic Side-by-Side Half 3D format
     */
    public static final int STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE_HALF_L_R = 0x10000;
    /**
     * Stereoscopic Top Bottom 3D format
     */
    public static final int STEREOSCOPIC_3D_FORMAT_TOP_BOTTOM   = 0x20000;
    /**
     * Stereoscopic Interleaved 3D format
     */
    public static final int STEREOSCOPIC_3D_FORMAT_INTERLEAVED  = 0x40000;
    /**
     * Stereoscopic Side-by-Side Full 3D format
     */
    public static final int STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE_R_L = 0x80000;

    /**
     * Exception that is thrown from {@link #lockCanvas} when called on a Surface
     * whose type is SURFACE_TYPE_PUSH_BUFFERS.
+10 −1
Original line number Diff line number Diff line
@@ -692,7 +692,16 @@ public class SurfaceView extends View {
        }

        public void setFormat(int format) {

            switch (format) {
                case STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE_HALF_L_R:
                case STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE_R_L:
                case STEREOSCOPIC_3D_FORMAT_TOP_BOTTOM:
                case STEREOSCOPIC_3D_FORMAT_INTERLEAVED:
                    mSurface.setStereoscopic3DFormat(format);
                    return;
                default:
                    break;
            }
            // for backward compatibility reason, OPAQUE always
            // means 565 for SurfaceView
            if (format == PixelFormat.OPAQUE)
+14 −0
Original line number Diff line number Diff line
@@ -610,6 +610,20 @@ static void Surface_setSize(
    }
}

#ifdef QCOM_HARDWARE
static void Surface_setStereoscopic3DFormat(JNIEnv* env, jobject clazz, jint f)
{
    const sp<Surface>& surface(getSurface(env, clazz));
    if (!Surface::isValid(surface))
        return;

    status_t err = surface->setStereoscopic3DFormat(f);
    if (err<0 && err!=NO_INIT) {
        doThrowIAE(env);
    }
}
#endif

static void Surface_hide(
        JNIEnv* env, jobject clazz)
{
Loading