diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-05 21:15:00 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-05 21:15:00 +0000 |
commit | 0d7cef4d19826157be5d8ee93a5a85a8a3d2fe5c (patch) | |
tree | 768113ab7d376c80ebf1a8e36e654ebccf2f1cf3 /media/omx | |
parent | d7313ce9aecaed59829e57bf12521eaf135e5f74 (diff) | |
download | chromium_src-0d7cef4d19826157be5d8ee93a5a85a8a3d2fe5c.zip chromium_src-0d7cef4d19826157be5d8ee93a5a85a8a3d2fe5c.tar.gz chromium_src-0d7cef4d19826157be5d8ee93a5a85a8a3d2fe5c.tar.bz2 |
Refactor media::InputBuffer to consolidate it with media::Buffer
Rename media::InputBuffer to media::OmxInputBuffer and inherit from
media::Buffer. Also provide the timestamp to media::OmxCodec.
TEST=omx_test
BUG=32753
Review URL: http://codereview.chromium.org/577012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38247 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/omx')
-rw-r--r-- | media/omx/omx_codec.cc | 13 | ||||
-rw-r--r-- | media/omx/omx_codec.h | 19 | ||||
-rw-r--r-- | media/omx/omx_input_buffer.cc (renamed from media/omx/input_buffer.cc) | 16 | ||||
-rw-r--r-- | media/omx/omx_input_buffer.h (renamed from media/omx/input_buffer.h) | 27 |
4 files changed, 38 insertions, 37 deletions
diff --git a/media/omx/omx_codec.cc b/media/omx/omx_codec.cc index 71387d1..6b8d95e 100644 --- a/media/omx/omx_codec.cc +++ b/media/omx/omx_codec.cc @@ -8,8 +8,8 @@ #include "base/message_loop.h" #include "base/stl_util-inl.h" #include "base/string_util.h" -#include "media/omx/input_buffer.h" #include "media/omx/omx_codec.h" +#include "media/omx/omx_input_buffer.h" namespace media { @@ -82,7 +82,7 @@ void OmxCodec::Read(ReadCallback* callback) { NewRunnableMethod(this, &OmxCodec::ReadTask, callback)); } -void OmxCodec::Feed(InputBuffer* buffer, FeedCallback* callback) { +void OmxCodec::Feed(OmxInputBuffer* buffer, FeedCallback* callback) { message_loop_->PostTask( FROM_HERE, NewRunnableMethod(this, &OmxCodec::FeedTask, buffer, callback)); @@ -159,7 +159,8 @@ void OmxCodec::ReadTask(ReadCallback* callback) { FillBufferTask(); } -void OmxCodec::FeedTask(InputBuffer* buffer, FeedCallback* callback) { +void OmxCodec::FeedTask(OmxInputBuffer* buffer, + FeedCallback* callback) { DCHECK_EQ(message_loop_, MessageLoop::current()); if (!CanAcceptInput()) { @@ -246,7 +247,7 @@ void OmxCodec::FreeInputQueue() { DCHECK_EQ(message_loop_, MessageLoop::current()); while (!input_queue_.empty()) { - InputBuffer* buffer = input_queue_.front().first; + OmxInputBuffer* buffer = input_queue_.front().first; FeedCallback* callback = input_queue_.front().second; callback->Run(buffer); delete callback; @@ -964,7 +965,7 @@ void OmxCodec::EmptyBufferTask() { while (!input_queue_.empty() && !available_input_buffers_.empty() && !input_eos_) { - InputBuffer* buffer = input_queue_.front().first; + OmxInputBuffer* buffer = input_queue_.front().first; FeedCallback* callback = input_queue_.front().second; OMX_BUFFERHEADERTYPE* omx_buffer = available_input_buffers_.front(); available_input_buffers_.pop(); @@ -984,7 +985,7 @@ void OmxCodec::EmptyBufferTask() { omx_buffer->nFilledLen = filled; omx_buffer->pAppPrivate = this; omx_buffer->nFlags |= input_eos_ ? OMX_BUFFERFLAG_EOS : 0; - // TODO(hclam): Get timestamp from the input buffer and fill in here. + omx_buffer->nTimeStamp = buffer->GetTimestamp().InMilliseconds(); // Give this buffer to OMX. OMX_ERRORTYPE ret = OMX_EmptyThisBuffer(component_handle_, omx_buffer); diff --git a/media/omx/omx_codec.h b/media/omx/omx_codec.h index fac10c6..0eb94b8 100644 --- a/media/omx/omx_codec.h +++ b/media/omx/omx_codec.h @@ -15,10 +15,10 @@ // // Initialization. // MessageLoop message_loop; // OmxCodec* decoder = new OmxCodec(&message_loop); -// OmxCodec::OmxMediaFormat input_format, output_format; +// OmxConfigurator::MediaFormat input_format, output_format; // input_format.codec = OmxCodec::kCodecH264; // output_format.codec = OmxCodec::kCodecRaw; -// decoder->Setup(input_format, output_format); +// decoder->Setup(new OmxDecoderConfigurator(input_format, output_format)); // decoder->SetErrorCallback(NewCallback(this, &Client::ErrorCallback)); // decoder->SetFormatCallback(NewCallback(this, &Client::FormatCallback)); // @@ -29,7 +29,7 @@ // // queue the input buffers and output requests and process them until // // the decoder can actually process them. // for (int i = 0; i < kInitialBuffers; ++i) { -// InputBuffer* buffer = PrepareInitialInputBuffer(); +// OmxInputBuffer* buffer = PrepareInitialInputBuffer(); // decoder->Feed(buffer, NewCallback(this, &Client::FeedCallback)); // } // @@ -40,7 +40,7 @@ // decoder->Stop(NewCallback(this, &Client::StopCallback)); // // A typical FeedCallback will look like: -// void Client::FeedCallback(InputBuffer* buffer) { +// void Client::FeedCallback(OmxInputBuffer* buffer) { // // We have read to the end so stop feeding. // if (buffer->Eos()) // return; @@ -95,18 +95,19 @@ #include "third_party/openmax/il/OMX_Core.h" #include "third_party/openmax/il/OMX_Video.h" -class InputBuffer; class MessageLoop; namespace media { +class OmxInputBuffer; + class OmxCodec : public base::RefCountedThreadSafe<OmxCodec> { public: // TODO(jiesun): remove callback parameters. typedef Callback2< const OmxConfigurator::MediaFormat&, const OmxConfigurator::MediaFormat&>::Type FormatCallback; - typedef Callback1<InputBuffer*>::Type FeedCallback; + typedef Callback1<OmxInputBuffer*>::Type FeedCallback; typedef Callback2<uint8*, int>::Type ReadCallback; typedef Callback0::Type Callback; @@ -139,7 +140,7 @@ class OmxCodec : public base::RefCountedThreadSafe<OmxCodec> { // Feed the decoder with |buffer|. When the decoder has consumed the // buffer |callback| is called with |buffer| being the parameter. - void Feed(InputBuffer* buffer, FeedCallback* callback); + void Feed(OmxInputBuffer* buffer, FeedCallback* callback); // Flush the decoder and reset its end-of-stream state. void Flush(Callback* callback); @@ -169,7 +170,7 @@ class OmxCodec : public base::RefCountedThreadSafe<OmxCodec> { void StartTask(); void StopTask(Callback* callback); void ReadTask(ReadCallback* callback); - void FeedTask(InputBuffer* buffer, FeedCallback* callback); + void FeedTask(OmxInputBuffer* buffer, FeedCallback* callback); // Helper method to perform tasks when this object is stopped. void DoneStop(); @@ -309,7 +310,7 @@ class OmxCodec : public base::RefCountedThreadSafe<OmxCodec> { scoped_ptr<Callback> error_callback_; // Input and output queue for encoded data and decoded frames. - typedef std::pair<InputBuffer*, FeedCallback*> InputUnit; + typedef std::pair<OmxInputBuffer*, FeedCallback*> InputUnit; std::queue<InputUnit> input_queue_; std::queue<ReadCallback*> output_queue_; diff --git a/media/omx/input_buffer.cc b/media/omx/omx_input_buffer.cc index c26b9f7..b4864fe 100644 --- a/media/omx/input_buffer.cc +++ b/media/omx/omx_input_buffer.cc @@ -2,7 +2,7 @@ // source code is governed by a BSD-style license that can be found in the // LICENSE file. -#include "media/omx/input_buffer.h" +#include "media/omx/omx_input_buffer.h" #include <algorithm> @@ -10,34 +10,30 @@ namespace media { -InputBuffer::InputBuffer() +OmxInputBuffer::OmxInputBuffer() : size_(0), used_(0) { } -InputBuffer::InputBuffer(uint8* data, int size) +OmxInputBuffer::OmxInputBuffer(uint8* data, int size) : data_(data), size_(size), used_(0) { DCHECK_GE(size, 0); } -InputBuffer::~InputBuffer() { +OmxInputBuffer::~OmxInputBuffer() { } -int InputBuffer::Read(uint8* output_data, int output_size) { +int OmxInputBuffer::Read(uint8* output_data, int output_size) { int copy = std::min(output_size, size_ - used_); memcpy(output_data, data_.get() + used_, copy); used_ += copy; return copy; } -bool InputBuffer::Used() { +bool OmxInputBuffer::Used() { return used_ == size_; } -bool InputBuffer::IsEndOfStream() { - return data_.get() == NULL || size_ == 0; -} - } // namespace media diff --git a/media/omx/input_buffer.h b/media/omx/omx_input_buffer.h index 9c6f442..10a9049 100644 --- a/media/omx/input_buffer.h +++ b/media/omx/omx_input_buffer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this +// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this // source code is governed by a BSD-style license that can be found in the // LICENSE file. @@ -7,25 +7,25 @@ // // This object is implemened using system memory. -#ifndef MEDIA_OMX_INPUT_BUFFER_H_ -#define MEDIA_OMX_INPUT_BUFFER_H_ +#ifndef MEDIA_OMX_OMX_INPUT_BUFFER_H_ +#define MEDIA_OMX_OMX_INPUT_BUFFER_H_ #include "base/basictypes.h" #include "base/scoped_ptr.h" +#include "media/base/buffers.h" namespace media { -// TODO(hclam): consolidate our buffer implementations http://crbug.com/28654 -class InputBuffer { +class OmxInputBuffer : public Buffer { public: // Creates an empty input buffer. - InputBuffer(); + OmxInputBuffer(); // Creates an input buffer given |data| and |size|. // After construction, this object will be given the ownership of // |data| and is responsible for deleting it. - InputBuffer(uint8* data, int size); - ~InputBuffer(); + OmxInputBuffer(uint8* data, int size); + virtual ~OmxInputBuffer(); // Read from the this buffer into |data| with the maximum |size| bytes. // Returns number of bytes read. If a read is successful, the number @@ -36,15 +36,18 @@ class InputBuffer { // Returns true if this buffer is used. bool Used(); - // Returns true if this is an end-of-stream buffer. - bool IsEndOfStream(); - private: + virtual const uint8* GetData() const { return data_.get(); } + + virtual size_t GetDataSize() const { return size_; } + scoped_array<uint8> data_; int size_; int used_; + + DISALLOW_COPY_AND_ASSIGN(OmxInputBuffer); }; } // namespace media -#endif // MEDIA_OMX_INPUT_BUFFER_H_ +#endif // MEDIA_OMX_OMX_INPUT_BUFFER_H_ |