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 "chromecast/browser/media/media_pipeline_host.h" | 5 #include "chromecast/browser/media/media_pipeline_host.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.h" | 10 #include "base/callback.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
46 MediaPipelineHost::~MediaPipelineHost() { | 46 MediaPipelineHost::~MediaPipelineHost() { |
47 DCHECK(thread_checker_.CalledOnValidThread()); | 47 DCHECK(thread_checker_.CalledOnValidThread()); |
48 | 48 |
49 for (MediaTrackMap::iterator it = media_track_map_.begin(); | 49 for (MediaTrackMap::iterator it = media_track_map_.begin(); |
50 it != media_track_map_.end(); ++it) { | 50 it != media_track_map_.end(); ++it) { |
51 scoped_ptr<MediaTrackHost> media_track(it->second); | 51 scoped_ptr<MediaTrackHost> media_track(it->second); |
52 } | 52 } |
53 media_track_map_.clear(); | 53 media_track_map_.clear(); |
54 } | 54 } |
55 | 55 |
56 void MediaPipelineHost::Initialize( | 56 void MediaPipelineHost::Initialize(LoadType load_type, |
57 LoadType load_type, | 57 const BrowserMediaPipelineClient& client, |
58 const MediaPipelineClient& client, | 58 const CreateBackendCB& create_backend_cb) { |
59 const CreateDeviceComponentsCB& create_device_components_cb) { | |
60 DCHECK(thread_checker_.CalledOnValidThread()); | 59 DCHECK(thread_checker_.CalledOnValidThread()); |
61 media_pipeline_.reset(new MediaPipelineImpl()); | 60 media_pipeline_.reset(new MediaPipelineImpl()); |
62 task_runner_.reset(new TaskRunnerImpl()); | 61 task_runner_.reset(new TaskRunnerImpl()); |
63 MediaPipelineDeviceParams::MediaSyncType sync_type = | 62 MediaPipelineDeviceParams::MediaSyncType sync_type = |
64 (load_type == kLoadTypeMediaStream) | 63 (load_type == kLoadTypeMediaStream) |
65 ? MediaPipelineDeviceParams::kModeIgnorePts | 64 ? MediaPipelineDeviceParams::kModeIgnorePts |
66 : MediaPipelineDeviceParams::kModeSyncPts; | 65 : MediaPipelineDeviceParams::kModeSyncPts; |
67 MediaPipelineDeviceParams default_parameters(sync_type, task_runner_.get()); | 66 MediaPipelineDeviceParams default_parameters(sync_type, task_runner_.get()); |
68 | 67 |
69 media_pipeline_->SetClient(client); | 68 media_pipeline_->SetClient(client); |
70 media_pipeline_->Initialize( | 69 media_pipeline_->Initialize(load_type, |
71 load_type, create_device_components_cb.Run(default_parameters).Pass()); | 70 create_backend_cb.Run(default_parameters).Pass()); |
72 } | 71 } |
73 | 72 |
74 void MediaPipelineHost::SetAvPipe( | 73 void MediaPipelineHost::SetAvPipe( |
75 TrackId track_id, | 74 TrackId track_id, |
76 scoped_ptr<base::SharedMemory> shared_mem, | 75 scoped_ptr<base::SharedMemory> shared_mem, |
77 const base::Closure& pipe_read_activity_cb, | 76 const base::Closure& pipe_read_activity_cb, |
78 const base::Closure& av_pipe_set_cb) { | 77 const base::Closure& av_pipe_set_cb) { |
79 DCHECK(thread_checker_.CalledOnValidThread()); | 78 DCHECK(thread_checker_.CalledOnValidThread()); |
80 CHECK(track_id == kAudioTrackId || track_id == kVideoTrackId); | 79 CHECK(track_id == kAudioTrackId || track_id == kVideoTrackId); |
81 | 80 |
(...skipping 12 matching lines...) Expand all Loading... | |
94 media_track_host = new MediaTrackHost(); | 93 media_track_host = new MediaTrackHost(); |
95 media_track_map_.insert( | 94 media_track_map_.insert( |
96 std::pair<TrackId, MediaTrackHost*>(track_id, media_track_host)); | 95 std::pair<TrackId, MediaTrackHost*>(track_id, media_track_host)); |
97 } else { | 96 } else { |
98 media_track_host = it->second; | 97 media_track_host = it->second; |
99 } | 98 } |
100 media_track_host->pipe_write_cb = frame_provider_host->GetFifoWriteEventCb(); | 99 media_track_host->pipe_write_cb = frame_provider_host->GetFifoWriteEventCb(); |
101 | 100 |
102 scoped_ptr<CodedFrameProvider> frame_provider(frame_provider_host.release()); | 101 scoped_ptr<CodedFrameProvider> frame_provider(frame_provider_host.release()); |
103 if (track_id == kAudioTrackId) { | 102 if (track_id == kAudioTrackId) { |
104 media_pipeline_->GetAudioPipelineImpl()->SetCodedFrameProvider( | 103 audio_frame_provider_ = frame_provider.Pass(); |
slan
2015/10/06 19:33:59
Remove line 101, then replace this with:
audio_fr
kmackay
2015/10/06 21:44:55
Done.
| |
105 frame_provider.Pass()); | |
106 } else { | 104 } else { |
107 media_pipeline_->GetVideoPipelineImpl()->SetCodedFrameProvider( | 105 video_frame_provider_ = frame_provider.Pass(); |
108 frame_provider.Pass()); | |
109 } | 106 } |
110 av_pipe_set_cb.Run(); | 107 av_pipe_set_cb.Run(); |
111 } | 108 } |
112 | 109 |
113 void MediaPipelineHost::AudioInitialize( | 110 void MediaPipelineHost::AudioInitialize( |
114 TrackId track_id, | 111 TrackId track_id, |
115 const AvPipelineClient& client, | 112 const BrowserAvPipelineClient& client, |
116 const ::media::AudioDecoderConfig& config, | 113 const ::media::AudioDecoderConfig& config, |
117 const ::media::PipelineStatusCB& status_cb) { | 114 const ::media::PipelineStatusCB& status_cb) { |
118 DCHECK(thread_checker_.CalledOnValidThread()); | 115 DCHECK(thread_checker_.CalledOnValidThread()); |
119 CHECK(track_id == kAudioTrackId); | 116 CHECK(track_id == kAudioTrackId); |
120 media_pipeline_->GetAudioPipeline()->SetClient(client); | |
121 media_pipeline_->InitializeAudio( | 117 media_pipeline_->InitializeAudio( |
122 config, scoped_ptr<CodedFrameProvider>(), status_cb); | 118 config, client, audio_frame_provider_.Pass(), status_cb); |
123 } | 119 } |
124 | 120 |
125 void MediaPipelineHost::VideoInitialize( | 121 void MediaPipelineHost::VideoInitialize( |
126 TrackId track_id, | 122 TrackId track_id, |
127 const VideoPipelineClient& client, | 123 const BrowserVideoPipelineClient& client, |
128 const std::vector<::media::VideoDecoderConfig>& configs, | 124 const std::vector< ::media::VideoDecoderConfig>& configs, |
slan
2015/10/06 19:33:59
1-char nit: remove char.
kmackay
2015/10/06 21:44:55
clang-format likes it with the space.
| |
129 const ::media::PipelineStatusCB& status_cb) { | 125 const ::media::PipelineStatusCB& status_cb) { |
130 DCHECK(thread_checker_.CalledOnValidThread()); | 126 DCHECK(thread_checker_.CalledOnValidThread()); |
131 CHECK(track_id == kVideoTrackId); | 127 CHECK(track_id == kVideoTrackId); |
132 media_pipeline_->GetVideoPipeline()->SetClient(client); | |
133 media_pipeline_->InitializeVideo( | 128 media_pipeline_->InitializeVideo( |
134 configs, scoped_ptr<CodedFrameProvider>(), status_cb); | 129 configs, client, video_frame_provider_.Pass(), status_cb); |
135 } | 130 } |
136 | 131 |
137 void MediaPipelineHost::StartPlayingFrom(base::TimeDelta time) { | 132 void MediaPipelineHost::StartPlayingFrom(base::TimeDelta time) { |
138 DCHECK(thread_checker_.CalledOnValidThread()); | 133 DCHECK(thread_checker_.CalledOnValidThread()); |
139 media_pipeline_->StartPlayingFrom(time); | 134 media_pipeline_->StartPlayingFrom(time); |
140 } | 135 } |
141 | 136 |
142 void MediaPipelineHost::Flush(const ::media::PipelineStatusCB& status_cb) { | 137 void MediaPipelineHost::Flush(const ::media::PipelineStatusCB& status_cb) { |
143 DCHECK(thread_checker_.CalledOnValidThread()); | 138 DCHECK(thread_checker_.CalledOnValidThread()); |
144 media_pipeline_->Flush(status_cb); | 139 media_pipeline_->Flush(status_cb); |
145 } | 140 } |
146 | 141 |
147 void MediaPipelineHost::Stop() { | 142 void MediaPipelineHost::Stop() { |
148 DCHECK(thread_checker_.CalledOnValidThread()); | 143 DCHECK(thread_checker_.CalledOnValidThread()); |
149 media_pipeline_->Stop(); | 144 media_pipeline_->Stop(); |
150 } | 145 } |
151 | 146 |
152 void MediaPipelineHost::SetPlaybackRate(double playback_rate) { | 147 void MediaPipelineHost::SetPlaybackRate(double playback_rate) { |
153 DCHECK(thread_checker_.CalledOnValidThread()); | 148 DCHECK(thread_checker_.CalledOnValidThread()); |
154 media_pipeline_->SetPlaybackRate(playback_rate); | 149 media_pipeline_->SetPlaybackRate(playback_rate); |
155 } | 150 } |
156 | 151 |
157 void MediaPipelineHost::SetVolume(TrackId track_id, float volume) { | 152 void MediaPipelineHost::SetVolume(TrackId track_id, float volume) { |
158 DCHECK(thread_checker_.CalledOnValidThread()); | 153 DCHECK(thread_checker_.CalledOnValidThread()); |
159 CHECK(track_id == kAudioTrackId); | 154 CHECK(track_id == kAudioTrackId); |
160 media_pipeline_->GetAudioPipeline()->SetVolume(volume); | 155 media_pipeline_->SetVolume(volume); |
161 } | 156 } |
162 | 157 |
163 void MediaPipelineHost::SetCdm(BrowserCdmCast* cdm) { | 158 void MediaPipelineHost::SetCdm(BrowserCdmCast* cdm) { |
164 DCHECK(thread_checker_.CalledOnValidThread()); | 159 DCHECK(thread_checker_.CalledOnValidThread()); |
165 media_pipeline_->SetCdm(cdm); | 160 media_pipeline_->SetCdm(cdm); |
166 } | 161 } |
167 | 162 |
168 void MediaPipelineHost::NotifyPipeWrite(TrackId track_id) { | 163 void MediaPipelineHost::NotifyPipeWrite(TrackId track_id) { |
169 DCHECK(thread_checker_.CalledOnValidThread()); | 164 DCHECK(thread_checker_.CalledOnValidThread()); |
170 MediaTrackMap::iterator it = media_track_map_.find(track_id); | 165 MediaTrackMap::iterator it = media_track_map_.find(track_id); |
171 if (it == media_track_map_.end()) | 166 if (it == media_track_map_.end()) |
172 return; | 167 return; |
173 | 168 |
174 MediaTrackHost* media_track_host = it->second; | 169 MediaTrackHost* media_track_host = it->second; |
175 if (!media_track_host->pipe_write_cb.is_null()) | 170 if (!media_track_host->pipe_write_cb.is_null()) |
176 media_track_host->pipe_write_cb.Run(); | 171 media_track_host->pipe_write_cb.Run(); |
177 } | 172 } |
178 | 173 |
179 } // namespace media | 174 } // namespace media |
180 } // namespace chromecast | 175 } // namespace chromecast |
OLD | NEW |