mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Bug 1311048 - Pick out Firefox windows as scary by pid (only OSX atm). r=jesup
MozReview-Commit-ID: DwUodsRWswm --HG-- extra : rebase_source : 0ab4002dfbbb4a0cf0265764d22c598256198d82
This commit is contained in:
parent
fdf5c5ad8c
commit
409780816c
@ -386,7 +386,8 @@ CamerasChild::GetCaptureDevice(CaptureEngine aCapEngine,
|
||||
unsigned int list_number, char* device_nameUTF8,
|
||||
const unsigned int device_nameUTF8Length,
|
||||
char* unique_idUTF8,
|
||||
const unsigned int unique_idUTF8Length)
|
||||
const unsigned int unique_idUTF8Length,
|
||||
bool* scary)
|
||||
{
|
||||
LOG((__PRETTY_FUNCTION__));
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
@ -400,6 +401,9 @@ CamerasChild::GetCaptureDevice(CaptureEngine aCapEngine,
|
||||
if (dispatcher.Success()) {
|
||||
base::strlcpy(device_nameUTF8, mReplyDeviceName.get(), device_nameUTF8Length);
|
||||
base::strlcpy(unique_idUTF8, mReplyDeviceID.get(), unique_idUTF8Length);
|
||||
if (scary) {
|
||||
*scary = mReplyScary;
|
||||
}
|
||||
LOG(("Got %s name %s id", device_nameUTF8, unique_idUTF8));
|
||||
}
|
||||
return dispatcher.ReturnValue();
|
||||
@ -407,7 +411,8 @@ CamerasChild::GetCaptureDevice(CaptureEngine aCapEngine,
|
||||
|
||||
bool
|
||||
CamerasChild::RecvReplyGetCaptureDevice(const nsCString& device_name,
|
||||
const nsCString& device_id)
|
||||
const nsCString& device_id,
|
||||
const bool& scary)
|
||||
{
|
||||
LOG((__PRETTY_FUNCTION__));
|
||||
MonitorAutoLock monitor(mReplyMonitor);
|
||||
@ -415,6 +420,7 @@ CamerasChild::RecvReplyGetCaptureDevice(const nsCString& device_name,
|
||||
mReplySuccess = true;
|
||||
mReplyDeviceName = device_name;
|
||||
mReplyDeviceID = device_id;
|
||||
mReplyScary = scary;
|
||||
monitor.Notify();
|
||||
return true;
|
||||
}
|
||||
|
@ -165,7 +165,8 @@ public:
|
||||
virtual bool RecvReplyAllocateCaptureDevice(const int&) override;
|
||||
virtual bool RecvReplyGetCaptureCapability(const CaptureCapability& capability) override;
|
||||
virtual bool RecvReplyGetCaptureDevice(const nsCString& device_name,
|
||||
const nsCString& device_id) override;
|
||||
const nsCString& device_id,
|
||||
const bool& scary) override;
|
||||
virtual bool RecvReplyFailure(void) override;
|
||||
virtual bool RecvReplySuccess(void) override;
|
||||
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||
@ -195,7 +196,8 @@ public:
|
||||
unsigned int list_number, char* device_nameUTF8,
|
||||
const unsigned int device_nameUTF8Length,
|
||||
char* unique_idUTF8,
|
||||
const unsigned int unique_idUTF8Length);
|
||||
const unsigned int unique_idUTF8Length,
|
||||
bool* scary = nullptr);
|
||||
void ShutdownAll();
|
||||
int EnsureInitialized(CaptureEngine aCapEngine);
|
||||
|
||||
@ -239,6 +241,7 @@ private:
|
||||
webrtc::CaptureCapability mReplyCapability;
|
||||
nsCString mReplyDeviceName;
|
||||
nsCString mReplyDeviceID;
|
||||
bool mReplyScary;
|
||||
};
|
||||
|
||||
} // namespace camera
|
||||
|
@ -680,20 +680,22 @@ CamerasParent::RecvGetCaptureDevice(const CaptureEngine& aCapEngine,
|
||||
char deviceUniqueId[MediaEngineSource::kMaxUniqueIdLength];
|
||||
nsCString name;
|
||||
nsCString uniqueId;
|
||||
int devicePid = 0;
|
||||
int error = -1;
|
||||
if (self->EnsureInitialized(aCapEngine)) {
|
||||
error = self->mEngines[aCapEngine].mPtrViECapture->GetCaptureDevice(aListNumber,
|
||||
deviceName,
|
||||
sizeof(deviceName),
|
||||
deviceUniqueId,
|
||||
sizeof(deviceUniqueId));
|
||||
sizeof(deviceUniqueId),
|
||||
&devicePid);
|
||||
}
|
||||
if (!error) {
|
||||
name.Assign(deviceName);
|
||||
uniqueId.Assign(deviceUniqueId);
|
||||
}
|
||||
RefPtr<nsIRunnable> ipc_runnable =
|
||||
media::NewRunnableFrom([self, error, name, uniqueId]() -> nsresult {
|
||||
media::NewRunnableFrom([self, error, name, uniqueId, devicePid]() {
|
||||
if (self->IsShuttingDown()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
@ -702,9 +704,11 @@ CamerasParent::RecvGetCaptureDevice(const CaptureEngine& aCapEngine,
|
||||
Unused << self->SendReplyFailure();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
bool scary = (devicePid == getpid());
|
||||
|
||||
LOG(("Returning %s name %s id", name.get(), uniqueId.get()));
|
||||
Unused << self->SendReplyGetCaptureDevice(name, uniqueId);
|
||||
LOG(("Returning %s name %s id (pid = %d)%s", name.get(),
|
||||
uniqueId.get(), devicePid, (scary? " (scary)" : "")));
|
||||
Unused << self->SendReplyGetCaptureDevice(name, uniqueId, scary);
|
||||
return NS_OK;
|
||||
});
|
||||
self->mPBackgroundThread->Dispatch(ipc_runnable, NS_DISPATCH_NORMAL);
|
||||
|
@ -36,7 +36,7 @@ child:
|
||||
async ReplyNumberOfCapabilities(int numdev);
|
||||
async ReplyAllocateCaptureDevice(int numdev);
|
||||
async ReplyGetCaptureCapability(CaptureCapability cap);
|
||||
async ReplyGetCaptureDevice(nsCString device_name, nsCString device_id);
|
||||
async ReplyGetCaptureDevice(nsCString device_name, nsCString device_id, bool scary);
|
||||
async ReplyFailure();
|
||||
async ReplySuccess();
|
||||
async __delete__();
|
||||
|
@ -52,7 +52,7 @@ MediaEngineRemoteVideoSource::Init()
|
||||
&mozilla::camera::CamerasChild::GetCaptureDevice,
|
||||
mCapEngine, mCaptureIndex,
|
||||
deviceName, kMaxDeviceNameLength,
|
||||
uniqueId, kMaxUniqueIdLength)) {
|
||||
uniqueId, kMaxUniqueIdLength, nullptr)) {
|
||||
LOG(("Error initializing RemoteVideoSource (GetCaptureDevice)"));
|
||||
return;
|
||||
}
|
||||
@ -496,7 +496,7 @@ void MediaEngineRemoteVideoSource::Refresh(int aIndex) {
|
||||
&mozilla::camera::CamerasChild::GetCaptureDevice,
|
||||
mCapEngine, aIndex,
|
||||
deviceName, sizeof(deviceName),
|
||||
uniqueId, sizeof(uniqueId))) {
|
||||
uniqueId, sizeof(uniqueId), nullptr)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -199,7 +199,7 @@ MediaEngineWebRTC::EnumerateVideoDevices(dom::MediaSourceEnum aMediaSource,
|
||||
for (int i = 0; i < num; i++) {
|
||||
char deviceName[MediaEngineSource::kMaxDeviceNameLength];
|
||||
char uniqueId[MediaEngineSource::kMaxUniqueIdLength];
|
||||
bool scaryWindow = false;
|
||||
bool scarySource = false;
|
||||
|
||||
// paranoia
|
||||
deviceName[0] = '\0';
|
||||
@ -211,7 +211,8 @@ MediaEngineWebRTC::EnumerateVideoDevices(dom::MediaSourceEnum aMediaSource,
|
||||
capEngine,
|
||||
i, deviceName,
|
||||
sizeof(deviceName), uniqueId,
|
||||
sizeof(uniqueId));
|
||||
sizeof(uniqueId),
|
||||
&scarySource);
|
||||
if (error) {
|
||||
LOG(("camera:GetCaptureDevice: Failed %d", error ));
|
||||
continue;
|
||||
@ -219,16 +220,6 @@ MediaEngineWebRTC::EnumerateVideoDevices(dom::MediaSourceEnum aMediaSource,
|
||||
#ifdef DEBUG
|
||||
LOG((" Capture Device Index %d, Name %s", i, deviceName));
|
||||
|
||||
if (aMediaSource == dom::MediaSourceEnum::Window) {
|
||||
// TODO: Detect firefox windows
|
||||
//scaryWindow = true;
|
||||
}
|
||||
|
||||
if (aMediaSource == dom::MediaSourceEnum::Application) {
|
||||
// TODO: Detect firefox application windows
|
||||
//scaryWindow = true;
|
||||
}
|
||||
|
||||
webrtc::CaptureCapability cap;
|
||||
int numCaps = mozilla::camera::GetChildAndCall(
|
||||
&mozilla::camera::CamerasChild::NumberOfCapabilities,
|
||||
@ -262,7 +253,7 @@ MediaEngineWebRTC::EnumerateVideoDevices(dom::MediaSourceEnum aMediaSource,
|
||||
aVSources->AppendElement(vSource.get());
|
||||
} else {
|
||||
vSource = new MediaEngineRemoteVideoSource(i, capEngine, aMediaSource,
|
||||
scaryKind || scaryWindow);
|
||||
scaryKind || scarySource);
|
||||
mVideoSources.Put(uuid, vSource); // Hashtable takes ownership.
|
||||
aVSources->AppendElement(vSource);
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ DesktopDisplayDevice::DesktopDisplayDevice() {
|
||||
screenId_ = kInvalidScreenId;
|
||||
deviceUniqueIdUTF8_ = NULL;
|
||||
deviceNameUTF8_ = NULL;
|
||||
pid_ = 0;
|
||||
}
|
||||
|
||||
DesktopDisplayDevice::~DesktopDisplayDevice() {
|
||||
@ -63,6 +64,10 @@ void DesktopDisplayDevice::setUniqueIdName(const char *deviceUniqueIdUTF8) {
|
||||
SetStringMember(&deviceUniqueIdUTF8_, deviceUniqueIdUTF8);
|
||||
}
|
||||
|
||||
void DesktopDisplayDevice::setPid(const int pid) {
|
||||
pid_ = pid;
|
||||
}
|
||||
|
||||
ScreenId DesktopDisplayDevice::getScreenId() {
|
||||
return screenId_;
|
||||
}
|
||||
@ -75,6 +80,10 @@ const char *DesktopDisplayDevice::getUniqueIdName() {
|
||||
return deviceUniqueIdUTF8_;
|
||||
}
|
||||
|
||||
pid_t DesktopDisplayDevice::getPid() {
|
||||
return pid_;
|
||||
}
|
||||
|
||||
DesktopDisplayDevice& DesktopDisplayDevice::operator= (DesktopDisplayDevice& other) {
|
||||
if (&other == this) {
|
||||
return *this;
|
||||
@ -82,6 +91,7 @@ DesktopDisplayDevice& DesktopDisplayDevice::operator= (DesktopDisplayDevice& oth
|
||||
screenId_ = other.getScreenId();
|
||||
setUniqueIdName(other.getUniqueIdName());
|
||||
setDeviceName(other.getDeviceName());
|
||||
pid_ = other.getPid();
|
||||
|
||||
return *this;
|
||||
}
|
||||
@ -271,6 +281,7 @@ void DesktopDeviceInfoImpl::InitializeWindowList() {
|
||||
|
||||
pWinDevice->setScreenId(itr->id);
|
||||
pWinDevice->setDeviceName(itr->title.c_str());
|
||||
pWinDevice->setPid(itr->pid);
|
||||
|
||||
char idStr[BUFSIZ];
|
||||
#if WEBRTC_WIN
|
||||
|
@ -18,10 +18,12 @@ public:
|
||||
void setScreenId(const ScreenId screenId);
|
||||
void setDeviceName(const char *deviceNameUTF8);
|
||||
void setUniqueIdName(const char *deviceUniqueIdUTF8);
|
||||
void setPid(pid_t pid);
|
||||
|
||||
ScreenId getScreenId();
|
||||
const char *getDeviceName();
|
||||
const char *getUniqueIdName();
|
||||
pid_t getPid();
|
||||
|
||||
DesktopDisplayDevice& operator= (DesktopDisplayDevice& other);
|
||||
|
||||
@ -29,6 +31,7 @@ protected:
|
||||
ScreenId screenId_;
|
||||
char* deviceNameUTF8_;
|
||||
char* deviceUniqueIdUTF8_;
|
||||
pid_t pid_;
|
||||
};
|
||||
|
||||
typedef std::map<intptr_t,DesktopDisplayDevice*> DesktopDisplayDeviceList;
|
||||
|
@ -29,6 +29,7 @@ class WindowCapturer : public DesktopCapturer {
|
||||
|
||||
struct Window {
|
||||
WindowId id;
|
||||
pid_t pid;
|
||||
|
||||
// Title of the window in UTF-8 encoding.
|
||||
std::string title;
|
||||
|
@ -100,6 +100,8 @@ bool WindowCapturerMac::GetWindowList(WindowList* windows) {
|
||||
CFDictionaryGetValue(window, kCGWindowName));
|
||||
CFNumberRef window_id = reinterpret_cast<CFNumberRef>(
|
||||
CFDictionaryGetValue(window, kCGWindowNumber));
|
||||
CFNumberRef window_pid = reinterpret_cast<CFNumberRef>(
|
||||
CFDictionaryGetValue(window, kCGWindowOwnerPID));
|
||||
CFNumberRef window_layer = reinterpret_cast<CFNumberRef>(
|
||||
CFDictionaryGetValue(window, kCGWindowLayer));
|
||||
if (window_title && window_id && window_layer) {
|
||||
@ -123,8 +125,11 @@ bool WindowCapturerMac::GetWindowList(WindowList* windows) {
|
||||
|
||||
int id;
|
||||
CFNumberGetValue(window_id, kCFNumberIntType, &id);
|
||||
pid_t pid = 0;
|
||||
CFNumberGetValue(window_pid, kCFNumberIntType, &pid);
|
||||
WindowCapturer::Window window;
|
||||
window.id = id;
|
||||
window.pid = pid;
|
||||
if (!rtc::ToUtf8(window_title, &(window.title)) ||
|
||||
window.title.empty()) {
|
||||
continue;
|
||||
|
@ -58,6 +58,7 @@ class VideoCaptureModule: public RefCountedModule {
|
||||
// Otherwise same as deviceNameUTF8.
|
||||
// productUniqueIdUTF8 - Unique product id if it exist.
|
||||
// Null terminated otherwise.
|
||||
// pid - Owning process id (pid).
|
||||
virtual int32_t GetDeviceName(
|
||||
uint32_t deviceNumber,
|
||||
char* deviceNameUTF8,
|
||||
@ -65,7 +66,8 @@ class VideoCaptureModule: public RefCountedModule {
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8 = 0,
|
||||
uint32_t productUniqueIdUTF8Length = 0) = 0;
|
||||
uint32_t productUniqueIdUTF8Length = 0,
|
||||
int32_t* pid = 0) = 0;
|
||||
|
||||
|
||||
// Returns the number of capabilities this device.
|
||||
|
@ -48,7 +48,8 @@ public:
|
||||
uint32_t deviceNameLength, char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8 = 0,
|
||||
uint32_t productUniqueIdUTF8Length = 0);
|
||||
uint32_t productUniqueIdUTF8Length = 0,
|
||||
pid_t* pid = 0);
|
||||
|
||||
/*
|
||||
* Returns the number of capabilities for this device
|
||||
|
@ -54,7 +54,8 @@ int32_t VideoCaptureMacAVFoundationInfo::GetDeviceName(
|
||||
uint32_t deviceNumber, char* deviceNameUTF8,
|
||||
uint32_t deviceNameLength, char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length, char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length)
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid)
|
||||
{
|
||||
nsAutoreleasePool localPool;
|
||||
int errNum = [[_captureInfo getDeviceNamesFromIndex:deviceNumber
|
||||
|
@ -19,7 +19,8 @@ namespace webrtc {
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8 = NULL,
|
||||
uint32_t productUniqueIdUTF8Length = 0) {
|
||||
uint32_t productUniqueIdUTF8Length = 0,
|
||||
pid_t* pid = 0) {
|
||||
deviceNameUTF8 = const_cast<char*>(kDeviceName);
|
||||
deviceUniqueIdUTF8 = const_cast<char*>(kUniqueDeviceName);
|
||||
productUniqueIdUTF8 = const_cast<char*>(kProductUniqueId);
|
||||
|
@ -58,7 +58,8 @@ int32_t ScreenDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length) {
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid) {
|
||||
|
||||
DesktopDisplayDevice desktopDisplayDevice;
|
||||
|
||||
@ -154,7 +155,8 @@ int32_t AppDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length) {
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid) {
|
||||
|
||||
DesktopApplication desktopApplication;
|
||||
|
||||
@ -254,7 +256,8 @@ int32_t WindowDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length) {
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid) {
|
||||
|
||||
DesktopDisplayDevice desktopDisplayDevice;
|
||||
|
||||
@ -289,6 +292,9 @@ int32_t WindowDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
|
||||
deviceUniqueId,
|
||||
len);
|
||||
}
|
||||
if (pid) {
|
||||
*pid = desktopDisplayDevice.getPid();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -55,7 +55,8 @@ public:
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length);
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid);
|
||||
|
||||
virtual int32_t DisplayCaptureSettingsDialogBox(const char* deviceUniqueIdUTF8,
|
||||
const char* dialogTitleUTF8,
|
||||
@ -93,7 +94,8 @@ public:
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length);
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid);
|
||||
|
||||
virtual int32_t DisplayCaptureSettingsDialogBox(const char* deviceUniqueIdUTF8,
|
||||
const char* dialogTitleUTF8,
|
||||
@ -130,7 +132,8 @@ public:
|
||||
char* deviceUniqueIdUTF8,
|
||||
uint32_t deviceUniqueIdUTF8Length,
|
||||
char* productUniqueIdUTF8,
|
||||
uint32_t productUniqueIdUTF8Length);
|
||||
uint32_t productUniqueIdUTF8Length,
|
||||
pid_t* pid);
|
||||
|
||||
virtual int32_t DisplayCaptureSettingsDialogBox(const char* deviceUniqueIdUTF8,
|
||||
const char* dialogTitleUTF8,
|
||||
|
@ -22,6 +22,10 @@
|
||||
#include "webrtc/common_video/interface/i420_video_frame.h"
|
||||
#include "webrtc/common_video/rotation.h"
|
||||
|
||||
#ifdef XP_WIN
|
||||
typedef int pid_t;
|
||||
#endif
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class VideoEngine;
|
||||
@ -146,7 +150,8 @@ class WEBRTC_DLLEXPORT ViECapture {
|
||||
char* device_nameUTF8,
|
||||
const unsigned int device_nameUTF8Length,
|
||||
char* unique_idUTF8,
|
||||
const unsigned int unique_idUTF8Length) = 0;
|
||||
const unsigned int unique_idUTF8Length,
|
||||
pid_t* pid = nullptr) = 0;
|
||||
|
||||
// Allocates a capture device to be used in VideoEngine.
|
||||
virtual int AllocateCaptureDevice(const char* unique_idUTF8,
|
||||
|
@ -69,11 +69,12 @@ int ViECaptureImpl::GetCaptureDevice(unsigned int list_number,
|
||||
char* device_nameUTF8,
|
||||
unsigned int device_nameUTF8Length,
|
||||
char* unique_idUTF8,
|
||||
unsigned int unique_idUTF8Length) {
|
||||
unsigned int unique_idUTF8Length,
|
||||
pid_t* pid) {
|
||||
return shared_data_->input_manager()->GetDeviceName(
|
||||
list_number,
|
||||
device_nameUTF8, device_nameUTF8Length,
|
||||
unique_idUTF8, unique_idUTF8Length);
|
||||
unique_idUTF8, unique_idUTF8Length, pid);
|
||||
}
|
||||
|
||||
int ViECaptureImpl::AllocateCaptureDevice(
|
||||
|
@ -30,7 +30,9 @@ class ViECaptureImpl
|
||||
virtual int GetCaptureDevice(unsigned int list_number, char* device_nameUTF8,
|
||||
const unsigned int device_nameUTF8Length,
|
||||
char* unique_idUTF8,
|
||||
const unsigned int unique_idUTF8Length);
|
||||
const unsigned int unique_idUTF8Length,
|
||||
pid_t* pid = nullptr);
|
||||
|
||||
virtual int AllocateCaptureDevice(const char* unique_idUTF8,
|
||||
const unsigned int unique_idUTF8Length,
|
||||
int& capture_id);
|
||||
|
@ -70,14 +70,16 @@ int ViEInputManager::GetDeviceName(uint32_t device_number,
|
||||
char* device_nameUTF8,
|
||||
uint32_t device_name_length,
|
||||
char* device_unique_idUTF8,
|
||||
uint32_t device_unique_idUTF8Length) {
|
||||
uint32_t device_unique_idUTF8Length,
|
||||
pid_t* pid) {
|
||||
CriticalSectionScoped cs(device_info_cs_.get());
|
||||
GetDeviceInfo();
|
||||
assert(capture_device_info_);
|
||||
return capture_device_info_->GetDeviceName(device_number, device_nameUTF8,
|
||||
device_name_length,
|
||||
device_unique_idUTF8,
|
||||
device_unique_idUTF8Length);
|
||||
device_unique_idUTF8Length,
|
||||
NULL, 0, pid);
|
||||
}
|
||||
|
||||
int ViEInputManager::NumberOfCaptureCapabilities(
|
||||
|
@ -49,7 +49,8 @@ class ViEInputManager : private ViEManagerBase,
|
||||
char* device_nameUTF8,
|
||||
uint32_t device_name_length,
|
||||
char* device_unique_idUTF8,
|
||||
uint32_t device_unique_idUTF8Length);
|
||||
uint32_t device_unique_idUTF8Length,
|
||||
pid_t* pid);
|
||||
|
||||
// Returns the number of capture capabilities for a specified device.
|
||||
int NumberOfCaptureCapabilities(const char* device_unique_idUTF8);
|
||||
|
Loading…
Reference in New Issue
Block a user