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

Side by Side Diff: extensions/renderer/api/display_source/wifi_display/wifi_display_media_manager.cc

Issue 1905243003: [chrome.displaySource] Integrate audio encoders into media pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Rebase Created 4 years, 7 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 "extensions/renderer/api/display_source/wifi_display/wifi_display_media _manager.h" 5 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_media _manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "base/task_runner_util.h" 9 #include "base/task_runner_util.h"
10 #include "content/public/common/service_registry.h" 10 #include "content/public/common/service_registry.h"
(...skipping 13 matching lines...) Expand all
24 const char kErrorNoVideoFormatData[] = 24 const char kErrorNoVideoFormatData[] =
25 "Failed to get video format data from the given MediaStreamTrack object"; 25 "Failed to get video format data from the given MediaStreamTrack object";
26 const char kErrorSinkCannotPlayVideo[] = 26 const char kErrorSinkCannotPlayVideo[] =
27 "The sink cannot play video from the given MediaStreamTrack object"; 27 "The sink cannot play video from the given MediaStreamTrack object";
28 const char kErrorSinkCannotPlayAudio[] = 28 const char kErrorSinkCannotPlayAudio[] =
29 "The sink cannot play audio from the given MediaStreamTrack object"; 29 "The sink cannot play audio from the given MediaStreamTrack object";
30 const char kErrorMediaPipelineFailure[] = 30 const char kErrorMediaPipelineFailure[] =
31 "Failed to initialize media pipeline for the session"; 31 "Failed to initialize media pipeline for the session";
32 } // namespace 32 } // namespace
33 33
34 class WiFiDisplayAudioSink {
35 public:
36 WiFiDisplayAudioSink(const blink::WebMediaStreamTrack& track,
37 content::MediaStreamAudioSink* delegate)
38 : track_(track), delegate_(delegate), sink_added_(false) {}
39
40 ~WiFiDisplayAudioSink() { Stop(); }
41
42 void Start() {
43 DCHECK(!sink_added_);
44 sink_added_ = true;
45 delegate_->AddToAudioTrack(delegate_, track_);
46 }
47
48 void Stop() {
49 if (sink_added_) {
50 delegate_->RemoveFromAudioTrack(delegate_, track_);
51 sink_added_ = false;
52 }
53 }
54
55 private:
56 blink::WebMediaStreamTrack track_;
57 content::MediaStreamAudioSink* delegate_;
58 bool sink_added_;
59 };
60
34 class WiFiDisplayVideoSink : public content::MediaStreamVideoSink { 61 class WiFiDisplayVideoSink : public content::MediaStreamVideoSink {
35 public: 62 public:
36 WiFiDisplayVideoSink( 63 WiFiDisplayVideoSink(
37 const blink::WebMediaStreamTrack& track, 64 const blink::WebMediaStreamTrack& track,
38 const content::VideoCaptureDeliverFrameCB& callback) 65 const content::VideoCaptureDeliverFrameCB& callback)
39 : track_(track), 66 : track_(track),
40 callback_(callback) { 67 callback_(callback) {
41 } 68 }
42 69
43 ~WiFiDisplayVideoSink() override { 70 ~WiFiDisplayVideoSink() override {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 media::BindToCurrentLoop(error_callback_)), 126 media::BindToCurrentLoop(error_callback_)),
100 base::Bind(&WiFiDisplayMediaManager::OnPlayerCreated, 127 base::Bind(&WiFiDisplayMediaManager::OnPlayerCreated,
101 weak_factory_.GetWeakPtr())); 128 weak_factory_.GetWeakPtr()));
102 return; 129 return;
103 } 130 }
104 131
105 if (!is_initialized_) { 132 if (!is_initialized_) {
106 return; // Waiting for initialization being completed. 133 return; // Waiting for initialization being completed.
107 } 134 }
108 135
136 if (!audio_track_.isNull()) {
137 audio_sink_.reset(
138 new WiFiDisplayAudioSink(audio_track_, player_->audio_sink()));
139 audio_sink_->Start();
140 }
141
109 if (!video_track_.isNull()) { 142 if (!video_track_.isNull()) {
110 // To be called on IO thread. 143 // To be called on IO thread.
111 auto on_raw_video_frame = base::Bind( 144 auto on_raw_video_frame = base::Bind(
112 &WiFiDisplayMediaPipeline::InsertRawVideoFrame, 145 &WiFiDisplayMediaPipeline::InsertRawVideoFrame,
113 base::Unretained(player_)); 146 base::Unretained(player_));
114 video_sink_.reset( 147 video_sink_.reset(
115 new WiFiDisplayVideoSink(video_track_, on_raw_video_frame)); 148 new WiFiDisplayVideoSink(video_track_, on_raw_video_frame));
116 video_sink_->Start(); 149 video_sink_->Start();
117 } 150 }
118 } 151 }
119 152
120 void WiFiDisplayMediaManager::Teardown() { 153 void WiFiDisplayMediaManager::Teardown() {
121 Pause(); 154 Pause();
122 if (player_) { 155 if (player_) {
123 io_task_runner_->DeleteSoon(FROM_HERE, player_); 156 io_task_runner_->DeleteSoon(FROM_HERE, player_);
124 player_ = nullptr; 157 player_ = nullptr;
125 } 158 }
126 is_initialized_ = false; 159 is_initialized_ = false;
127 session_id_.clear(); 160 session_id_.clear();
128 } 161 }
129 162
130 void WiFiDisplayMediaManager::Pause() { 163 void WiFiDisplayMediaManager::Pause() {
131 is_playing_ = false; 164 is_playing_ = false;
165 audio_sink_.reset();
132 video_sink_.reset(); 166 video_sink_.reset();
133 } 167 }
134 168
135 bool WiFiDisplayMediaManager::IsPaused() const { 169 bool WiFiDisplayMediaManager::IsPaused() const {
136 return !is_playing_; 170 return !is_playing_;
137 } 171 }
138 172
139 wds::SessionType WiFiDisplayMediaManager::GetSessionType() const { 173 wds::SessionType WiFiDisplayMediaManager::GetSessionType() const {
140 uint16_t session_type = 0; 174 uint16_t session_type = 0;
141 if (!video_track_.isNull()) 175 if (!video_track_.isNull())
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 media::BindToCurrentLoop(on_completed)); 448 media::BindToCurrentLoop(on_completed));
415 } 449 }
416 450
417 void WiFiDisplayMediaManager::ConnectToRemoteService( 451 void WiFiDisplayMediaManager::ConnectToRemoteService(
418 WiFiDisplayMediaServiceRequest request) { 452 WiFiDisplayMediaServiceRequest request) {
419 DCHECK(content::RenderThread::Get()); 453 DCHECK(content::RenderThread::Get());
420 service_registry_->ConnectToRemoteService(std::move(request)); 454 service_registry_->ConnectToRemoteService(std::move(request));
421 } 455 }
422 456
423 } // namespace extensions 457 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698