summaryrefslogtreecommitdiffstats
path: root/media/omx/omx_codec.cc
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-09 20:54:03 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-09 20:54:03 +0000
commitd0f650e53c2ed237187517d5abde490578234951 (patch)
tree1be1fba2db0ec440956190a8a5dd3f4a6e6191e0 /media/omx/omx_codec.cc
parent2e40e663fefd393809a865a5741a2b347252a5d1 (diff)
downloadchromium_src-d0f650e53c2ed237187517d5abde490578234951.zip
chromium_src-d0f650e53c2ed237187517d5abde490578234951.tar.gz
chromium_src-d0f650e53c2ed237187517d5abde490578234951.tar.bz2
Fix usage of OmxInputBuffer in OpenMAX code since it's refcounted.
In last refactoring of OpenMAX code, OmxInputBuffer was changed to refcounted but it wasn't probably used. This is now fixed. Unittest is coming in another patch. Review URL: http://codereview.chromium.org/596018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38498 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/omx/omx_codec.cc')
-rw-r--r--media/omx/omx_codec.cc22
1 files changed, 12 insertions, 10 deletions
diff --git a/media/omx/omx_codec.cc b/media/omx/omx_codec.cc
index 6b8d95e..b464af7 100644
--- a/media/omx/omx_codec.cc
+++ b/media/omx/omx_codec.cc
@@ -83,9 +83,11 @@ void OmxCodec::Read(ReadCallback* callback) {
}
void OmxCodec::Feed(OmxInputBuffer* buffer, FeedCallback* callback) {
+ scoped_refptr<OmxInputBuffer> buffer_ref = buffer;
message_loop_->PostTask(
FROM_HERE,
- NewRunnableMethod(this, &OmxCodec::FeedTask, buffer, callback));
+ NewRunnableMethod(this, &OmxCodec::FeedTask, buffer_ref,
+ callback));
}
void OmxCodec::Flush(Callback* callback) {
@@ -159,7 +161,7 @@ void OmxCodec::ReadTask(ReadCallback* callback) {
FillBufferTask();
}
-void OmxCodec::FeedTask(OmxInputBuffer* buffer,
+void OmxCodec::FeedTask(scoped_refptr<OmxInputBuffer> buffer,
FeedCallback* callback) {
DCHECK_EQ(message_loop_, MessageLoop::current());
@@ -247,7 +249,7 @@ void OmxCodec::FreeInputQueue() {
DCHECK_EQ(message_loop_, MessageLoop::current());
while (!input_queue_.empty()) {
- OmxInputBuffer* buffer = input_queue_.front().first;
+ scoped_refptr<OmxInputBuffer> buffer = input_queue_.front().first;
FeedCallback* callback = input_queue_.front().second;
callback->Run(buffer);
delete callback;
@@ -965,7 +967,7 @@ void OmxCodec::EmptyBufferTask() {
while (!input_queue_.empty() &&
!available_input_buffers_.empty() &&
!input_eos_) {
- OmxInputBuffer* buffer = input_queue_.front().first;
+ scoped_refptr<OmxInputBuffer> buffer = input_queue_.front().first;
FeedCallback* callback = input_queue_.front().second;
OMX_BUFFERHEADERTYPE* omx_buffer = available_input_buffers_.front();
available_input_buffers_.pop();
@@ -1027,13 +1029,13 @@ void OmxCodec::FillBufferTask() {
available_output_buffers_.pop();
// Give the output data to the callback but it doesn't own this buffer.
- callback->RunWithParams(
- MakeTuple(omx_buffer->pBuffer,
- static_cast<int>(omx_buffer->nFilledLen)));
- delete callback;
-
- if (omx_buffer->nFlags & OMX_BUFFERFLAG_EOS)
+ int filled = omx_buffer->nFilledLen;
+ if (omx_buffer->nFlags & OMX_BUFFERFLAG_EOS) {
output_eos_ = true;
+ filled = 0;
+ }
+ callback->RunWithParams(MakeTuple(omx_buffer->pBuffer, filled));
+ delete callback;
omx_buffer->nOutputPortIndex = output_port_;
omx_buffer->pAppPrivate = this;