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

Side by Side Diff: content/renderer/media/media_recorder_handler.cc

Issue 1543673002: MediaRecorder: make MediaRecorderHandler a MediaStreamObserver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added content_browsertests for Error Event firing when Track added/removed to MS Created 4 years, 11 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
« no previous file with comments | « content/renderer/media/media_recorder_handler.h ('k') | content/renderer/media/media_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/renderer/media/media_recorder_handler.h" 5 #include "content/renderer/media/media_recorder_handler.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 return base::EqualsCaseInsensitiveASCII(codec, name); 75 return base::EqualsCaseInsensitiveASCII(codec, name);
76 }); 76 });
77 if (found == &codecs[codecs_count]) 77 if (found == &codecs[codecs_count])
78 return false; 78 return false;
79 } 79 }
80 return true; 80 return true;
81 } 81 }
82 82
83 bool MediaRecorderHandler::initialize( 83 bool MediaRecorderHandler::initialize(
84 blink::WebMediaRecorderHandlerClient* client, 84 blink::WebMediaRecorderHandlerClient* client,
85 const blink::WebMediaStream& media_stream, 85 const blink::WebMediaStream& web_media_stream,
86 const blink::WebString& type, 86 const blink::WebString& type,
87 const blink::WebString& codecs) { 87 const blink::WebString& codecs) {
88 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 88 DCHECK(main_render_thread_checker_.CalledOnValidThread());
89 // Save histogram data so we can see how much MediaStream Recorder is used. 89 // Save histogram data so we can see how much MediaStream Recorder is used.
90 // The histogram counts the number of calls to the JS API. 90 // The histogram counts the number of calls to the JS API.
91 UpdateWebRTCMethodCount(WEBKIT_MEDIA_STREAM_RECORDER); 91 UpdateWebRTCMethodCount(WEBKIT_MEDIA_STREAM_RECORDER);
92 92
93 if (!canSupportMimeType(type, codecs)) { 93 if (!canSupportMimeType(type, codecs)) {
94 DLOG(ERROR) << "Can't support " << type.utf8() 94 DLOG(ERROR) << "Can't support " << type.utf8()
95 << ";codecs=" << codecs.utf8(); 95 << ";codecs=" << codecs.utf8();
96 return false; 96 return false;
97 } 97 }
98 use_vp9_ = base::ToLowerASCII(codecs.utf8()).find("vp9") != std::string::npos; 98 use_vp9_ = base::ToLowerASCII(codecs.utf8()).find("vp9") != std::string::npos;
99 media_stream_ = media_stream;
100 DCHECK(client); 99 DCHECK(client);
101 client_ = client; 100 client_ = client;
102 101
102 web_media_stream_ = web_media_stream;
103 MediaStream::GetMediaStream(web_media_stream)->AddObserver(this);
104
103 return true; 105 return true;
104 } 106 }
105 107
106 bool MediaRecorderHandler::start() { 108 bool MediaRecorderHandler::start() {
107 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 109 DCHECK(main_render_thread_checker_.CalledOnValidThread());
108 DCHECK(!recording_); 110 DCHECK(!recording_);
109 return start(0); 111 return start(0);
110 } 112 }
111 113
112 bool MediaRecorderHandler::start(int timeslice) { 114 bool MediaRecorderHandler::start(int timeslice) {
113 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 115 DCHECK(main_render_thread_checker_.CalledOnValidThread());
114 DCHECK(!recording_); 116 DCHECK(!recording_);
115 DCHECK(!media_stream_.isNull()); 117 DCHECK(!web_media_stream_.isNull());
116 DCHECK(timeslice_.is_zero()); 118 DCHECK(timeslice_.is_zero());
117 DCHECK(!webm_muxer_); 119 DCHECK(!webm_muxer_);
118 120
119 timeslice_ = TimeDelta::FromMilliseconds(timeslice); 121 timeslice_ = TimeDelta::FromMilliseconds(timeslice);
120 slice_origin_timestamp_ = TimeTicks::Now(); 122 slice_origin_timestamp_ = TimeTicks::Now();
121 123
122 blink::WebVector<blink::WebMediaStreamTrack> video_tracks, audio_tracks; 124 blink::WebVector<blink::WebMediaStreamTrack> video_tracks, audio_tracks;
123 media_stream_.videoTracks(video_tracks); 125 web_media_stream_.videoTracks(video_tracks);
124 media_stream_.audioTracks(audio_tracks); 126 web_media_stream_.audioTracks(audio_tracks);
125 127
126 if (video_tracks.isEmpty() && audio_tracks.isEmpty()) { 128 if (video_tracks.isEmpty() && audio_tracks.isEmpty()) {
127 LOG(WARNING) << __FUNCTION__ << ": no media tracks."; 129 LOG(WARNING) << __FUNCTION__ << ": no media tracks.";
128 return false; 130 return false;
129 } 131 }
130 132
131 const bool use_audio_tracks = 133 const bool use_audio_tracks =
132 !audio_tracks.isEmpty() && 134 !audio_tracks.isEmpty() &&
133 MediaStreamAudioTrack::GetTrack(audio_tracks[0]); 135 MediaStreamAudioTrack::GetTrack(audio_tracks[0]);
134 136
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 } 200 }
199 201
200 void MediaRecorderHandler::resume() { 202 void MediaRecorderHandler::resume() {
201 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 203 DCHECK(main_render_thread_checker_.CalledOnValidThread());
202 DCHECK(!recording_); 204 DCHECK(!recording_);
203 recording_ = true; 205 recording_ = true;
204 for (const auto& video_recorder : video_recorders_) 206 for (const auto& video_recorder : video_recorders_)
205 video_recorder->Resume(); 207 video_recorder->Resume();
206 } 208 }
207 209
210 void MediaRecorderHandler::TrackAdded(const blink::WebMediaStreamTrack& track) {
211 client_->onError("Track added");
212 }
213
214 void MediaRecorderHandler::TrackRemoved(
215 const blink::WebMediaStreamTrack& track) {
216 client_->onError("Track removed");
217 }
218
208 void MediaRecorderHandler::OnEncodedVideo( 219 void MediaRecorderHandler::OnEncodedVideo(
209 const scoped_refptr<media::VideoFrame>& video_frame, 220 const scoped_refptr<media::VideoFrame>& video_frame,
210 scoped_ptr<std::string> encoded_data, 221 scoped_ptr<std::string> encoded_data,
211 TimeTicks timestamp, 222 TimeTicks timestamp,
212 bool is_key_frame) { 223 bool is_key_frame) {
213 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 224 DCHECK(main_render_thread_checker_.CalledOnValidThread());
214 if (!webm_muxer_) 225 if (!webm_muxer_)
215 return; 226 return;
216 webm_muxer_->OnEncodedVideo(video_frame, std::move(encoded_data), timestamp, 227 webm_muxer_->OnEncodedVideo(video_frame, std::move(encoded_data), timestamp,
217 is_key_frame); 228 is_key_frame);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 recorder->OnData(audio_bus, timestamp); 267 recorder->OnData(audio_bus, timestamp);
257 } 268 }
258 269
259 void MediaRecorderHandler::SetAudioFormatForTesting( 270 void MediaRecorderHandler::SetAudioFormatForTesting(
260 const media::AudioParameters& params) { 271 const media::AudioParameters& params) {
261 for (auto* recorder : audio_recorders_) 272 for (auto* recorder : audio_recorders_)
262 recorder->OnSetFormat(params); 273 recorder->OnSetFormat(params);
263 } 274 }
264 275
265 } // namespace content 276 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_recorder_handler.h ('k') | content/renderer/media/media_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698