Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1424)

Unified Diff: media/omx/omx_codec.cc

Issue 1786001: remove omx_sink and buffer merge (Closed)
Patch Set: one more missing Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/omx/omx_codec.h ('k') | media/omx/omx_codec_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/omx/omx_codec.cc
diff --git a/media/omx/omx_codec.cc b/media/omx/omx_codec.cc
index 70a5fe8ad91dddb590bc1b90370ac589fbb45c33..d47e3d03e07b7b039a1590fedc1c6f2708327943 100644
--- a/media/omx/omx_codec.cc
+++ b/media/omx/omx_codec.cc
@@ -12,7 +12,6 @@
#include "base/string_util.h"
#include "media/omx/omx_codec.h"
#include "media/base/buffers.h"
-#include "media/omx/omx_output_sink.h"
namespace media {
@@ -47,21 +46,15 @@ OmxCodec::~OmxCodec() {
DCHECK_EQ(0u, input_buffers_.size());
DCHECK_EQ(0u, output_buffers_.size());
DCHECK(available_input_buffers_.empty());
- DCHECK(output_buffers_in_use_.empty());
DCHECK(pending_input_queue_.empty());
DCHECK(output_queue_.empty());
DCHECK(processing_input_queue_.empty());
}
-void OmxCodec::Setup(OmxConfigurator* configurator,
- OmxOutputSink* output_sink) {
+void OmxCodec::Setup(OmxConfigurator* configurator) {
DCHECK_EQ(kEmpty, state_);
-
CHECK(configurator);
- CHECK(output_sink);
-
configurator_ = configurator;
- output_sink_ = output_sink;
}
void OmxCodec::SetErrorCallback(Callback* callback) {
@@ -76,7 +69,6 @@ void OmxCodec::SetFormatCallback(FormatCallback* callback) {
void OmxCodec::Start() {
CHECK(configurator_);
- CHECK(output_sink_);
message_loop_->PostTask(
FROM_HERE,
@@ -166,9 +158,7 @@ void OmxCodec::ReadTask(ReadCallback* callback) {
// Don't accept read request on error state.
if (!CanAcceptOutput()) {
- callback->Run(
- kEosBuffer,
- static_cast<OmxOutputSink::BufferUsedCallback*>(NULL));
+ callback->Run(static_cast<OMX_BUFFERHEADERTYPE*>(NULL));
delete callback;
return;
}
@@ -232,29 +222,14 @@ bool OmxCodec::AllocateInputBuffers() {
bool OmxCodec::AllocateOutputBuffers() {
DCHECK_EQ(message_loop_, MessageLoop::current());
- if (output_sink_->ProvidesEGLImages()) {
- // TODO(hclam): Do the following things here:
- // 1. Call output_sink_->AllocateEGLImages() to allocate some
- // EGL images from the sink component.
- // 2. Call OMX_UseEGLImage() to assign the images to the output
- // port.
- NOTIMPLEMENTED();
- } else {
- for (int i = 0; i < output_buffer_count_; ++i) {
- OMX_BUFFERHEADERTYPE* buffer;
- OMX_ERRORTYPE error =
- OMX_AllocateBuffer(component_handle_, &buffer, output_port_,
- NULL, output_buffer_size_);
- if (error != OMX_ErrorNone)
- return false;
- output_buffers_.push_back(buffer);
- }
- }
-
- // Tell the sink component to use the buffers for output.
- for (size_t i = 0; i < output_buffers_.size(); ++i) {
- output_sink_->UseThisBuffer(static_cast<int>(i),
- output_buffers_[i]);
+ for (int i = 0; i < output_buffer_count_; ++i) {
+ OMX_BUFFERHEADERTYPE* buffer;
+ OMX_ERRORTYPE error =
+ OMX_AllocateBuffer(component_handle_, &buffer, output_port_,
+ NULL, output_buffer_size_);
+ if (error != OMX_ErrorNone)
+ return false;
+ output_buffers_.push_back(buffer);
}
return true;
@@ -277,25 +252,10 @@ void OmxCodec::FreeInputBuffers() {
void OmxCodec::FreeOutputBuffers() {
DCHECK_EQ(message_loop_, MessageLoop::current());
- // First we need to make sure output sink is not using the buffer so
- // tell it to stop using our buffer headers.
- // TODO(hclam): We should make this an asynchronous call so that
- // we'll wait until all buffers are not used.
- for (size_t i = 0; i < output_buffers_.size(); ++i)
- output_sink_->StopUsingThisBuffer(static_cast<int>(i));
-
// Calls to OMX to free buffers.
for (size_t i = 0; i < output_buffers_.size(); ++i)
OMX_FreeBuffer(component_handle_, output_port_, output_buffers_[i]);
output_buffers_.clear();
-
- // If we have asked the sink component to provide us EGL images for
- // output we need to tell it we are done with those images.
- // TODO(hclam): Implement this correctly.
- if (output_sink_->ProvidesEGLImages()) {
- std::vector<EGLImageKHR> images;
- output_sink_->ReleaseEGLImages(images);
- }
}
void OmxCodec::FreeInputQueue() {
@@ -1119,12 +1079,10 @@ void OmxCodec::FulfillOneRead() {
// If the buffer is real then save it to the in-use list.
// Otherwise if it is an end-of-stream buffer then just drop it.
if (buffer_id != kEosBuffer) {
- output_buffers_in_use_.push_back(buffer_id);
- callback->Run(buffer_id,
- NewCallback(this, &OmxCodec::BufferUsedCallback));
+ callback->Run(output_buffers_[buffer_id]);
+ BufferUsedCallback(buffer_id); //hack, we will change this really soon.
} else {
- callback->Run(kEosBuffer,
- static_cast<OmxOutputSink::BufferUsedCallback*>(NULL));
+ callback->Run(static_cast<OMX_BUFFERHEADERTYPE*>(NULL));
}
delete callback;
}
@@ -1158,19 +1116,6 @@ void OmxCodec::BufferUsedTask(int buffer_id) {
// Make sure an end-of-stream buffer id is not received here.
CHECK(buffer_id != kEosBuffer);
- // The use of |output_buffers_in_use_| is just a precaution. So we can
- // actually move it to a debugging section.
- OutputBuffersInUseSet::iterator iter =
- std::find(output_buffers_in_use_.begin(),
- output_buffers_in_use_.end(),
- buffer_id);
-
- if (iter == output_buffers_in_use_.end()) {
- LOG(ERROR) << "Received an unknown buffer id: " << buffer_id;
- StateTransitionTask(kError);
- }
- output_buffers_in_use_.erase(iter);
-
// We'll try to issue more FillThisBuffer() to the decoder.
// If we can't do it now then just return.
if (!CanFillBuffer())
« no previous file with comments | « media/omx/omx_codec.h ('k') | media/omx/omx_codec_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698