summaryrefslogtreecommitdiffstats
path: root/media/base
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 14:54:59 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 14:54:59 +0000
commita3e2867b33d282e1e6a33f9e493285ed0f57920f (patch)
tree86fd4532a2a2695704c0366ca755acec93fd87c8 /media/base
parentceffbde06c69531745924a6374b4392f34c22e51 (diff)
downloadchromium_src-a3e2867b33d282e1e6a33f9e493285ed0f57920f.zip
chromium_src-a3e2867b33d282e1e6a33f9e493285ed0f57920f.tar.gz
chromium_src-a3e2867b33d282e1e6a33f9e493285ed0f57920f.tar.bz2
Make AudioDecoderConfig copyable.
This is a follow-up CL of r187702. BUG=177543 TEST=All tests pass. Review URL: https://chromiumcodereview.appspot.com/12638030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188072 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base')
-rw-r--r--media/base/audio_decoder_config.cc22
-rw-r--r--media/base/audio_decoder_config.h21
-rw-r--r--media/base/decryptor.h2
-rw-r--r--media/base/mock_filters.cc6
-rw-r--r--media/base/mock_filters.h8
5 files changed, 13 insertions, 46 deletions
diff --git a/media/base/audio_decoder_config.cc b/media/base/audio_decoder_config.cc
index ee154a0..a4e57c2 100644
--- a/media/base/audio_decoder_config.cc
+++ b/media/base/audio_decoder_config.cc
@@ -39,7 +39,6 @@ AudioDecoderConfig::AudioDecoderConfig()
channel_layout_(CHANNEL_LAYOUT_UNSUPPORTED),
samples_per_second_(0),
bytes_per_frame_(0),
- extra_data_size_(0),
is_encrypted_(false) {
}
@@ -83,17 +82,9 @@ void AudioDecoderConfig::Initialize(AudioCodec codec,
codec_ = codec;
channel_layout_ = channel_layout;
samples_per_second_ = samples_per_second;
- extra_data_size_ = extra_data_size;
sample_format_ = sample_format;
bits_per_channel_ = SampleFormatToBitsPerChannel(sample_format);
-
- if (extra_data_size_ > 0) {
- extra_data_.reset(new uint8[extra_data_size_]);
- memcpy(extra_data_.get(), extra_data, extra_data_size_);
- } else {
- extra_data_.reset();
- }
-
+ extra_data_.assign(extra_data, extra_data + extra_data_size);
is_encrypted_ = is_encrypted;
int channels = ChannelLayoutToChannelCount(channel_layout_);
@@ -124,15 +115,4 @@ bool AudioDecoderConfig::Matches(const AudioDecoderConfig& config) const {
(sample_format() == config.sample_format()));
}
-void AudioDecoderConfig::CopyFrom(const AudioDecoderConfig& audio_config) {
- Initialize(audio_config.codec(),
- audio_config.sample_format(),
- audio_config.channel_layout(),
- audio_config.samples_per_second(),
- audio_config.extra_data(),
- audio_config.extra_data_size(),
- audio_config.is_encrypted(),
- false);
-}
-
} // namespace media
diff --git a/media/base/audio_decoder_config.h b/media/base/audio_decoder_config.h
index fa29946..455fea0 100644
--- a/media/base/audio_decoder_config.h
+++ b/media/base/audio_decoder_config.h
@@ -5,8 +5,9 @@
#ifndef MEDIA_BASE_AUDIO_DECODER_CONFIG_H_
#define MEDIA_BASE_AUDIO_DECODER_CONFIG_H_
+#include <vector>
+
#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
#include "media/base/channel_layout.h"
#include "media/base/media_export.h"
@@ -78,9 +79,6 @@ class MEDIA_EXPORT AudioDecoderConfig {
const uint8* extra_data, size_t extra_data_size,
bool is_encrypted, bool record_stats);
- // Deep copies |audio_config|.
- void CopyFrom(const AudioDecoderConfig& audio_config);
-
// Returns true if this object has appropriate configuration values, false
// otherwise.
bool IsValidConfig() const;
@@ -98,8 +96,10 @@ class MEDIA_EXPORT AudioDecoderConfig {
// Optional byte data required to initialize audio decoders such as Vorbis
// codebooks.
- uint8* extra_data() const { return extra_data_.get(); }
- size_t extra_data_size() const { return extra_data_size_; }
+ const uint8* extra_data() const {
+ return extra_data_.empty() ? NULL : &extra_data_[0];
+ }
+ size_t extra_data_size() const { return extra_data_.size(); }
// Whether the audio stream is potentially encrypted.
// Note that in a potentially encrypted audio stream, individual buffers
@@ -113,13 +113,12 @@ class MEDIA_EXPORT AudioDecoderConfig {
ChannelLayout channel_layout_;
int samples_per_second_;
int bytes_per_frame_;
-
- scoped_array<uint8> extra_data_;
- size_t extra_data_size_;
-
+ std::vector<uint8> extra_data_;
bool is_encrypted_;
- DISALLOW_COPY_AND_ASSIGN(AudioDecoderConfig);
+ // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+ // generated copy constructor and assignment operator. Since the extra data is
+ // typically small, the performance impact is minimal.
};
} // namespace media
diff --git a/media/base/decryptor.h b/media/base/decryptor.h
index 1a7dc21..6f76627 100644
--- a/media/base/decryptor.h
+++ b/media/base/decryptor.h
@@ -139,7 +139,7 @@ class MEDIA_EXPORT Decryptor {
// Initializes a decoder with the given |config|, executing the |init_cb|
// upon completion.
- virtual void InitializeAudioDecoder(scoped_ptr<AudioDecoderConfig> config,
+ virtual void InitializeAudioDecoder(const AudioDecoderConfig& config,
const DecoderInitCB& init_cb) = 0;
virtual void InitializeVideoDecoder(const VideoDecoderConfig& config,
const DecoderInitCB& init_cb) = 0;
diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc
index 291f5b8..b7ed1e1 100644
--- a/media/base/mock_filters.cc
+++ b/media/base/mock_filters.cc
@@ -44,12 +44,6 @@ MockDecryptor::MockDecryptor() {}
MockDecryptor::~MockDecryptor() {}
-void MockDecryptor::InitializeAudioDecoder(
- scoped_ptr<AudioDecoderConfig> config,
- const DecoderInitCB& init_cb) {
- InitializeAudioDecoderMock(*config, init_cb);
-}
-
MockStatisticsCB::MockStatisticsCB() {}
MockStatisticsCB::~MockStatisticsCB() {}
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index ace4a6c..463fade 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -209,10 +209,7 @@ class MockDecryptor : public Decryptor {
const scoped_refptr<DecoderBuffer>& encrypted,
const DecryptCB& decrypt_cb));
MOCK_METHOD1(CancelDecrypt, void(StreamType stream_type));
- // TODO(xhwang): The following method is a workaround of the issue that
- // move-only parameters are not supported in mocked methods. Remove when the
- // issue is fixed: http://code.google.com/p/googletest/issues/detail?id=395
- MOCK_METHOD2(InitializeAudioDecoderMock,
+ MOCK_METHOD2(InitializeAudioDecoder,
void(const AudioDecoderConfig& config,
const DecoderInitCB& init_cb));
MOCK_METHOD2(InitializeVideoDecoder,
@@ -227,9 +224,6 @@ class MockDecryptor : public Decryptor {
MOCK_METHOD1(ResetDecoder, void(StreamType stream_type));
MOCK_METHOD1(DeinitializeDecoder, void(StreamType stream_type));
- virtual void InitializeAudioDecoder(scoped_ptr<AudioDecoderConfig> config,
- const DecoderInitCB& init_cb) OVERRIDE;
-
private:
DISALLOW_COPY_AND_ASSIGN(MockDecryptor);
};