summaryrefslogtreecommitdiffstats
path: root/media/tools/player_x11
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-06 00:38:32 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-06 00:38:32 +0000
commit38af455b42c098bab243b4a71895e1b07809256d (patch)
tree68b479506d21d9ad0955a06e828c2418e4ba6116 /media/tools/player_x11
parentdaa9e38f3afbc3f048a47c4239f6e75a53fe7be3 (diff)
downloadchromium_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.h10
-rw-r--r--media/tools/player_x11/player_x11.cc14
-rw-r--r--media/tools/player_x11/x11_video_renderer.h10
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);