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

Side by Side Diff: media/remoting/courier_renderer.cc

Issue 2668393002: Rename DemuxerStreamProvider into MediaResource (Closed)
Patch Set: rebase Created 3 years, 10 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "media/remoting/courier_renderer.h" 5 #include "media/remoting/courier_renderer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/callback_helpers.h" 13 #include "base/callback_helpers.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/numerics/safe_math.h" 16 #include "base/numerics/safe_math.h"
17 #include "base/threading/thread_task_runner_handle.h" 17 #include "base/threading/thread_task_runner_handle.h"
18 #include "base/time/default_tick_clock.h" 18 #include "base/time/default_tick_clock.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "media/base/bind_to_current_loop.h" 20 #include "media/base/bind_to_current_loop.h"
21 #include "media/base/buffering_state.h" 21 #include "media/base/buffering_state.h"
22 #include "media/base/demuxer_stream_provider.h" 22 #include "media/base/media_resource.h"
23 #include "media/base/renderer_client.h" 23 #include "media/base/renderer_client.h"
24 #include "media/remoting/demuxer_stream_adapter.h" 24 #include "media/remoting/demuxer_stream_adapter.h"
25 #include "media/remoting/proto_enum_utils.h" 25 #include "media/remoting/proto_enum_utils.h"
26 #include "media/remoting/proto_utils.h" 26 #include "media/remoting/proto_utils.h"
27 #include "media/remoting/renderer_controller.h" 27 #include "media/remoting/renderer_controller.h"
28 28
29 namespace { 29 namespace {
30 30
31 // The moving time window to track the media time and statistics updates. 31 // The moving time window to track the media time and statistics updates.
32 constexpr base::TimeDelta kTrackingWindow = base::TimeDelta::FromSeconds(5); 32 constexpr base::TimeDelta kTrackingWindow = base::TimeDelta::FromSeconds(5);
(...skipping 25 matching lines...) Expand all
58 namespace media { 58 namespace media {
59 namespace remoting { 59 namespace remoting {
60 60
61 CourierRenderer::CourierRenderer( 61 CourierRenderer::CourierRenderer(
62 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, 62 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
63 const base::WeakPtr<RendererController>& controller, 63 const base::WeakPtr<RendererController>& controller,
64 VideoRendererSink* video_renderer_sink) 64 VideoRendererSink* video_renderer_sink)
65 : state_(STATE_UNINITIALIZED), 65 : state_(STATE_UNINITIALIZED),
66 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), 66 main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
67 media_task_runner_(std::move(media_task_runner)), 67 media_task_runner_(std::move(media_task_runner)),
68 demuxer_stream_provider_(nullptr), 68 media_resource_(nullptr),
69 client_(nullptr), 69 client_(nullptr),
70 controller_(controller), 70 controller_(controller),
71 rpc_broker_(controller_->GetRpcBroker()), 71 rpc_broker_(controller_->GetRpcBroker()),
72 rpc_handle_(rpc_broker_->GetUniqueHandle()), 72 rpc_handle_(rpc_broker_->GetUniqueHandle()),
73 remote_renderer_handle_(RpcBroker::kInvalidHandle), 73 remote_renderer_handle_(RpcBroker::kInvalidHandle),
74 video_renderer_sink_(video_renderer_sink), 74 video_renderer_sink_(video_renderer_sink),
75 clock_(new base::DefaultTickClock()), 75 clock_(new base::DefaultTickClock()),
76 weak_factory_(this) { 76 weak_factory_(this) {
77 VLOG(2) << __func__; 77 VLOG(2) << __func__;
78 // Note: The constructor is running on the main thread, but will be destroyed 78 // Note: The constructor is running on the main thread, but will be destroyed
(...skipping 20 matching lines...) Expand all
99 FROM_HERE, 99 FROM_HERE,
100 base::Bind(&RendererController::SetShowInterstitialCallback, controller_, 100 base::Bind(&RendererController::SetShowInterstitialCallback, controller_,
101 RendererController::ShowInterstitialCallback())); 101 RendererController::ShowInterstitialCallback()));
102 102
103 // Post task on main thread to unregister message receiver. 103 // Post task on main thread to unregister message receiver.
104 main_task_runner_->PostTask( 104 main_task_runner_->PostTask(
105 FROM_HERE, base::Bind(&RpcBroker::UnregisterMessageReceiverCallback, 105 FROM_HERE, base::Bind(&RpcBroker::UnregisterMessageReceiverCallback,
106 rpc_broker_, rpc_handle_)); 106 rpc_broker_, rpc_handle_));
107 } 107 }
108 108
109 void CourierRenderer::Initialize(DemuxerStreamProvider* demuxer_stream_provider, 109 void CourierRenderer::Initialize(MediaResource* media_resource,
110 RendererClient* client, 110 RendererClient* client,
111 const PipelineStatusCB& init_cb) { 111 const PipelineStatusCB& init_cb) {
112 VLOG(2) << __func__; 112 VLOG(2) << __func__;
113 DCHECK(media_task_runner_->BelongsToCurrentThread()); 113 DCHECK(media_task_runner_->BelongsToCurrentThread());
114 DCHECK(demuxer_stream_provider); 114 DCHECK(media_resource);
115 DCHECK(client); 115 DCHECK(client);
116 116
117 if (state_ != STATE_UNINITIALIZED) { 117 if (state_ != STATE_UNINITIALIZED) {
118 media_task_runner_->PostTask( 118 media_task_runner_->PostTask(
119 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INVALID_STATE)); 119 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INVALID_STATE));
120 return; 120 return;
121 } 121 }
122 122
123 demuxer_stream_provider_ = demuxer_stream_provider; 123 media_resource_ = media_resource;
124 client_ = client; 124 client_ = client;
125 init_workflow_done_callback_ = init_cb; 125 init_workflow_done_callback_ = init_cb;
126 126
127 state_ = STATE_CREATE_PIPE; 127 state_ = STATE_CREATE_PIPE;
128
128 // Create audio mojo data pipe handles if audio is available. 129 // Create audio mojo data pipe handles if audio is available.
129 DemuxerStream* audio_demuxer_stream = 130 DemuxerStream* audio_demuxer_stream =
130 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); 131 media_resource_->GetStream(DemuxerStream::AUDIO);
131 std::unique_ptr<mojo::DataPipe> audio_data_pipe; 132 std::unique_ptr<mojo::DataPipe> audio_data_pipe;
132 if (audio_demuxer_stream) { 133 if (audio_demuxer_stream) {
133 audio_data_pipe = base::WrapUnique(DemuxerStreamAdapter::CreateDataPipe()); 134 audio_data_pipe = base::WrapUnique(DemuxerStreamAdapter::CreateDataPipe());
134 } 135 }
135 136
136 // Create video mojo data pipe handles if video is available. 137 // Create video mojo data pipe handles if video is available.
137 DemuxerStream* video_demuxer_stream = 138 DemuxerStream* video_demuxer_stream =
138 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); 139 media_resource_->GetStream(DemuxerStream::VIDEO);
139 std::unique_ptr<mojo::DataPipe> video_data_pipe; 140 std::unique_ptr<mojo::DataPipe> video_data_pipe;
140 if (video_demuxer_stream) { 141 if (video_demuxer_stream) {
141 video_data_pipe = base::WrapUnique(DemuxerStreamAdapter::CreateDataPipe()); 142 video_data_pipe = base::WrapUnique(DemuxerStreamAdapter::CreateDataPipe());
142 } 143 }
143 144
144 // Establish remoting data pipe connection using main thread. 145 // Establish remoting data pipe connection using main thread.
145 const SharedSession::DataPipeStartCallback data_pipe_callback = 146 const SharedSession::DataPipeStartCallback data_pipe_callback =
146 base::Bind(&CourierRenderer::OnDataPipeCreatedOnMainThread, 147 base::Bind(&CourierRenderer::OnDataPipeCreatedOnMainThread,
147 media_task_runner_, weak_factory_.GetWeakPtr(), rpc_broker_); 148 media_task_runner_, weak_factory_.GetWeakPtr(), rpc_broker_);
148 main_task_runner_->PostTask( 149 main_task_runner_->PostTask(
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 VLOG(2) << __func__; 321 VLOG(2) << __func__;
321 DCHECK(media_task_runner_->BelongsToCurrentThread()); 322 DCHECK(media_task_runner_->BelongsToCurrentThread());
322 DCHECK(!init_workflow_done_callback_.is_null()); 323 DCHECK(!init_workflow_done_callback_.is_null());
323 324
324 if (state_ == STATE_ERROR) 325 if (state_ == STATE_ERROR)
325 return; // Abort because something went wrong in the meantime. 326 return; // Abort because something went wrong in the meantime.
326 DCHECK_EQ(state_, STATE_CREATE_PIPE); 327 DCHECK_EQ(state_, STATE_CREATE_PIPE);
327 328
328 // Create audio demuxer stream adapter if audio is available. 329 // Create audio demuxer stream adapter if audio is available.
329 DemuxerStream* audio_demuxer_stream = 330 DemuxerStream* audio_demuxer_stream =
330 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); 331 media_resource_->GetStream(DemuxerStream::AUDIO);
331 if (audio_demuxer_stream && audio.is_valid() && audio_handle.is_valid() && 332 if (audio_demuxer_stream && audio.is_valid() && audio_handle.is_valid() &&
332 audio_rpc_handle != RpcBroker::kInvalidHandle) { 333 audio_rpc_handle != RpcBroker::kInvalidHandle) {
333 VLOG(2) << "Initialize audio"; 334 VLOG(2) << "Initialize audio";
334 audio_demuxer_stream_adapter_.reset(new DemuxerStreamAdapter( 335 audio_demuxer_stream_adapter_.reset(new DemuxerStreamAdapter(
335 main_task_runner_, media_task_runner_, "audio", audio_demuxer_stream, 336 main_task_runner_, media_task_runner_, "audio", audio_demuxer_stream,
336 rpc_broker_, audio_rpc_handle, std::move(audio), 337 rpc_broker_, audio_rpc_handle, std::move(audio),
337 std::move(audio_handle), 338 std::move(audio_handle),
338 base::Bind(&CourierRenderer::OnFatalError, base::Unretained(this)))); 339 base::Bind(&CourierRenderer::OnFatalError, base::Unretained(this))));
339 } 340 }
340 341
341 // Create video demuxer stream adapter if video is available. 342 // Create video demuxer stream adapter if video is available.
342 DemuxerStream* video_demuxer_stream = 343 DemuxerStream* video_demuxer_stream =
343 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); 344 media_resource_->GetStream(DemuxerStream::VIDEO);
344 if (video_demuxer_stream && video.is_valid() && video_handle.is_valid() && 345 if (video_demuxer_stream && video.is_valid() && video_handle.is_valid() &&
345 video_rpc_handle != RpcBroker::kInvalidHandle) { 346 video_rpc_handle != RpcBroker::kInvalidHandle) {
346 VLOG(2) << "Initialize video"; 347 VLOG(2) << "Initialize video";
347 video_demuxer_stream_adapter_.reset(new DemuxerStreamAdapter( 348 video_demuxer_stream_adapter_.reset(new DemuxerStreamAdapter(
348 main_task_runner_, media_task_runner_, "video", video_demuxer_stream, 349 main_task_runner_, media_task_runner_, "video", video_demuxer_stream,
349 rpc_broker_, video_rpc_handle, std::move(video), 350 rpc_broker_, video_rpc_handle, std::move(video),
350 std::move(video_handle), 351 std::move(video_handle),
351 base::Bind(&CourierRenderer::OnFatalError, base::Unretained(this)))); 352 base::Bind(&CourierRenderer::OnFatalError, base::Unretained(this))));
352 } 353 }
353 354
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 kBytesPerKilobit; 843 kBytesPerKilobit;
843 DCHECK_GE(kilobits_per_second, 0); 844 DCHECK_GE(kilobits_per_second, 0);
844 const base::CheckedNumeric<int> checked_kbps = kilobits_per_second; 845 const base::CheckedNumeric<int> checked_kbps = kilobits_per_second;
845 metrics_recorder_.OnVideoRateEstimate( 846 metrics_recorder_.OnVideoRateEstimate(
846 checked_kbps.ValueOrDefault(std::numeric_limits<int>::max())); 847 checked_kbps.ValueOrDefault(std::numeric_limits<int>::max()));
847 } 848 }
848 } 849 }
849 850
850 } // namespace remoting 851 } // namespace remoting
851 } // namespace media 852 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698