IDrmClient: remove IBinder inheritence
Bug: 134787536
Test: GtsMediaTestCases
Change-Id: I2c9ea8c1bd35165573a169015c78d052f080606c
diff --git a/drm/libmediadrm/Android.bp b/drm/libmediadrm/Android.bp
index 67db861..26e147b 100644
--- a/drm/libmediadrm/Android.bp
+++ b/drm/libmediadrm/Android.bp
@@ -17,7 +17,6 @@
srcs: [
"DrmPluginPath.cpp",
"DrmSessionManager.cpp",
- "IDrmClient.cpp",
"IMediaDrmService.cpp",
"SharedLibrary.cpp",
"DrmHal.cpp",
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp
index 40077f9..53a7446 100644
--- a/drm/libmediadrm/DrmHal.cpp
+++ b/drm/libmediadrm/DrmHal.cpp
@@ -479,12 +479,6 @@
status_t DrmHal::setListener(const sp<IDrmClient>& listener)
{
Mutex::Autolock lock(mEventLock);
- if (mListener != NULL){
- IInterface::asBinder(mListener)->unlinkToDeath(this);
- }
- if (listener != NULL) {
- IInterface::asBinder(listener)->linkToDeath(this);
- }
mListener = listener;
return NO_ERROR;
}
@@ -1567,11 +1561,6 @@
return hResult.isOk() ? err : DEAD_OBJECT;
}
-void DrmHal::binderDied(const wp<IBinder> &the_late_who __unused)
-{
- cleanup();
-}
-
void DrmHal::reportFrameworkMetrics() const
{
std::unique_ptr<MediaAnalyticsItem> item(MediaAnalyticsItem::create("mediadrm"));
diff --git a/drm/libmediadrm/IDrmClient.cpp b/drm/libmediadrm/IDrmClient.cpp
deleted file mode 100644
index 2e05093..0000000
--- a/drm/libmediadrm/IDrmClient.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-**
-** Copyright 2013, 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.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "IDrmClient"
-
-#include <utils/Errors.h>
-#include <utils/Log.h>
-#include <utils/RefBase.h>
-#include <binder/IInterface.h>
-#include <binder/Parcel.h>
-#include <hidl/HidlSupport.h>
-
-#include <media/IMediaPlayerClient.h>
-#include <mediadrm/DrmUtils.h>
-#include <mediadrm/IDrmClient.h>
-
-#include <cstddef>
-#include <cstdint>
-#include <vector>
-
-namespace android {
-
-enum {
- SEND_EVENT = IBinder::FIRST_CALL_TRANSACTION,
- SEND_EXPIRATION_UPDATE,
- SEND_KEYS_CHANGE,
- SEND_SESSION_LOST_STATE,
-};
-
-namespace {
-
-hardware::hidl_vec<uint8_t> ReadByteArray(const Parcel &obj, status_t *err)
-{
- int32_t len = obj.readInt32();
- hardware::hidl_vec<uint8_t> ret;
- if (len < 0) {
- ALOGE("Invalid array len");
- *err = BAD_VALUE;
- return ret;
- }
- ret.resize(static_cast<size_t>(len));
- *err = obj.read(ret.data(), ret.size());
- return ret;
-}
-
-}
-
-class BpDrmClient: public BpInterface<IDrmClient>
-{
- template <typename F>
- void notify(uint32_t code, F fillParcel) {
- Parcel obj, reply;
- obj.writeInterfaceToken(IDrmClient::getInterfaceDescriptor());
- fillParcel(obj);
- remote()->transact(code, obj, &reply, IBinder::FLAG_ONEWAY);
- }
-
-public:
- explicit BpDrmClient(const sp<IBinder>& impl)
- : BpInterface<IDrmClient>(impl)
- {
- }
-
- virtual void sendEvent(
- DrmPlugin::EventType eventType,
- const hardware::hidl_vec<uint8_t> &sessionId,
- const hardware::hidl_vec<uint8_t> &data)
- {
- auto fillParcel = [&] (Parcel &p) {
- DrmUtils::WriteEventToParcel(p, eventType, sessionId, data);
- };
- notify(SEND_EVENT, fillParcel);
- }
-
- virtual void sendExpirationUpdate(
- const hardware::hidl_vec<uint8_t> &sessionId,
- int64_t expiryTimeInMS)
- {
- auto fillParcel = [&] (Parcel &p) {
- DrmUtils::WriteExpirationUpdateToParcel(p, sessionId, expiryTimeInMS);
- };
- notify(SEND_EXPIRATION_UPDATE, fillParcel);
- }
-
- virtual void sendKeysChange(
- const hardware::hidl_vec<uint8_t> &sessionId,
- const std::vector<DrmKeyStatus> &keyStatusList,
- bool hasNewUsableKey)
- {
- auto fillParcel = [&] (Parcel &p) {
- DrmUtils::WriteKeysChange(p, sessionId, keyStatusList, hasNewUsableKey);
- };
- notify(SEND_KEYS_CHANGE, fillParcel);
- }
-
- virtual void sendSessionLostState(
- const hardware::hidl_vec<uint8_t> &sessionId)
- {
- auto fillParcel = [&] (Parcel &p) {
- DrmUtils::WriteByteArray(p, sessionId);
- };
- notify(SEND_SESSION_LOST_STATE, fillParcel);
- }
-};
-
-IMPLEMENT_META_INTERFACE(DrmClient, "android.media.IDrmClient");
-
-// ----------------------------------------------------------------------
-
-status_t BnDrmClient::onTransact(
- uint32_t code, const Parcel& obj, Parcel* reply, uint32_t flags)
-{
- CHECK_INTERFACE(IDrmClient, obj, reply);
- status_t err = NO_ERROR;
- hardware::hidl_vec<uint8_t> sessionId(ReadByteArray(obj, &err));
- if (err != NO_ERROR) {
- ALOGE("Failed to read session id, error=%d", err);
- return err;
- }
-
- switch (code) {
- case SEND_EVENT: {
- hardware::hidl_vec<uint8_t> data(ReadByteArray(obj, &err));
- int eventType = obj.readInt32();
- if (err == NO_ERROR) {
- sendEvent(static_cast<DrmPlugin::EventType>(eventType), sessionId, data);
- }
- return err;
- } break;
- case SEND_EXPIRATION_UPDATE: {
- int64_t expiryTimeInMS = obj.readInt64();
- sendExpirationUpdate(sessionId, expiryTimeInMS);
- return NO_ERROR;
- } break;
- case SEND_KEYS_CHANGE: {
- // ...
- int32_t n = obj.readInt32();
- if (n < 0) {
- return BAD_VALUE;
- }
- std::vector<DrmKeyStatus> keyStatusList;
- for (int32_t i = 0; i < n; ++i) {
- hardware::hidl_vec<uint8_t> keyId(ReadByteArray(obj, &err));
- if (err != NO_ERROR) {
- return err;
- }
- int32_t type = obj.readInt32();
- if (type < 0) {
- return BAD_VALUE;
- }
- keyStatusList.push_back({static_cast<uint32_t>(type), keyId});
- }
- int32_t hasNewUsableKey = obj.readInt32();
- sendKeysChange(sessionId, keyStatusList, hasNewUsableKey);
- return NO_ERROR;
- } break;
- case SEND_SESSION_LOST_STATE: {
- sendSessionLostState(sessionId);
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, obj, reply, flags);
- }
-}
-
-} // namespace android
diff --git a/drm/libmediadrm/include/mediadrm/DrmHal.h b/drm/libmediadrm/include/mediadrm/DrmHal.h
index df1a79f..97dd920 100644
--- a/drm/libmediadrm/include/mediadrm/DrmHal.h
+++ b/drm/libmediadrm/include/mediadrm/DrmHal.h
@@ -58,7 +58,6 @@
}
struct DrmHal : public IDrm,
- public IBinder::DeathRecipient,
public IDrmPluginListener_V1_2 {
struct DrmSessionClient;
@@ -192,8 +191,6 @@
Return<void> sendSessionLostState(const hidl_vec<uint8_t>& sessionId);
- virtual void binderDied(const wp<IBinder> &the_late_who);
-
private:
static Mutex mLock;
diff --git a/drm/libmediadrm/include/mediadrm/IDrmClient.h b/drm/libmediadrm/include/mediadrm/IDrmClient.h
index f8f2b25..fe25ae1 100644
--- a/drm/libmediadrm/include/mediadrm/IDrmClient.h
+++ b/drm/libmediadrm/include/mediadrm/IDrmClient.h
@@ -18,12 +18,8 @@
#define ANDROID_IDRMCLIENT_H
#include <utils/RefBase.h>
-#include <binder/IInterface.h>
-#include <binder/Parcel.h>
-#include <media/drm/DrmAPI.h>
-
-#include <android/hardware/drm/1.2/types.h>
#include <hidl/HidlSupport.h>
+#include <media/drm/DrmAPI.h>
#include <cstdint>
#include <vector>
@@ -35,10 +31,10 @@
const hardware::hidl_vec<uint8_t> keyId;
};
-class IDrmClient: public IInterface
+class IDrmClient: public virtual RefBase
{
public:
- DECLARE_META_INTERFACE(DrmClient);
+ ~IDrmClient() {}
virtual void sendEvent(
DrmPlugin::EventType eventType,
@@ -57,17 +53,11 @@
virtual void sendSessionLostState(
const hardware::hidl_vec<uint8_t> &sessionId) = 0;
-};
+protected:
+ IDrmClient() {}
-// ----------------------------------------------------------------------------
-
-class BnDrmClient: public BnInterface<IDrmClient>
-{
-public:
- virtual status_t onTransact(uint32_t code,
- const Parcel& data,
- Parcel* reply,
- uint32_t flags = 0);
+private:
+ DISALLOW_EVIL_CONSTRUCTORS(IDrmClient);
};
}; // namespace android