Continue implementing C wrappers.

Implement non-OO C++ EnumerateUSBCameras().
This commit is contained in:
Peter Johnson
2016-08-26 07:04:33 -07:00
parent 80b15b7fe5
commit 0158fd35f0
7 changed files with 129 additions and 45 deletions

View File

@@ -194,16 +194,16 @@ typedef struct CS_USBCameraInfo {
} CS_USBCameraInfo;
CS_USBCameraInfo* CS_EnumerateUSBCameras(int* count, CS_Status* status);
void CS_FreeEnumeratedUSBCameras(CS_USBCameraInfo* cameras);
void CS_FreeEnumeratedUSBCameras(CS_USBCameraInfo* cameras, int count);
CS_Source* CS_EnumerateSources(int* count, CS_Status* status);
void CS_FreeEnumeratedSources(CS_Source* sources);
void CS_ReleaseEnumeratedSources(CS_Source* sources, int count);
CS_Sink* CS_EnumerateSinks(int* count, CS_Status* status);
void CS_FreeEnumeratedSinks(CS_Sink* sinks);
void CS_ReleaseEnumeratedSinks(CS_Sink* sinks, int count);
void CS_FreeString(char* str);
void CS_FreeEnumPropertyChoices(char** choices);
void CS_FreeEnumPropertyChoices(char** choices, int count);
#ifdef __cplusplus
}

View File

@@ -31,6 +31,19 @@ namespace cs {
// in applications such as JNI which require handle-based access.
//
/// USB camera information
struct USBCameraInfo {
/// Device number (e.g. N in '/dev/videoN' on Linux)
int dev;
/// Path to device if available (e.g. '/dev/video0' on Linux)
std::string path;
/// Vendor/model name of the camera as provided by the USB driver
std::string name;
/// Number of channels the camera provides (usually 1, but some cameras such
/// as stereo or depth cameras may provide multiple channels).
int channels;
};
//
// Property Functions
//
@@ -139,7 +152,7 @@ uint64_t SinkWaitForFrame(CS_Sink sink, CS_Status* status);
bool GetSinkImage(CS_Sink sink, int channel, cv::Mat* image, CS_Status* status);
uint64_t GrabSinkFrame(CS_Sink sink, cv::Mat* image, CS_Status* status);
std::string GetSinkError(CS_Sink sink, CS_Status* status);
void GetSinkError(CS_Sink sink, llvm::SmallVectorImpl<char> msg,
void GetSinkError(CS_Sink sink, llvm::SmallVectorImpl<char>& msg,
CS_Status* status);
void SetSinkEnabled(CS_Sink sink, bool enabled, CS_Status* status);
@@ -162,10 +175,11 @@ void RemoveSinkListener(CS_Listener handle, CS_Status* status);
//
// Utility Functions
//
void EnumerateSourceHandles(llvm::SmallVectorImpl<CS_Source>& handles,
CS_Status* status);
void EnumerateSinkHandles(llvm::SmallVectorImpl<CS_Sink>& handles,
CS_Status* status);
std::vector<USBCameraInfo> EnumerateUSBCameras(CS_Status* status);
void EnumerateSources(llvm::SmallVectorImpl<CS_Source>& handles,
CS_Status* status);
void EnumerateSinks(llvm::SmallVectorImpl<CS_Sink>& handles, CS_Status* status);
} // namespace cs

View File

@@ -130,19 +130,6 @@ class VideoSource {
CS_Source m_handle;
};
/// USB camera information
struct USBCameraInfo {
/// Device number (e.g. N in '/dev/videoN' on Linux)
int dev;
/// Path to device if available (e.g. '/dev/video0' on Linux)
std::string path;
/// Vendor/model name of the camera as provided by the USB driver
std::string name;
/// Number of channels the camera provides (usually 1, but some cameras such
/// as stereo or depth cameras may provide multiple channels).
int channels;
};
/// A source that represents a USB camera.
class USBCamera : public VideoSource {
public:

View File

@@ -139,6 +139,11 @@ inline USBCamera::USBCamera(llvm::StringRef name, llvm::StringRef path) {
m_handle = CreateUSBSourcePath(name, path, &m_status);
}
inline std::vector<USBCameraInfo> USBCamera::EnumerateUSBCameras() {
CS_Status status = 0;
return ::cs::EnumerateUSBCameras(&status);
}
inline HTTPCamera::HTTPCamera(llvm::StringRef name, llvm::StringRef url) {
m_handle = CreateHTTPSource(name, url, &m_status);
}