Merge change Iedebfe8d into eclair-mr2

* changes:
  Some decoders will return an error on OMX_EmptyThisBuffer to indicate that they don't support the media format, deal with this.
This commit is contained in:
Android (Google) Code Review
2009-10-08 17:23:21 -04:00
5 changed files with 38 additions and 24 deletions

View File

@@ -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,

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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(

View File

@@ -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,