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

Unified Diff: content/browser/media/capture/content_video_capture_device_core.cc

Issue 955253002: Add metadata to media::VideoFrame and plumb it through IPC/MediaStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tommi's nits addressed Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/media/capture/content_video_capture_device_core.cc
diff --git a/content/browser/media/capture/content_video_capture_device_core.cc b/content/browser/media/capture/content_video_capture_device_core.cc
index b470bcdb18d0b1de3e42f66a2bdb1d5ef827027b..d9956f1fec93d2dc413bbf9e919c03c5a65e1fac 100644
--- a/content/browser/media/capture/content_video_capture_device_core.cc
+++ b/content/browser/media/capture/content_video_capture_device_core.cc
@@ -25,6 +25,7 @@
#include "media/base/bind_to_current_loop.h"
#include "media/base/video_capture_types.h"
#include "media/base/video_frame.h"
+#include "media/base/video_frame_metadata.h"
#include "media/base/video_util.h"
#include "ui/gfx/geometry/rect.h"
@@ -71,6 +72,9 @@ bool ThreadSafeCaptureOracle::ObserveEventAndDecideCapture(
base::TimeTicks event_time,
scoped_refptr<media::VideoFrame>* storage,
CaptureFrameCallback* callback) {
+ // Grab the current time before waiting to acquire the |lock_|.
+ const base::TimeTicks capture_begin_time = base::TimeTicks::Now();
+
base::AutoLock guard(lock_);
if (!client_)
@@ -142,7 +146,8 @@ bool ThreadSafeCaptureOracle::ObserveEventAndDecideCapture(
*callback = base::Bind(&ThreadSafeCaptureOracle::DidCaptureFrame,
this,
frame_number,
- output_buffer);
+ output_buffer,
+ capture_begin_time);
return true;
}
@@ -189,6 +194,7 @@ void ThreadSafeCaptureOracle::ReportError(const std::string& reason) {
void ThreadSafeCaptureOracle::DidCaptureFrame(
int frame_number,
const scoped_refptr<media::VideoCaptureDevice::Client::Buffer>& buffer,
+ base::TimeTicks capture_begin_time,
const scoped_refptr<media::VideoFrame>& frame,
base::TimeTicks timestamp,
bool success) {
@@ -202,13 +208,14 @@ void ThreadSafeCaptureOracle::DidCaptureFrame(
if (success) {
if (oracle_.CompleteCapture(frame_number, &timestamp)) {
- media::VideoCaptureFormat format = params_.requested_format;
- // TODO(miu): Passing VideoCaptureFormat here introduces ambiguities. The
- // following is a hack where frame_size takes on a different meaning than
- // everywhere else (i.e., coded size, not visible size). Will fix in
- // soon-upcoming code change.
- format.frame_size = frame->coded_size();
- client_->OnIncomingCapturedVideoFrame(buffer, format, frame, timestamp);
+ // TODO(miu): Use the locked-in frame rate from AnimatedContentSampler.
+ frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE,
+ params_.requested_format.frame_rate);
+ frame->metadata()->SetTimeTicks(
+ media::VideoFrameMetadata::CAPTURE_BEGIN_TIME, capture_begin_time);
+ frame->metadata()->SetTimeTicks(
+ media::VideoFrameMetadata::CAPTURE_END_TIME, base::TimeTicks::Now());
+ client_->OnIncomingCapturedVideoFrame(buffer, frame, timestamp);
}
}
}

Powered by Google App Engine
This is Rietveld 408576698