summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-18 21:37:04 +0000
committerrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-18 21:37:04 +0000
commit6cac5e0d44fe709949fb9e51f08a5a1d9141fe46 (patch)
tree9a9983acfef5154308dd932da6af083558aa1b63
parentfe6db703db974286f322d3aa310d7c8febbd2067 (diff)
downloadchromium_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
-rw-r--r--gpu/command_buffer/client/share_group.cc11
-rw-r--r--gpu/command_buffer/client/share_group.h4
-rw-r--r--gpu/command_buffer/service/context_group.cc78
-rw-r--r--gpu/command_buffer/service/context_group.h4
-rw-r--r--gpu/command_buffer/service/feature_info.cc6
-rw-r--r--gpu/command_buffer/service/feature_info.h4
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.cc10
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.h5
-rw-r--r--gpu/command_buffer/service/query_manager.cc44
-rw-r--r--gpu/command_buffer/service/query_manager.h5
-rw-r--r--media/audio/audio_input_controller.h5
-rw-r--r--media/audio/audio_output_dispatcher.h3
-rw-r--r--media/audio/null_audio_sink.cc34
-rw-r--r--media/audio/null_audio_sink.h4
-rw-r--r--media/audio/test_audio_input_controller_factory.cc8
-rw-r--r--media/audio/test_audio_input_controller_factory.h6
-rw-r--r--media/base/audio_renderer_sink.h6
-rw-r--r--media/base/buffers_unittest.cc5
-rw-r--r--media/base/filters.h6
-rw-r--r--media/base/mock_callback.cc8
-rw-r--r--media/base/mock_callback.h8
-rw-r--r--media/base/stream_parser_buffer.cc18
-rw-r--r--media/base/stream_parser_buffer.h2
-rw-r--r--media/filters/audio_renderer_impl.cc12
-rw-r--r--media/filters/audio_renderer_impl.h4
-rw-r--r--media/filters/audio_renderer_impl_unittest.cc3
-rw-r--r--media/filters/chunk_demuxer.cc16
-rw-r--r--media/filters/chunk_demuxer.h4
-rw-r--r--media/filters/dummy_demuxer.cc4
-rw-r--r--media/filters/dummy_demuxer.h7
-rw-r--r--media/filters/ffmpeg_audio_decoder.cc24
-rw-r--r--media/filters/ffmpeg_audio_decoder.h4
-rw-r--r--media/filters/ffmpeg_demuxer.cc19
-rw-r--r--media/filters/ffmpeg_demuxer.h7
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc9
-rw-r--r--media/filters/ffmpeg_video_decoder.cc8
-rw-r--r--media/filters/ffmpeg_video_decoder.h4
-rw-r--r--media/filters/file_data_source.cc22
-rw-r--r--media/filters/file_data_source.h4
-rw-r--r--media/filters/gpu_video_decoder.cc32
-rw-r--r--media/filters/gpu_video_decoder.h4
-rw-r--r--media/filters/video_frame_generator.cc4
-rw-r--r--media/filters/video_frame_generator.h4
-rw-r--r--media/filters/video_renderer_base.cc10
-rw-r--r--media/filters/video_renderer_base.h4
-rw-r--r--media/video/capture/video_capture.h4
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);
};