stagefright: add a way to update native handle in OMX buffers
Bug: 22775369
Change-Id: I7d7eb0868fef896d1cb0a45bec759a00f0783673
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index 61fba35..9b3ef30 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -25,6 +25,7 @@
#include <media/IOMX.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/openmax/OMX_IndexExt.h>
+#include <utils/NativeHandle.h>
namespace android {
@@ -60,6 +61,7 @@
SET_INTERNAL_OPTION,
UPDATE_GRAPHIC_BUFFER_IN_META,
CONFIGURE_VIDEO_TUNNEL_MODE,
+ UPDATE_NATIVE_HANDLE_IN_META,
};
class BpOMX : public BpInterface<IOMX> {
@@ -313,6 +315,24 @@
return err;
}
+ virtual status_t updateNativeHandleInMeta(
+ node_id node, OMX_U32 port_index,
+ const sp<NativeHandle> &nativeHandle, buffer_id buffer) {
+ Parcel data, reply;
+ data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
+ data.writeInt32((int32_t)node);
+ data.writeInt32(port_index);
+ data.writeInt32(nativeHandle != NULL);
+ if (nativeHandle != NULL) {
+ data.writeNativeHandle(nativeHandle->handle());
+ }
+ data.writeInt32((int32_t)buffer);
+ remote()->transact(UPDATE_NATIVE_HANDLE_IN_META, data, &reply);
+
+ status_t err = reply.readInt32();
+ return err;
+ }
+
virtual status_t createInputSurface(
node_id node, OMX_U32 port_index, android_dataspace dataSpace,
sp<IGraphicBufferProducer> *bufferProducer, MetadataBufferType *type) {
@@ -908,6 +928,25 @@
return NO_ERROR;
}
+ case UPDATE_NATIVE_HANDLE_IN_META:
+ {
+ CHECK_OMX_INTERFACE(IOMX, data, reply);
+
+ node_id node = (node_id)data.readInt32();
+ OMX_U32 port_index = data.readInt32();
+ native_handle *handle = NULL;
+ if (data.readInt32()) {
+ handle = data.readNativeHandle();
+ }
+ buffer_id buffer = (buffer_id)data.readInt32();
+
+ status_t err = updateNativeHandleInMeta(
+ node, port_index, NativeHandle::create(handle, true /* ownshandle */), buffer);
+ reply->writeInt32(err);
+
+ return NO_ERROR;
+ }
+
case CREATE_INPUT_SURFACE:
{
CHECK_OMX_INTERFACE(IOMX, data, reply);