diff options
-rw-r--r-- | include/media/IOMX.h | 4 | ||||
-rw-r--r-- | media/libmedia/IOMX.cpp | 21 | ||||
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 23 | ||||
-rw-r--r-- | media/libstagefright/omx/OMX.cpp | 10 | ||||
-rw-r--r-- | media/libstagefright/omx/OMX.h | 4 |
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, |