| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/media_stream_video_track.h" | 5 #include "content/renderer/media/media_stream_video_track.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/location.h" | 11 #include "base/location.h" |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
| 15 #include "base/threading/thread_task_runner_handle.h" | 15 #include "base/threading/thread_task_runner_handle.h" |
| 16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
| 17 #include "content/renderer/media/media_stream_constraints_util_video_device.h" | 17 #include "content/renderer/media/media_stream_constraints_util_video_device.h" |
| 18 #include "media/capture/video_capture_types.h" | 18 #include "media/capture/video_capture_types.h" |
| 19 | 19 |
| 20 namespace content { | 20 namespace content { |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) { | 23 void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) { |
| 24 // |callback| will be deleted when this exits. | 24 // |callback| will be deleted when this exits. |
| 25 } | 25 } |
| 26 | 26 |
| 27 // Empty method used for keeping a reference to the original media::VideoFrame. | 27 // Empty method used for keeping a reference to the original media::VideoFrame. |
| 28 // The reference to |frame| is kept in the closure that calls this method. | 28 // The reference to |frame| is kept in the closure that calls this method. |
| 29 void ReleaseOriginalFrame(const scoped_refptr<media::VideoFrame>& frame) { | 29 void ReleaseOriginalVideoFrame(const scoped_refptr<media::VideoFrame>& frame) { |
| 30 } | 30 } |
| 31 | 31 |
| 32 } // namespace | 32 } // namespace |
| 33 | 33 |
| 34 // MediaStreamVideoTrack::FrameDeliverer is a helper class used for registering | 34 // MediaStreamVideoTrack::FrameDeliverer is a helper class used for registering |
| 35 // VideoCaptureDeliverFrameCB on the main render thread to receive video frames | 35 // VideoCaptureDeliverFrameCB on the main render thread to receive video frames |
| 36 // on the IO-thread. | 36 // on the IO-thread. |
| 37 // Frames are only delivered to the sinks if the track is enabled. If the track | 37 // Frames are only delivered to the sinks if the track is enabled. If the track |
| 38 // is disabled, a black frame is instead forwarded to the sinks at the same | 38 // is disabled, a black frame is instead forwarded to the sinks at the same |
| 39 // frame rate. | 39 // frame rate. |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 | 179 |
| 180 // Wrap |black_frame_| so we get a fresh timestamp we can modify. Frames | 180 // Wrap |black_frame_| so we get a fresh timestamp we can modify. Frames |
| 181 // returned from this function may still be in use. | 181 // returned from this function may still be in use. |
| 182 scoped_refptr<media::VideoFrame> wrapped_black_frame = | 182 scoped_refptr<media::VideoFrame> wrapped_black_frame = |
| 183 media::VideoFrame::WrapVideoFrame(black_frame_, black_frame_->format(), | 183 media::VideoFrame::WrapVideoFrame(black_frame_, black_frame_->format(), |
| 184 black_frame_->visible_rect(), | 184 black_frame_->visible_rect(), |
| 185 black_frame_->natural_size()); | 185 black_frame_->natural_size()); |
| 186 if (!wrapped_black_frame) | 186 if (!wrapped_black_frame) |
| 187 return nullptr; | 187 return nullptr; |
| 188 wrapped_black_frame->AddDestructionObserver( | 188 wrapped_black_frame->AddDestructionObserver( |
| 189 base::Bind(&ReleaseOriginalFrame, black_frame_)); | 189 base::Bind(&ReleaseOriginalVideoFrame, black_frame_)); |
| 190 | 190 |
| 191 wrapped_black_frame->set_timestamp(reference_frame->timestamp()); | 191 wrapped_black_frame->set_timestamp(reference_frame->timestamp()); |
| 192 base::TimeTicks reference_time; | 192 base::TimeTicks reference_time; |
| 193 if (reference_frame->metadata()->GetTimeTicks( | 193 if (reference_frame->metadata()->GetTimeTicks( |
| 194 media::VideoFrameMetadata::REFERENCE_TIME, &reference_time)) { | 194 media::VideoFrameMetadata::REFERENCE_TIME, &reference_time)) { |
| 195 wrapped_black_frame->metadata()->SetTimeTicks( | 195 wrapped_black_frame->metadata()->SetTimeTicks( |
| 196 media::VideoFrameMetadata::REFERENCE_TIME, reference_time); | 196 media::VideoFrameMetadata::REFERENCE_TIME, reference_time); |
| 197 } | 197 } |
| 198 | 198 |
| 199 return wrapped_black_frame; | 199 return wrapped_black_frame; |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 } | 407 } |
| 408 | 408 |
| 409 void MediaStreamVideoTrack::OnReadyStateChanged( | 409 void MediaStreamVideoTrack::OnReadyStateChanged( |
| 410 blink::WebMediaStreamSource::ReadyState state) { | 410 blink::WebMediaStreamSource::ReadyState state) { |
| 411 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 411 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 412 for (auto* sink : sinks_) | 412 for (auto* sink : sinks_) |
| 413 sink->OnReadyStateChanged(state); | 413 sink->OnReadyStateChanged(state); |
| 414 } | 414 } |
| 415 | 415 |
| 416 } // namespace content | 416 } // namespace content |
| OLD | NEW |