Archive: [email protected]
New revision: gephex--main--0.4--patch-1815
--
Revision: gephex--main--0.4--patch-1815
Archive: [email protected]
Creator: GePhex <[email protected]>
Date: Wed Nov 10 10:04:01 CET 2004
Standard-date: 2004-11-10 09:04:01 GMT
Modified-files: engine/src/dllloader/dllloader.cpp
engine/src/dllloader/frei0r.h
engine/src/dllloader/frei0rwrapper.cpp
modules/src/capturemodule/capturemodule.cpp
New-patches: [email protected]/gephex--georg--0.4--patch-352
[email protected]/gephex--georg--0.4--patch-353
[email protected]/gephex--georg--0.4--patch-354
[email protected]/gephex--georg--0.4--patch-355
[email protected]/gephex--main--0.4--patch-1815
Summary: update frei0r loader
Keywords:
Patches applied:
* [email protected]/gephex--georg--0.4--patch-352
Remove some more frei0r related debug messages
* [email protected]/gephex--georg--0.4--patch-353
Merge in cahnges made during piksel04
* [email protected]/gephex--georg--0.4--patch-354
capturemodule now first uses v4l2 and on failure v4l driver
* [email protected]/gephex--georg--0.4--patch-355
update frei0r.h (F0R_PARAM_BOOL)
* added files
{arch}/gephex/gephex--georg/gephex--georg--0.4/[email protected]/patch-log/patch-352
{arch}/gephex/gephex--georg/gephex--georg--0.4/[email protected]/patch-log/patch-353
{arch}/gephex/gephex--georg/gephex--georg--0.4/[email protected]/patch-log/patch-354
{arch}/gephex/gephex--georg/gephex--georg--0.4/[email protected]/patch-log/patch-355
{arch}/gephex/gephex--main/gephex--main--0.4/[email protected]/patch-log/patch-1815
* modified files
--- orig/engine/src/dllloader/dllloader.cpp
+++ mod/engine/src/dllloader/dllloader.cpp
@@ -600,7 +600,6 @@
std::string inSpec;
if (frei0r)
{
- std::cout << "i = " << i << "
";
if (i == 0)
{
inSpec = frei0r_create_in_spec();
@@ -614,8 +613,10 @@
f0r_param_info_t pinfo;
frei0r->get_param_info(&pinfo, i-1);
inSpec = frei0r_create_in_param_spec(pinfo);
+#if (ENGINE_VERBOSITY > 1)
std::cout << "param # " << i-1 << " name '"
<< pinfo.name << "'
";
+#endif
f0r_param_names.push_back(pinfo.name);
}
}
@@ -897,7 +898,9 @@
f0r.get_plugin_info(&inf0r);
std::string name = std::string("mod_") + inf0r.name;
+#if (ENGINE_VERBOSITY > 1)
std::cout << "Nam0r = " << name << "
";
+#endif
f0r.deinit();
--- orig/engine/src/dllloader/frei0r.h
+++ mod/engine/src/dllloader/frei0r.h
@@ -94,22 +94,33 @@
//---------------------------------------------------------------------------
/**
+ * Parameter type for boolean values
+ */
+#define F0R_PARAM_BOOL 0
+
+/**
* Parameter type for doubles
*/
-#define F0R_PARAM_DOUBLE 0
+#define F0R_PARAM_DOUBLE 1
+
/**
* Parameter type for color
*/
-#define F0R_PARAM_COLOR 1
+#define F0R_PARAM_COLOR 2
/**
* Parameter type for position
*/
-#define F0R_PARAM_POSITION 2
+#define F0R_PARAM_POSITION 3
+
+
+/**
+ * The boolean type. The allowed range of values is [0, 1].
+ * [0, 0.5[ is mapped to false and [0.5, 1] is mapped to true.
+ */
+typedef double f0r_param_bool;
/**
* The double type. The allowed range of values is [0, 1].
- * For boolean values, [0, 0.5] is mapped to false and
- * ]0.5, 1] is mapped to false.
*/
typedef double f0r_param_double;
@@ -138,8 +149,6 @@
/**
* Similar to f0r_plugin_info_t, this structure
* is filled by the plugin for every parameter.
- * If the type is F0R_PARAM_DOUBLE and the name ends with a '?',
- * the plugin interprets this parameter as a boolean flag.
*/
typedef struct f0r_param_info
{
@@ -163,7 +172,7 @@
/**
* Constructor for effect instances. The plugin returns a pointer to
- * its internal instance structure. Input resolution has to be
+ * its internal instance structure. The resolution has to be
* a multiple of 8 in both dimension.
* \param width The x-resolution of the processed video frames
* \param height The y-resolution of the processed video frames
@@ -222,4 +231,3 @@
//---------------------------------------------------------------------------
#endif
-
--- orig/engine/src/dllloader/frei0rwrapper.cpp
+++ mod/engine/src/dllloader/frei0rwrapper.cpp
@@ -192,12 +192,16 @@
switch (f0r_pinfo.type)
{
+ case F0R_PARAM_BOOL:
+ os << "typ_NumberType"; break;
case F0R_PARAM_DOUBLE:
os << "typ_NumberType"; break;
case F0R_PARAM_COLOR:
os << "typ_RGBType"; break;
case F0R_PARAM_POSITION:
os << "typ_PositionType"; break;
+ default:
+ throw std::runtime_error("Invalid frei0r parameter type");
}
os << " id=[" << f0r_pinfo.name << "] const=true strong_dependency=true } ";
--- orig/modules/src/capturemodule/capturemodule.cpp
+++ mod/modules/src/capturemodule/capturemodule.cpp
@@ -51,7 +51,9 @@
struct device_descriptor
{
- device_descriptor() : drv(0), ref_count(0) {}
+ device_descriptor()
+ : drv(0), dev_num(-1), ref_count(0)
+ {}
~device_descriptor() { delete drv; }
void decrease_refcount()
@@ -78,15 +80,39 @@
if (ref_count == 0)
{
- drv = create_driver();
+ try
+ {
+#if defined(OS_POSIX)
+ drv = new V4L2CaptureDriver();
+ try
+ {
+ drv->open(dev_num);
+ }
+ catch (std::exception& e)
+ {
+ delete drv;
+ drv = new V4LCaptureDriver();
+ }
+#elif defined(OS_WIN32)
+ drv = new DSHOWCaptureDriver();
+#endif
+ if (!drv->is_open())
+ drv->open(dev_num);
+ }
+ catch (...)
+ {
+ delete drv;
+ drv = 0;
+ throw;
+ }
}
-
assert(drv);
++ref_count;
}
CaptureDriver* drv;
+ int dev_num;
int ref_count;
};
@@ -124,13 +150,11 @@
static CaptureDriver* open_device(int device_num)
{
+ s_devices[device_num].dev_num = device_num;
s_devices[device_num].increase_refcount();
CaptureDriver* drv = s_devices[device_num].drv;
- if (!drv->is_open())
- drv->open(device_num);
-
return drv;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.