Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(458)

Side by Side Diff: media/tools/player_x11/player_x11.cc

Issue 13813016: Remove reference counting from media::Demuxer and friends. (Closed) Base URL: http://git.chromium.org/chromium/src.git@vd_scoped
Patch Set: demuxer only Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <signal.h> 5 #include <signal.h>
6 6
7 #include <iostream> // NOLINT 7 #include <iostream> // NOLINT
8 8
9 #include "base/at_exit.h" 9 #include "base/at_exit.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 static void OnBufferingState(media::Pipeline::BufferingState buffering_state) {} 96 static void OnBufferingState(media::Pipeline::BufferingState buffering_state) {}
97 97
98 static void NeedKey(const std::string& type, scoped_ptr<uint8[]> init_data, 98 static void NeedKey(const std::string& type, scoped_ptr<uint8[]> init_data,
99 int init_data_size) { 99 int init_data_size) {
100 std::cout << "File is encrypted." << std::endl; 100 std::cout << "File is encrypted." << std::endl;
101 } 101 }
102 102
103 // TODO(vrk): Re-enabled audio. (crbug.com/112159) 103 // TODO(vrk): Re-enabled audio. (crbug.com/112159)
104 bool InitPipeline(const scoped_refptr<base::MessageLoopProxy>& message_loop, 104 bool InitPipeline(const scoped_refptr<base::MessageLoopProxy>& message_loop,
105 const scoped_refptr<media::DataSource>& data_source, 105 media::Demuxer* demuxer,
106 const PaintCB& paint_cb, 106 const PaintCB& paint_cb,
107 bool /* enable_audio */, 107 bool /* enable_audio */,
108 scoped_refptr<media::Pipeline>* pipeline, 108 scoped_refptr<media::Pipeline>* pipeline,
109 MessageLoop* paint_message_loop) { 109 MessageLoop* paint_message_loop) {
110 // Create our filter factories. 110 // Create our filter factories.
111 scoped_ptr<media::FilterCollection> collection( 111 scoped_ptr<media::FilterCollection> collection(
112 new media::FilterCollection()); 112 new media::FilterCollection());
113 media::FFmpegNeedKeyCB need_key_cb = base::Bind(&NeedKey); 113 collection->SetDemuxer(demuxer);
114 collection->SetDemuxer(new media::FFmpegDemuxer(message_loop, data_source,
115 need_key_cb));
116
117 114
118 ScopedVector<media::VideoDecoder> video_decoders; 115 ScopedVector<media::VideoDecoder> video_decoders;
119 video_decoders.push_back(new media::FFmpegVideoDecoder(message_loop)); 116 video_decoders.push_back(new media::FFmpegVideoDecoder(message_loop));
120 scoped_ptr<media::VideoRenderer> video_renderer(new media::VideoRendererBase( 117 scoped_ptr<media::VideoRenderer> video_renderer(new media::VideoRendererBase(
121 message_loop, 118 message_loop,
122 video_decoders.Pass(), 119 video_decoders.Pass(),
123 media::SetDecryptorReadyCB(), 120 media::SetDecryptorReadyCB(),
124 base::Bind(&Paint, paint_message_loop, paint_cb), 121 base::Bind(&Paint, paint_message_loop, paint_cb),
125 base::Bind(&SetOpaque), 122 base::Bind(&SetOpaque),
126 true)); 123 true));
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 paint_cb = base::Bind( 271 paint_cb = base::Bind(
275 &GlVideoRenderer::Paint, new GlVideoRenderer(g_display, g_window)); 272 &GlVideoRenderer::Paint, new GlVideoRenderer(g_display, g_window));
276 } else { 273 } else {
277 paint_cb = base::Bind( 274 paint_cb = base::Bind(
278 &X11VideoRenderer::Paint, new X11VideoRenderer(g_display, g_window)); 275 &X11VideoRenderer::Paint, new X11VideoRenderer(g_display, g_window));
279 } 276 }
280 277
281 scoped_refptr<media::DataSource> data_source( 278 scoped_refptr<media::DataSource> data_source(
282 new DataSourceLogger(CreateFileDataSource(filename), 279 new DataSourceLogger(CreateFileDataSource(filename),
283 command_line->HasSwitch("streaming"))); 280 command_line->HasSwitch("streaming")));
281 scoped_ptr<media::Demuxer> demuxer(new media::FFmpegDemuxer(
282 media_thread.message_loop_proxy(), data_source, base::Bind(&NeedKey)));
284 283
285 if (InitPipeline(media_thread.message_loop_proxy(), data_source, 284 if (InitPipeline(media_thread.message_loop_proxy(), demuxer.get(),
286 paint_cb, command_line->HasSwitch("audio"), 285 paint_cb, command_line->HasSwitch("audio"),
287 &pipeline, &message_loop)) { 286 &pipeline, &message_loop)) {
288 // Main loop of the application. 287 // Main loop of the application.
289 g_running = true; 288 g_running = true;
290 289
291 message_loop.PostTask(FROM_HERE, base::Bind( 290 message_loop.PostTask(FROM_HERE, base::Bind(
292 &PeriodicalUpdate, pipeline, &message_loop, !pipeline->HasVideo())); 291 &PeriodicalUpdate, pipeline, &message_loop, !pipeline->HasVideo()));
293 message_loop.Run(); 292 message_loop.Run();
294 } else { 293 } else {
295 std::cout << "Pipeline initialization failed..." << std::endl; 294 std::cout << "Pipeline initialization failed..." << std::endl;
296 } 295 }
297 296
298 // Cleanup tasks. 297 // Cleanup tasks.
299 media_thread.Stop(); 298 media_thread.Stop();
300 299
301 // Release callback which releases video renderer. Do this before cleaning up 300 // Release callback which releases video renderer. Do this before cleaning up
302 // X below since the video renderer has some X cleanup duties as well. 301 // X below since the video renderer has some X cleanup duties as well.
303 paint_cb.Reset(); 302 paint_cb.Reset();
304 303
305 XDestroyWindow(g_display, g_window); 304 XDestroyWindow(g_display, g_window);
306 XCloseDisplay(g_display); 305 XCloseDisplay(g_display);
307 g_audio_manager = NULL; 306 g_audio_manager = NULL;
308 307
309 return 0; 308 return 0;
310 } 309 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698