OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 // Implementation of VideoCaptureDevice class for Blackmagic video capture | 5 // Implementation of VideoCaptureDevice class for Blackmagic video capture |
6 // devices by using the DeckLink SDK. | 6 // devices by using the DeckLink SDK. |
7 | 7 |
8 #ifndef MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_DECKLINK_MAC_H_ | 8 #ifndef MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_DECKLINK_MAC_H_ |
9 #define MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_DECKLINK_MAC_H_ | 9 #define MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_DECKLINK_MAC_H_ |
10 | 10 |
11 #include "media/video/capture/video_capture_device.h" | 11 #include "media/video/capture/video_capture_device.h" |
12 | 12 |
13 #import <Foundation/Foundation.h> | 13 #import <Foundation/Foundation.h> |
14 | 14 |
| 15 #include "base/threading/thread_checker.h" |
| 16 #include "third_party/decklink/mac/include/DeckLinkAPI.h" |
| 17 |
| 18 namespace { |
| 19 class DeckLinkCaptureDelegate; |
| 20 } // namespace |
| 21 |
15 namespace media { | 22 namespace media { |
16 | 23 |
17 // Extension of VideoCaptureDevice to create and manipulate Blackmagic devices | 24 // Extension of VideoCaptureDevice to create and manipulate Blackmagic devices. |
18 // via DeckLink SDK. | 25 // Creates a reference counted |decklink_capture_delegate_| that does all the |
| 26 // DeckLink SDK configuration and capture work while holding a weak reference to |
| 27 // us for sending back frames, logs and error messages. |
19 class MEDIA_EXPORT VideoCaptureDeviceDeckLinkMac : public VideoCaptureDevice { | 28 class MEDIA_EXPORT VideoCaptureDeviceDeckLinkMac : public VideoCaptureDevice { |
20 public: | 29 public: |
21 // Gets the names of all DeckLink video capture devices connected to this | 30 // Gets the names of all DeckLink video capture devices connected to this |
22 // computer, as enumerated by the DeckLink SDK. | 31 // computer, as enumerated by the DeckLink SDK. |
23 static void EnumerateDevices(VideoCaptureDevice::Names* device_names); | 32 static void EnumerateDevices(VideoCaptureDevice::Names* device_names); |
24 | 33 |
25 // Gets the supported formats of a particular device attached to the system, | 34 // Gets the supported formats of a particular device attached to the system, |
26 // identified by |device|. Formats are retrieved from the DeckLink SDK. | 35 // identified by |device|. Formats are retrieved from the DeckLink SDK. |
27 static void EnumerateDeviceCapabilities( | 36 static void EnumerateDeviceCapabilities( |
28 const VideoCaptureDevice::Name& device, | 37 const VideoCaptureDevice::Name& device, |
29 VideoCaptureFormats* supported_formats); | 38 VideoCaptureFormats* supported_formats); |
30 | 39 |
31 explicit VideoCaptureDeviceDeckLinkMac(const Name& device_name); | 40 explicit VideoCaptureDeviceDeckLinkMac(const Name& device_name); |
32 virtual ~VideoCaptureDeviceDeckLinkMac(); | 41 virtual ~VideoCaptureDeviceDeckLinkMac(); |
33 | 42 |
| 43 // Copy of VideoCaptureDevice::Client::OnIncomingCapturedData(). Used by |
| 44 // |deckline_capture_delegate_| to forward captured frames. |
| 45 void OnIncomingCapturedData(const uint8* data, |
| 46 int length, |
| 47 const VideoCaptureFormat& frame_format, |
| 48 int rotation, // Clockwise. |
| 49 base::TimeTicks timestamp); |
| 50 |
| 51 // Forwarder to VideoCaptureDevice::Client::OnError(). |
| 52 void sendErrorString(const std::string& reason); |
| 53 |
| 54 // Forwarder to VideoCaptureDevice::Client::OnLog(). |
| 55 void sendLogString(const std::string& message); |
| 56 |
| 57 private: |
34 // VideoCaptureDevice implementation. | 58 // VideoCaptureDevice implementation. |
35 virtual void AllocateAndStart( | 59 virtual void AllocateAndStart( |
36 const VideoCaptureParams& params, | 60 const VideoCaptureParams& params, |
37 scoped_ptr<VideoCaptureDevice::Client> client) OVERRIDE; | 61 scoped_ptr<VideoCaptureDevice::Client> client) OVERRIDE; |
38 virtual void StopAndDeAllocate() OVERRIDE; | 62 virtual void StopAndDeAllocate() OVERRIDE; |
39 | 63 |
40 private: | 64 // Protects concurrent setting and using of |client_|. |
| 65 base::Lock lock_; |
| 66 scoped_ptr<VideoCaptureDevice::Client> client_; |
| 67 // Reference counted handle to the DeckLink capture delegate, also ref counted |
| 68 // by the DeckLink SDK as well. |
| 69 scoped_refptr<DeckLinkCaptureDelegate> decklink_capture_delegate_; |
| 70 |
| 71 base::ThreadChecker thread_checker_; |
| 72 |
41 DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceDeckLinkMac); | 73 DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceDeckLinkMac); |
42 }; | 74 }; |
43 | 75 |
44 } // namespace media | 76 } // namespace media |
45 | 77 |
46 #endif // MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_DECKLINK_MAC_H_ | 78 #endif // MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_DECKLINK_MAC_H_ |
OLD | NEW |