summaryrefslogtreecommitdiffstats
path: root/media/base
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-26 16:38:03 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-26 16:38:03 +0000
commita93866519172cc8993583d9116ce16eec01d532b (patch)
treee617d768783948cabd3e0363cfa6bfe45a6b4ee0 /media/base
parent2b2d9393845b8bb60f843d14ab0b59c4bc3949db (diff)
downloadchromium_src-a93866519172cc8993583d9116ce16eec01d532b.zip
chromium_src-a93866519172cc8993583d9116ce16eec01d532b.tar.gz
chromium_src-a93866519172cc8993583d9116ce16eec01d532b.tar.bz2
Add config change handling to SourceBufferStream & ChunkDemuxer
BUG=122913 TEST=None Review URL: https://chromiumcodereview.appspot.com/10696182 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148563 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base')
-rw-r--r--media/base/audio_decoder_config.cc10
-rw-r--r--media/base/audio_decoder_config.h4
-rw-r--r--media/base/byte_queue.h5
-rw-r--r--media/base/stream_parser_buffer.cc11
-rw-r--r--media/base/stream_parser_buffer.h9
-rw-r--r--media/base/video_decoder_config.cc12
-rw-r--r--media/base/video_decoder_config.h4
7 files changed, 52 insertions, 3 deletions
diff --git a/media/base/audio_decoder_config.cc b/media/base/audio_decoder_config.cc
index 5d15e7f..1f259f3 100644
--- a/media/base/audio_decoder_config.cc
+++ b/media/base/audio_decoder_config.cc
@@ -81,6 +81,16 @@ bool AudioDecoderConfig::IsValidConfig() const {
samples_per_second_ <= limits::kMaxSampleRate;
}
+bool AudioDecoderConfig::Matches(const AudioDecoderConfig& config) const {
+ return ((codec() == config.codec()) &&
+ (bits_per_channel() == config.bits_per_channel()) &&
+ (channel_layout() == config.channel_layout()) &&
+ (samples_per_second() == config.samples_per_second()) &&
+ (extra_data_size() == config.extra_data_size()) &&
+ (!extra_data() || !memcmp(extra_data(), config.extra_data(),
+ extra_data_size())));
+}
+
void AudioDecoderConfig::CopyFrom(const AudioDecoderConfig& audio_config) {
Initialize(audio_config.codec(),
audio_config.bits_per_channel(),
diff --git a/media/base/audio_decoder_config.h b/media/base/audio_decoder_config.h
index 6e58c5b..e2309d5 100644
--- a/media/base/audio_decoder_config.h
+++ b/media/base/audio_decoder_config.h
@@ -65,6 +65,10 @@ class MEDIA_EXPORT AudioDecoderConfig {
// otherwise.
bool IsValidConfig() const;
+ // Returns true if all fields in |config| match this config.
+ // Note: The contents of |extra_data_| are compared not the raw pointers.
+ bool Matches(const AudioDecoderConfig& config) const;
+
AudioCodec codec() const;
int bits_per_channel() const;
ChannelLayout channel_layout() const;
diff --git a/media/base/byte_queue.h b/media/base/byte_queue.h
index d3ef605..7619472 100644
--- a/media/base/byte_queue.h
+++ b/media/base/byte_queue.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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,6 +7,7 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
+#include "media/base/media_export.h"
namespace media {
@@ -15,7 +16,7 @@ namespace media {
// Pop(). The contents of the queue can be observed via the Peek() method.
// This class manages the underlying storage of the queue and tries to minimize
// the number of buffer copies when data is appended and removed.
-class ByteQueue {
+class MEDIA_EXPORT ByteQueue {
public:
ByteQueue();
~ByteQueue();
diff --git a/media/base/stream_parser_buffer.cc b/media/base/stream_parser_buffer.cc
index 8501372..04f9513 100644
--- a/media/base/stream_parser_buffer.cc
+++ b/media/base/stream_parser_buffer.cc
@@ -32,11 +32,20 @@ StreamParserBuffer::StreamParserBuffer(const uint8* data, int data_size,
bool is_keyframe)
: DecoderBuffer(data, data_size),
is_keyframe_(is_keyframe),
- decode_timestamp_(kNoTimestamp()) {
+ decode_timestamp_(kNoTimestamp()),
+ config_id_(kInvalidConfigId) {
SetDuration(kNoTimestamp());
}
StreamParserBuffer::~StreamParserBuffer() {
}
+int StreamParserBuffer::GetConfigId() const {
+ return config_id_;
+}
+
+void StreamParserBuffer::SetConfigId(int config_id) {
+ config_id_ = config_id;
+}
+
} // namespace media
diff --git a/media/base/stream_parser_buffer.h b/media/base/stream_parser_buffer.h
index da7f64f..90e4ca9 100644
--- a/media/base/stream_parser_buffer.h
+++ b/media/base/stream_parser_buffer.h
@@ -12,6 +12,9 @@ namespace media {
class MEDIA_EXPORT StreamParserBuffer : public DecoderBuffer {
public:
+ // Value used to signal an invalid decoder config ID.
+ enum { kInvalidConfigId = -1 };
+
static scoped_refptr<StreamParserBuffer> CreateEOSBuffer();
static scoped_refptr<StreamParserBuffer> CopyFrom(
const uint8* data, int data_size, bool is_keyframe);
@@ -22,12 +25,18 @@ class MEDIA_EXPORT StreamParserBuffer : public DecoderBuffer {
base::TimeDelta GetDecodeTimestamp() const;
void SetDecodeTimestamp(const base::TimeDelta& timestamp);
+ // Gets/sets the ID of the decoder config associated with this
+ // buffer.
+ int GetConfigId() const;
+ void SetConfigId(int config_id);
+
private:
StreamParserBuffer(const uint8* data, int data_size, bool is_keyframe);
virtual ~StreamParserBuffer();
bool is_keyframe_;
base::TimeDelta decode_timestamp_;
+ int config_id_;
DISALLOW_COPY_AND_ASSIGN(StreamParserBuffer);
};
diff --git a/media/base/video_decoder_config.cc b/media/base/video_decoder_config.cc
index 1a1783d..1e00e34 100644
--- a/media/base/video_decoder_config.cc
+++ b/media/base/video_decoder_config.cc
@@ -149,6 +149,18 @@ bool VideoDecoderConfig::IsValidConfig() const {
format_, natural_size_.width(), natural_size_.height());
}
+bool VideoDecoderConfig::Matches(const VideoDecoderConfig& config) const {
+ return ((codec() == config.codec()) &&
+ (format() == config.format()) &&
+ (profile() == config.profile()) &&
+ (coded_size() == config.coded_size()) &&
+ (visible_rect() == config.visible_rect()) &&
+ (natural_size() == config.natural_size()) &&
+ (extra_data_size() == config.extra_data_size()) &&
+ (!extra_data() || !memcmp(extra_data(), config.extra_data(),
+ extra_data_size())));
+}
+
std::string VideoDecoderConfig::AsHumanReadableString() const {
std::ostringstream s;
s << "codec: " << codec()
diff --git a/media/base/video_decoder_config.h b/media/base/video_decoder_config.h
index e095ba9..894eb24 100644
--- a/media/base/video_decoder_config.h
+++ b/media/base/video_decoder_config.h
@@ -96,6 +96,10 @@ class MEDIA_EXPORT VideoDecoderConfig {
// otherwise.
bool IsValidConfig() const;
+ // Returns true if all fields in |config| match this config.
+ // Note: The contents of |extra_data_| are compared not the raw pointers.
+ bool Matches(const VideoDecoderConfig& config) const;
+
// Returns a human-readable string describing |*this|. For debugging & test
// output only.
std::string AsHumanReadableString() const;