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 b4bb853a5acac92a99a385fe1d111844fb16cd73..23c0c02336077c47c1ea8b1c7b89fb22170c7fc6 100644 |
--- a/content/browser/media/capture/content_video_capture_device_core.cc |
+++ b/content/browser/media/capture/content_video_capture_device_core.cc |
@@ -22,7 +22,6 @@ |
#include "base/time/time.h" |
#include "base/trace_event/trace_event.h" |
#include "content/public/browser/browser_thread.h" |
-#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" |
@@ -192,11 +191,35 @@ void ThreadSafeCaptureOracle::DidCaptureFrame( |
media::VideoFrameMetadata::CAPTURE_END_TIME, base::TimeTicks::Now()); |
frame->metadata()->SetTimeDelta(media::VideoFrameMetadata::FRAME_DURATION, |
estimated_frame_duration); |
+ |
+ frame->AddDestructionObserver(base::Bind( |
+ &ThreadSafeCaptureOracle::DidConsumeFrame, |
+ this, |
+ frame_number, |
+ frame->metadata())); |
+ |
client_->OnIncomingCapturedVideoFrame(buffer.Pass(), frame, timestamp); |
} |
} |
} |
+void ThreadSafeCaptureOracle::DidConsumeFrame( |
+ int frame_number, |
+ const media::VideoFrameMetadata* metadata) { |
+ // Note: This function may be called on any thread by the VideoFrame |
+ // destructor. |metadata| is still valid for read-access at this point. |
+ double stress_level = -1.0; |
+ if (metadata->GetDouble(media::VideoFrameMetadata::STRESS_LEVEL, |
+ &stress_level) && |
+ stress_level >= 0.0) { |
+ VLOG(2) << "Consumer stress level for frame " << frame_number |
+ << ": " << stress_level; |
+ } |
+ |
+ // TODO(miu): Use |stress_level| to drive automatic video resolution changes. |
+ // http://crbug.com/156767. |
+} |
+ |
void ContentVideoCaptureDeviceCore::AllocateAndStart( |
const media::VideoCaptureParams& params, |
scoped_ptr<media::VideoCaptureDevice::Client> client) { |