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

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

Issue 1352243002: Implemented Multiple video track recoding. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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') | media/capture/webm_muxer.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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "content/renderer/media/video_track_recorder.h" 10 #include "content/renderer/media/video_track_recorder.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; 69 blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
70 media_stream_.videoTracks(video_tracks); 70 media_stream_.videoTracks(video_tracks);
71 71
72 if (video_tracks.isEmpty()) { 72 if (video_tracks.isEmpty()) {
73 // TODO(mcasas): Add audio_tracks and update the code in this function 73 // TODO(mcasas): Add audio_tracks and update the code in this function
74 // correspondingly, see http://crbug.com/528519. As of now, only video 74 // correspondingly, see http://crbug.com/528519. As of now, only video
75 // tracks are supported. 75 // tracks are supported.
76 LOG(WARNING) << "Recording no video tracks is not implemented"; 76 LOG(WARNING) << "Recording no video tracks is not implemented";
77 return false; 77 return false;
78 } 78 }
79 // TODO(mcasas): The muxer API supports only one video track. Extend it to
80 // several video tracks, see http://crbug.com/528523.
81 LOG_IF(WARNING, video_tracks.size() > 1u) << "Recording multiple video"
82 << " tracks is not implemented. Only recording first video track.";
83 const blink::WebMediaStreamTrack& video_track = video_tracks[0];
84 if (video_track.isNull())
85 return false;
86 79
87 const VideoTrackRecorder::OnEncodedVideoCB on_encoded_video_cb = 80 for (const blink::WebMediaStreamTrack& video_track : video_tracks) {
88 media::BindToCurrentLoop(base::Bind(&MediaRecorderHandler::OnEncodedVideo, 81 if (video_track.isNull()) {
89 weak_factory_.GetWeakPtr())); 82 LOG(WARNING) << "|video_track| is null";
83 continue;
84 }
90 85
91 video_recorders_.push_back(new VideoTrackRecorder(video_track, 86 const VideoTrackRecorder::OnEncodedVideoCB on_encoded_video_cb =
92 on_encoded_video_cb)); 87 media::BindToCurrentLoop(webm_muxer_->GenerateOnEncodedVideoCallback());
88 video_recorders_.push_back(
89 new VideoTrackRecorder(video_track, on_encoded_video_cb));
90 recording_ = true;
91 }
93 92
94 recording_ = true;
95 return true; 93 return true;
96 } 94 }
97 95
98 void MediaRecorderHandler::stop() { 96 void MediaRecorderHandler::stop() {
99 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 97 DCHECK(main_render_thread_checker_.CalledOnValidThread());
100 DCHECK(recording_); 98 DCHECK(recording_);
101 99
102 recording_ = false; 100 recording_ = false;
103 video_recorders_.clear(); 101 video_recorders_.clear();
104 webm_muxer_.reset(); 102 webm_muxer_.reset();
105 } 103 }
106 104
107 void MediaRecorderHandler::pause() { 105 void MediaRecorderHandler::pause() {
108 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 106 DCHECK(main_render_thread_checker_.CalledOnValidThread());
109 DCHECK(recording_); 107 DCHECK(recording_);
110 recording_ = false; 108 recording_ = false;
111 NOTIMPLEMENTED(); 109 NOTIMPLEMENTED();
112 } 110 }
113 111
114 void MediaRecorderHandler::resume() { 112 void MediaRecorderHandler::resume() {
115 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 113 DCHECK(main_render_thread_checker_.CalledOnValidThread());
116 DCHECK(!recording_); 114 DCHECK(!recording_);
117 recording_ = true; 115 recording_ = true;
118 NOTIMPLEMENTED(); 116 NOTIMPLEMENTED();
119 } 117 }
120 118
121 void MediaRecorderHandler::OnEncodedVideo(
122 const scoped_refptr<media::VideoFrame>& video_frame,
123 scoped_ptr<std::string> encoded_data,
124 base::TimeTicks timestamp,
125 bool is_key_frame) {
126 DCHECK(main_render_thread_checker_.CalledOnValidThread());
127 if (webm_muxer_) {
128 webm_muxer_->OnEncodedVideo(video_frame, encoded_data.Pass(), timestamp,
129 is_key_frame);
130 }
131 }
132
133 void MediaRecorderHandler::WriteData(base::StringPiece data) { 119 void MediaRecorderHandler::WriteData(base::StringPiece data) {
134 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 120 DCHECK(main_render_thread_checker_.CalledOnValidThread());
135 client_->writeData(data.data(), data.length(), false /* lastInSlice */); 121 client_->writeData(data.data(), data.length(), false /* lastInSlice */);
136 } 122 }
137 123
138 void MediaRecorderHandler::OnVideoFrameForTesting( 124 void MediaRecorderHandler::OnVideoFrameForTesting(
139 const scoped_refptr<media::VideoFrame>& frame, 125 const scoped_refptr<media::VideoFrame>& frame,
140 const base::TimeTicks& timestamp) { 126 const base::TimeTicks& timestamp) {
141 for (auto* recorder : video_recorders_) 127 for (auto* recorder : video_recorders_)
142 recorder->OnVideoFrameForTesting(frame, timestamp); 128 recorder->OnVideoFrameForTesting(frame, timestamp);
143 } 129 }
144 130
145 } // namespace content 131 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_recorder_handler.h ('k') | media/capture/webm_muxer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698