Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 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 // Windows specific implementation of VideoCaptureDevice. | |
| 6 // DirectShow is used for capturing. DirectShow provide it's own threads | |
| 7 // for capturing. | |
| 8 | |
| 9 #ifndef MEDIA_VIDEO_CAPTURE_WIN_VIDEO_CAPTURE_DEVICE_WIN_H_ | |
| 10 #define MEDIA_VIDEO_CAPTURE_WIN_VIDEO_CAPTURE_DEVICE_WIN_H_ | |
| 11 #pragma once | |
| 12 | |
| 13 // Avoid including strsafe.h via dshow as it will cause build warnings. | |
| 14 #define NO_DSHOW_STRSAFE | |
| 15 #include <dshow.h> | |
| 16 | |
| 17 #include <map> | |
| 18 #include <string> | |
| 19 | |
| 20 #include "app/win/scoped_com_initializer.h" | |
| 21 #include "base/threading/thread.h" | |
| 22 #include "base/win/scoped_comptr.h" | |
| 23 #include "media/video/capture/video_capture_device.h" | |
| 24 #include "media/video/capture/win/sink_filter_win.h" | |
| 25 | |
| 26 namespace media { | |
| 27 | |
| 28 class VideoCaptureDeviceWin | |
| 29 : public VideoCaptureDevice, | |
| 30 public SinkFilter::SinkFilterObserver { | |
| 31 public: | |
| 32 explicit VideoCaptureDeviceWin(const Name& device_name); | |
| 33 virtual ~VideoCaptureDeviceWin(); | |
| 34 // Opens the device driver for this device. | |
| 35 // This function is used by the static VideoCaptureDevice::Create function. | |
| 36 bool Init(); | |
| 37 | |
| 38 // VideoCaptureDevice implementation. | |
| 39 virtual void Allocate(int width, | |
| 40 int height, | |
| 41 int frame_rate, | |
| 42 VideoCaptureDevice::EventHandler* observer); | |
| 43 virtual void Start(); | |
| 44 virtual void Stop(); | |
| 45 virtual void DeAllocate(); | |
| 46 virtual const Name& device_name(); | |
| 47 | |
| 48 private: | |
| 49 enum InternalState { | |
| 50 kIdle, // The device driver is opened but camera is not in use. | |
|
scherkus (not reviewing)
2011/06/24 20:15:26
nit: chromium typically uses kCamelCaseStyle for c
Per K
2011/06/27 11:47:50
Ok- Tommy commented on this as well. But "for cons
tommi (sloooow) - chröme
2011/06/27 13:20:37
(I just learned this) According to the style guide
scherkus (not reviewing)
2011/06/27 19:24:01
ok!
| |
| 51 kAllocated, // The camera has been allocated and can be started. | |
| 52 kCapturing, // Video is being captured. | |
| 53 kError // Error accessing HW functions. | |
| 54 // User needs to recover by destroying the object. | |
| 55 }; | |
| 56 typedef std::map<int, Capability> CapabilityMap; | |
| 57 | |
| 58 // Implements SinkFilterObserver. | |
| 59 virtual void FrameReceived(const uint8* buffer, int length); | |
| 60 | |
| 61 bool CreateCapabilityMap(); | |
| 62 int GetBestMatchedCapability(int width, int height, int frame_rate); | |
| 63 void SetErrorState(const char* reason); | |
| 64 | |
| 65 app::win::ScopedCOMInitializer initialize_com_; | |
| 66 | |
| 67 Name device_name_; | |
| 68 InternalState state_; | |
| 69 VideoCaptureDevice::EventHandler* observer_; | |
| 70 | |
| 71 base::win::ScopedComPtr<IBaseFilter> capture_filter_; | |
| 72 base::win::ScopedComPtr<IGraphBuilder> graph_builder_; | |
| 73 base::win::ScopedComPtr<IMediaControl> media_control_; | |
| 74 base::win::ScopedComPtr<IPin> input_sink_pin_; | |
| 75 base::win::ScopedComPtr<IPin> output_capture_pin_; | |
| 76 // Used when using a MJPEG decoder. | |
| 77 base::win::ScopedComPtr<IBaseFilter> mjpg_filter_; | |
| 78 base::win::ScopedComPtr<IPin> input_mjpg_pin_; | |
| 79 base::win::ScopedComPtr<IPin> output_mjpg_pin_; | |
| 80 | |
| 81 scoped_refptr<SinkFilter> sink_filter_; | |
| 82 | |
| 83 // Map of all capabilities this device support. | |
| 84 CapabilityMap capabilities_; | |
| 85 | |
| 86 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoCaptureDeviceWin); | |
| 87 }; | |
| 88 | |
| 89 } // namespace media | |
| 90 | |
| 91 #endif // MEDIA_VIDEO_CAPTURE_WIN_VIDEO_CAPTURE_DEVICE_WIN_H_ | |
| OLD | NEW |