diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-06 00:38:32 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-06 00:38:32 +0000 |
commit | 38af455b42c098bab243b4a71895e1b07809256d (patch) | |
tree | 68b479506d21d9ad0955a06e828c2418e4ba6116 /media/tools/player_x11 | |
parent | daa9e38f3afbc3f048a47c4239f6e75a53fe7be3 (diff) | |
download | chromium_src-38af455b42c098bab243b4a71895e1b07809256d.zip chromium_src-38af455b42c098bab243b4a71895e1b07809256d.tar.gz chromium_src-38af455b42c098bab243b4a71895e1b07809256d.tar.bz2 |
Fix invalid use of Base::Bind(,this) in ~ReferenceAudioRender.
Also converts ~AudioOutputController to be protected and fixes an exit crash in player_x11.
BUG=107864
TEST=Ran player_x11 --audio.
Review URL: http://codereview.chromium.org/9111003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116599 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/tools/player_x11')
-rw-r--r-- | media/tools/player_x11/gl_video_renderer.h | 10 | ||||
-rw-r--r-- | media/tools/player_x11/player_x11.cc | 14 | ||||
-rw-r--r-- | media/tools/player_x11/x11_video_renderer.h | 10 |
3 files changed, 22 insertions, 12 deletions
diff --git a/media/tools/player_x11/gl_video_renderer.h b/media/tools/player_x11/gl_video_renderer.h index 2ecdc0b..7403e6a 100644 --- a/media/tools/player_x11/gl_video_renderer.h +++ b/media/tools/player_x11/gl_video_renderer.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. @@ -6,6 +6,7 @@ #define MEDIA_TOOLS_PLAYER_X11_GL_VIDEO_RENDERER_H_ #include "base/basictypes.h" +#include "base/memory/ref_counted.h" #include "ui/gfx/gl/gl_bindings.h" class MessageLoop; @@ -14,13 +15,16 @@ namespace media { class VideoFrame; } -class GlVideoRenderer { +class GlVideoRenderer : public base::RefCountedThreadSafe<GlVideoRenderer> { public: GlVideoRenderer(Display* display, Window window); - ~GlVideoRenderer(); void Paint(media::VideoFrame* video_frame); + protected: + friend class base::RefCountedThreadSafe<GlVideoRenderer>; + ~GlVideoRenderer(); + private: // Initializes GL rendering for the given dimensions. void Initialize(int width, int height); diff --git a/media/tools/player_x11/player_x11.cc b/media/tools/player_x11/player_x11.cc index 3c1fa51..ee4d9ab 100644 --- a/media/tools/player_x11/player_x11.cc +++ b/media/tools/player_x11/player_x11.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. @@ -271,16 +271,13 @@ int main(int argc, char** argv) { thread.reset(new base::Thread("PipelineThread")); thread->Start(); - // Create both our renderers but only bind the one we plan on using. - X11VideoRenderer x11_renderer(g_display, g_window); - GlVideoRenderer gl_renderer(g_display, g_window); PaintCB paint_cb; if (use_gl) { paint_cb = base::Bind( - &GlVideoRenderer::Paint, base::Unretained(&gl_renderer)); + &GlVideoRenderer::Paint, new GlVideoRenderer(g_display, g_window)); } else { paint_cb = base::Bind( - &X11VideoRenderer::Paint, base::Unretained(&x11_renderer)); + &X11VideoRenderer::Paint, new X11VideoRenderer(g_display, g_window)); } if (InitPipeline(thread->message_loop(), filename.c_str(), @@ -303,6 +300,11 @@ int main(int argc, char** argv) { message_loop_factory.reset(); thread->Stop(); + + // Release callback which releases video renderer. Do this before cleaning up + // X below since the video renderer has some X cleanup duties as well. + paint_cb.Reset(); + XDestroyWindow(g_display, g_window); XCloseDisplay(g_display); g_audio_manager = NULL; diff --git a/media/tools/player_x11/x11_video_renderer.h b/media/tools/player_x11/x11_video_renderer.h index 1ce5b62..b91c565 100644 --- a/media/tools/player_x11/x11_video_renderer.h +++ b/media/tools/player_x11/x11_video_renderer.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. @@ -8,6 +8,7 @@ #include <X11/Xlib.h> #include "base/basictypes.h" +#include "base/memory/ref_counted.h" class MessageLoop; @@ -15,13 +16,16 @@ namespace media { class VideoFrame; } -class X11VideoRenderer { +class X11VideoRenderer : public base::RefCountedThreadSafe<X11VideoRenderer> { public: X11VideoRenderer(Display* display, Window window); - ~X11VideoRenderer(); void Paint(media::VideoFrame* video_frame); + protected: + friend class base::RefCountedThreadSafe<X11VideoRenderer>; + ~X11VideoRenderer(); + private: // Initializes X11 rendering for the given dimensions. void Initialize(int width, int height); |