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

Side by Side Diff: webrtc/media/base/videocapturer.cc

Issue 1865283002: Use microsecond timestamp in cricket::VideoFrame. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Let VideoCapturer adjust timestamps. Created 4 years, 8 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 /* 1 /*
2 * Copyright (c) 2010 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 wants.max_pixel_count_step_up); 217 wants.max_pixel_count_step_up);
218 } 218 }
219 } 219 }
220 220
221 void VideoCapturer::OnFrameCaptured(VideoCapturer*, 221 void VideoCapturer::OnFrameCaptured(VideoCapturer*,
222 const CapturedFrame* captured_frame) { 222 const CapturedFrame* captured_frame) {
223 if (!broadcaster_.frame_wanted()) { 223 if (!broadcaster_.frame_wanted()) {
224 return; 224 return;
225 } 225 }
226 226
227 int64_t timestamp_us =
perkj_webrtc 2016/04/08 08:22:48 do this in the frame factory instead.
nisse-webrtc 2016/04/08 09:15:43 Moving the logic there makes sense, I'll give it a
228 captured_frame->time_stamp / rtc::kNumNanosecsPerMicrosec;
229
230 if (!timestamp_offset_valid_) {
231 timestamp_offset_ = rtc::TimeMicros() - timestamp_us;
232 timestamp_offset_valid_ = true;
233 }
234
235 // Add offset, to get time stamps with the same epoch as the
236 // system monotonic clock, rtc::TimeMicros().
237 timestamp_us += timestamp_offset_;
238
227 // Use a temporary buffer to scale 239 // Use a temporary buffer to scale
228 std::unique_ptr<uint8_t[]> scale_buffer; 240 std::unique_ptr<uint8_t[]> scale_buffer;
229 if (IsScreencast()) { 241 if (IsScreencast()) {
230 int scaled_width, scaled_height; 242 int scaled_width, scaled_height;
231 int desired_screencast_fps = 243 int desired_screencast_fps =
232 capture_format_.get() 244 capture_format_.get()
233 ? VideoFormat::IntervalToFps(capture_format_->interval) 245 ? VideoFormat::IntervalToFps(capture_format_->interval)
234 : kDefaultScreencastFps; 246 : kDefaultScreencastFps;
235 ComputeScale(captured_frame->width, captured_frame->height, 247 ComputeScale(captured_frame->width, captured_frame->height,
236 desired_screencast_fps, &scaled_width, &scaled_height); 248 desired_screencast_fps, &scaled_width, &scaled_height);
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 adapted_width, adapted_height)); 401 adapted_width, adapted_height));
390 402
391 if (!adapted_frame) { 403 if (!adapted_frame) {
392 // TODO(fbarchard): LOG more information about captured frame attributes. 404 // TODO(fbarchard): LOG more information about captured frame attributes.
393 LOG(LS_ERROR) << "Couldn't convert to I420! " 405 LOG(LS_ERROR) << "Couldn't convert to I420! "
394 << "From " << ToString(captured_frame) << " To " 406 << "From " << ToString(captured_frame) << " To "
395 << cropped_width << " x " << cropped_height; 407 << cropped_width << " x " << cropped_height;
396 return; 408 return;
397 } 409 }
398 410
411 // Overrides the timestamp set by the FrameFactory.
412 // TODO(nisse): Arrange to either get the FrameFactory to set the
413 // timestamp with correct offset, or not set the timestamp at all.
414 adapted_frame->set_timestamp_us(timestamp_us);
415
399 OnFrame(this, adapted_frame.get()); 416 OnFrame(this, adapted_frame.get());
400 UpdateInputSize(captured_frame); 417 UpdateInputSize(captured_frame);
401 } 418 }
402 419
403 void VideoCapturer::OnFrame(VideoCapturer* capturer, const VideoFrame* frame) { 420 void VideoCapturer::OnFrame(VideoCapturer* capturer, const VideoFrame* frame) {
404 broadcaster_.OnFrame(*frame); 421 broadcaster_.OnFrame(*frame);
perkj_webrtc 2016/04/08 08:22:48 Unfortunately there are capturers that does not us
nisse-webrtc 2016/04/08 09:15:43 That code then has to produce the right timestamps
405 } 422 }
406 423
407 void VideoCapturer::SetCaptureState(CaptureState state) { 424 void VideoCapturer::SetCaptureState(CaptureState state) {
408 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 425 RTC_DCHECK(thread_checker_.CalledOnValidThread());
409 if (state == capture_state_) { 426 if (state == capture_state_) {
410 // Don't trigger a state changed callback if the state hasn't changed. 427 // Don't trigger a state changed callback if the state hasn't changed.
411 return; 428 return;
412 } 429 }
413 capture_state_ = state; 430 capture_state_ = state;
414 SignalStateChange(this, capture_state_); 431 SignalStateChange(this, capture_state_);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 void VideoCapturer::UpdateInputSize(const CapturedFrame* captured_frame) { 562 void VideoCapturer::UpdateInputSize(const CapturedFrame* captured_frame) {
546 // Update stats protected from fetches from different thread. 563 // Update stats protected from fetches from different thread.
547 rtc::CritScope cs(&frame_stats_crit_); 564 rtc::CritScope cs(&frame_stats_crit_);
548 565
549 input_size_valid_ = true; 566 input_size_valid_ = true;
550 input_width_ = captured_frame->width; 567 input_width_ = captured_frame->width;
551 input_height_ = captured_frame->height; 568 input_height_ = captured_frame->height;
552 } 569 }
553 570
554 } // namespace cricket 571 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698