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

Commit 5f8aa414 authored by Wonsik Kim's avatar Wonsik Kim
Browse files

VideoPlaneView initial implementation

Note that eventually VideoPlaneView should not inherit from SurfaceView.

Remove a few trailing spaces too.

Change-Id: Ia0a461169d560435a827861be2cc15f1e3ee68fa
parent cc3f3385
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -166,6 +166,13 @@ public class SurfaceControl {
     */
    public static final int FX_SURFACE_DIM = 0x00020000;

    /**
     * Surface creation flag: Creates a video plane Surface.
     * This surface is backed by a hardware video plane. It is an error to lock
     * a video plane surface, since it doesn't have a backing store.
     */
    public static final int FX_SURFACE_VIDEO_PLANE = 0x00040000;

    /**
     * Mask used for FX values above.
     *
+4 −1
Original line number Diff line number Diff line
@@ -421,7 +421,10 @@ public class SurfaceView extends View {
        mWindowType = type;
    }

    private void updateWindow(boolean force, boolean redrawNeeded) {
    /**
     * @hide
     */
    protected void updateWindow(boolean force, boolean redrawNeeded) {
        if (!mHaveFrame) {
            return;
        }
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.view;

import android.content.Context;
import android.util.AttributeSet;

/**
 * Provides a dedicated surface embedded inside of a view hierarchy much like a
 * {@link SurfaceView}, but the surface is actually backed by a hardware video
 * plane.
 *
 * TODO: Eventually this should be separate from SurfaceView.
 *
 * @hide
 */
public class VideoPlaneView extends SurfaceView {
    public VideoPlaneView(Context context) {
        super(context);
    }

    public VideoPlaneView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public VideoPlaneView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public VideoPlaneView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void updateWindow(boolean force, boolean redrawNeeded) {
        mLayout.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_VIDEO_PLANE;
        super.updateWindow(force, redrawNeeded);
    }
}
+114 −109
Original line number Diff line number Diff line
@@ -1086,6 +1086,11 @@ public interface WindowManager extends ViewManager {
         * {@hide} */
        public static final int PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR = 0x00000200;

        /** Window flag: the window is backed by a video plane, instead of a
         * regular surface.
         * {@hide} */
        public static final int PRIVATE_FLAG_VIDEO_PLANE = 0x00000400;

        /**
         * Control flags that are private to the platform.
         * @hide
+5 −0
Original line number Diff line number Diff line
@@ -670,10 +670,15 @@ class WindowStateAnimator {

            int flags = SurfaceControl.HIDDEN;
            final WindowManager.LayoutParams attrs = mWin.mAttrs;
            final boolean isVideoPlane =
                    (attrs.privateFlags & WindowManager.LayoutParams.PRIVATE_FLAG_VIDEO_PLANE) != 0;

            if ((attrs.flags&WindowManager.LayoutParams.FLAG_SECURE) != 0) {
                flags |= SurfaceControl.SECURE;
            }
            if (isVideoPlane) {
                flags |= SurfaceControl.FX_SURFACE_VIDEO_PLANE;
            }
            if (DEBUG_VISIBILITY) Slog.v(
                TAG, "Creating surface in session "
                + mSession.mSurfaceSession + " window " + this