| Index: media/video/capture/win/video_capture_device_win.h
|
| ===================================================================
|
| --- media/video/capture/win/video_capture_device_win.h (revision 0)
|
| +++ media/video/capture/win/video_capture_device_win.h (revision 0)
|
| @@ -0,0 +1,92 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Windows specific implementation of VideoCaptureDevice.
|
| +// DirectShow is used for capturing. DirectShow provide it's own threads
|
| +// for capturing.
|
| +
|
| +#ifndef MEDIA_VIDEO_CAPTURE_WIN_VIDEO_CAPTURE_DEVICE_WIN_H_
|
| +#define MEDIA_VIDEO_CAPTURE_WIN_VIDEO_CAPTURE_DEVICE_WIN_H_
|
| +#pragma once
|
| +
|
| +// Avoid including strsafe.h via dshow as it will cause build warnings.
|
| +#define NO_DSHOW_STRSAFE
|
| +#include <dshow.h>
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +
|
| +#include "base/threading/thread.h"
|
| +#include "base/win/scoped_com_initializer.h"
|
| +#include "base/win/scoped_comptr.h"
|
| +#include "media/video/capture/video_capture_device.h"
|
| +#include "media/video/capture/win/sink_filter_win.h"
|
| +#include "media/video/capture/win/sink_input_pin_win.h"
|
| +
|
| +namespace media {
|
| +
|
| +class VideoCaptureDeviceWin
|
| + : public VideoCaptureDevice,
|
| + public SinkFilterObserver {
|
| + public:
|
| + explicit VideoCaptureDeviceWin(const Name& device_name);
|
| + virtual ~VideoCaptureDeviceWin();
|
| + // Opens the device driver for this device.
|
| + // This function is used by the static VideoCaptureDevice::Create function.
|
| + bool Init();
|
| +
|
| + // VideoCaptureDevice implementation.
|
| + virtual void Allocate(int width,
|
| + int height,
|
| + int frame_rate,
|
| + VideoCaptureDevice::EventHandler* observer);
|
| + virtual void Start();
|
| + virtual void Stop();
|
| + virtual void DeAllocate();
|
| + virtual const Name& device_name();
|
| +
|
| + private:
|
| + enum InternalState {
|
| + kIdle, // The device driver is opened but camera is not in use.
|
| + kAllocated, // The camera has been allocated and can be started.
|
| + kCapturing, // Video is being captured.
|
| + kError // Error accessing HW functions.
|
| + // User needs to recover by destroying the object.
|
| + };
|
| + typedef std::map<int, Capability> CapabilityMap;
|
| +
|
| + // Implements SinkFilterObserver.
|
| + virtual void FrameReceived(const uint8* buffer, int length);
|
| +
|
| + bool CreateCapabilityMap();
|
| + int GetBestMatchedCapability(int width, int height, int frame_rate);
|
| + void SetErrorState(const char* reason);
|
| +
|
| + base::win::ScopedCOMInitializer initialize_com_;
|
| +
|
| + Name device_name_;
|
| + InternalState state_;
|
| + VideoCaptureDevice::EventHandler* observer_;
|
| +
|
| + base::win::ScopedComPtr<IBaseFilter> capture_filter_;
|
| + base::win::ScopedComPtr<IGraphBuilder> graph_builder_;
|
| + base::win::ScopedComPtr<IMediaControl> media_control_;
|
| + base::win::ScopedComPtr<IPin> input_sink_pin_;
|
| + base::win::ScopedComPtr<IPin> output_capture_pin_;
|
| + // Used when using a MJPEG decoder.
|
| + base::win::ScopedComPtr<IBaseFilter> mjpg_filter_;
|
| + base::win::ScopedComPtr<IPin> input_mjpg_pin_;
|
| + base::win::ScopedComPtr<IPin> output_mjpg_pin_;
|
| +
|
| + scoped_refptr<SinkFilter> sink_filter_;
|
| +
|
| + // Map of all capabilities this device support.
|
| + CapabilityMap capabilities_;
|
| +
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(VideoCaptureDeviceWin);
|
| +};
|
| +
|
| +} // namespace media
|
| +
|
| +#endif // MEDIA_VIDEO_CAPTURE_WIN_VIDEO_CAPTURE_DEVICE_WIN_H_
|
|
|