diff options
author | justinlin@chromium.org <justinlin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-16 01:11:53 +0000 |
---|---|---|
committer | justinlin@chromium.org <justinlin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-16 01:11:53 +0000 |
commit | f395836748334521dd3bcc306bbf4b7044ff0d4c (patch) | |
tree | 16939244d10e1f435d487b3479c2bb0ad52e8a3c /content | |
parent | 224016e9a37f89694e8d15e320de261c1399bfe9 (diff) | |
download | chromium_src-f395836748334521dd3bcc306bbf4b7044ff0d4c.zip chromium_src-f395836748334521dd3bcc306bbf4b7044ff0d4c.tar.gz chromium_src-f395836748334521dd3bcc306bbf4b7044ff0d4c.tar.bz2 |
Use NTP time for video frame timestamp.
Add tracing for capture timestamps.
BUG=225209
TEST=Check that AppRTC still works.
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=192670
Review URL: https://codereview.chromium.org/13554003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194268 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
4 files changed, 36 insertions, 7 deletions
diff --git a/content/browser/renderer_host/media/web_contents_video_capture_device.cc b/content/browser/renderer_host/media/web_contents_video_capture_device.cc index de783dc..8530cf4 100644 --- a/content/browser/renderer_host/media/web_contents_video_capture_device.cc +++ b/content/browser/renderer_host/media/web_contents_video_capture_device.cc @@ -529,8 +529,9 @@ void CaptureOracle::DidCaptureFrame( bool success) { base::AutoLock guard(lock_); - TRACE_EVENT_ASYNC_END1("mirroring", "Capture", frame.get(), - "success", success); + TRACE_EVENT_ASYNC_END2("mirroring", "Capture", frame.get(), + "success", success, + "timestamp", timestamp.ToInternalValue()); if (!consumer_ || !is_started_) return; // Capture is stopped. diff --git a/content/renderer/media/rtc_video_capturer.cc b/content/renderer/media/rtc_video_capturer.cc index 02b52f0..f60e6c8 100644 --- a/content/renderer/media/rtc_video_capturer.cc +++ b/content/renderer/media/rtc_video_capturer.cc @@ -5,6 +5,7 @@ #include "content/renderer/media/rtc_video_capturer.h" #include "base/bind.h" +#include "base/debug/trace_event.h" namespace content { @@ -15,6 +16,17 @@ RtcVideoCapturer::RtcVideoCapturer( : is_screencast_(is_screencast), delegate_(new RtcVideoCaptureDelegate(id, vc_manager)), state_(VIDEO_CAPTURE_STATE_STOPPED) { + base::Time::Exploded exploded = {}; + exploded.year = 1900; + exploded.month = 1; + exploded.day_of_week = 0; + exploded.day_of_month = 1; + exploded.hour = 0; + exploded.minute = 0; + exploded.second = 0; + exploded.millisecond = 0; + DCHECK(exploded.HasValidValues()); + ntp_epoch_ = base::Time::FromUTCExploded(exploded); } RtcVideoCapturer::~RtcVideoCapturer() { @@ -100,11 +112,20 @@ void RtcVideoCapturer::OnFrameCaptured( // cricket::CapturedFrame time is in nanoseconds. frame.elapsed_time = (buf.timestamp - start_time_).InMicroseconds() * base::Time::kNanosecondsPerMicrosecond; - frame.time_stamp = frame.elapsed_time; + // Timestamp in NTP time (seconds since 0:00 UTC 1 January 1900) in ms. + frame.time_stamp = (buf.timestamp - ntp_epoch_).InMilliseconds(); frame.data = buf.memory_pointer; frame.pixel_height = 1; frame.pixel_width = 1; + TRACE_EVENT_INSTANT2("rtc_video_capturer", + "OnFrameCaptured", + TRACE_EVENT_SCOPE_THREAD, + "elapsed time", + frame.elapsed_time, + "timestamp", + frame.time_stamp); + // This signals to libJingle that a new VideoFrame is available. // libJingle have no assumptions on what thread this signal come from. SignalFrameCaptured(this, &frame); diff --git a/content/renderer/media/rtc_video_capturer.h b/content/renderer/media/rtc_video_capturer.h index 84d6c84..b526514 100644 --- a/content/renderer/media/rtc_video_capturer.h +++ b/content/renderer/media/rtc_video_capturer.h @@ -51,6 +51,7 @@ class RtcVideoCapturer scoped_refptr<RtcVideoCaptureDelegate> delegate_; VideoCaptureState state_; base::Time start_time_; + base::Time ntp_epoch_; DISALLOW_COPY_AND_ASSIGN(RtcVideoCapturer); }; diff --git a/content/renderer/media/rtc_video_renderer.cc b/content/renderer/media/rtc_video_renderer.cc index 6af00f9..5087711 100644 --- a/content/renderer/media/rtc_video_renderer.cc +++ b/content/renderer/media/rtc_video_renderer.cc @@ -11,7 +11,6 @@ #include "base/message_loop_proxy.h" #include "media/base/video_frame.h" #include "media/base/video_util.h" -#include "third_party/libjingle/source/talk/base/timeutils.h" #include "third_party/libjingle/source/talk/media/base/videoframe.h" using media::CopyYPlane; @@ -74,15 +73,22 @@ void RTCVideoRenderer::SetSize(int width, int height) { } void RTCVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) { - base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds( - frame->GetTimeStamp() / talk_base::kNumNanosecsPerMillisec); + TRACE_EVENT_INSTANT2("rtc_video_renderer", + "RenderFrame", + TRACE_EVENT_SCOPE_THREAD, + "elapsed time", + frame->GetElapsedTime(), + "timestamp", + frame->GetTimeStamp()); + gfx::Size size(frame->GetWidth(), frame->GetHeight()); scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame(media::VideoFrame::YV12, size, gfx::Rect(size), size, - timestamp); + base::TimeDelta::FromMilliseconds( + frame->GetTimeStamp())); // Aspect ratio unsupported; DCHECK when there are non-square pixels. DCHECK_EQ(frame->GetPixelWidth(), 1u); |