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

Commit a9499d70 authored by Wonsik Kim's avatar Wonsik Kim Committed by Android (Google) Code Review
Browse files

Merge "VideoPlaneView initial implementation"

parents 813d85b8 5f8aa414
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
@@ -669,10 +669,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