Chromium Code Reviews| Index: webrtc/common_video/include/incoming_video_stream.h |
| diff --git a/webrtc/common_video/include/incoming_video_stream.h b/webrtc/common_video/include/incoming_video_stream.h |
| index f96a23dbeabaff21de247594d11f0fa77ae00800..efde17974d8910e0cda060a67cea60def4d580dc 100644 |
| --- a/webrtc/common_video/include/incoming_video_stream.h |
| +++ b/webrtc/common_video/include/incoming_video_stream.h |
| @@ -15,30 +15,20 @@ |
| #include "webrtc/base/criticalsection.h" |
| #include "webrtc/base/platform_thread.h" |
| +#include "webrtc/base/task_queue.h" |
| #include "webrtc/base/thread_annotations.h" |
| +#include "webrtc/base/thread_checker.h" |
| #include "webrtc/common_video/video_render_frames.h" |
| #include "webrtc/media/base/videosinkinterface.h" |
| namespace webrtc { |
| class EventTimerWrapper; |
| - |
| class IncomingVideoStream : public rtc::VideoSinkInterface<VideoFrame> { |
| public: |
| - explicit IncomingVideoStream(bool disable_prerenderer_smoothing); |
| - ~IncomingVideoStream(); |
| - |
| - // Overrides VideoSinkInterface |
| - void OnFrame(const VideoFrame& video_frame) override; |
| - |
| - // Callback for file recording, snapshot, ... |
| - void SetExternalCallback(rtc::VideoSinkInterface<VideoFrame>* render_object); |
| - |
| - // Start/Stop. |
| - int32_t Start(); |
| - int32_t Stop(); |
| - |
| - int32_t SetExpectedRenderDelay(int32_t delay_ms); |
| + explicit IncomingVideoStream(int32_t delay_ms, |
|
mflodman
2016/06/13 18:39:24
Remove explicit.
tommi
2016/06/14 08:11:27
Done.
|
| + rtc::VideoSinkInterface<VideoFrame>* callback); |
| + ~IncomingVideoStream() override; |
| protected: |
| static bool IncomingVideoStreamThreadFun(void* obj); |
| @@ -49,26 +39,37 @@ class IncomingVideoStream : public rtc::VideoSinkInterface<VideoFrame> { |
| enum { kEventMaxWaitTimeMs = 100 }; |
| enum { kFrameRatePeriodMs = 1000 }; |
| - void DeliverFrame(const VideoFrame& video_frame); |
| + void OnFrame(const VideoFrame& video_frame) override; |
| + |
| + rtc::ThreadChecker main_thread_checker_; |
| + rtc::ThreadChecker render_thread_checker_; |
| + rtc::ThreadChecker decoder_thread_checker_; |
| - const bool disable_prerenderer_smoothing_; |
| - // Critsects in allowed to enter order. |
| - rtc::CriticalSection stream_critsect_; |
| - rtc::CriticalSection thread_critsect_; |
| rtc::CriticalSection buffer_critsect_; |
| - // TODO(pbos): Make plain member and stop resetting this thread, just |
| - // start/stoping it is enough. |
| - std::unique_ptr<rtc::PlatformThread> incoming_render_thread_ |
| - GUARDED_BY(thread_critsect_); |
| + rtc::PlatformThread incoming_render_thread_; |
| std::unique_ptr<EventTimerWrapper> deliver_buffer_event_; |
| - bool running_ GUARDED_BY(stream_critsect_); |
| - rtc::VideoSinkInterface<VideoFrame>* external_callback_ |
| - GUARDED_BY(thread_critsect_); |
| - const std::unique_ptr<VideoRenderFrames> render_buffers_ |
| + rtc::VideoSinkInterface<VideoFrame>* const external_callback_; |
| + std::unique_ptr<VideoRenderFrames> render_buffers_ |
| GUARDED_BY(buffer_critsect_); |
| }; |
| +class IncomingVideoStreamNoSmoothing |
| + : public rtc::VideoSinkInterface<VideoFrame> { |
| + public: |
| + explicit IncomingVideoStreamNoSmoothing( |
| + rtc::VideoSinkInterface<VideoFrame>* callback); |
| + |
| + private: |
| + // Overrides VideoSinkInterface |
| + void OnFrame(const VideoFrame& video_frame) override; |
| + |
| + rtc::VideoSinkInterface<VideoFrame>* const callback_; |
| + rtc::TaskQueue queue_; |
| + volatile int queued_frames_ = 0; |
| + static const int kMaxQueuedFrames = 1; |
| +}; |
| + |
| } // namespace webrtc |
| #endif // WEBRTC_COMMON_VIDEO_INCLUDE_INCOMING_VIDEO_STREAM_H_ |