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

Unified Diff: content/renderer/media/media_stream_video_track.cc

Issue 432903002: Change a disabled MediaStreamVideoTrack to output black video frames for each incoming frame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 5 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/renderer/media/media_stream_video_track.cc
diff --git a/content/renderer/media/media_stream_video_track.cc b/content/renderer/media/media_stream_video_track.cc
index 213d9b6385bd6ce05a71b026ce34399d10ce8507..3cc4486e6332c5fb6f398c3d36da907383f66aa8 100644
--- a/content/renderer/media/media_stream_video_track.cc
+++ b/content/renderer/media/media_stream_video_track.cc
@@ -19,7 +19,8 @@ void ResetCallback(scoped_ptr<VideoCaptureDeliverFrameCB> callback) {
// MediaStreamVideoTrack::FrameDeliverer is a helper class used for registering
// VideoCaptureDeliverFrameCB on the main render thread to receive video frames
// on the IO-thread.
-// Frames are only delivered to the sinks if the track is enabled.
+// Frames are only delivered to the sinks if the track is enabled. If the track
+// is disabled, a black frame is instead forwarded to the sinks.
tommi (sloooow) - chröme 2014/08/05 09:50:46 is fps relevant in this situation? I.e. if the tr
perkj_chrome 2014/08/06 12:32:22 Yes. That is intentional. To my understanding - th
class MediaStreamVideoTrack::FrameDeliverer
: public base::RefCountedThreadSafe<FrameDeliverer> {
public:
@@ -53,6 +54,8 @@ class MediaStreamVideoTrack::FrameDeliverer
void* id, const scoped_refptr<base::MessageLoopProxy>& message_loop);
void SetEnabledOnIO(bool enabled);
+ const scoped_refptr<media::VideoFrame>& GetBlackFrame(
tommi (sloooow) - chröme 2014/08/05 09:50:46 can you document this function? The use of scoped
perkj_chrome 2014/08/06 12:32:22 Done.
+ const scoped_refptr<media::VideoFrame>& original_frame);
// Used to DCHECK that AddCallback and RemoveCallback are called on the main
// render thread.
@@ -60,6 +63,7 @@ class MediaStreamVideoTrack::FrameDeliverer
scoped_refptr<base::MessageLoopProxy> io_message_loop_;
bool enabled_;
+ scoped_refptr<media::VideoFrame> black_frame_;
typedef std::pair<void*, VideoCaptureDeliverFrameCB> VideoIdCallbackPair;
std::vector<VideoIdCallbackPair> callbacks_;
@@ -138,14 +142,26 @@ void MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO(
const media::VideoCaptureFormat& format,
const base::TimeTicks& estimated_capture_time) {
DCHECK(io_message_loop_->BelongsToCurrentThread());
- if (!enabled_)
- return;
+ const scoped_refptr<media::VideoFrame>& video_frame =
+ enabled_ ? frame : GetBlackFrame(frame);
+
for (std::vector<VideoIdCallbackPair>::iterator it = callbacks_.begin();
it != callbacks_.end(); ++it) {
- it->second.Run(frame, format, estimated_capture_time);
+ it->second.Run(video_frame, format, estimated_capture_time);
}
}
+const scoped_refptr<media::VideoFrame>&
+MediaStreamVideoTrack::FrameDeliverer::GetBlackFrame(
+ const scoped_refptr<media::VideoFrame>& frame) {
tommi (sloooow) - chröme 2014/08/05 09:50:46 different parameter name here than from the header
perkj_chrome 2014/08/06 12:32:22 done:
+ DCHECK(io_message_loop_->BelongsToCurrentThread());
+ if (!black_frame_ || black_frame_->natural_size() != frame->natural_size())
+ black_frame_ = media::VideoFrame::CreateBlackFrame(frame->natural_size());
+
+ black_frame_->set_timestamp(frame->timestamp());
+ return black_frame_;
+}
+
// static
blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack(
MediaStreamVideoSource* source,

Powered by Google App Engine
This is Rietveld 408576698