OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/mojo/clients/mojo_renderer.h" | 5 #include "media/mojo/clients/mojo_renderer.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 InitializeRendererFromUrl(client); | 64 InitializeRendererFromUrl(client); |
65 break; | 65 break; |
66 } | 66 } |
67 } | 67 } |
68 | 68 |
69 void MojoRenderer::InitializeRendererFromStreams( | 69 void MojoRenderer::InitializeRendererFromStreams( |
70 media::RendererClient* client) { | 70 media::RendererClient* client) { |
71 DVLOG(1) << __func__; | 71 DVLOG(1) << __func__; |
72 DCHECK(task_runner_->BelongsToCurrentThread()); | 72 DCHECK(task_runner_->BelongsToCurrentThread()); |
73 | 73 |
74 // Create audio and video mojom::DemuxerStream and bind its lifetime to | 74 // Create mojom::DemuxerStream for each demuxer stream and bind its lifetime |
75 // the pipe. | 75 // to the pipe. |
76 DemuxerStream* const audio = media_resource_->GetStream(DemuxerStream::AUDIO); | 76 std::vector<DemuxerStream*> streams = media_resource_->GetStreams(); |
77 DemuxerStream* const video = media_resource_->GetStream(DemuxerStream::VIDEO); | 77 std::vector<mojom::DemuxerStreamPtr> stream_proxies; |
78 | 78 |
79 std::vector<mojom::DemuxerStreamPtr> streams; | 79 for (const auto& stream : streams) { |
80 if (audio) { | 80 mojom::DemuxerStreamPtr stream_proxy; |
81 mojom::DemuxerStreamPtr audio_stream; | |
82 std::unique_ptr<MojoDemuxerStreamImpl> mojo_stream = | 81 std::unique_ptr<MojoDemuxerStreamImpl> mojo_stream = |
83 base::MakeUnique<MojoDemuxerStreamImpl>(audio, | 82 base::MakeUnique<MojoDemuxerStreamImpl>(stream, |
84 MakeRequest(&audio_stream)); | 83 MakeRequest(&stream_proxy)); |
| 84 |
85 // Using base::Unretained(this) is safe because |this| owns |mojo_stream|, | 85 // Using base::Unretained(this) is safe because |this| owns |mojo_stream|, |
86 // and the error handler can't be invoked once |mojo_stream| is destroyed. | 86 // and the error handler can't be invoked once |mojo_stream| is destroyed. |
87 mojo_stream->set_connection_error_handler( | 87 mojo_stream->set_connection_error_handler( |
88 base::Bind(&MojoRenderer::OnDemuxerStreamConnectionError, | 88 base::Bind(&MojoRenderer::OnDemuxerStreamConnectionError, |
89 base::Unretained(this), mojo_stream.get())); | 89 base::Unretained(this), mojo_stream.get())); |
| 90 |
90 streams_.push_back(std::move(mojo_stream)); | 91 streams_.push_back(std::move(mojo_stream)); |
91 streams.push_back(std::move(audio_stream)); | 92 stream_proxies.push_back(std::move(stream_proxy)); |
92 } | |
93 | |
94 if (video) { | |
95 mojom::DemuxerStreamPtr video_stream; | |
96 std::unique_ptr<MojoDemuxerStreamImpl> mojo_stream = | |
97 base::MakeUnique<MojoDemuxerStreamImpl>(video, | |
98 MakeRequest(&video_stream)); | |
99 // Using base::Unretained(this) is safe because |this| owns |mojo_stream|, | |
100 // and the error handler can't be invoked once |mojo_stream| is destroyed. | |
101 mojo_stream->set_connection_error_handler( | |
102 base::Bind(&MojoRenderer::OnDemuxerStreamConnectionError, | |
103 base::Unretained(this), mojo_stream.get())); | |
104 streams_.push_back(std::move(mojo_stream)); | |
105 streams.push_back(std::move(video_stream)); | |
106 } | 93 } |
107 | 94 |
108 BindRemoteRendererIfNeeded(); | 95 BindRemoteRendererIfNeeded(); |
109 | 96 |
110 mojom::RendererClientAssociatedPtrInfo client_ptr_info; | 97 mojom::RendererClientAssociatedPtrInfo client_ptr_info; |
111 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group()); | 98 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group()); |
112 | 99 |
113 // Using base::Unretained(this) is safe because |this| owns | 100 // Using base::Unretained(this) is safe because |this| owns |
114 // |remote_renderer_|, and the callback won't be dispatched if | 101 // |remote_renderer_|, and the callback won't be dispatched if |
115 // |remote_renderer_| is destroyed. | 102 // |remote_renderer_| is destroyed. |
116 remote_renderer_->Initialize( | 103 remote_renderer_->Initialize( |
117 std::move(client_ptr_info), std::move(streams), base::nullopt, | 104 std::move(client_ptr_info), std::move(stream_proxies), base::nullopt, |
118 base::nullopt, | 105 base::nullopt, |
119 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); | 106 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); |
120 } | 107 } |
121 | 108 |
122 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) { | 109 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) { |
123 DVLOG(2) << __func__; | 110 DVLOG(2) << __func__; |
124 DCHECK(task_runner_->BelongsToCurrentThread()); | 111 DCHECK(task_runner_->BelongsToCurrentThread()); |
125 | 112 |
126 BindRemoteRendererIfNeeded(); | 113 BindRemoteRendererIfNeeded(); |
127 | 114 |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); | 378 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); |
392 | 379 |
393 if (!flush_cb_.is_null()) | 380 if (!flush_cb_.is_null()) |
394 base::ResetAndReturn(&flush_cb_).Run(); | 381 base::ResetAndReturn(&flush_cb_).Run(); |
395 | 382 |
396 if (!cdm_attached_cb_.is_null()) | 383 if (!cdm_attached_cb_.is_null()) |
397 base::ResetAndReturn(&cdm_attached_cb_).Run(false); | 384 base::ResetAndReturn(&cdm_attached_cb_).Run(false); |
398 } | 385 } |
399 | 386 |
400 } // namespace media | 387 } // namespace media |
OLD | NEW |