OLD | NEW |
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 "chromecast/browser/media/cast_renderer.h" | 5 #include "chromecast/browser/media/cast_renderer.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
9 #include "chromecast/base/task_runner_impl.h" | 9 #include "chromecast/base/task_runner_impl.h" |
10 #include "chromecast/media/cdm/cast_cdm_context.h" | 10 #include "chromecast/media/cdm/cast_cdm_context.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 namespace media { | 25 namespace media { |
26 | 26 |
27 namespace { | 27 namespace { |
28 // Maximum difference between audio frame PTS and video frame PTS | 28 // Maximum difference between audio frame PTS and video frame PTS |
29 // for frames read from the DemuxerStream. | 29 // for frames read from the DemuxerStream. |
30 const base::TimeDelta kMaxDeltaFetcher(base::TimeDelta::FromMilliseconds(2000)); | 30 const base::TimeDelta kMaxDeltaFetcher(base::TimeDelta::FromMilliseconds(2000)); |
31 } // namespace | 31 } // namespace |
32 | 32 |
33 CastRenderer::CastRenderer( | 33 CastRenderer::CastRenderer( |
34 const CreateMediaPipelineBackendCB& create_backend_cb, | 34 const CreateMediaPipelineBackendCB& create_backend_cb, |
35 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) | 35 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
| 36 const std::string& audio_device_id) |
36 : create_backend_cb_(create_backend_cb), | 37 : create_backend_cb_(create_backend_cb), |
37 task_runner_(task_runner), | 38 task_runner_(task_runner), |
| 39 audio_device_id_(audio_device_id), |
38 client_(nullptr), | 40 client_(nullptr), |
39 cast_cdm_context_(nullptr), | 41 cast_cdm_context_(nullptr), |
40 media_task_runner_factory_( | 42 media_task_runner_factory_( |
41 new BalancedMediaTaskRunnerFactory(kMaxDeltaFetcher)), | 43 new BalancedMediaTaskRunnerFactory(kMaxDeltaFetcher)), |
42 weak_factory_(this) { | 44 weak_factory_(this) { |
43 CMALOG(kLogControl) << __FUNCTION__ << ": " << this; | 45 CMALOG(kLogControl) << __FUNCTION__ << ": " << this; |
44 } | 46 } |
45 | 47 |
46 CastRenderer::~CastRenderer() { | 48 CastRenderer::~CastRenderer() { |
47 CMALOG(kLogControl) << __FUNCTION__ << ": " << this; | 49 CMALOG(kLogControl) << __FUNCTION__ << ": " << this; |
(...skipping 10 matching lines...) Expand all Loading... |
58 // Create pipeline backend. | 60 // Create pipeline backend. |
59 backend_task_runner_.reset(new TaskRunnerImpl()); | 61 backend_task_runner_.reset(new TaskRunnerImpl()); |
60 // TODO(erickung): crbug.com/443956. Need to provide right LoadType. | 62 // TODO(erickung): crbug.com/443956. Need to provide right LoadType. |
61 LoadType load_type = kLoadTypeMediaSource; | 63 LoadType load_type = kLoadTypeMediaSource; |
62 MediaPipelineDeviceParams::MediaSyncType sync_type = | 64 MediaPipelineDeviceParams::MediaSyncType sync_type = |
63 (load_type == kLoadTypeMediaStream) | 65 (load_type == kLoadTypeMediaStream) |
64 ? MediaPipelineDeviceParams::kModeIgnorePts | 66 ? MediaPipelineDeviceParams::kModeIgnorePts |
65 : MediaPipelineDeviceParams::kModeSyncPts; | 67 : MediaPipelineDeviceParams::kModeSyncPts; |
66 MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get()); | 68 MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get()); |
67 std::unique_ptr<MediaPipelineBackend> backend = | 69 std::unique_ptr<MediaPipelineBackend> backend = |
68 create_backend_cb_.Run(params); | 70 create_backend_cb_.Run(params, audio_device_id_); |
69 | 71 |
70 // Create pipeline. | 72 // Create pipeline. |
71 MediaPipelineClient pipeline_client; | 73 MediaPipelineClient pipeline_client; |
72 pipeline_client.error_cb = | 74 pipeline_client.error_cb = |
73 base::Bind(&CastRenderer::OnError, weak_factory_.GetWeakPtr()); | 75 base::Bind(&CastRenderer::OnError, weak_factory_.GetWeakPtr()); |
74 pipeline_client.buffering_state_cb = base::Bind( | 76 pipeline_client.buffering_state_cb = base::Bind( |
75 &CastRenderer::OnBufferingStateChange, weak_factory_.GetWeakPtr()); | 77 &CastRenderer::OnBufferingStateChange, weak_factory_.GetWeakPtr()); |
76 pipeline_.reset(new MediaPipelineImpl()); | 78 pipeline_.reset(new MediaPipelineImpl()); |
77 pipeline_->SetClient(pipeline_client); | 79 pipeline_->SetClient(pipeline_client); |
78 pipeline_->Initialize(load_type, std::move(backend)); | 80 pipeline_->Initialize(load_type, std::move(backend)); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 client_->OnVideoNaturalSizeChange(size); | 237 client_->OnVideoNaturalSizeChange(size); |
236 } | 238 } |
237 | 239 |
238 void CastRenderer::OnVideoOpacityChange(bool opaque) { | 240 void CastRenderer::OnVideoOpacityChange(bool opaque) { |
239 DCHECK(task_runner_->BelongsToCurrentThread()); | 241 DCHECK(task_runner_->BelongsToCurrentThread()); |
240 client_->OnVideoOpacityChange(opaque); | 242 client_->OnVideoOpacityChange(opaque); |
241 } | 243 } |
242 | 244 |
243 } // namespace media | 245 } // namespace media |
244 } // namespace chromecast | 246 } // namespace chromecast |
OLD | NEW |