Index: content/renderer/pepper/pepper_platform_video_capture.h |
diff --git a/content/renderer/pepper/pepper_platform_video_capture.h b/content/renderer/pepper/pepper_platform_video_capture.h |
index 14d1ee681f98433e62588734942ed7163e984739..1d0b47c68ae554ad73c552358af0aa57938f77b5 100644 |
--- a/content/renderer/pepper/pepper_platform_video_capture.h |
+++ b/content/renderer/pepper/pepper_platform_video_capture.h |
@@ -8,41 +8,66 @@ |
#include <string> |
#include "base/basictypes.h" |
-#include "base/callback.h" |
#include "base/compiler_specific.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
-#include "base/threading/thread_checker.h" |
-#include "content/common/media/video_capture.h" |
+#include "media/video/capture/video_capture.h" |
#include "media/video/capture/video_capture_types.h" |
class GURL; |
+ |
+namespace media { |
+class VideoCaptureHandlerProxy; |
+} |
namespace content { |
class PepperMediaDeviceManager; |
class PepperVideoCaptureHost; |
class RenderViewImpl; |
+class VideoCaptureHandle; |
-// This object must only be used on the thread it's constructed on. |
-class PepperPlatformVideoCapture { |
+class PepperPlatformVideoCapture |
+ : public media::VideoCapture, |
+ public base::RefCounted<PepperPlatformVideoCapture>, |
+ public media::VideoCapture::EventHandler { |
public: |
PepperPlatformVideoCapture(const base::WeakPtr<RenderViewImpl>& render_view, |
const std::string& device_id, |
const GURL& document_url, |
PepperVideoCaptureHost* handler); |
- virtual ~PepperPlatformVideoCapture(); |
// Detaches the event handler and stops sending notifications to it. |
void DetachEventHandler(); |
- void StartCapture(const media::VideoCaptureParams& params); |
- void StopCapture(); |
+ // media::VideoCapture implementation. |
+ virtual void StartCapture(media::VideoCapture::EventHandler* handler, |
+ const media::VideoCaptureParams& params) OVERRIDE; |
+ virtual void StopCapture(media::VideoCapture::EventHandler* handler) OVERRIDE; |
+ virtual bool CaptureStarted() OVERRIDE; |
+ virtual int CaptureFrameRate() OVERRIDE; |
+ virtual void GetDeviceSupportedFormats(const DeviceFormatsCallback& callback) |
+ OVERRIDE; |
+ virtual void GetDeviceFormatsInUse(const DeviceFormatsInUseCallback& callback) |
+ OVERRIDE; |
+ |
+ // media::VideoCapture::EventHandler implementation |
+ virtual void OnStarted(VideoCapture* capture) OVERRIDE; |
+ virtual void OnStopped(VideoCapture* capture) OVERRIDE; |
+ virtual void OnPaused(VideoCapture* capture) OVERRIDE; |
+ virtual void OnError(VideoCapture* capture, int error_code) OVERRIDE; |
+ virtual void OnRemoved(VideoCapture* capture) OVERRIDE; |
+ virtual void OnFrameReady(VideoCapture* capture, |
+ const scoped_refptr<media::VideoFrame>& frame) |
+ OVERRIDE; |
+ |
+ protected: |
+ friend class base::RefCounted<PepperPlatformVideoCapture>; |
+ virtual ~PepperPlatformVideoCapture(); |
private: |
+ void Initialize(); |
+ |
void OnDeviceOpened(int request_id, bool succeeded, const std::string& label); |
- void OnStateUpdate(VideoCaptureState state); |
- void OnFrameReady(const scoped_refptr<media::VideoFrame>& frame, |
- const media::VideoCaptureFormat& format); |
PepperMediaDeviceManager* GetMediaDeviceManager(); |
@@ -51,19 +76,21 @@ |
std::string device_id_; |
std::string label_; |
int session_id_; |
- base::Closure release_device_cb_; |
- base::Closure stop_capture_cb_; |
+ |
+ scoped_ptr<media::VideoCaptureHandlerProxy> handler_proxy_; |
PepperVideoCaptureHost* handler_; |
+ |
+ scoped_ptr<VideoCaptureHandle> video_capture_; |
+ |
+ // StartCapture() must be balanced by StopCapture(), otherwise this object |
+ // will leak. |
+ bool unbalanced_start_; |
// Whether we have a pending request to open a device. We have to make sure |
// there isn't any pending request before this object goes away. |
bool pending_open_device_; |
int pending_open_device_id_; |
- |
- base::ThreadChecker thread_checker_; |
- |
- base::WeakPtrFactory<PepperPlatformVideoCapture> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(PepperPlatformVideoCapture); |
}; |