| 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 MediaPipelineClient& 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 10 matching lines...) Expand all Loading... |
| 92 MediaTrackHost* media_track_host; | 91 MediaTrackHost* media_track_host; |
| 93 if (it == media_track_map_.end()) { | 92 if (it == media_track_map_.end()) { |
| 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()); | |
| 103 if (track_id == kAudioTrackId) { | 101 if (track_id == kAudioTrackId) { |
| 104 media_pipeline_->GetAudioPipelineImpl()->SetCodedFrameProvider( | 102 audio_frame_provider_ = frame_provider_host.Pass(); |
| 105 frame_provider.Pass()); | |
| 106 } else { | 103 } else { |
| 107 media_pipeline_->GetVideoPipelineImpl()->SetCodedFrameProvider( | 104 video_frame_provider_ = frame_provider_host.Pass(); |
| 108 frame_provider.Pass()); | |
| 109 } | 105 } |
| 110 av_pipe_set_cb.Run(); | 106 av_pipe_set_cb.Run(); |
| 111 } | 107 } |
| 112 | 108 |
| 113 void MediaPipelineHost::AudioInitialize( | 109 void MediaPipelineHost::AudioInitialize( |
| 114 TrackId track_id, | 110 TrackId track_id, |
| 115 const AvPipelineClient& client, | 111 const AvPipelineClient& client, |
| 116 const ::media::AudioDecoderConfig& config, | 112 const ::media::AudioDecoderConfig& config, |
| 117 const ::media::PipelineStatusCB& status_cb) { | 113 const ::media::PipelineStatusCB& status_cb) { |
| 118 DCHECK(thread_checker_.CalledOnValidThread()); | 114 DCHECK(thread_checker_.CalledOnValidThread()); |
| 119 CHECK(track_id == kAudioTrackId); | 115 CHECK(track_id == kAudioTrackId); |
| 120 media_pipeline_->GetAudioPipeline()->SetClient(client); | |
| 121 media_pipeline_->InitializeAudio( | 116 media_pipeline_->InitializeAudio( |
| 122 config, scoped_ptr<CodedFrameProvider>(), status_cb); | 117 config, client, audio_frame_provider_.Pass(), status_cb); |
| 123 } | 118 } |
| 124 | 119 |
| 125 void MediaPipelineHost::VideoInitialize( | 120 void MediaPipelineHost::VideoInitialize( |
| 126 TrackId track_id, | 121 TrackId track_id, |
| 127 const VideoPipelineClient& client, | 122 const VideoPipelineClient& client, |
| 128 const std::vector<::media::VideoDecoderConfig>& configs, | 123 const std::vector< ::media::VideoDecoderConfig>& configs, |
| 129 const ::media::PipelineStatusCB& status_cb) { | 124 const ::media::PipelineStatusCB& status_cb) { |
| 130 DCHECK(thread_checker_.CalledOnValidThread()); | 125 DCHECK(thread_checker_.CalledOnValidThread()); |
| 131 CHECK(track_id == kVideoTrackId); | 126 CHECK(track_id == kVideoTrackId); |
| 132 media_pipeline_->GetVideoPipeline()->SetClient(client); | |
| 133 media_pipeline_->InitializeVideo( | 127 media_pipeline_->InitializeVideo( |
| 134 configs, scoped_ptr<CodedFrameProvider>(), status_cb); | 128 configs, client, video_frame_provider_.Pass(), status_cb); |
| 135 } | 129 } |
| 136 | 130 |
| 137 void MediaPipelineHost::StartPlayingFrom(base::TimeDelta time) { | 131 void MediaPipelineHost::StartPlayingFrom(base::TimeDelta time) { |
| 138 DCHECK(thread_checker_.CalledOnValidThread()); | 132 DCHECK(thread_checker_.CalledOnValidThread()); |
| 139 media_pipeline_->StartPlayingFrom(time); | 133 media_pipeline_->StartPlayingFrom(time); |
| 140 } | 134 } |
| 141 | 135 |
| 142 void MediaPipelineHost::Flush(const ::media::PipelineStatusCB& status_cb) { | 136 void MediaPipelineHost::Flush(const ::media::PipelineStatusCB& status_cb) { |
| 143 DCHECK(thread_checker_.CalledOnValidThread()); | 137 DCHECK(thread_checker_.CalledOnValidThread()); |
| 144 media_pipeline_->Flush(status_cb); | 138 media_pipeline_->Flush(status_cb); |
| 145 } | 139 } |
| 146 | 140 |
| 147 void MediaPipelineHost::Stop() { | 141 void MediaPipelineHost::Stop() { |
| 148 DCHECK(thread_checker_.CalledOnValidThread()); | 142 DCHECK(thread_checker_.CalledOnValidThread()); |
| 149 media_pipeline_->Stop(); | 143 media_pipeline_->Stop(); |
| 150 } | 144 } |
| 151 | 145 |
| 152 void MediaPipelineHost::SetPlaybackRate(double playback_rate) { | 146 void MediaPipelineHost::SetPlaybackRate(double playback_rate) { |
| 153 DCHECK(thread_checker_.CalledOnValidThread()); | 147 DCHECK(thread_checker_.CalledOnValidThread()); |
| 154 media_pipeline_->SetPlaybackRate(playback_rate); | 148 media_pipeline_->SetPlaybackRate(playback_rate); |
| 155 } | 149 } |
| 156 | 150 |
| 157 void MediaPipelineHost::SetVolume(TrackId track_id, float volume) { | 151 void MediaPipelineHost::SetVolume(TrackId track_id, float volume) { |
| 158 DCHECK(thread_checker_.CalledOnValidThread()); | 152 DCHECK(thread_checker_.CalledOnValidThread()); |
| 159 CHECK(track_id == kAudioTrackId); | 153 CHECK(track_id == kAudioTrackId); |
| 160 media_pipeline_->GetAudioPipeline()->SetVolume(volume); | 154 media_pipeline_->SetVolume(volume); |
| 161 } | 155 } |
| 162 | 156 |
| 163 void MediaPipelineHost::SetCdm(BrowserCdmCast* cdm) { | 157 void MediaPipelineHost::SetCdm(BrowserCdmCast* cdm) { |
| 164 DCHECK(thread_checker_.CalledOnValidThread()); | 158 DCHECK(thread_checker_.CalledOnValidThread()); |
| 165 media_pipeline_->SetCdm(cdm); | 159 media_pipeline_->SetCdm(cdm); |
| 166 } | 160 } |
| 167 | 161 |
| 168 void MediaPipelineHost::NotifyPipeWrite(TrackId track_id) { | 162 void MediaPipelineHost::NotifyPipeWrite(TrackId track_id) { |
| 169 DCHECK(thread_checker_.CalledOnValidThread()); | 163 DCHECK(thread_checker_.CalledOnValidThread()); |
| 170 MediaTrackMap::iterator it = media_track_map_.find(track_id); | 164 MediaTrackMap::iterator it = media_track_map_.find(track_id); |
| 171 if (it == media_track_map_.end()) | 165 if (it == media_track_map_.end()) |
| 172 return; | 166 return; |
| 173 | 167 |
| 174 MediaTrackHost* media_track_host = it->second; | 168 MediaTrackHost* media_track_host = it->second; |
| 175 if (!media_track_host->pipe_write_cb.is_null()) | 169 if (!media_track_host->pipe_write_cb.is_null()) |
| 176 media_track_host->pipe_write_cb.Run(); | 170 media_track_host->pipe_write_cb.Run(); |
| 177 } | 171 } |
| 178 | 172 |
| 179 } // namespace media | 173 } // namespace media |
| 180 } // namespace chromecast | 174 } // namespace chromecast |
| OLD | NEW |