diff --git a/drm/common/aidl/Android.bp b/drm/common/aidl/Android.bp index 1e4b8e0cc4..c5cb441085 100644 --- a/drm/common/aidl/Android.bp +++ b/drm/common/aidl/Android.bp @@ -9,6 +9,7 @@ package { aidl_interface { name: "android.hardware.drm.common", + host_supported: true, vendor_available: true, srcs: ["android/hardware/drm/*.aidl"], stability: "vintf", @@ -22,6 +23,9 @@ aidl_interface { ndk: { min_sdk_version: "34", }, + rust: { + enabled: true, + }, }, double_loadable: true, versions_with_info: [ diff --git a/graphics/Android.bp b/graphics/Android.bp index 352f3bdf3d..c33f7ff2ff 100644 --- a/graphics/Android.bp +++ b/graphics/Android.bp @@ -53,6 +53,7 @@ cc_defaults { cc_defaults { name: "android.hardware.graphics.composer3-ndk_static", static_libs: [ + "android.hardware.drm.common-V1-ndk", "android.hardware.graphics.composer3-V4-ndk", ], } @@ -60,6 +61,7 @@ cc_defaults { cc_defaults { name: "android.hardware.graphics.composer3-ndk_shared", shared_libs: [ + "android.hardware.drm.common-V1-ndk", "android.hardware.graphics.composer3-V4-ndk", ], } diff --git a/graphics/composer/aidl/Android.bp b/graphics/composer/aidl/Android.bp index 3b60f68da3..1728f78cbb 100644 --- a/graphics/composer/aidl/Android.bp +++ b/graphics/composer/aidl/Android.bp @@ -37,6 +37,7 @@ aidl_interface { imports: [ "android.hardware.graphics.common-V5", "android.hardware.common-V2", + "android.hardware.drm.common-V1", ], backend: { cpp: { diff --git a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerCallback.aidl b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerCallback.aidl index e64bd5273e..cd27360655 100644 --- a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerCallback.aidl +++ b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerCallback.aidl @@ -45,4 +45,5 @@ interface IComposerCallback { oneway void onVsyncIdle(long display); oneway void onRefreshRateChangedDebug(in android.hardware.graphics.composer3.RefreshRateChangedDebugData data); void onHotplugEvent(long display, android.hardware.graphics.common.DisplayHotplugEvent event); + oneway void onHdcpLevelsChanged(long display, in android.hardware.drm.HdcpLevels levels); } diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerCallback.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerCallback.aidl index 96eccd79bd..a1d61fddd7 100644 --- a/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerCallback.aidl +++ b/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerCallback.aidl @@ -16,6 +16,7 @@ package android.hardware.graphics.composer3; +import android.hardware.drm.HdcpLevels; import android.hardware.graphics.common.DisplayHotplugEvent; import android.hardware.graphics.composer3.RefreshRateChangedDebugData; import android.hardware.graphics.composer3.VsyncPeriodChangeTimeline; @@ -139,4 +140,12 @@ interface IComposerCallback { * @param event is the type of event that occurred. */ void onHotplugEvent(long display, DisplayHotplugEvent event); + + /** + * Notify the client the HDCP levels of the display changed. + * + * @param display is the display whose HDCP levels have changed. + * @param levels is the new HDCP levels. + */ + oneway void onHdcpLevelsChanged(long display, in HdcpLevels levels); } diff --git a/graphics/composer/aidl/vts/Android.bp b/graphics/composer/aidl/vts/Android.bp index a2ab3d6a28..894ca52452 100644 --- a/graphics/composer/aidl/vts/Android.bp +++ b/graphics/composer/aidl/vts/Android.bp @@ -66,6 +66,7 @@ cc_test { "android.hardware.graphics.common@1.2", "android.hardware.common-V2-ndk", "android.hardware.common.fmq-V1-ndk", + "android.hardware.drm.common-V1-ndk", "libaidlcommonsupport", "libarect", "libbase", diff --git a/graphics/composer/aidl/vts/GraphicsComposerCallback.cpp b/graphics/composer/aidl/vts/GraphicsComposerCallback.cpp index 544f69297a..1f7972cb72 100644 --- a/graphics/composer/aidl/vts/GraphicsComposerCallback.cpp +++ b/graphics/composer/aidl/vts/GraphicsComposerCallback.cpp @@ -208,4 +208,15 @@ int32_t GraphicsComposerCallback::getInvalidRefreshRateDebugEnabledCallbackCount } } +::ndk::ScopedAStatus GraphicsComposerCallback::onHdcpLevelsChanged( + int64_t in_display, const ::aidl::android::hardware::drm::HdcpLevels&) { + std::scoped_lock lock(mMutex); + + const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display); + if (it != mDisplays.end()) { + mHdcpLevelChangedCount++; + } + return ::ndk::ScopedAStatus::ok(); +} + } // namespace aidl::android::hardware::graphics::composer3::vts diff --git a/graphics/composer/aidl/vts/GraphicsComposerCallback.h b/graphics/composer/aidl/vts/GraphicsComposerCallback.h index 7a8d4a35b8..97f8e2bd0e 100644 --- a/graphics/composer/aidl/vts/GraphicsComposerCallback.h +++ b/graphics/composer/aidl/vts/GraphicsComposerCallback.h @@ -65,6 +65,8 @@ class GraphicsComposerCallback : public BnComposerCallback { const RefreshRateChangedDebugData&) override; virtual ::ndk::ScopedAStatus onHotplugEvent(int64_t in_display, common::DisplayHotplugEvent) override; + virtual ::ndk::ScopedAStatus onHdcpLevelsChanged( + int64_t in_display, const ::aidl::android::hardware::drm::HdcpLevels&) override; mutable std::mutex mMutex; // the set of all currently connected displays @@ -88,6 +90,7 @@ class GraphicsComposerCallback : public BnComposerCallback { int32_t mInvalidVsyncPeriodChangeCount GUARDED_BY(mMutex) = 0; int32_t mInvalidSeamlessPossibleCount GUARDED_BY(mMutex) = 0; int32_t mInvalidRefreshRateDebugEnabledCallbackCount GUARDED_BY(mMutex) = 0; + int32_t mHdcpLevelChangedCount GUARDED_BY(mMutex) = 0; }; } // namespace aidl::android::hardware::graphics::composer3::vts