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

Side by Side Diff: trunk/src/content/renderer/media/rtc_video_capture_delegate.h

Issue 135683002: Revert 244074 "Eliminate video capture thread in renderer" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_
6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ 6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_
7 7
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "content/common/media/video_capture.h" 10 #include "content/common/media/video_capture.h"
11 #include "content/renderer/media/video_capture_impl_manager.h"
11 #include "media/video/capture/video_capture.h" 12 #include "media/video/capture/video_capture.h"
12 13
13 namespace content { 14 namespace content {
14 15
15 class VideoCaptureHandle;
16
17 // Implements a simple reference counted video capturer that guarantees that 16 // Implements a simple reference counted video capturer that guarantees that
18 // methods in RtcVideoCaptureDelegateEventHandler is only called from when 17 // methods in RtcVideoCaptureDelegateEventHandler is only called from when
19 // StartCapture have been called until after StopCapture have been called. 18 // StartCapture have been called until after StopCapture have been called.
20 // It uses VideoCaptureImplManager to start / stop and receive I420 frames 19 // It uses VideoCaptureImplManager to start / stop and receive I420 frames
21 // from Chrome's video capture implementation. 20 // from Chrome's video capture implementation.
22 class RtcVideoCaptureDelegate 21 class RtcVideoCaptureDelegate
23 : public base::RefCountedThreadSafe<RtcVideoCaptureDelegate>, 22 : public base::RefCountedThreadSafe<RtcVideoCaptureDelegate>,
24 public media::VideoCapture::EventHandler { 23 public media::VideoCapture::EventHandler {
25 public: 24 public:
26 enum CaptureState { 25 enum CaptureState {
27 CAPTURE_STOPPED, // The capturer has been stopped or hasn't started yet. 26 CAPTURE_STOPPED, // The capturer has been stopped or hasn't started yet.
28 CAPTURE_RUNNING, // The capturer has been started successfully and is now 27 CAPTURE_RUNNING, // The capturer has been started successfully and is now
29 // capturing. 28 // capturing.
30 CAPTURE_FAILED, // The capturer failed to start. 29 CAPTURE_FAILED, // The capturer failed to start.
31 }; 30 };
32 31
33 typedef base::Callback<void(const scoped_refptr<media::VideoFrame>&)> 32 typedef base::Callback<void(const scoped_refptr<media::VideoFrame>&)>
34 FrameCapturedCallback; 33 FrameCapturedCallback;
35 typedef base::Callback<void(CaptureState)> StateChangeCallback; 34 typedef base::Callback<void(CaptureState)> StateChangeCallback;
36 35
37 RtcVideoCaptureDelegate(const media::VideoCaptureSessionId id); 36 RtcVideoCaptureDelegate(const media::VideoCaptureSessionId id,
37 VideoCaptureImplManager* vc_manager);
38 38
39 void StartCapture(const media::VideoCaptureParams& params, 39 void StartCapture(const media::VideoCaptureParams& params,
40 const FrameCapturedCallback& captured_callback, 40 const FrameCapturedCallback& captured_callback,
41 const StateChangeCallback& state_callback); 41 const StateChangeCallback& state_callback);
42 void StopCapture(); 42 void StopCapture();
43 43
44 protected:
45 // media::VideoCapture::EventHandler implementation. 44 // media::VideoCapture::EventHandler implementation.
46 // These functions are called on the IO thread (same as where 45 // These functions are called from a thread owned by |vc_manager_|.
47 // |capture_engine_| runs).
48 virtual void OnStarted(media::VideoCapture* capture) OVERRIDE; 46 virtual void OnStarted(media::VideoCapture* capture) OVERRIDE;
49 virtual void OnStopped(media::VideoCapture* capture) OVERRIDE; 47 virtual void OnStopped(media::VideoCapture* capture) OVERRIDE;
50 virtual void OnPaused(media::VideoCapture* capture) OVERRIDE; 48 virtual void OnPaused(media::VideoCapture* capture) OVERRIDE;
51 virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE; 49 virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE;
52 virtual void OnRemoved(media::VideoCapture* capture) OVERRIDE; 50 virtual void OnRemoved(media::VideoCapture* capture) OVERRIDE;
53 virtual void OnFrameReady( 51 virtual void OnFrameReady(
54 media::VideoCapture* capture, 52 media::VideoCapture* capture,
55 const scoped_refptr<media::VideoFrame>& frame) OVERRIDE; 53 const scoped_refptr<media::VideoFrame>& frame) OVERRIDE;
56 54
57 private: 55 private:
58 friend class base::RefCountedThreadSafe<RtcVideoCaptureDelegate>; 56 friend class base::RefCountedThreadSafe<RtcVideoCaptureDelegate>;
59 57
60 virtual ~RtcVideoCaptureDelegate(); 58 virtual ~RtcVideoCaptureDelegate();
61 59
62 void OnFrameReadyOnCaptureThread( 60 void OnFrameReadyOnCaptureThread(
63 media::VideoCapture* capture, 61 media::VideoCapture* capture,
64 const scoped_refptr<media::VideoFrame>& frame); 62 const scoped_refptr<media::VideoFrame>& frame);
65 void OnErrorOnCaptureThread(media::VideoCapture* capture); 63 void OnErrorOnCaptureThread(media::VideoCapture* capture);
66 void OnRemovedOnCaptureThread(media::VideoCapture* capture); 64 void OnRemovedOnCaptureThread(media::VideoCapture* capture);
67 65
68 // The id identifies which video capture device is used for this video 66 // The id identifies which video capture device is used for this video
69 // capture session. 67 // capture session.
70 media::VideoCaptureSessionId session_id_; 68 media::VideoCaptureSessionId session_id_;
71 scoped_ptr<VideoCaptureHandle> capture_engine_; 69 // The video capture manager handles open/close of video capture devices.
70 scoped_refptr<VideoCaptureImplManager> vc_manager_;
71 media::VideoCapture* capture_engine_;
72 72
73 // Accessed on the thread where StartCapture is called. 73 // Accessed on the thread where StartCapture is called.
74 bool got_first_frame_; 74 bool got_first_frame_;
75 bool error_occured_; 75 bool error_occured_;
76 76
77 // |captured_callback_| is provided to this class in StartCapture and must be 77 // |captured_callback_| is provided to this class in StartCapture and must be
78 // valid until StopCapture is called. 78 // valid until StopCapture is called.
79 FrameCapturedCallback captured_callback_; 79 FrameCapturedCallback captured_callback_;
80 // |state_callback_| is provided to this class in StartCapture and must be 80 // |state_callback_| is provided to this class in StartCapture and must be
81 // valid until StopCapture is called. 81 // valid until StopCapture is called.
82 StateChangeCallback state_callback_; 82 StateChangeCallback state_callback_;
83 // Message loop of the caller of StartCapture. 83 // Message loop of the caller of StartCapture.
84 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; 84 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
85 }; 85 };
86 86
87 } // namespace content 87 } // namespace content
88 88
89 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ 89 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698