[Opalvoip-svn] SF.net SVN: opalvoip: [18762] ptlib/trunk
Brought to you by:
csoutheren,
rjongbloed
From: <sh...@us...> - 2007-10-24 21:02:36
|
Revision: 18762 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=18762&view=rev Author: shorne Date: 2007-10-24 14:02:32 -0700 (Wed, 24 Oct 2007) Log Message: ----------- Added GetDeviceCapabilities to all plugins Modified Paths: -------------- ptlib/trunk/include/ptclib/pvfiledev.h ptlib/trunk/include/ptlib/plugin.h ptlib/trunk/include/ptlib/pluginmgr.h ptlib/trunk/include/ptlib/videoio.h ptlib/trunk/src/ptlib/common/pluginmgr.cxx ptlib/trunk/src/ptlib/common/vfakeio.cxx ptlib/trunk/src/ptlib/common/videoio.cxx ptlib/trunk/src/ptlib/msos/vfw.cxx Modified: ptlib/trunk/include/ptclib/pvfiledev.h =================================================================== --- ptlib/trunk/include/ptclib/pvfiledev.h 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/include/ptclib/pvfiledev.h 2007-10-24 21:02:32 UTC (rev 18762) @@ -156,7 +156,7 @@ */ static BOOL GetDeviceCapabilities( const PString & /*deviceName*/, ///< Name of device - InputDeviceCapabilities & /*caps*/ ///< List of supported capabilities + InputDeviceCapabilities * /*caps*/ ///< List of supported capabilities ) { return FALSE; } /**Get the maximum frame size in bytes. Modified: ptlib/trunk/include/ptlib/plugin.h =================================================================== --- ptlib/trunk/include/ptlib/plugin.h 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/include/ptlib/plugin.h 2007-10-24 21:02:32 UTC (rev 18762) @@ -169,6 +169,8 @@ virtual PObject * CreateInstance(int userData) const = 0; virtual PStringList GetDeviceNames(int userData) const = 0; virtual bool ValidateDeviceName(const PString & deviceName, int userData) const; + virtual bool GetDeviceCapabilities(const PString & deviceName, + void * capabilities) const; }; Modified: ptlib/trunk/include/ptlib/pluginmgr.h =================================================================== --- ptlib/trunk/include/ptlib/pluginmgr.h 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/include/ptlib/pluginmgr.h 2007-10-24 21:02:32 UTC (rev 18762) @@ -151,6 +151,7 @@ PObject * CreatePluginsDevice(const PString & serviceName, const PString & serviceType, int userData = 0) const; PObject * CreatePluginsDeviceByName(const PString & deviceName, const PString & serviceType, int userData = 0, const PString & serviceName = PString::Empty()) const; PStringList GetPluginsDeviceNames(const PString & serviceName, const PString & serviceType, int userData = 0) const; + BOOL GetPluginsDeviceCapabilities(const PString & serviceType,const PString & serviceName,const PString & deviceName,void * capabilities) const; // function to register a service (used by the plugins themselves) BOOL RegisterService (const PString & serviceName, const PString & serviceType, PPluginServiceDescriptor * descriptor); Modified: ptlib/trunk/include/ptlib/videoio.h =================================================================== --- ptlib/trunk/include/ptlib/videoio.h 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/include/ptlib/videoio.h 2007-10-24 21:02:32 UTC (rev 18762) @@ -1048,10 +1048,20 @@ /**Retrieve a list of Device Capabilities */ static BOOL GetDeviceCapabilities( - const PString & /*deviceName*/, ///< Name of device - InputDeviceCapabilities & /*caps*/ ///< List of supported capabilities - ) { return FALSE; } + const PString & deviceName, ///< Name of device + InputDeviceCapabilities * caps, ///< List of supported capabilities + PPluginManager * pluginMgr = NULL ///< Plug in manager, use default if NULL + ); + /**Retrieve a list of Device Capabilities for a particular driver + */ + static BOOL GetDeviceCapabilities( + const PString & deviceName, ///< Name of device + const PString & driverName, ///< Device Driver + InputDeviceCapabilities * caps, ///< List of supported capabilities + PPluginManager * pluginMgr = NULL ///< Plug in manager, use default if NULL + ); + /**Open the device given the device name. */ virtual BOOL Open( @@ -1106,8 +1116,8 @@ public: virtual PObject * CreateInstance(int /*userData*/) const { return new className; } virtual PStringList GetDeviceNames(int /*userData*/) const { return className::GetInputDeviceNames(); } - virtual BOOL GetDeviceCapabilities(const PString & deviceName, InputDeviceCapabilities & caps) const - { return className::GetDeviceCapabilities(deviceName,caps); } + virtual bool GetDeviceCapabilities(const PString & deviceName, void * caps) const + { return className::GetDeviceCapabilities(deviceName,(InputDeviceCapabilities *)caps); } }; #define PCREATE_VIDINPUT_PLUGIN(name) \ Modified: ptlib/trunk/src/ptlib/common/pluginmgr.cxx =================================================================== --- ptlib/trunk/src/ptlib/common/pluginmgr.cxx 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/src/ptlib/common/pluginmgr.cxx 2007-10-24 21:02:32 UTC (rev 18762) @@ -418,7 +418,13 @@ return false; } +bool PDevicePluginServiceDescriptor::GetDeviceCapabilities(const PString & /*deviceName*/, + void * /*capabilities*/) const +{ + return false; +} + PStringList PPluginManager::GetPluginsDeviceNames(const PString & serviceName, const PString & serviceType, int userData) const @@ -469,7 +475,32 @@ return allDevices; } +BOOL PPluginManager::GetPluginsDeviceCapabilities(const PString & serviceType, + const PString & serviceName, + const PString & deviceName, + void * capabilities) const +{ + if (serviceType.IsEmpty() || deviceName.IsEmpty()) + return FALSE; + if (serviceName.IsEmpty() || serviceName == "*") { + for (PINDEX i = 0; i < serviceList.GetSize(); i++) { + const PPluginService & service = serviceList[i]; + if (service.serviceType *= serviceType) { + PDevicePluginServiceDescriptor * desc = (PDevicePluginServiceDescriptor *)service.descriptor; + if (desc != NULL && desc->ValidateDeviceName(deviceName, 0)) + return desc->GetDeviceCapabilities(deviceName,capabilities); + } + } + } else { + PDevicePluginServiceDescriptor * desc = (PDevicePluginServiceDescriptor *)GetServiceDescriptor(serviceName, serviceType); + if (desc != NULL && desc->ValidateDeviceName(deviceName, 0)) + return desc->GetDeviceCapabilities(deviceName,capabilities); + } + + return FALSE; +} + BOOL PPluginManager::RegisterService(const PString & serviceName, const PString & serviceType, PPluginServiceDescriptor * descriptor) Modified: ptlib/trunk/src/ptlib/common/vfakeio.cxx =================================================================== --- ptlib/trunk/src/ptlib/common/vfakeio.cxx 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/src/ptlib/common/vfakeio.cxx 2007-10-24 21:02:32 UTC (rev 18762) @@ -1492,7 +1492,7 @@ */ static BOOL GetDeviceCapabilities( const PString & /*deviceName*/, ///< Name of device - InputDeviceCapabilities & /*caps*/ ///< List of supported capabilities + InputDeviceCapabilities * /*caps*/ ///< List of supported capabilities ) { return FALSE; } /**Get the maximum frame size in bytes. Modified: ptlib/trunk/src/ptlib/common/videoio.cxx =================================================================== --- ptlib/trunk/src/ptlib/common/videoio.cxx 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/src/ptlib/common/videoio.cxx 2007-10-24 21:02:32 UTC (rev 18762) @@ -1193,7 +1193,7 @@ colourFormat = "RGB24"; bytesPerPixel = 3; swappedRedAndBlue = false; - SetFrameSize(frameWidth, frameHeight); +// SetFrameSize(frameWidth, frameHeight); } @@ -1202,22 +1202,22 @@ PWaitAndSignal m(mutex); PINDEX newBytesPerPixel; - bool newSwappedRedAndBlue; + if (colourFormat *= "RGB32") { newBytesPerPixel = 4; - newSwappedRedAndBlue = false; + swappedRedAndBlue = false; } else if (colourFormat *= "RGB24") { newBytesPerPixel = 3; - newSwappedRedAndBlue = false; + swappedRedAndBlue = false; } else if (colourFormat *= "BGR32") { newBytesPerPixel = 4; - newSwappedRedAndBlue = true; + swappedRedAndBlue = true; } else if (colourFormat *= "BGR24") { newBytesPerPixel = 3; - newSwappedRedAndBlue = true; + swappedRedAndBlue = true; } else return FALSE; @@ -1408,7 +1408,21 @@ return (PVideoInputDevice *)pluginMgr->CreatePluginsDeviceByName(deviceName, videoInputPluginBaseClass,0,driverName); } +BOOL PVideoInputDevice::GetDeviceCapabilities(const PString & deviceName,InputDeviceCapabilities * caps, PPluginManager * pluginMgr) +{ + return GetDeviceCapabilities(deviceName, "*",caps,pluginMgr); +} +BOOL PVideoInputDevice::GetDeviceCapabilities(const PString & deviceName,const PString & driverName, InputDeviceCapabilities * caps, PPluginManager * pluginMgr) +{ + if (pluginMgr == NULL) + pluginMgr = &PPluginManager::GetPluginManager(); + + return pluginMgr->GetPluginsDeviceCapabilities(videoInputPluginBaseClass,driverName,deviceName, (void *)caps); +} + + + PVideoInputDevice * PVideoInputDevice::CreateOpenedDevice(const PString & driverName, const PString & deviceName, BOOL startImmediate, @@ -1442,7 +1456,6 @@ return NULL; } - BOOL PVideoInputDevice::GetFrame(PBYTEArray & frame) { PINDEX returned; Modified: ptlib/trunk/src/ptlib/msos/vfw.cxx =================================================================== --- ptlib/trunk/src/ptlib/msos/vfw.cxx 2007-10-24 07:12:26 UTC (rev 18761) +++ ptlib/trunk/src/ptlib/msos/vfw.cxx 2007-10-24 21:02:32 UTC (rev 18762) @@ -393,7 +393,7 @@ */ static BOOL GetDeviceCapabilities( const PString & /*deviceName*/, ///< Name of device - InputDeviceCapabilities & /*caps*/ ///< List of supported capabilities + InputDeviceCapabilities * /*caps*/ ///< List of supported capabilities ) { return FALSE; } /**Open the device given the device name. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |