summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjustinlin@chromium.org <justinlin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-16 01:11:53 +0000
committerjustinlin@chromium.org <justinlin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-16 01:11:53 +0000
commitf395836748334521dd3bcc306bbf4b7044ff0d4c (patch)
tree16939244d10e1f435d487b3479c2bb0ad52e8a3c /content
parent224016e9a37f89694e8d15e320de261c1399bfe9 (diff)
downloadchromium_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')
-rw-r--r--content/browser/renderer_host/media/web_contents_video_capture_device.cc5
-rw-r--r--content/renderer/media/rtc_video_capturer.cc23
-rw-r--r--content/renderer/media/rtc_video_capturer.h1
-rw-r--r--content/renderer/media/rtc_video_renderer.cc14
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);