Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(620)

Side by Side Diff: media/capture/video/mac/video_capture_device_mac.h

Issue 2143903003: [WIP] Move media/capture to device/capture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 // MacOSX implementation of generic VideoCaptureDevice, using AVFoundation as
6 // native capture API. AVFoundation is available in versions 10.7 (Lion) and
7 // later.
8
9 #ifndef MEDIA_CAPTURE_VIDEO_MAC_VIDEO_CAPTURE_DEVICE_MAC_H_
10 #define MEDIA_CAPTURE_VIDEO_MAC_VIDEO_CAPTURE_DEVICE_MAC_H_
11
12 #import <Foundation/Foundation.h>
13 #include <stdint.h>
14
15 #include <string>
16
17 #include "base/compiler_specific.h"
18 #include "base/mac/scoped_nsobject.h"
19 #include "base/macros.h"
20 #include "base/memory/ref_counted.h"
21 #include "base/memory/weak_ptr.h"
22 #include "media/base/video_capture_types.h"
23 #include "media/capture/video/video_capture_device.h"
24
25 @class VideoCaptureDeviceAVFoundation;
26
27 namespace base {
28 class SingleThreadTaskRunner;
29 }
30
31 namespace tracked_objects {
32 class Location;
33 } // namespace tracked_objects
34
35 // Small class to bundle device name and connection type into a dictionary.
36 CAPTURE_EXPORT
37 @interface DeviceNameAndTransportType : NSObject {
38 @private
39 base::scoped_nsobject<NSString> deviceName_;
40 // The transport type of the device (USB, PCI, etc), values are defined in
41 // <IOKit/audio/IOAudioTypes.h> as kIOAudioDeviceTransportType*.
42 int32_t transportType_;
43 }
44
45 - (id)initWithName:(NSString*)name transportType:(int32_t)transportType;
46
47 - (NSString*)deviceName;
48 - (int32_t)transportType;
49 @end
50
51 namespace media {
52
53 // Called by VideoCaptureManager to open, close and start, stop Mac video
54 // capture devices.
55 class VideoCaptureDeviceMac : public VideoCaptureDevice {
56 public:
57 explicit VideoCaptureDeviceMac(const Name& device_name);
58 ~VideoCaptureDeviceMac() override;
59
60 // VideoCaptureDevice implementation.
61 void AllocateAndStart(
62 const VideoCaptureParams& params,
63 std::unique_ptr<VideoCaptureDevice::Client> client) override;
64 void StopAndDeAllocate() override;
65 void TakePhoto(TakePhotoCallback callback) override;
66
67 bool Init(VideoCaptureDevice::Name::CaptureApiType capture_api_type);
68
69 // Called to deliver captured video frames. It's safe to call this method
70 // from any thread, including those controlled by AVFoundation.
71 void ReceiveFrame(const uint8_t* video_frame,
72 int video_frame_length,
73 const VideoCaptureFormat& frame_format,
74 int aspect_numerator,
75 int aspect_denominator,
76 base::TimeDelta timestamp);
77
78 // Callbacks with the result of a still image capture, or in case of error,
79 // respectively. It's safe to call these methods from any thread.
80 void OnPhotoTaken(const uint8_t* image_data,
81 size_t image_length,
82 const std::string& mime_type);
83 void OnPhotoError();
84
85 // Forwarder to VideoCaptureDevice::Client::OnError().
86 void ReceiveError(const tracked_objects::Location& from_here,
87 const std::string& reason);
88
89 // Forwarder to VideoCaptureDevice::Client::OnLog().
90 void LogMessage(const std::string& message);
91
92 private:
93 void SetErrorState(const tracked_objects::Location& from_here,
94 const std::string& reason);
95 bool UpdateCaptureResolution();
96
97 // Flag indicating the internal state.
98 enum InternalState { kNotInitialized, kIdle, kCapturing, kError };
99
100 Name device_name_;
101 std::unique_ptr<VideoCaptureDevice::Client> client_;
102
103 VideoCaptureFormat capture_format_;
104
105 // Only read and write state_ from inside this loop.
106 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
107 InternalState state_;
108
109 base::scoped_nsobject<VideoCaptureDeviceAVFoundation> capture_device_;
110
111 // To hold on to the TakePhotoCallback while the picture is being taken.
112 std::unique_ptr<TakePhotoCallback> photo_callback_;
113
114 // Used with Bind and PostTask to ensure that methods aren't called after the
115 // VideoCaptureDeviceMac is destroyed.
116 // NOTE: Weak pointers must be invalidated before all other member variables.
117 base::WeakPtrFactory<VideoCaptureDeviceMac> weak_factory_;
118
119 DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceMac);
120 };
121
122 } // namespace media
123
124 #endif // MEDIA_CAPTURE_VIDEO_MAC_VIDEO_CAPTURE_DEVICE_MAC_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698