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 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_VIDEO_CAPTURE_H_ 6 #define CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_VIDEO_CAPTURE_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/callback.h" 12 #include "base/compiler_specific.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/weak_ptr.h" 15 #include "base/threading/thread_checker.h" 16 #include "base/time/time.h" 17 #include "content/common/media/video_capture.h" 18 #include "media/video/capture/video_capture_types.h" 19 20 class GURL; 21 22 namespace content { 23 class PepperMediaDeviceManager; 24 class PepperVideoCaptureHost; 25 26 // This object must only be used on the thread it's constructed on. 27 class PepperPlatformVideoCapture { 28 public: 29 PepperPlatformVideoCapture(int render_frame_id, 30 const std::string& device_id, 31 const GURL& document_url, 32 PepperVideoCaptureHost* handler); 33 virtual ~PepperPlatformVideoCapture(); 34 35 // Detaches the event handler and stops sending notifications to it. 36 void DetachEventHandler(); 37 38 void StartCapture(const media::VideoCaptureParams& params); 39 void StopCapture(); 40 41 private: 42 void OnDeviceOpened(int request_id, bool succeeded, const std::string& label); 43 void OnStateUpdate(VideoCaptureState state); 44 void OnFrameReady(const scoped_refptr<media::VideoFrame>& frame, 45 const media::VideoCaptureFormat& format, 46 const base::TimeTicks& estimated_capture_time); 47 48 // Can return NULL if the RenderFrame referenced by |render_frame_id_| has 49 // gone away. 50 PepperMediaDeviceManager* GetMediaDeviceManager(); 51 52 const int render_frame_id_; 53 const std::string device_id_; 54 55 std::string label_; 56 int session_id_; 57 base::Closure release_device_cb_; 58 base::Closure stop_capture_cb_; 59 60 PepperVideoCaptureHost* handler_; 61 62 // Whether we have a pending request to open a device. We have to make sure 63 // there isn't any pending request before this object goes away. 64 bool pending_open_device_; 65 int pending_open_device_id_; 66 67 base::ThreadChecker thread_checker_; 68 69 base::WeakPtrFactory<PepperPlatformVideoCapture> weak_factory_; 70 71 DISALLOW_COPY_AND_ASSIGN(PepperPlatformVideoCapture); 72 }; 73 74 } // namespace content 75 76 #endif // CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_VIDEO_CAPTURE_H_ 77