diff options
author | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-18 21:37:04 +0000 |
---|---|---|
committer | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-18 21:37:04 +0000 |
commit | 6cac5e0d44fe709949fb9e51f08a5a1d9141fe46 (patch) | |
tree | 9a9983acfef5154308dd932da6af083558aa1b63 | |
parent | fe6db703db974286f322d3aa310d7c8febbd2067 (diff) | |
download | chromium_src-6cac5e0d44fe709949fb9e51f08a5a1d9141fe46.zip chromium_src-6cac5e0d44fe709949fb9e51f08a5a1d9141fe46.tar.gz chromium_src-6cac5e0d44fe709949fb9e51f08a5a1d9141fe46.tar.bz2 |
RefCounted types should not have public destructors, media/ and gpu/ edition
BUG=123295
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10067035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137966 0039d316-1c4b-4281-b951-d872f2087c98
46 files changed, 286 insertions, 211 deletions
diff --git a/gpu/command_buffer/client/share_group.cc b/gpu/command_buffer/client/share_group.cc index e57ec60..39d9b85 100644 --- a/gpu/command_buffer/client/share_group.cc +++ b/gpu/command_buffer/client/share_group.cc @@ -223,6 +223,11 @@ ShareGroup::ShareGroup(bool share_resources, bool bind_generates_resource) program_info_manager_.reset(ProgramInfoManager::Create(false)); } +void ShareGroup::SetGLES2ImplementationForDestruction( + GLES2Implementation* gl_impl) { + gles2_ = gl_impl; +} + ShareGroup::~ShareGroup() { for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { id_handlers_[i]->Destroy(gles2_); @@ -230,11 +235,5 @@ ShareGroup::~ShareGroup() { } } -void ShareGroup::SetGLES2ImplementationForDestruction( - GLES2Implementation* gl_impl) { - gles2_ = gl_impl; -} - - } // namespace gles2 } // namespace gpu diff --git a/gpu/command_buffer/client/share_group.h b/gpu/command_buffer/client/share_group.h index 3a0df32..6762ff6 100644 --- a/gpu/command_buffer/client/share_group.h +++ b/gpu/command_buffer/client/share_group.h @@ -49,7 +49,6 @@ class GLES2_IMPL_EXPORT ShareGroup typedef scoped_refptr<ShareGroup> Ref; ShareGroup(bool share_resources, bool bind_generates_resource); - ~ShareGroup(); void SetGLES2ImplementationForDestruction(GLES2Implementation* gl_impl); @@ -72,6 +71,9 @@ class GLES2_IMPL_EXPORT ShareGroup } private: + friend class gpu::RefCountedThreadSafe<ShareGroup>; + ~ShareGroup(); + scoped_ptr<IdHandlerInterface> id_handlers_[id_namespaces::kNumIdNamespaces]; scoped_ptr<ProgramInfoManager> program_info_manager_; diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc index d873ace..2b6c8ef 100644 --- a/gpu/command_buffer/service/context_group.cc +++ b/gpu/command_buffer/service/context_group.cc @@ -47,51 +47,12 @@ ContextGroup::ContextGroup(MailboxManager* mailbox_manager, id_namespaces_[id_namespaces::kQueries].reset(new IdAllocator); } -ContextGroup::~ContextGroup() { - CHECK(num_contexts_ == 0); -} - static void GetIntegerv(GLenum pname, uint32* var) { GLint value = 0; glGetIntegerv(pname, &value); *var = value; } -bool ContextGroup::CheckGLFeature(GLint min_required, GLint* v) { - GLint value = *v; - if (enforce_gl_minimums_) { - value = std::min(min_required, value); - } - *v = value; - return value >= min_required; -} - -bool ContextGroup::CheckGLFeatureU(GLint min_required, uint32* v) { - GLint value = *v; - if (enforce_gl_minimums_) { - value = std::min(min_required, value); - } - *v = value; - return value >= min_required; -} - -bool ContextGroup::QueryGLFeature( - GLenum pname, GLint min_required, GLint* v) { - GLint value = 0; - glGetIntegerv(pname, &value); - *v = value; - return CheckGLFeature(min_required, v); -} - -bool ContextGroup::QueryGLFeatureU( - GLenum pname, GLint min_required, uint32* v) { - uint32 value = 0; - GetIntegerv(pname, &value); - bool result = CheckGLFeatureU(min_required, &value); - *v = value; - return result; -} - bool ContextGroup::Initialize(const DisallowedFeatures& disallowed_features, const char* allowed_features) { if (num_contexts_ > 0) { @@ -270,6 +231,45 @@ IdAllocatorInterface* ContextGroup::GetIdAllocator(unsigned namespace_id) { return id_namespaces_[namespace_id].get(); } +ContextGroup::~ContextGroup() { + CHECK(num_contexts_ == 0); +} + +bool ContextGroup::CheckGLFeature(GLint min_required, GLint* v) { + GLint value = *v; + if (enforce_gl_minimums_) { + value = std::min(min_required, value); + } + *v = value; + return value >= min_required; +} + +bool ContextGroup::CheckGLFeatureU(GLint min_required, uint32* v) { + GLint value = *v; + if (enforce_gl_minimums_) { + value = std::min(min_required, value); + } + *v = value; + return value >= min_required; +} + +bool ContextGroup::QueryGLFeature( + GLenum pname, GLint min_required, GLint* v) { + GLint value = 0; + glGetIntegerv(pname, &value); + *v = value; + return CheckGLFeature(min_required, v); +} + +bool ContextGroup::QueryGLFeatureU( + GLenum pname, GLint min_required, uint32* v) { + uint32 value = 0; + GetIntegerv(pname, &value); + bool result = CheckGLFeatureU(min_required, &value); + *v = value; + return result; +} + } // namespace gles2 } // namespace gpu diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h index 8c5477e..7b9118f 100644 --- a/gpu/command_buffer/service/context_group.h +++ b/gpu/command_buffer/service/context_group.h @@ -40,7 +40,6 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> { explicit ContextGroup(MailboxManager* mailbox_manager, bool bind_generates_resource); - ~ContextGroup(); // This should only be called by GLES2Decoder. This must be paired with a // call to destroy if it succeeds. @@ -118,6 +117,9 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> { IdAllocatorInterface* GetIdAllocator(unsigned namespace_id); private: + friend class base::RefCounted<ContextGroup>; + ~ContextGroup(); + bool CheckGLFeature(GLint min_required, GLint* v); bool CheckGLFeatureU(GLint min_required, uint32* v); bool QueryGLFeature(GLenum pname, GLint min_required, GLint* v); diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 8738cac..a7a1ab4 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -21,9 +21,6 @@ namespace gles2 { FeatureInfo::FeatureInfo() { } -FeatureInfo::~FeatureInfo() { -} - // Helps query for extensions. class ExtensionHelper { public: @@ -510,5 +507,8 @@ void FeatureInfo::AddExtensionString(const std::string& str) { } } +FeatureInfo::~FeatureInfo() { +} + } // namespace gles2 } // namespace gpu diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index da98c86..b626441 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h @@ -62,7 +62,6 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { }; FeatureInfo(); - ~FeatureInfo(); // If allowed features = NULL or "*", all features are allowed. Otherwise // only features that match the strings in allowed_features are allowed. @@ -87,6 +86,9 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { } private: + friend class base::RefCounted<FeatureInfo>; + ~FeatureInfo(); + void AddExtensionString(const std::string& str); Validators validators_; diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc index 4680a37..7ed551b 100644 --- a/gpu/command_buffer/service/framebuffer_manager.cc +++ b/gpu/command_buffer/service/framebuffer_manager.cc @@ -17,8 +17,6 @@ class RenderbufferAttachment : renderbuffer_(renderbuffer) { } - virtual ~RenderbufferAttachment() { } - virtual GLsizei width() const { return renderbuffer_->width(); } @@ -73,6 +71,9 @@ class RenderbufferAttachment return renderbuffer_.get(); } + protected: + virtual ~RenderbufferAttachment() { } + private: RenderbufferManager::RenderbufferInfo::Ref renderbuffer_; @@ -89,8 +90,6 @@ class TextureAttachment level_(level) { } - virtual ~TextureAttachment() { } - virtual GLsizei width() const { GLsizei temp_width = 0; GLsizei temp_height = 0; @@ -159,6 +158,9 @@ class TextureAttachment return (need & have) != 0; } + protected: + virtual ~TextureAttachment() { } + private: TextureManager::TextureInfo::Ref texture_; GLenum target_; diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h index d2dcee5..cc2cefb 100644 --- a/gpu/command_buffer/service/framebuffer_manager.h +++ b/gpu/command_buffer/service/framebuffer_manager.h @@ -30,7 +30,6 @@ class GPU_EXPORT FramebufferManager { public: typedef scoped_refptr<Attachment> Ref; - virtual ~Attachment() { } virtual GLsizei width() const = 0; virtual GLsizei height() const = 0; virtual GLenum internal_format() const = 0; @@ -45,6 +44,10 @@ class GPU_EXPORT FramebufferManager { virtual bool CanRenderTo() const = 0; virtual void DetachFromFramebuffer() = 0; virtual bool ValidForAttachmentType(GLenum attachment_type) = 0; + + protected: + friend class base::RefCounted<Attachment>; + virtual ~Attachment() {} }; FramebufferInfo(FramebufferManager* manager, GLuint service_id); diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc index 81ac83e..14a4ab4 100644 --- a/gpu/command_buffer/service/query_manager.cc +++ b/gpu/command_buffer/service/query_manager.cc @@ -18,12 +18,14 @@ class AllSamplesPassedQuery : public QueryManager::Query { AllSamplesPassedQuery( QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset, GLuint service_id); - virtual ~AllSamplesPassedQuery(); virtual bool Begin() OVERRIDE; virtual bool End(uint32 submit_count) OVERRIDE; virtual bool Process() OVERRIDE; virtual void Destroy(bool have_context) OVERRIDE; + protected: + virtual ~AllSamplesPassedQuery(); + private: // Service side query id. GLuint service_id_; @@ -36,16 +38,6 @@ AllSamplesPassedQuery::AllSamplesPassedQuery( service_id_(service_id) { } -AllSamplesPassedQuery::~AllSamplesPassedQuery() { -} - -void AllSamplesPassedQuery::Destroy(bool have_context) { - if (have_context && !IsDeleted()) { - glDeleteQueriesARB(1, &service_id_); - MarkAsDeleted(); - } -} - bool AllSamplesPassedQuery::Begin() { BeginQueryHelper(target(), service_id_); return true; @@ -70,17 +62,29 @@ bool AllSamplesPassedQuery::Process() { return MarkAsCompleted(result != 0); } +void AllSamplesPassedQuery::Destroy(bool have_context) { + if (have_context && !IsDeleted()) { + glDeleteQueriesARB(1, &service_id_); + MarkAsDeleted(); + } +} + +AllSamplesPassedQuery::~AllSamplesPassedQuery() { +} + class CommandsIssuedQuery : public QueryManager::Query { public: CommandsIssuedQuery( QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); - virtual ~CommandsIssuedQuery(); virtual bool Begin() OVERRIDE; virtual bool End(uint32 submit_count) OVERRIDE; virtual bool Process() OVERRIDE; virtual void Destroy(bool have_context) OVERRIDE; + protected: + virtual ~CommandsIssuedQuery(); + private: base::TimeTicks begin_time_; }; @@ -90,14 +94,6 @@ CommandsIssuedQuery::CommandsIssuedQuery( : Query(manager, target, shm_id, shm_offset) { } -CommandsIssuedQuery::~CommandsIssuedQuery() { -} - -bool CommandsIssuedQuery::Process() { - NOTREACHED(); - return true; -} - bool CommandsIssuedQuery::Begin() { begin_time_ = base::TimeTicks::HighResNow(); return true; @@ -110,12 +106,20 @@ bool CommandsIssuedQuery::End(uint32 submit_count) { std::min(elapsed.InMicroseconds(), static_cast<int64>(0xFFFFFFFFL))); } +bool CommandsIssuedQuery::Process() { + NOTREACHED(); + return true; +} + void CommandsIssuedQuery::Destroy(bool /* have_context */) { if (!IsDeleted()) { MarkAsDeleted(); } } +CommandsIssuedQuery::~CommandsIssuedQuery() { +} + QueryManager::QueryManager( CommonDecoder* decoder, FeatureInfo* feature_info) diff --git a/gpu/command_buffer/service/query_manager.h b/gpu/command_buffer/service/query_manager.h index 1560a94..7e3f38d 100644 --- a/gpu/command_buffer/service/query_manager.h +++ b/gpu/command_buffer/service/query_manager.h @@ -32,8 +32,7 @@ class GPU_EXPORT QueryManager { typedef scoped_refptr<Query> Ref; Query( - QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); - virtual ~Query(); + QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); GLenum target() const { return target_; @@ -71,6 +70,8 @@ class GPU_EXPORT QueryManager { virtual void Destroy(bool have_context) = 0; protected: + virtual ~Query(); + QueryManager* manager() const { return manager_; } diff --git a/media/audio/audio_input_controller.h b/media/audio/audio_input_controller.h index cb41270..200e0e4 100644 --- a/media/audio/audio_input_controller.h +++ b/media/audio/audio_input_controller.h @@ -117,8 +117,6 @@ class MEDIA_EXPORT AudioInputController virtual ~Factory() {} }; - virtual ~AudioInputController(); - // Factory method for creating an AudioInputController. // The audio device will be created on the audio thread, and when that is // done, the event handler will receive an OnCreated() call from that same @@ -181,6 +179,8 @@ class MEDIA_EXPORT AudioInputController } protected: + friend class base::RefCountedThreadSafe<AudioInputController>; + // Internal state of the source. enum State { kEmpty, @@ -191,6 +191,7 @@ class MEDIA_EXPORT AudioInputController }; AudioInputController(EventHandler* handler, SyncWriter* sync_writer); + virtual ~AudioInputController(); // Methods called on the audio thread (owned by the AudioManager). void DoCreate(AudioManager* audio_manager, const AudioParameters& params, diff --git a/media/audio/audio_output_dispatcher.h b/media/audio/audio_output_dispatcher.h index 5c96873..6f8d86e 100644 --- a/media/audio/audio_output_dispatcher.h +++ b/media/audio/audio_output_dispatcher.h @@ -52,7 +52,6 @@ class MEDIA_EXPORT AudioOutputDispatcher // Ownership of the |stream_proxy| is passed to the dispatcher. virtual void StopStream(AudioOutputProxy* stream_proxy) = 0; - // Called by AudioOutputProxy when the volume is set. virtual void StreamVolumeSet(AudioOutputProxy* stream_proxy, double volume) = 0; @@ -65,6 +64,8 @@ class MEDIA_EXPORT AudioOutputDispatcher protected: friend class base::RefCountedThreadSafe<AudioOutputDispatcher>; + friend class AudioOutputProxyTest; + virtual ~AudioOutputDispatcher(); // A no-reference-held pointer (we don't want circular references) back to the diff --git a/media/audio/null_audio_sink.cc b/media/audio/null_audio_sink.cc index a77d35e..447f285 100644 --- a/media/audio/null_audio_sink.cc +++ b/media/audio/null_audio_sink.cc @@ -17,10 +17,19 @@ NullAudioSink::NullAudioSink() thread_("NullAudioThread") { } -NullAudioSink::~NullAudioSink() { - DCHECK(!thread_.IsRunning()); - for (size_t i = 0; i < audio_data_.size(); ++i) - delete [] audio_data_[i]; +void NullAudioSink::Initialize(const AudioParameters& params, + RenderCallback* callback) { + DCHECK(!initialized_); + params_ = params; + + audio_data_.reserve(params.channels()); + for (int i = 0; i < params.channels(); ++i) { + float* channel_data = new float[params.frames_per_buffer()]; + audio_data_.push_back(channel_data); + } + + callback_ = callback; + initialized_ = true; } void NullAudioSink::Start() { @@ -64,19 +73,10 @@ void NullAudioSink::SetPlaying(bool is_playing) { playing_ = is_playing; } -void NullAudioSink::Initialize(const AudioParameters& params, - RenderCallback* callback) { - DCHECK(!initialized_); - params_ = params; - - audio_data_.reserve(params.channels()); - for (int i = 0; i < params.channels(); ++i) { - float* channel_data = new float[params.frames_per_buffer()]; - audio_data_.push_back(channel_data); - } - - callback_ = callback; - initialized_ = true; +NullAudioSink::~NullAudioSink() { + DCHECK(!thread_.IsRunning()); + for (size_t i = 0; i < audio_data_.size(); ++i) + delete [] audio_data_[i]; } void NullAudioSink::FillBufferTask() { diff --git a/media/audio/null_audio_sink.h b/media/audio/null_audio_sink.h index 32245eb..69519c9 100644 --- a/media/audio/null_audio_sink.h +++ b/media/audio/null_audio_sink.h @@ -24,7 +24,6 @@ class MEDIA_EXPORT NullAudioSink : NON_EXPORTED_BASE(public AudioRendererSink) { public: NullAudioSink(); - virtual ~NullAudioSink(); // AudioRendererSink implementation. virtual void Initialize(const AudioParameters& params, @@ -37,6 +36,9 @@ class MEDIA_EXPORT NullAudioSink virtual bool SetVolume(double volume) OVERRIDE; virtual void GetVolume(double* volume) OVERRIDE; + protected: + virtual ~NullAudioSink(); + private: // Audio thread task that periodically calls FillBuffer() to consume // audio data. diff --git a/media/audio/test_audio_input_controller_factory.cc b/media/audio/test_audio_input_controller_factory.cc index 04ab11c..c2f5ef8 100644 --- a/media/audio/test_audio_input_controller_factory.cc +++ b/media/audio/test_audio_input_controller_factory.cc @@ -18,15 +18,15 @@ TestAudioInputController::TestAudioInputController( message_loop_ = audio_manager->GetMessageLoop(); } +void TestAudioInputController::Close(const base::Closure& closed_task) { + message_loop_->PostTask(FROM_HERE, closed_task); +} + TestAudioInputController::~TestAudioInputController() { // Inform the factory so that it allows creating new instances in future. factory_->OnTestAudioInputControllerDestroyed(this); } -void TestAudioInputController::Close(const base::Closure& closed_task) { - message_loop_->PostTask(FROM_HERE, closed_task); -} - TestAudioInputControllerFactory::TestAudioInputControllerFactory() : controller_(NULL) { } diff --git a/media/audio/test_audio_input_controller_factory.h b/media/audio/test_audio_input_controller_factory.h index 2915203..a37b776 100644 --- a/media/audio/test_audio_input_controller_factory.h +++ b/media/audio/test_audio_input_controller_factory.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. @@ -49,7 +49,6 @@ class TestAudioInputController : public AudioInputController { AudioManager* audio_manager, EventHandler* event_handler, SyncWriter* sync_writer); - virtual ~TestAudioInputController(); // Returns the event handler installed on the AudioInputController. EventHandler* event_handler() const { return event_handler_; } @@ -61,6 +60,9 @@ class TestAudioInputController : public AudioInputController { // Ensure that the closure is run on the audio-manager thread. virtual void Close(const base::Closure& closed_task) OVERRIDE; + protected: + virtual ~TestAudioInputController(); + private: // These are not owned by us and expected to be valid for this object's // lifetime. diff --git a/media/base/audio_renderer_sink.h b/media/base/audio_renderer_sink.h index 140890c..37979f91 100644 --- a/media/base/audio_renderer_sink.h +++ b/media/base/audio_renderer_sink.h @@ -38,8 +38,6 @@ class AudioRendererSink virtual ~RenderCallback() {} }; - virtual ~AudioRendererSink() {} - // Sets important information about the audio stream format. // It must be called before any of the other methods. virtual void Initialize(const AudioParameters& params, @@ -67,6 +65,10 @@ class AudioRendererSink // Gets the playback volume, with range [0.0, 1.0] inclusive. virtual void GetVolume(double* volume) = 0; + + protected: + friend class base::RefCountedThreadSafe<AudioRendererSink>; + virtual ~AudioRendererSink() {} }; } // namespace media diff --git a/media/base/buffers_unittest.cc b/media/base/buffers_unittest.cc index 206f4f0..6cf0e09 100644 --- a/media/base/buffers_unittest.cc +++ b/media/base/buffers_unittest.cc @@ -25,12 +25,13 @@ class TestBuffer : public Buffer { size_(size) { } - virtual ~TestBuffer() {} - // Buffer implementation. virtual const uint8* GetData() const OVERRIDE { return data_; } virtual int GetDataSize() const OVERRIDE { return size_; } + protected: + virtual ~TestBuffer() {} + private: const uint8* data_; int size_; diff --git a/media/base/filters.h b/media/base/filters.h index eb58ab4..0660663 100644 --- a/media/base/filters.h +++ b/media/base/filters.h @@ -121,6 +121,9 @@ class MEDIA_EXPORT VideoRenderer : public Filter { // Returns true if this filter has received and processed an end-of-stream // buffer. virtual bool HasEnded() = 0; + + protected: + virtual ~VideoRenderer() {} }; class MEDIA_EXPORT AudioRenderer : public Filter { @@ -152,6 +155,9 @@ class MEDIA_EXPORT AudioRenderer : public Filter { // |buffer_more_audio| is set to true if you want to increase the size of the // decoded audio buffer. virtual void ResumeAfterUnderflow(bool buffer_more_audio) = 0; + + protected: + virtual ~AudioRenderer() {} }; } // namespace media diff --git a/media/base/mock_callback.cc b/media/base/mock_callback.cc index 58cc98e..e9d2da3 100644 --- a/media/base/mock_callback.cc +++ b/media/base/mock_callback.cc @@ -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. @@ -23,8 +23,12 @@ base::Closure NewExpectedClosure() { class MockStatusCB : public base::RefCountedThreadSafe<MockStatusCB> { public: MockStatusCB() {} - virtual ~MockStatusCB() {} MOCK_METHOD1(Run, void(PipelineStatus)); + + protected: + friend class base::RefCountedThreadSafe<MockStatusCB>; + virtual ~MockStatusCB() {} + private: DISALLOW_COPY_AND_ASSIGN(MockStatusCB); }; diff --git a/media/base/mock_callback.h b/media/base/mock_callback.h index 6d50844..00d8276 100644 --- a/media/base/mock_callback.h +++ b/media/base/mock_callback.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. @@ -17,8 +17,12 @@ namespace media { class MockClosure : public base::RefCountedThreadSafe<MockClosure> { public: MockClosure(); - virtual ~MockClosure(); MOCK_METHOD0(Run, void()); + + protected: + friend class base::RefCountedThreadSafe<MockClosure>; + virtual ~MockClosure(); + private: DISALLOW_COPY_AND_ASSIGN(MockClosure); }; diff --git a/media/base/stream_parser_buffer.cc b/media/base/stream_parser_buffer.cc index ed4150c..b6c3970 100644 --- a/media/base/stream_parser_buffer.cc +++ b/media/base/stream_parser_buffer.cc @@ -8,13 +8,6 @@ namespace media { -StreamParserBuffer::StreamParserBuffer(const uint8* data, int data_size, - bool is_keyframe) - : DataBuffer(data, data_size), - is_keyframe_(is_keyframe) { - SetDuration(kNoTimestamp()); -} - scoped_refptr<StreamParserBuffer> StreamParserBuffer::CreateEOSBuffer() { return make_scoped_refptr(new StreamParserBuffer(NULL, 0, false)); } @@ -31,4 +24,15 @@ base::TimeDelta StreamParserBuffer::GetEndTimestamp() const { return GetTimestamp() + GetDuration(); } +StreamParserBuffer::StreamParserBuffer(const uint8* data, int data_size, + bool is_keyframe) + : DataBuffer(data, data_size), + is_keyframe_(is_keyframe) { + SetDuration(kNoTimestamp()); +} + + +StreamParserBuffer::~StreamParserBuffer() { +} + } // namespace media diff --git a/media/base/stream_parser_buffer.h b/media/base/stream_parser_buffer.h index fb36213..cdd01c5 100644 --- a/media/base/stream_parser_buffer.h +++ b/media/base/stream_parser_buffer.h @@ -22,7 +22,7 @@ class MEDIA_EXPORT StreamParserBuffer : public DataBuffer { private: StreamParserBuffer(const uint8* data, int data_size, bool is_keyframe); - virtual ~StreamParserBuffer() {} + virtual ~StreamParserBuffer(); bool is_keyframe_; DISALLOW_COPY_AND_ASSIGN(StreamParserBuffer); diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc index 8b6bb50..bed9a68 100644 --- a/media/filters/audio_renderer_impl.cc +++ b/media/filters/audio_renderer_impl.cc @@ -31,12 +31,6 @@ AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink) base::Unretained(this))) { } -AudioRendererImpl::~AudioRendererImpl() { - // Stop() should have been called and |algorithm_| should have been destroyed. - DCHECK(state_ == kUninitialized || state_ == kStopped); - DCHECK(!algorithm_.get()); -} - void AudioRendererImpl::Play(const base::Closure& callback) { { base::AutoLock auto_lock(lock_); @@ -226,6 +220,12 @@ void AudioRendererImpl::SetVolume(float volume) { sink_->SetVolume(volume); } +AudioRendererImpl::~AudioRendererImpl() { + // Stop() should have been called and |algorithm_| should have been destroyed. + DCHECK(state_ == kUninitialized || state_ == kStopped); + DCHECK(!algorithm_.get()); +} + void AudioRendererImpl::DecodedAudioReady(scoped_refptr<Buffer> buffer) { base::AutoLock auto_lock(lock_); DCHECK(state_ == kPaused || state_ == kSeeking || state_ == kPlaying || diff --git a/media/filters/audio_renderer_impl.h b/media/filters/audio_renderer_impl.h index c3f4015..0a6d660 100644 --- a/media/filters/audio_renderer_impl.h +++ b/media/filters/audio_renderer_impl.h @@ -38,7 +38,6 @@ class MEDIA_EXPORT AudioRendererImpl // Methods called on Render thread ------------------------------------------ // An AudioRendererSink is used as the destination for the rendered audio. explicit AudioRendererImpl(media::AudioRendererSink* sink); - virtual ~AudioRendererImpl(); // Methods called on pipeline thread ---------------------------------------- // Filter implementation. @@ -58,6 +57,9 @@ class MEDIA_EXPORT AudioRendererImpl virtual void ResumeAfterUnderflow(bool buffer_more_audio) OVERRIDE; virtual void SetVolume(float volume) OVERRIDE; + protected: + virtual ~AudioRendererImpl(); + private: friend class AudioRendererImplTest; FRIEND_TEST_ALL_PREFIXES(AudioRendererImplTest, EndOfStream); diff --git a/media/filters/audio_renderer_impl_unittest.cc b/media/filters/audio_renderer_impl_unittest.cc index 7dfd5db..84921b9 100644 --- a/media/filters/audio_renderer_impl_unittest.cc +++ b/media/filters/audio_renderer_impl_unittest.cc @@ -32,6 +32,9 @@ class MockAudioSink : public media::AudioRendererSink { MOCK_METHOD1(SetPlaybackRate, void(float rate)); MOCK_METHOD1(SetVolume, bool(double volume)); MOCK_METHOD1(GetVolume, void(double* volume)); + + protected: + virtual ~MockAudioSink() {} }; } // namespace diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index 92489ce..ec7cdcb 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc @@ -123,7 +123,6 @@ class ChunkDemuxerStream : public DemuxerStream { explicit ChunkDemuxerStream(const AudioDecoderConfig& audio_config); explicit ChunkDemuxerStream(const VideoDecoderConfig& video_config); - virtual ~ChunkDemuxerStream(); void Flush(); void Seek(base::TimeDelta time); @@ -150,6 +149,9 @@ class ChunkDemuxerStream : public DemuxerStream { virtual const AudioDecoderConfig& audio_decoder_config() OVERRIDE; virtual const VideoDecoderConfig& video_decoder_config() OVERRIDE; + protected: + virtual ~ChunkDemuxerStream(); + private: enum State { RETURNING_DATA_FOR_READS, @@ -203,8 +205,6 @@ ChunkDemuxerStream::ChunkDemuxerStream(const VideoDecoderConfig& video_config) video_config_.CopyFrom(video_config); } -ChunkDemuxerStream::~ChunkDemuxerStream() {} - void ChunkDemuxerStream::Flush() { DVLOG(1) << "Flush()"; ReadCBQueue read_cbs; @@ -417,6 +417,8 @@ void ChunkDemuxerStream::ChangeState_Locked(State state) { state_ = state; } +ChunkDemuxerStream::~ChunkDemuxerStream() {} + void ChunkDemuxerStream::DeferRead_Locked(const ReadCB& read_cb) { lock_.AssertAcquired(); // Wrap & store |read_cb| so that it will @@ -460,10 +462,6 @@ ChunkDemuxer::ChunkDemuxer(ChunkDemuxerClient* client) DCHECK(client); } -ChunkDemuxer::~ChunkDemuxer() { - DCHECK_NE(state_, INITIALIZED); -} - void ChunkDemuxer::Initialize(DemuxerHost* host, const PipelineStatusCB& cb) { DVLOG(1) << "Init()"; @@ -813,6 +811,10 @@ void ChunkDemuxer::ChangeState_Locked(State new_state) { state_ = new_state; } +ChunkDemuxer::~ChunkDemuxer() { + DCHECK_NE(state_, INITIALIZED); +} + void ChunkDemuxer::ReportError_Locked(PipelineStatus error) { lock_.AssertAcquired(); DCHECK_NE(error, PIPELINE_OK); diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h index 8c5dd0b..9f570a8 100644 --- a/media/filters/chunk_demuxer.h +++ b/media/filters/chunk_demuxer.h @@ -34,7 +34,6 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { typedef std::vector<std::pair<base::TimeDelta, base::TimeDelta> > Ranges; explicit ChunkDemuxer(ChunkDemuxerClient* client); - virtual ~ChunkDemuxer(); // Demuxer implementation. virtual void Initialize(DemuxerHost* host, @@ -82,6 +81,9 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { bool HasEnded(); void Shutdown(); + protected: + virtual ~ChunkDemuxer(); + private: enum State { WAITING_FOR_INIT, diff --git a/media/filters/dummy_demuxer.cc b/media/filters/dummy_demuxer.cc index 1b3b369..4e112cf 100644 --- a/media/filters/dummy_demuxer.cc +++ b/media/filters/dummy_demuxer.cc @@ -44,8 +44,6 @@ DummyDemuxer::DummyDemuxer(bool has_video, bool has_audio) new DummyDemuxerStream(DemuxerStream::VIDEO); } -DummyDemuxer::~DummyDemuxer() {} - void DummyDemuxer::Initialize(DemuxerHost* host, const PipelineStatusCB& status_cb) { host->SetDuration(media::kInfiniteDuration()); @@ -64,4 +62,6 @@ int DummyDemuxer::GetBitrate() { return 0; } +DummyDemuxer::~DummyDemuxer() {} + } // namespace media diff --git a/media/filters/dummy_demuxer.h b/media/filters/dummy_demuxer.h index e62c117..9cb184b 100644 --- a/media/filters/dummy_demuxer.h +++ b/media/filters/dummy_demuxer.h @@ -29,9 +29,10 @@ class DummyDemuxerStream : public DemuxerStream { virtual const VideoDecoderConfig& video_decoder_config() OVERRIDE; virtual void EnableBitstreamConverter() OVERRIDE; - private: + protected: virtual ~DummyDemuxerStream(); + private: Type type_; AudioDecoderConfig audio_config_; VideoDecoderConfig video_config_; @@ -42,7 +43,6 @@ class DummyDemuxerStream : public DemuxerStream { class MEDIA_EXPORT DummyDemuxer : public Demuxer { public: DummyDemuxer(bool has_video, bool has_audio); - virtual ~DummyDemuxer(); // Demuxer implementation. virtual void Initialize(DemuxerHost* host, @@ -52,6 +52,9 @@ class MEDIA_EXPORT DummyDemuxer : public Demuxer { virtual base::TimeDelta GetStartTime() const OVERRIDE; virtual int GetBitrate() OVERRIDE; + protected: + virtual ~DummyDemuxer(); + private: bool has_video_; bool has_audio_; diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc index c5a7001..dc660e5 100644 --- a/media/filters/ffmpeg_audio_decoder.cc +++ b/media/filters/ffmpeg_audio_decoder.cc @@ -57,18 +57,6 @@ FFmpegAudioDecoder::FFmpegAudioDecoder( decoded_audio_(static_cast<uint8*>(av_malloc(decoded_audio_size_))) { } -FFmpegAudioDecoder::~FFmpegAudioDecoder() { - av_free(decoded_audio_); - - // TODO(scherkus): should we require Stop() to be called? this might end up - // getting called on a random thread due to refcounting. - if (codec_context_) { - av_free(codec_context_->extradata); - avcodec_close(codec_context_); - av_free(codec_context_); - } -} - void FFmpegAudioDecoder::Initialize( const scoped_refptr<DemuxerStream>& stream, const PipelineStatusCB& status_cb, @@ -111,6 +99,18 @@ void FFmpegAudioDecoder::Reset(const base::Closure& closure) { &FFmpegAudioDecoder::DoReset, this, closure)); } +FFmpegAudioDecoder::~FFmpegAudioDecoder() { + av_free(decoded_audio_); + + // TODO(scherkus): should we require Stop() to be called? this might end up + // getting called on a random thread due to refcounting. + if (codec_context_) { + av_free(codec_context_->extradata); + avcodec_close(codec_context_); + av_free(codec_context_); + } +} + void FFmpegAudioDecoder::DoInitialize( const scoped_refptr<DemuxerStream>& stream, const PipelineStatusCB& status_cb, diff --git a/media/filters/ffmpeg_audio_decoder.h b/media/filters/ffmpeg_audio_decoder.h index 51d8e00..04739a2 100644 --- a/media/filters/ffmpeg_audio_decoder.h +++ b/media/filters/ffmpeg_audio_decoder.h @@ -20,7 +20,6 @@ class DataBuffer; class MEDIA_EXPORT FFmpegAudioDecoder : public AudioDecoder { public: FFmpegAudioDecoder(const base::Callback<MessageLoop*()>& message_loop_cb); - virtual ~FFmpegAudioDecoder(); // AudioDecoder implementation. virtual void Initialize(const scoped_refptr<DemuxerStream>& stream, @@ -32,6 +31,9 @@ class MEDIA_EXPORT FFmpegAudioDecoder : public AudioDecoder { virtual int samples_per_second() OVERRIDE; virtual void Reset(const base::Closure& closure) OVERRIDE; + protected: + virtual ~FFmpegAudioDecoder(); + private: // Methods running on decoder thread. void DoInitialize(const scoped_refptr<DemuxerStream>& stream, diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc index fd688d0..b91134c 100644 --- a/media/filters/ffmpeg_demuxer.cc +++ b/media/filters/ffmpeg_demuxer.cc @@ -35,8 +35,6 @@ class AVPacketBuffer : public Buffer { packet_(packet.Pass()) { } - virtual ~AVPacketBuffer() {} - // Buffer implementation. virtual const uint8* GetData() const { return reinterpret_cast<const uint8*>(packet_->data); @@ -46,6 +44,9 @@ class AVPacketBuffer : public Buffer { return packet_->size; } + protected: + virtual ~AVPacketBuffer() {} + private: scoped_ptr_malloc<AVPacket, ScopedPtrAVFreePacket> packet_; @@ -84,13 +85,6 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer, duration_ = ConvertStreamTimestamp(stream->time_base, stream->duration); } -FFmpegDemuxerStream::~FFmpegDemuxerStream() { - base::AutoLock auto_lock(lock_); - DCHECK(stopped_); - DCHECK(read_queue_.empty()); - DCHECK(buffer_queue_.empty()); -} - bool FFmpegDemuxerStream::HasPendingReads() { DCHECK_EQ(MessageLoop::current(), demuxer_->message_loop()); base::AutoLock auto_lock(lock_); @@ -264,6 +258,13 @@ const VideoDecoderConfig& FFmpegDemuxerStream::video_decoder_config() { return video_config_; } +FFmpegDemuxerStream::~FFmpegDemuxerStream() { + base::AutoLock auto_lock(lock_); + DCHECK(stopped_); + DCHECK(read_queue_.empty()); + DCHECK(buffer_queue_.empty()); +} + // static base::TimeDelta FFmpegDemuxerStream::ConvertStreamTimestamp( const AVRational& time_base, int64 timestamp) { diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h index 6fa0bd6..e0864e7 100644 --- a/media/filters/ffmpeg_demuxer.h +++ b/media/filters/ffmpeg_demuxer.h @@ -84,9 +84,11 @@ class FFmpegDemuxerStream : public DemuxerStream { virtual const AudioDecoderConfig& audio_decoder_config() OVERRIDE; virtual const VideoDecoderConfig& video_decoder_config() OVERRIDE; + protected: + virtual ~FFmpegDemuxerStream(); + private: friend class FFmpegDemuxerTest; - virtual ~FFmpegDemuxerStream(); // Carries out enqueuing a pending read on the demuxer thread. void ReadTask(const ReadCB& read_cb); @@ -132,7 +134,6 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol { public: FFmpegDemuxer(MessageLoop* message_loop, const scoped_refptr<DataSource>& data_source); - virtual ~FFmpegDemuxer(); // Posts a task to perform additional demuxing. virtual void PostDemuxTask(); @@ -163,6 +164,8 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol { // To allow tests access to privates. friend class FFmpegDemuxerTest; + virtual ~FFmpegDemuxer(); + // Carries out initialization on the demuxer thread. void InitializeTask(DemuxerHost* host, const PipelineStatusCB& status_cb); diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index b5d5602..1d6f5db 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc @@ -429,14 +429,17 @@ class MockReadCB : public base::RefCountedThreadSafe<MockReadCB> { public: MockReadCB() {} + MOCK_METHOD0(OnDelete, void()); + MOCK_METHOD1(Run, void(const scoped_refptr<Buffer>& buffer)); + + protected: virtual ~MockReadCB() { OnDelete(); } - MOCK_METHOD0(OnDelete, void()); - MOCK_METHOD1(Run, void(const scoped_refptr<Buffer>& buffer)); - private: + friend class base::RefCountedThreadSafe<MockReadCB>; + DISALLOW_COPY_AND_ASSIGN(MockReadCB); }; diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc index 5ba22a0..f85b6cb 100644 --- a/media/filters/ffmpeg_video_decoder.cc +++ b/media/filters/ffmpeg_video_decoder.cc @@ -59,10 +59,6 @@ FFmpegVideoDecoder::FFmpegVideoDecoder( frame_rate_denominator_(0) { } -FFmpegVideoDecoder::~FFmpegVideoDecoder() { - ReleaseFFmpegResources(); -} - void FFmpegVideoDecoder::Initialize(const scoped_refptr<DemuxerStream>& stream, const PipelineStatusCB& status_cb, const StatisticsCB& statistics_cb) { @@ -179,6 +175,10 @@ AesDecryptor* FFmpegVideoDecoder::decryptor() { return &decryptor_; } +FFmpegVideoDecoder::~FFmpegVideoDecoder() { + ReleaseFFmpegResources(); +} + void FFmpegVideoDecoder::DoRead(const ReadCB& read_cb) { DCHECK_EQ(MessageLoop::current(), message_loop_); DCHECK(!read_cb.is_null()); diff --git a/media/filters/ffmpeg_video_decoder.h b/media/filters/ffmpeg_video_decoder.h index 15a0893..d1d181d 100644 --- a/media/filters/ffmpeg_video_decoder.h +++ b/media/filters/ffmpeg_video_decoder.h @@ -22,7 +22,6 @@ namespace media { class MEDIA_EXPORT FFmpegVideoDecoder : public VideoDecoder { public: FFmpegVideoDecoder(const base::Callback<MessageLoop*()>& message_loop_cb); - virtual ~FFmpegVideoDecoder(); // VideoDecoder implementation. virtual void Initialize(const scoped_refptr<DemuxerStream>& stream, @@ -35,6 +34,9 @@ class MEDIA_EXPORT FFmpegVideoDecoder : public VideoDecoder { AesDecryptor* decryptor(); + protected: + virtual ~FFmpegVideoDecoder(); + private: enum DecoderState { kUninitialized, diff --git a/media/filters/file_data_source.cc b/media/filters/file_data_source.cc index 0ba38cc..8491bfc 100644 --- a/media/filters/file_data_source.cc +++ b/media/filters/file_data_source.cc @@ -26,10 +26,6 @@ FileDataSource::FileDataSource(bool disable_file_size) disable_file_size_(disable_file_size) { } -FileDataSource::~FileDataSource() { - DCHECK(!file_); -} - PipelineStatus FileDataSource::Initialize(const std::string& url) { DCHECK(!file_); #if defined(OS_WIN) @@ -54,13 +50,6 @@ void FileDataSource::set_host(DataSourceHost* host) { UpdateHostBytes(); } -void FileDataSource::UpdateHostBytes() { - if (host() && file_) { - host()->SetTotalBytes(file_size_); - host()->SetBufferedBytes(file_size_); - } -} - void FileDataSource::Stop(const base::Closure& callback) { base::AutoLock l(lock_); if (file_) { @@ -114,4 +103,15 @@ bool FileDataSource::IsStreaming() { void FileDataSource::SetBitrate(int bitrate) {} +FileDataSource::~FileDataSource() { + DCHECK(!file_); +} + +void FileDataSource::UpdateHostBytes() { + if (host() && file_) { + host()->SetTotalBytes(file_size_); + host()->SetBufferedBytes(file_size_); + } +} + } // namespace media diff --git a/media/filters/file_data_source.h b/media/filters/file_data_source.h index bcbc591..f180767 100644 --- a/media/filters/file_data_source.h +++ b/media/filters/file_data_source.h @@ -19,7 +19,6 @@ class MEDIA_EXPORT FileDataSource : public DataSource { public: FileDataSource(); FileDataSource(bool disable_file_size); - virtual ~FileDataSource(); PipelineStatus Initialize(const std::string& url); @@ -32,6 +31,9 @@ class MEDIA_EXPORT FileDataSource : public DataSource { virtual bool IsStreaming() OVERRIDE; virtual void SetBitrate(int bitrate) OVERRIDE; + protected: + virtual ~FileDataSource(); + private: // Informs the host of changes in total and buffered bytes. void UpdateHostBytes(); diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc index 17b46fa..74b3b1a 100644 --- a/media/filters/gpu_video_decoder.cc +++ b/media/filters/gpu_video_decoder.cc @@ -58,22 +58,6 @@ GpuVideoDecoder::GpuVideoDecoder( DCHECK(gvd_loop_proxy_ && factories_); } -GpuVideoDecoder::~GpuVideoDecoder() { - DCHECK(!vda_); // Stop should have been already called. - DCHECK(pending_read_cb_.is_null()); - for (size_t i = 0; i < available_shm_segments_.size(); ++i) { - available_shm_segments_[i]->shm->Close(); - delete available_shm_segments_[i]; - } - available_shm_segments_.clear(); - for (std::map<int32, BufferPair>::iterator it = - bitstream_buffers_in_decoder_.begin(); - it != bitstream_buffers_in_decoder_.end(); ++it) { - it->second.shm_buffer->shm->Close(); - } - bitstream_buffers_in_decoder_.clear(); -} - void GpuVideoDecoder::Reset(const base::Closure& closure) { if (!gvd_loop_proxy_->BelongsToCurrentThread() || state_ == kDrainingDecoder) { @@ -472,6 +456,22 @@ void GpuVideoDecoder::NotifyEndOfBitstreamBuffer(int32 id) { } } +GpuVideoDecoder::~GpuVideoDecoder() { + DCHECK(!vda_); // Stop should have been already called. + DCHECK(pending_read_cb_.is_null()); + for (size_t i = 0; i < available_shm_segments_.size(); ++i) { + available_shm_segments_[i]->shm->Close(); + delete available_shm_segments_[i]; + } + available_shm_segments_.clear(); + for (std::map<int32, BufferPair>::iterator it = + bitstream_buffers_in_decoder_.begin(); + it != bitstream_buffers_in_decoder_.end(); ++it) { + it->second.shm_buffer->shm->Close(); + } + bitstream_buffers_in_decoder_.clear(); +} + void GpuVideoDecoder::EnsureDemuxOrDecode() { DCHECK(gvd_loop_proxy_->BelongsToCurrentThread()); if (demuxer_read_in_progress_) diff --git a/media/filters/gpu_video_decoder.h b/media/filters/gpu_video_decoder.h index 894cf3c..b91b015 100644 --- a/media/filters/gpu_video_decoder.h +++ b/media/filters/gpu_video_decoder.h @@ -55,7 +55,6 @@ class MEDIA_EXPORT GpuVideoDecoder GpuVideoDecoder(MessageLoop* message_loop, MessageLoop* vda_loop, const scoped_refptr<Factories>& factories); - virtual ~GpuVideoDecoder(); // VideoDecoder implementation. virtual void Initialize(const scoped_refptr<DemuxerStream>& stream, @@ -79,6 +78,9 @@ class MEDIA_EXPORT GpuVideoDecoder virtual void NotifyResetDone() OVERRIDE; virtual void NotifyError(media::VideoDecodeAccelerator::Error error) OVERRIDE; + protected: + virtual ~GpuVideoDecoder(); + private: enum State { kNormal, diff --git a/media/filters/video_frame_generator.cc b/media/filters/video_frame_generator.cc index ece499c..c901b9e 100644 --- a/media/filters/video_frame_generator.cc +++ b/media/filters/video_frame_generator.cc @@ -21,8 +21,6 @@ VideoFrameGenerator::VideoFrameGenerator( frame_duration_(frame_duration) { } -VideoFrameGenerator::~VideoFrameGenerator() {} - void VideoFrameGenerator::Initialize( const scoped_refptr<DemuxerStream>& stream, const PipelineStatusCB& status_cb, @@ -55,6 +53,8 @@ const gfx::Size& VideoFrameGenerator::natural_size() { return natural_size_; } +VideoFrameGenerator::~VideoFrameGenerator() {} + void VideoFrameGenerator::InitializeOnDecoderThread( const scoped_refptr<DemuxerStream>& /* stream */, const PipelineStatusCB& status_cb, diff --git a/media/filters/video_frame_generator.h b/media/filters/video_frame_generator.h index faf50fc..5457145 100644 --- a/media/filters/video_frame_generator.h +++ b/media/filters/video_frame_generator.h @@ -26,7 +26,6 @@ class MEDIA_EXPORT VideoFrameGenerator : public VideoDecoder { base::MessageLoopProxy* message_loop_proxy, const gfx::Size& size, const base::TimeDelta& frame_duration); - virtual ~VideoFrameGenerator(); // VideoDecoder implementation. virtual void Initialize( @@ -38,6 +37,9 @@ class MEDIA_EXPORT VideoFrameGenerator : public VideoDecoder { virtual void Stop(const base::Closure& closure) OVERRIDE; virtual const gfx::Size& natural_size() OVERRIDE; + protected: + virtual ~VideoFrameGenerator(); + private: void InitializeOnDecoderThread( const scoped_refptr<DemuxerStream>& stream, diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc index e3a5fe0..b0672f5 100644 --- a/media/filters/video_renderer_base.cc +++ b/media/filters/video_renderer_base.cc @@ -31,11 +31,6 @@ VideoRendererBase::VideoRendererBase(const base::Closure& paint_cb, DCHECK(!paint_cb_.is_null()); } -VideoRendererBase::~VideoRendererBase() { - base::AutoLock auto_lock(lock_); - DCHECK(state_ == kUninitialized || state_ == kStopped) << state_; -} - void VideoRendererBase::Play(const base::Closure& callback) { base::AutoLock auto_lock(lock_); DCHECK_EQ(kPrerolled, state_); @@ -358,6 +353,11 @@ void VideoRendererBase::PutCurrentFrame(scoped_refptr<VideoFrame> frame) { } } +VideoRendererBase::~VideoRendererBase() { + base::AutoLock auto_lock(lock_); + DCHECK(state_ == kUninitialized || state_ == kStopped) << state_; +} + void VideoRendererBase::FrameReady(VideoDecoder::DecoderStatus status, scoped_refptr<VideoFrame> frame) { base::AutoLock auto_lock(lock_); diff --git a/media/filters/video_renderer_base.h b/media/filters/video_renderer_base.h index 6f2a459..983f310 100644 --- a/media/filters/video_renderer_base.h +++ b/media/filters/video_renderer_base.h @@ -45,7 +45,6 @@ class MEDIA_EXPORT VideoRendererBase VideoRendererBase(const base::Closure& paint_cb, const SetOpaqueCB& set_opaque_cb, bool drop_frames); - virtual ~VideoRendererBase(); // Filter implementation. virtual void Play(const base::Closure& callback) OVERRIDE; @@ -74,6 +73,9 @@ class MEDIA_EXPORT VideoRendererBase void GetCurrentFrame(scoped_refptr<VideoFrame>* frame_out); void PutCurrentFrame(scoped_refptr<VideoFrame> frame); + protected: + virtual ~VideoRendererBase(); + private: // Callback from the video decoder delivering decoded video frames and // reporting video decoder status. diff --git a/media/video/capture/video_capture.h b/media/video/capture/video_capture.h index 4f583b3..b825dff 100644 --- a/media/video/capture/video_capture.h +++ b/media/video/capture/video_capture.h @@ -27,7 +27,6 @@ class MEDIA_EXPORT VideoCapture { stride(0), buffer_size(0), memory_pointer(NULL) {} - ~VideoFrameBuffer() {} int width; int height; @@ -37,6 +36,9 @@ class MEDIA_EXPORT VideoCapture { base::Time timestamp; private: + friend class base::RefCountedThreadSafe<VideoFrameBuffer>; + ~VideoFrameBuffer() {} + DISALLOW_COPY_AND_ASSIGN(VideoFrameBuffer); }; |