diff options
author | Jeff Brown <jeffbrown@google.com> | 2012-10-02 16:39:07 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-02 16:39:08 -0700 |
commit | bcbe9cf475835102ae2490dc9f067a3ac78a9551 (patch) | |
tree | fd8e1b5efcce5a8a5b64edab5281690dd67e73a3 /services | |
parent | 9c614bfe17e4e335d13ff5885a00fe8c3085fea1 (diff) | |
parent | 77aebfdbae489c3712ae3f9bca29d01fb1f09dc2 (diff) | |
download | frameworks_base-bcbe9cf475835102ae2490dc9f067a3ac78a9551.zip frameworks_base-bcbe9cf475835102ae2490dc9f067a3ac78a9551.tar.gz frameworks_base-bcbe9cf475835102ae2490dc9f067a3ac78a9551.tar.bz2 |
Merge "Add new Display API for secure video capabilities." into jb-mr1-dev
Diffstat (limited to 'services')
6 files changed, 34 insertions, 13 deletions
diff --git a/services/java/com/android/server/display/DisplayDeviceInfo.java b/services/java/com/android/server/display/DisplayDeviceInfo.java index f0cd0f5..b4dab86 100644 --- a/services/java/com/android/server/display/DisplayDeviceInfo.java +++ b/services/java/com/android/server/display/DisplayDeviceInfo.java @@ -38,9 +38,15 @@ final class DisplayDeviceInfo { public static final int FLAG_SUPPORTS_ROTATION = 1 << 1; /** - * Flag: Indicates that this display device can show secure surfaces. + * Flag: Indicates that this display device has secure video output, such as HDCP. */ - public static final int FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT = 1 << 2; + public static final int FLAG_SECURE = 1 << 2; + + /** + * Flag: Indicates that this display device supports compositing + * from gralloc protected buffers. + */ + public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1 << 3; /** * Touch attachment: Display does not receive touch. @@ -182,8 +188,11 @@ final class DisplayDeviceInfo { if ((flags & FLAG_SUPPORTS_ROTATION) != 0) { msg.append(", FLAG_SUPPORTS_ROTATION"); } - if ((flags & FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) { - msg.append(", FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT"); + if ((flags & FLAG_SECURE) != 0) { + msg.append(", FLAG_SECURE"); + } + if ((flags & FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) { + msg.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS"); } return msg.toString(); } diff --git a/services/java/com/android/server/display/HeadlessDisplayAdapter.java b/services/java/com/android/server/display/HeadlessDisplayAdapter.java index f3bec1d..7ec537f 100644 --- a/services/java/com/android/server/display/HeadlessDisplayAdapter.java +++ b/services/java/com/android/server/display/HeadlessDisplayAdapter.java @@ -60,7 +60,8 @@ final class HeadlessDisplayAdapter extends DisplayAdapter { mInfo.xDpi = 160; mInfo.yDpi = 160; mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY - | DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT; + | DisplayDeviceInfo.FLAG_SECURE + | DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS; mInfo.touch = DisplayDeviceInfo.TOUCH_NONE; } return mInfo; diff --git a/services/java/com/android/server/display/LocalDisplayAdapter.java b/services/java/com/android/server/display/LocalDisplayAdapter.java index 9c51463..679a67e 100644 --- a/services/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/java/com/android/server/display/LocalDisplayAdapter.java @@ -124,11 +124,16 @@ final class LocalDisplayAdapter extends DisplayAdapter { mInfo.width = mPhys.width; mInfo.height = mPhys.height; mInfo.refreshRate = mPhys.refreshRate; + + // Assume that all built-in displays have secure output (eg. HDCP) and + // support compositing from gralloc protected buffers. + mInfo.flags = DisplayDeviceInfo.FLAG_SECURE + | DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS; + if (mBuiltInDisplayId == Surface.BUILT_IN_DISPLAY_ID_MAIN) { mInfo.name = getContext().getResources().getString( com.android.internal.R.string.display_manager_built_in_display_name); - mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY - | DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT + mInfo.flags |= DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY | DisplayDeviceInfo.FLAG_SUPPORTS_ROTATION; mInfo.densityDpi = (int)(mPhys.density * 160 + 0.5f); mInfo.xDpi = mPhys.xDpi; @@ -137,7 +142,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { } else { mInfo.name = getContext().getResources().getString( com.android.internal.R.string.display_manager_hdmi_display_name); - mInfo.flags = DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT; mInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL; mInfo.setAssumedDensityForExternalDisplay(mPhys.width, mPhys.height); } diff --git a/services/java/com/android/server/display/LogicalDisplay.java b/services/java/com/android/server/display/LogicalDisplay.java index 3607de1..f4cb84d 100644 --- a/services/java/com/android/server/display/LogicalDisplay.java +++ b/services/java/com/android/server/display/LogicalDisplay.java @@ -179,8 +179,8 @@ final class LogicalDisplay { if (!Objects.equal(mPrimaryDisplayDeviceInfo, deviceInfo)) { mBaseDisplayInfo.layerStack = mLayerStack; mBaseDisplayInfo.flags = 0; - if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) { - mBaseDisplayInfo.flags |= Display.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT; + if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) { + mBaseDisplayInfo.flags |= Display.FLAG_SUPPORTS_PROTECTED_BUFFERS; } mBaseDisplayInfo.name = deviceInfo.name; mBaseDisplayInfo.appWidth = deviceInfo.width; diff --git a/services/java/com/android/server/display/OverlayDisplayAdapter.java b/services/java/com/android/server/display/OverlayDisplayAdapter.java index 4eea77f..dfacf2a 100644 --- a/services/java/com/android/server/display/OverlayDisplayAdapter.java +++ b/services/java/com/android/server/display/OverlayDisplayAdapter.java @@ -238,7 +238,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { mInfo.densityDpi = mDensityDpi; mInfo.xDpi = mDensityDpi; mInfo.yDpi = mDensityDpi; - mInfo.flags = DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT; + mInfo.flags = 0; mInfo.touch = DisplayDeviceInfo.TOUCH_NONE; } return mInfo; diff --git a/services/java/com/android/server/display/WifiDisplayAdapter.java b/services/java/com/android/server/display/WifiDisplayAdapter.java index 4a89be7..b2beb5e 100644 --- a/services/java/com/android/server/display/WifiDisplayAdapter.java +++ b/services/java/com/android/server/display/WifiDisplayAdapter.java @@ -50,7 +50,8 @@ import java.util.Arrays; final class WifiDisplayAdapter extends DisplayAdapter { private static final String TAG = "WifiDisplayAdapter"; - private PersistentDataStore mPersistentDataStore; + private final PersistentDataStore mPersistentDataStore; + private final boolean mSupportsProtectedBuffers; private WifiDisplayController mDisplayController; private WifiDisplayDevice mDisplayDevice; @@ -70,6 +71,8 @@ final class WifiDisplayAdapter extends DisplayAdapter { PersistentDataStore persistentDataStore) { super(syncRoot, context, handler, listener, TAG); mPersistentDataStore = persistentDataStore; + mSupportsProtectedBuffers = context.getResources().getBoolean( + com.android.internal.R.bool.config_wifiDisplaySupportsProtectedBuffers); } @Override @@ -84,6 +87,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { pw.println("mAvailableDisplays=" + Arrays.toString(mAvailableDisplays)); pw.println("mRememberedDisplays=" + Arrays.toString(mRememberedDisplays)); pw.println("mPendingStatusChangeBroadcast=" + mPendingStatusChangeBroadcast); + pw.println("mSupportsProtectedBuffers=" + mSupportsProtectedBuffers); // Try to dump the controller state. if (mDisplayController == null) { @@ -217,7 +221,10 @@ final class WifiDisplayAdapter extends DisplayAdapter { int deviceFlags = 0; if ((flags & RemoteDisplay.DISPLAY_FLAG_SECURE) != 0) { - deviceFlags |= DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT; + deviceFlags |= DisplayDeviceInfo.FLAG_SECURE; + } + if (mSupportsProtectedBuffers) { + deviceFlags |= DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS; } float refreshRate = 60.0f; // TODO: get this for real |