binder interface between ArcBridge and C2VDAAdaptorProxy
Bug: 63828247
Test: C2VDAComponent_test
Change-Id: I21504abc15619924b7f0c1b015eed6abf66f7445
diff --git a/headers/media_plugin/media/arcvideobridge/IArcVideoBridge.h b/headers/media_plugin/media/arcvideobridge/IArcVideoBridge.h
new file mode 100644
index 0000000..b32c92e
--- /dev/null
+++ b/headers/media_plugin/media/arcvideobridge/IArcVideoBridge.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016 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.
+ */
+
+#ifndef ANDROID_IARC_VIDEO_BRIDGE_H
+#define ANDROID_IARC_VIDEO_BRIDGE_H
+
+#include <arc/IArcBridgeService.h>
+#include <binder/IInterface.h>
+#include <utils/Errors.h>
+
+namespace android {
+
+class IArcVideoBridge : public IInterface {
+public:
+ DECLARE_META_INTERFACE(ArcVideoBridge);
+
+ // Returns MojoBootstrapResult for creating mojo ipc channel of
+ // VideoAcceleratorFactory.
+ virtual ::arc::MojoBootstrapResult bootstrapVideoAcceleratorFactory() = 0;
+
+ // Get the version of the remote VideoHost on Chromium side.
+ virtual int32_t hostVersion() = 0;
+};
+
+class BnArcVideoBridge : public BnInterface<IArcVideoBridge> {
+public:
+ virtual status_t onTransact(
+ uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
+};
+
+}; // namespace android
+
+#endif // ANDROID_IARC_VIDEO_BRIDGE_H
diff --git a/services/media/arcvideobridge/Android.bp b/services/media/arcvideobridge/Android.bp
new file mode 100644
index 0000000..ed0f613
--- /dev/null
+++ b/services/media/arcvideobridge/Android.bp
@@ -0,0 +1,29 @@
+cc_library_shared {
+ name: "libarcvideobridge",
+ product_variables: {
+ arc: {
+ srcs: [
+ "IArcVideoBridge.cpp",
+ ],
+ // TODO: remove the suffix "_bp" after finishing migration to Android.bp.
+ shared_libs: [
+ "libarcbridge",
+ "libarcbridgeservice",
+ "libbinder",
+ "libchrome",
+ "liblog",
+ "libmojo_bp",
+ "libutils",
+ ],
+ cflags: [
+ "-Wall",
+ "-Werror",
+ "-Wunused",
+ "-Wunreachable-code",
+ ],
+ include_dirs: [
+ "frameworks/native/include/media/arcvideobridge",
+ ]
+ }
+ }
+}
diff --git a/services/media/arcvideobridge/IArcVideoBridge.cpp b/services/media/arcvideobridge/IArcVideoBridge.cpp
new file mode 100644
index 0000000..468b76b
--- /dev/null
+++ b/services/media/arcvideobridge/IArcVideoBridge.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016 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_TAG "IArcVideoBridge"
+//#define LOG_NDEBUG 0
+
+#include <stdint.h>
+#include <sys/types.h>
+
+#include "IArcVideoBridge.h"
+#include <binder/Parcel.h>
+#include <utils/Log.h>
+
+namespace android {
+
+enum {
+ BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY = IBinder::FIRST_CALL_TRANSACTION,
+ HOST_VERSION,
+};
+
+class BpArcVideoBridge : public BpInterface<IArcVideoBridge> {
+public:
+ BpArcVideoBridge(const sp<IBinder>& impl) : BpInterface<IArcVideoBridge>(impl) { }
+
+ virtual ::arc::MojoBootstrapResult bootstrapVideoAcceleratorFactory() {
+ Parcel data, reply;
+ ALOGV("bootstrapVideoAcceleratorFactory");
+ data.writeInterfaceToken(IArcVideoBridge::getInterfaceDescriptor());
+ status_t status = remote()->transact(
+ BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY, data, &reply, 0);
+ if (status != 0) {
+ ALOGE("transact failed: %d", status);
+ return arc::MojoBootstrapResult();
+ }
+ return arc::MojoBootstrapResult::createFromParcel(reply);
+ }
+
+ virtual int32_t hostVersion() {
+ Parcel data, reply;
+ ALOGV("hostVersion");
+ data.writeInterfaceToken(IArcVideoBridge::getInterfaceDescriptor());
+ status_t status = remote()->transact(HOST_VERSION, data, &reply, 0);
+ if (status != 0) {
+ ALOGE("transact failed: %d", status);
+ return false;
+ }
+ return reply.readInt32();
+ }
+};
+
+IMPLEMENT_META_INTERFACE(ArcVideoBridge, "android.os.IArcVideoBridge");
+
+status_t BnArcVideoBridge::onTransact(
+ uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) {
+ switch(code) {
+ case BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY: {
+ ALOGV("BOOTSTRAP_VIDEO_ACCELERATOR_FACTORY");
+ CHECK_INTERFACE(IArcVideoBridge, data, reply);
+ arc::MojoBootstrapResult result = bootstrapVideoAcceleratorFactory();
+ return result.writeToParcel(reply);
+ }
+ case HOST_VERSION: {
+ ALOGV("HOST_VERSION");
+ CHECK_INTERFACE(IArcVideoBridge, data, reply);
+ reply->writeInt32(hostVersion());
+ return OK;
+ }
+ default:
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+}
+
+} // namespace android