diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-18 01:00:04 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-18 01:00:04 +0000 |
commit | 75d635c78f301925930e7e29139ff74fd4c46e02 (patch) | |
tree | 91e56bf699345d71f3182b251fb91e4a141185b2 | |
parent | da200edb64edd5b27b4a3627f3b8a78241c94f46 (diff) | |
download | chromium_src-75d635c78f301925930e7e29139ff74fd4c46e02.zip chromium_src-75d635c78f301925930e7e29139ff74fd4c46e02.tar.gz chromium_src-75d635c78f301925930e7e29139ff74fd4c46e02.tar.bz2 |
Revert 177550
> Tighten up media::DecoderBuffer API contract for end of stream buffers.
>
> Folks shouldn't be calling methods on end of stream buffers since the definition is undefined.
>
> Review URL: https://codereview.chromium.org/11993002
TBR=scherkus@chromium.org
Review URL: https://codereview.chromium.org/11926010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177556 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | media/base/data_buffer.h | 2 | ||||
-rw-r--r-- | media/base/decoder_buffer.cc | 22 | ||||
-rw-r--r-- | media/base/decoder_buffer.h | 13 | ||||
-rw-r--r-- | media/base/stream_parser_buffer.cc | 4 | ||||
-rw-r--r-- | media/filters/ffmpeg_audio_decoder.cc | 9 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer_unittest.cc | 2 | ||||
-rw-r--r-- | media/filters/ffmpeg_video_decoder.cc | 32 |
7 files changed, 22 insertions, 62 deletions
diff --git a/media/base/data_buffer.h b/media/base/data_buffer.h index 5c02dd6..76215c8 100644 --- a/media/base/data_buffer.h +++ b/media/base/data_buffer.h @@ -17,8 +17,6 @@ namespace media { // // Unlike DecoderBuffer, allocations are assumed to be allocated with the // default memory allocator (i.e., new uint8[]). -// -// NOTE: It is illegal to call any method when IsEndOfStream() is true. class MEDIA_EXPORT DataBuffer : public base::RefCountedThreadSafe<DataBuffer> { public: // Allocates buffer of size |buffer_size| >= 0. diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc index 03f9bbb..a07ffac 100644 --- a/media/base/decoder_buffer.cc +++ b/media/base/decoder_buffer.cc @@ -48,47 +48,38 @@ scoped_refptr<DecoderBuffer> DecoderBuffer::CreateEOSBuffer() { } base::TimeDelta DecoderBuffer::GetTimestamp() const { - DCHECK(!IsEndOfStream()); return timestamp_; } void DecoderBuffer::SetTimestamp(const base::TimeDelta& timestamp) { - DCHECK(!IsEndOfStream()); timestamp_ = timestamp; } base::TimeDelta DecoderBuffer::GetDuration() const { - DCHECK(!IsEndOfStream()); return duration_; } void DecoderBuffer::SetDuration(const base::TimeDelta& duration) { - DCHECK(!IsEndOfStream()); duration_ = duration; } const uint8* DecoderBuffer::GetData() const { - DCHECK(!IsEndOfStream()); return data_.get(); } uint8* DecoderBuffer::GetWritableData() const { - DCHECK(!IsEndOfStream()); return data_.get(); } int DecoderBuffer::GetDataSize() const { - DCHECK(!IsEndOfStream()); return size_; } const DecryptConfig* DecoderBuffer::GetDecryptConfig() const { - DCHECK(!IsEndOfStream()); return decrypt_config_.get(); } void DecoderBuffer::SetDecryptConfig(scoped_ptr<DecryptConfig> decrypt_config) { - DCHECK(!IsEndOfStream()); decrypt_config_ = decrypt_config.Pass(); } @@ -96,17 +87,4 @@ bool DecoderBuffer::IsEndOfStream() const { return data_ == NULL; } -std::string DecoderBuffer::AsHumanReadableString() { - if (IsEndOfStream()) { - return "end of stream"; - } - - std::ostringstream s; - s << "timestamp: " << timestamp_.InMicroseconds() - << " duration: " << duration_.InMicroseconds() - << " size: " << size_ - << " encrypted: " << (decrypt_config_ != NULL); - return s.str(); -} - } // namespace media diff --git a/media/base/decoder_buffer.h b/media/base/decoder_buffer.h index c23e88f..7cb496b 100644 --- a/media/base/decoder_buffer.h +++ b/media/base/decoder_buffer.h @@ -5,8 +5,6 @@ #ifndef MEDIA_BASE_DECODER_BUFFER_H_ #define MEDIA_BASE_DECODER_BUFFER_H_ -#include <string> - #include "base/memory/aligned_memory.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" @@ -25,8 +23,6 @@ class DecryptConfig; // allocated using FFmpeg with particular alignment and padding requirements. // // Also includes decoder specific functionality for decryption. -// -// NOTE: It is illegal to call any method when IsEndOfStream() is true. class MEDIA_EXPORT DecoderBuffer : public base::RefCountedThreadSafe<DecoderBuffer> { public: @@ -47,10 +43,8 @@ class MEDIA_EXPORT DecoderBuffer // padded and aligned as necessary. |data| must not be NULL and |size| >= 0. static scoped_refptr<DecoderBuffer> CopyFrom(const uint8* data, int size); - // Create a DecoderBuffer indicating we've reached end of stream. - // - // Calling any method other than IsEndOfStream() on the resulting buffer - // is disallowed. + // Create a DecoderBuffer indicating we've reached end of stream. GetData() + // and GetWritableData() will return NULL and GetDataSize() will return 0. static scoped_refptr<DecoderBuffer> CreateEOSBuffer(); base::TimeDelta GetTimestamp() const; @@ -70,9 +64,6 @@ class MEDIA_EXPORT DecoderBuffer // If there's no data in this buffer, it represents end of stream. bool IsEndOfStream() const; - // Returns a human-readable string describing |*this|. - std::string AsHumanReadableString(); - protected: friend class base::RefCountedThreadSafe<DecoderBuffer>; diff --git a/media/base/stream_parser_buffer.cc b/media/base/stream_parser_buffer.cc index 1814382..13e649e 100644 --- a/media/base/stream_parser_buffer.cc +++ b/media/base/stream_parser_buffer.cc @@ -35,9 +35,7 @@ StreamParserBuffer::StreamParserBuffer(const uint8* data, int data_size, is_keyframe_(is_keyframe), decode_timestamp_(kNoTimestamp()), config_id_(kInvalidConfigId) { - if (data) { - SetDuration(kNoTimestamp()); - } + SetDuration(kNoTimestamp()); } StreamParserBuffer::~StreamParserBuffer() { diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc index 941f79c..941bd43 100644 --- a/media/filters/ffmpeg_audio_decoder.cc +++ b/media/filters/ffmpeg_audio_decoder.cc @@ -351,13 +351,8 @@ void FFmpegAudioDecoder::RunDecodeLoop( bool skip_eos_append) { AVPacket packet; av_init_packet(&packet); - if (input->IsEndOfStream()) { - packet.data = NULL; - packet.size = 0; - } else { - packet.data = const_cast<uint8*>(input->GetData()); - packet.size = input->GetDataSize(); - } + packet.data = const_cast<uint8*>(input->GetData()); + packet.size = input->GetDataSize(); // Each audio packet may contain several frames, so we must call the decoder // until we've exhausted the packet. Regardless of the packet size we always diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index 72b64ae..d1c2c04 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc @@ -45,6 +45,8 @@ static void EosOnReadDone(bool* got_eos_buffer, EXPECT_EQ(status, DemuxerStream::kOk); if (buffer->IsEndOfStream()) { *got_eos_buffer = true; + EXPECT_TRUE(!buffer->GetData()); + EXPECT_EQ(buffer->GetDataSize(), 0); return; } diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc index 0459833..d7bbf82 100644 --- a/media/filters/ffmpeg_video_decoder.cc +++ b/media/filters/ffmpeg_video_decoder.cc @@ -309,7 +309,7 @@ void FFmpegVideoDecoder::DecodeBuffer( } // Any successful decode counts! - if (!buffer->IsEndOfStream() && buffer->GetDataSize() > 0) { + if (buffer->GetDataSize()) { PipelineStatistics statistics; statistics.video_bytes_decoded = buffer->GetDataSize(); statistics_cb_.Run(statistics); @@ -336,27 +336,22 @@ bool FFmpegVideoDecoder::Decode( scoped_refptr<VideoFrame>* video_frame) { DCHECK(video_frame); - // Reset frame to default values. - avcodec_get_frame_defaults(av_frame_); - // Create a packet for input data. // Due to FFmpeg API changes we no longer have const read-only pointers. AVPacket packet; av_init_packet(&packet); - if (buffer->IsEndOfStream()) { - packet.data = NULL; - packet.size = 0; - } else { - packet.data = const_cast<uint8*>(buffer->GetData()); - packet.size = buffer->GetDataSize(); + packet.data = const_cast<uint8*>(buffer->GetData()); + packet.size = buffer->GetDataSize(); - // Let FFmpeg handle presentation timestamp reordering. - codec_context_->reordered_opaque = buffer->GetTimestamp().InMicroseconds(); + // Let FFmpeg handle presentation timestamp reordering. + codec_context_->reordered_opaque = buffer->GetTimestamp().InMicroseconds(); - // This is for codecs not using get_buffer to initialize - // |av_frame_->reordered_opaque| - av_frame_->reordered_opaque = codec_context_->reordered_opaque; - } + // Reset frame to default values. + avcodec_get_frame_defaults(av_frame_); + + // This is for codecs not using get_buffer to initialize + // |av_frame_->reordered_opaque| + av_frame_->reordered_opaque = codec_context_->reordered_opaque; int frame_decoded = 0; int result = avcodec_decode_video2(codec_context_, @@ -365,7 +360,10 @@ bool FFmpegVideoDecoder::Decode( &packet); // Log the problem if we can't decode a video frame and exit early. if (result < 0) { - LOG(ERROR) << "Error decoding video: " << buffer->AsHumanReadableString(); + LOG(ERROR) << "Error decoding a video frame with timestamp: " + << buffer->GetTimestamp().InMicroseconds() << " us, duration: " + << buffer->GetDuration().InMicroseconds() << " us, packet size: " + << buffer->GetDataSize() << " bytes"; *video_frame = NULL; return false; } |