Revert "Revert "Remove direct libgui reference from omx server side""
This reverts commit b4979c59d93a6ca2be7e65489fc39896bfdc2c96.
Reason for revert: reland with fixes:
1) make OMXHarness use OMXClient, not directly IOMX wrappers.
2) fix ref of consumer listener interface in GraphicBufferSource.
bug: 129272021
Test: camera recording, aosp_x86 build
Change-Id: Idaaaf412c65cbe89c95a2cb54f3833ff1fc4c304
diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp
index a529628..1d33590 100644
--- a/media/libmedia/Android.bp
+++ b/media/libmedia/Android.bp
@@ -65,7 +65,6 @@
"MediaCodecInfo.cpp",
"OMXBuffer.cpp",
"omx/1.0/WGraphicBufferSource.cpp",
- "omx/1.0/WOmx.cpp",
"omx/1.0/WOmxBufferSource.cpp",
"omx/1.0/WOmxNode.cpp",
"omx/1.0/WOmxObserver.cpp",
@@ -75,13 +74,16 @@
local_include_dirs: ["aidl"],
export_aidl_headers: true,
},
+
+ local_include_dirs: [
+ "include",
+ ],
shared_libs: [
"android.hidl.token@1.0-utils",
"android.hardware.media.omx@1.0",
"libbinder",
"libcutils",
- "libgui",
"libhidlbase",
"libhidltransport",
"liblog",
@@ -93,21 +95,84 @@
export_shared_lib_headers: [
"android.hidl.token@1.0-utils",
"android.hardware.media.omx@1.0",
- "libgui",
"libstagefright_foundation",
"libui",
],
header_libs: [
- "libmedia_headers",
+ "libstagefright_headers",
+ "media_plugin_headers",
],
export_header_lib_headers: [
- "libmedia_headers",
+ "libstagefright_headers",
+ "media_plugin_headers",
],
export_include_dirs: [
"aidl",
+ "include",
+ ],
+
+ cflags: [
+ "-Werror",
+ "-Wno-error=deprecated-declarations",
+ "-Wall",
+ ],
+
+ sanitize: {
+ misc_undefined: [
+ "unsigned-integer-overflow",
+ "signed-integer-overflow",
+ ],
+ cfi: true,
+ },
+}
+
+
+cc_library_shared {
+ name: "libmedia_omx_client",
+
+ srcs: [
+ "omx/1.0/WOmx.cpp",
+ ],
+
+ local_include_dirs: [
+ "include",
+ ],
+
+ shared_libs: [
+ "libbinder",
+ "libcutils",
+ "libgui",
+ "libhidlbase",
+ "libhidltransport",
+ "liblog",
+ "libmedia_omx",
+ "libstagefright_foundation",
+ "libui",
+ "libutils",
+ ],
+
+ export_shared_lib_headers: [
+ "libgui",
+ "libmedia_omx",
+ "libstagefright_foundation",
+ "libui",
+ ],
+
+ header_libs: [
+ "libstagefright_headers",
+ "media_plugin_headers",
+ ],
+
+ export_header_lib_headers: [
+ "libstagefright_headers",
+ "media_plugin_headers",
+ ],
+
+ export_include_dirs: [
+ "include",
],
cflags: [
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index 747b88f..bc0c2cd 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -27,7 +27,6 @@
#include <media/openmax/OMX_IndexExt.h>
#include <media/OMXBuffer.h>
#include <utils/NativeHandle.h>
-#include <gui/IGraphicBufferProducer.h>
#include <media/omx/1.0/WOmxNode.h>
#include <android/IGraphicBufferSource.h>
@@ -62,79 +61,6 @@
SET_QUIRKS,
};
-class BpOMX : public BpInterface<IOMX> {
-public:
- explicit BpOMX(const sp<IBinder> &impl)
- : BpInterface<IOMX>(impl) {
- }
-
- virtual status_t listNodes(List<ComponentInfo> *list) {
- list->clear();
-
- Parcel data, reply;
- data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
- remote()->transact(LIST_NODES, data, &reply);
-
- int32_t n = reply.readInt32();
- for (int32_t i = 0; i < n; ++i) {
- list->push_back(ComponentInfo());
- ComponentInfo &info = *--list->end();
-
- info.mName = reply.readString8();
- int32_t numRoles = reply.readInt32();
- for (int32_t j = 0; j < numRoles; ++j) {
- info.mRoles.push_back(reply.readString8());
- }
- }
-
- return OK;
- }
-
- virtual status_t allocateNode(
- const char *name, const sp<IOMXObserver> &observer,
- sp<IOMXNode> *omxNode) {
- Parcel data, reply;
- data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
- data.writeCString(name);
- data.writeStrongBinder(IInterface::asBinder(observer));
- remote()->transact(ALLOCATE_NODE, data, &reply);
-
- status_t err = reply.readInt32();
- if (err == OK) {
- *omxNode = IOMXNode::asInterface(reply.readStrongBinder());
- } else {
- omxNode->clear();
- }
-
- return err;
- }
-
- virtual status_t createInputSurface(
- sp<IGraphicBufferProducer> *bufferProducer,
- sp<IGraphicBufferSource> *bufferSource) {
- Parcel data, reply;
- status_t err;
- data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
- err = remote()->transact(CREATE_INPUT_SURFACE, data, &reply);
- if (err != OK) {
- ALOGW("binder transaction failed: %d", err);
- return err;
- }
-
- err = reply.readInt32();
- if (err != OK) {
- return err;
- }
-
- *bufferProducer = IGraphicBufferProducer::asInterface(
- reply.readStrongBinder());
- *bufferSource = IGraphicBufferSource::asInterface(
- reply.readStrongBinder());
-
- return err;
- }
-};
-
class BpOMXNode : public BpInterface<IOMXNode> {
public:
explicit BpOMXNode(const sp<IBinder> &impl)
@@ -551,7 +477,6 @@
}
};
-IMPLEMENT_META_INTERFACE(OMX, "android.hardware.IOMX");
IMPLEMENT_HYBRID_META_INTERFACE(OMXNode, "android.hardware.IOMXNode");
////////////////////////////////////////////////////////////////////////////////
@@ -562,82 +487,6 @@
return PERMISSION_DENIED; \
} } while (0)
-status_t BnOMX::onTransact(
- uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) {
- switch (code) {
- case LIST_NODES:
- {
- CHECK_OMX_INTERFACE(IOMX, data, reply);
-
- List<ComponentInfo> list;
- listNodes(&list);
-
- reply->writeInt32(list.size());
- for (List<ComponentInfo>::iterator it = list.begin();
- it != list.end(); ++it) {
- ComponentInfo &cur = *it;
-
- reply->writeString8(cur.mName);
- reply->writeInt32(cur.mRoles.size());
- for (List<String8>::iterator role_it = cur.mRoles.begin();
- role_it != cur.mRoles.end(); ++role_it) {
- reply->writeString8(*role_it);
- }
- }
-
- return NO_ERROR;
- }
-
- case ALLOCATE_NODE:
- {
- CHECK_OMX_INTERFACE(IOMX, data, reply);
-
- const char *name = data.readCString();
-
- sp<IOMXObserver> observer =
- interface_cast<IOMXObserver>(data.readStrongBinder());
-
- if (name == NULL || observer == NULL) {
- ALOGE("b/26392700");
- reply->writeInt32(INVALID_OPERATION);
- return NO_ERROR;
- }
-
- sp<IOMXNode> omxNode;
-
- status_t err = allocateNode(name, observer, &omxNode);
-
- reply->writeInt32(err);
- if (err == OK) {
- reply->writeStrongBinder(IInterface::asBinder(omxNode));
- }
-
- return NO_ERROR;
- }
-
- case CREATE_INPUT_SURFACE:
- {
- CHECK_OMX_INTERFACE(IOMX, data, reply);
-
- sp<IGraphicBufferProducer> bufferProducer;
- sp<IGraphicBufferSource> bufferSource;
- status_t err = createInputSurface(&bufferProducer, &bufferSource);
-
- reply->writeInt32(err);
-
- if (err == OK) {
- reply->writeStrongBinder(IInterface::asBinder(bufferProducer));
- reply->writeStrongBinder(IInterface::asBinder(bufferSource));
- }
-
- return NO_ERROR;
- }
-
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
status_t BnOMXNode::onTransact(
uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) {
switch (code) {
diff --git a/media/libmedia/include/media/IOMX.h b/media/libmedia/include/media/IOMX.h
index e69c02d..7e7c2d2 100644
--- a/media/libmedia/include/media/IOMX.h
+++ b/media/libmedia/include/media/IOMX.h
@@ -47,9 +47,8 @@
using hardware::media::omx::V1_0::IOmxNode;
-class IOMX : public IInterface {
+class IOMX : public RefBase {
public:
- DECLARE_META_INTERFACE(OMX);
typedef uint32_t buffer_id;
@@ -224,14 +223,6 @@
};
////////////////////////////////////////////////////////////////////////////////
-
-class BnOMX : public BnInterface<IOMX> {
-public:
- virtual status_t onTransact(
- uint32_t code, const Parcel &data, Parcel *reply,
- uint32_t flags = 0);
-};
-
class BnOMXNode : public BnInterface<IOMXNode> {
public:
virtual status_t onTransact(
diff --git a/media/libmedia/include/media/omx/1.0/Conversion.h b/media/libmedia/include/media/omx/1.0/Conversion.h
index 3700a23..babda22 100644
--- a/media/libmedia/include/media/omx/1.0/Conversion.h
+++ b/media/libmedia/include/media/omx/1.0/Conversion.h
@@ -31,12 +31,12 @@
#include <ui/FenceTime.h>
#include <cutils/native_handle.h>
+#include <ui/BufferQueueDefs.h>
#include <ui/GraphicBuffer.h>
#include <media/OMXFenceParcelable.h>
#include <media/OMXBuffer.h>
#include <media/hardware/VideoAPI.h>
#include <media/stagefright/MediaErrors.h>
-#include <gui/IGraphicBufferProducer.h>
#include <android/hardware/media/omx/1.0/types.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
@@ -282,8 +282,8 @@
case TIMED_OUT:
case ERROR_UNSUPPORTED:
case UNKNOWN_ERROR:
- case IGraphicBufferProducer::RELEASE_ALL_BUFFERS:
- case IGraphicBufferProducer::BUFFER_NEEDS_REALLOCATION:
+ case BufferQueueDefs::RELEASE_ALL_BUFFERS:
+ case BufferQueueDefs::BUFFER_NEEDS_REALLOCATION:
return static_cast<Status>(l);
case NOT_ENOUGH_DATA:
return Status::BUFFER_NEEDS_REALLOCATION;
diff --git a/media/libmedia/include/media/omx/1.0/WOmx.h b/media/libmedia/include/media/omx/1.0/WOmx.h
index f13546e..0680eec 100644
--- a/media/libmedia/include/media/omx/1.0/WOmx.h
+++ b/media/libmedia/include/media/omx/1.0/WOmx.h
@@ -47,7 +47,6 @@
using ::android::List;
using ::android::IOMX;
-using ::android::BnOMX;
/**
* Wrapper classes for conversion
@@ -58,7 +57,7 @@
* - TW = Treble Wrapper --- It wraps a legacy object inside a Treble object.
*/
-struct LWOmx : public BnOMX {
+struct LWOmx : public IOMX {
sp<IOmx> mBase;
LWOmx(sp<IOmx> const& base);
status_t listNodes(List<IOMX::ComponentInfo>* list) override;