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:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user