summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/media/IOMX.h4
-rw-r--r--media/libmedia/IOMX.cpp21
-rw-r--r--media/libstagefright/OMXCodec.cpp23
-rw-r--r--media/libstagefright/omx/OMX.cpp10
-rw-r--r--media/libstagefright/omx/OMX.h4
5 files changed, 38 insertions, 24 deletions
diff --git a/include/media/IOMX.h b/include/media/IOMX.h
index 10e0197..e551d17 100644
--- a/include/media/IOMX.h
+++ b/include/media/IOMX.h
@@ -84,9 +84,9 @@ public:
virtual status_t observe_node(
node_id node, const sp<IOMXObserver> &observer) = 0;
- virtual void fill_buffer(node_id node, buffer_id buffer) = 0;
+ virtual status_t fill_buffer(node_id node, buffer_id buffer) = 0;
- virtual void empty_buffer(
+ virtual status_t empty_buffer(
node_id node,
buffer_id buffer,
OMX_U32 range_offset, OMX_U32 range_length,
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index 0cec7bb..e74f1a9 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -289,15 +289,17 @@ public:
return reply.readInt32();
}
- virtual void fill_buffer(node_id node, buffer_id buffer) {
+ virtual status_t fill_buffer(node_id node, buffer_id buffer) {
Parcel data, reply;
data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
data.writeIntPtr((intptr_t)node);
data.writeIntPtr((intptr_t)buffer);
- remote()->transact(FILL_BUFFER, data, &reply, IBinder::FLAG_ONEWAY);
+ remote()->transact(FILL_BUFFER, data, &reply);
+
+ return reply.readInt32();
}
- virtual void empty_buffer(
+ virtual status_t empty_buffer(
node_id node,
buffer_id buffer,
OMX_U32 range_offset, OMX_U32 range_length,
@@ -310,7 +312,9 @@ public:
data.writeInt32(range_length);
data.writeInt32(flags);
data.writeInt64(timestamp);
- remote()->transact(EMPTY_BUFFER, data, &reply, IBinder::FLAG_ONEWAY);
+ remote()->transact(EMPTY_BUFFER, data, &reply);
+
+ return reply.readInt32();
}
virtual status_t get_extension_index(
@@ -601,7 +605,7 @@ status_t BnOMX::onTransact(
node_id node = (void*)data.readIntPtr();
buffer_id buffer = (void*)data.readIntPtr();
- fill_buffer(node, buffer);
+ reply->writeInt32(fill_buffer(node, buffer));
return NO_ERROR;
}
@@ -617,9 +621,10 @@ status_t BnOMX::onTransact(
OMX_U32 flags = data.readInt32();
OMX_TICKS timestamp = data.readInt64();
- empty_buffer(
- node, buffer, range_offset, range_length,
- flags, timestamp);
+ reply->writeInt32(
+ empty_buffer(
+ node, buffer, range_offset, range_length,
+ flags, timestamp));
return NO_ERROR;
}
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index cd9c991..297cb87 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1412,10 +1412,11 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) {
memcpy(info->mMem->pointer(), specific->mData, specific->mSize);
}
- mOMX->empty_buffer(
+ status_t err = mOMX->empty_buffer(
mNode, info->mBuffer, 0, size,
OMX_BUFFERFLAG_ENDOFFRAME | OMX_BUFFERFLAG_CODECCONFIG,
0);
+ CHECK_EQ(err, OK);
info->mOwnedByComponent = true;
@@ -1468,16 +1469,21 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) {
}
}
- mOMX->empty_buffer(
- mNode, info->mBuffer, 0, srcLength,
- flags, timestamp);
-
- info->mOwnedByComponent = true;
-
if (srcBuffer != NULL) {
srcBuffer->release();
srcBuffer = NULL;
}
+
+ err = mOMX->empty_buffer(
+ mNode, info->mBuffer, 0, srcLength,
+ flags, timestamp);
+
+ if (err != OK) {
+ setState(ERROR);
+ return;
+ }
+
+ info->mOwnedByComponent = true;
}
void OMXCodec::fillOutputBuffer(BufferInfo *info) {
@@ -1490,7 +1496,8 @@ void OMXCodec::fillOutputBuffer(BufferInfo *info) {
}
CODEC_LOGV("Calling fill_buffer on buffer %p", info->mBuffer);
- mOMX->fill_buffer(mNode, info->mBuffer);
+ status_t err = mOMX->fill_buffer(mNode, info->mBuffer);
+ CHECK_EQ(err, OK);
info->mOwnedByComponent = true;
}
diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp
index 8b83dd6..bf876af 100644
--- a/media/libstagefright/omx/OMX.cpp
+++ b/media/libstagefright/omx/OMX.cpp
@@ -529,7 +529,7 @@ status_t OMX::observe_node(
return OK;
}
-void OMX::fill_buffer(node_id node, buffer_id buffer) {
+status_t OMX::fill_buffer(node_id node, buffer_id buffer) {
OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer;
header->nFilledLen = 0;
header->nOffset = 0;
@@ -539,10 +539,11 @@ void OMX::fill_buffer(node_id node, buffer_id buffer) {
OMX_ERRORTYPE err =
OMX_FillThisBuffer(node_meta->handle(), header);
- CHECK_EQ(err, OMX_ErrorNone);
+
+ return (err == OMX_ErrorNone) ? OK : UNKNOWN_ERROR;
}
-void OMX::empty_buffer(
+status_t OMX::empty_buffer(
node_id node,
buffer_id buffer,
OMX_U32 range_offset, OMX_U32 range_length,
@@ -561,7 +562,8 @@ void OMX::empty_buffer(
OMX_ERRORTYPE err =
OMX_EmptyThisBuffer(node_meta->handle(), header);
- CHECK_EQ(err, OMX_ErrorNone);
+
+ return (err == OMX_ErrorNone) ? OK : UNKNOWN_ERROR;
}
status_t OMX::get_extension_index(
diff --git a/media/libstagefright/omx/OMX.h b/media/libstagefright/omx/OMX.h
index 6325f79..4c14dd9 100644
--- a/media/libstagefright/omx/OMX.h
+++ b/media/libstagefright/omx/OMX.h
@@ -70,9 +70,9 @@ public:
virtual status_t observe_node(
node_id node, const sp<IOMXObserver> &observer);
- virtual void fill_buffer(node_id node, buffer_id buffer);
+ virtual status_t fill_buffer(node_id node, buffer_id buffer);
- virtual void empty_buffer(
+ virtual status_t empty_buffer(
node_id node,
buffer_id buffer,
OMX_U32 range_offset, OMX_U32 range_length,