diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-26 16:38:03 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-26 16:38:03 +0000 |
commit | a93866519172cc8993583d9116ce16eec01d532b (patch) | |
tree | e617d768783948cabd3e0363cfa6bfe45a6b4ee0 /media/base | |
parent | 2b2d9393845b8bb60f843d14ab0b59c4bc3949db (diff) | |
download | chromium_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.cc | 10 | ||||
-rw-r--r-- | media/base/audio_decoder_config.h | 4 | ||||
-rw-r--r-- | media/base/byte_queue.h | 5 | ||||
-rw-r--r-- | media/base/stream_parser_buffer.cc | 11 | ||||
-rw-r--r-- | media/base/stream_parser_buffer.h | 9 | ||||
-rw-r--r-- | media/base/video_decoder_config.cc | 12 | ||||
-rw-r--r-- | media/base/video_decoder_config.h | 4 |
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; |