[gephex-devel] gephex--main--0.4--patch-1816

gephex at sonnenland.kexbox.org gephex at sonnenland.kexbox.org
Tue Nov 16 09:58:11 CET 2004


Archive: gephex at gephex.org--2004
New revision: gephex--main--0.4--patch-1816

--
Revision: gephex--main--0.4--patch-1816
Archive: gephex at gephex.org--2004
Creator: GePhex <gephex at gephex.org>
Date: Tue Nov 16 09:57:36 CET 2004
Standard-date: 2004-11-16 08:57:36 GMT
Modified-files: base/src/utils/string_.cpp
    base/src/utils/string_.h
    engine/src/dllloader/c_moduleclass.cpp
    engine/src/dllloader/c_moduleclass.h
    engine/src/dllloader/dllloader.cpp
    engine/src/dllloader/frei0rwrapper.cpp
    engine/src/dllloader/frei0rwrapper.h
    modules/src/capturemodule/v4l1.cpp
    modules/src/chromakeymodule/chromakeymodule.c
    qtgui/src/gui/ownstyle.h
New-patches: georg at gephex.org--2004-home/gephex--georg--0.4--patch-356
    georg at gephex.org--2004-home/gephex--georg--0.4--patch-357
    georg at gephex.org--2004-home/gephex--georg--0.4--patch-358
    gephex at gephex.org--2004/gephex--main--0.4--patch-1816
Summary: update frei0r loader: add support for sources, improve widgets
Keywords: 

Patches applied:

 * georg at gephex.org--2004-home/gephex--georg--0.4--patch-356
   Fix some compilation errors with gcc-3.4.1

 * georg at gephex.org--2004-home/gephex--georg--0.4--patch-357
   Added support for source frei0r effects

 * georg at gephex.org--2004-home/gephex--georg--0.4--patch-358
   Fix wrong input id in frei0rwrapper

* added files

    {arch}/gephex/gephex--georg/gephex--georg--0.4/georg at gephex.org--2004-home/patch-log/patch-356
    {arch}/gephex/gephex--georg/gephex--georg--0.4/georg at gephex.org--2004-home/patch-log/patch-357
    {arch}/gephex/gephex--georg/gephex--georg--0.4/georg at gephex.org--2004-home/patch-log/patch-358
    {arch}/gephex/gephex--main/gephex--main--0.4/gephex at gephex.org--2004/patch-log/patch-1816

* modified files

--- orig/base/src/utils/string_.cpp
+++ mod/base/src/utils/string_.cpp
@@ -34,6 +34,11 @@
   {
   }
 
+  String::String(const String& str)
+    : m_data(str.m_data)
+  {
+  }
+
   const String& String::operator=(const String& str)
   {
     m_data = str.m_data;


--- orig/base/src/utils/string_.h
+++ mod/base/src/utils/string_.h
@@ -46,6 +46,7 @@
   {
   public:
     String(const std::string& str = "");
+    String(const String&);
 
     const String& operator=(const String&);
 
@@ -66,7 +67,6 @@
     }
 
   private:
-    String(const String&);
 
     std::string m_data;
   };


--- orig/engine/src/dllloader/c_moduleclass.cpp
+++ mod/engine/src/dllloader/c_moduleclass.cpp
@@ -42,11 +42,12 @@
 CModuleClass::CModuleClass(const CModuleFunctionTable& ftab_,
 			   const CModuleAttributes& attr_,
 			   const std::string& name,
-			   frei0r_funs_t* frei0r)
+			   frei0r_funs_t* frei0r,
+                           int frei0r_plugin_type)
   : functionTable(new CModuleFunctionTable(ftab_)), 
-  attributes(new CModuleAttributes(attr_)), 
-  defaultInputValues(attr_.inputs.size()),
-    m_name(name), m_frei0r(0)
+    attributes(new CModuleAttributes(attr_)), 
+    defaultInputValues(attr_.inputs.size()),
+    m_name(name), m_frei0r(0), m_frei0r_plugin_type(frei0r_plugin_type)
 {
   if (frei0r)
     m_frei0r = new frei0r_funs_t(*frei0r);
@@ -56,7 +57,8 @@
 {
   CModuleClass* newClass = new CModuleClass(*this->functionTable,
 					    *this->attributes,
-					    this->m_name, this->m_frei0r);
+					    this->m_name, this->m_frei0r,
+                                            this->m_frei0r_plugin_type);
   newClass->defaultInputValues = defaultInputValues;
   return newClass;
 }
@@ -79,10 +81,11 @@
   void* instance;
   if (m_frei0r)
     {
-      typedef void* (*harr_t)(void*, int);
+      typedef void* (*harr_t)(void*, int, int);
       harr_t harr = (harr_t) functionTable->newInstance;
 
-      instance = harr(m_frei0r, defaultInputValues.size());
+      instance = harr(m_frei0r, defaultInputValues.size(),
+                      m_frei0r_plugin_type);
     }
   else
     instance = functionTable->newInstance();


--- orig/engine/src/dllloader/c_moduleclass.h
+++ mod/engine/src/dllloader/c_moduleclass.h
@@ -46,7 +46,8 @@
 	CModuleClass(const CModuleFunctionTable&,
 		     const CModuleAttributes& attr_,
 		     const std::string& name,
-		     frei0r_funs_t* frei0r);
+		     frei0r_funs_t* frei0r,
+                     int frei0r_plugin_type);
 
 	virtual IModuleClass* clone() const;
 
@@ -62,6 +63,7 @@
 	mutable std::vector<ITypePtr> defaultInputValues;
 	std::string m_name;
 	frei0r_funs_t* m_frei0r;
+        int m_frei0r_plugin_type;
 };
 
 #endif


--- orig/engine/src/dllloader/dllloader.cpp
+++ mod/engine/src/dllloader/dllloader.cpp
@@ -475,7 +475,7 @@
       m_typeInfoReceiver->typeClassLoaded(id,mi);
   }
 	
-  void DllLoader::unloadTypeClass(const std::string& name)
+  void DllLoader::unloadTypeClass(const std::string& /*name*/)
   {
     //TODO
   }
@@ -520,6 +520,8 @@
                                        const std::string& moduleName,
 				       frei0r_funs_t* frei0r)
   {
+    int frei0r_plugin_type = -1;
+
     if (frei0r)
       {
 	if (frei0r->init() == 0)
@@ -549,12 +551,16 @@
       {
 	frei0r->get_plugin_info(&f0r_info);
 
-	// +1 for input frame, +1 for time
-	numInputs = 1 + f0r_info.num_params + 1;
+        frei0r_check_plugin_info(f0r_info);
+
+        // remember this for later
+        frei0r_plugin_type = f0r_info.plugin_type;
+
+        numInputs = frei0r_num_inputs(f0r_info);
+
 	numOutputs = 1;
 	isDeterministic = false;
 
-
 	moduleSpec = frei0r_create_spec(f0r_info);
       }
     else
@@ -600,26 +606,14 @@
 	std::string inSpec;
 	if (frei0r)
 	  {
-	    if (i == 0)
-	      {
-		inSpec = frei0r_create_in_spec();
-	      }
-	    else if (i == numInputs-1)
-	      {
-		inSpec = frei0r_create_time_spec();
-	      }
-	    else
-	      {
-		f0r_param_info_t pinfo;
-		frei0r->get_param_info(&pinfo, i-1);
-		inSpec = frei0r_create_in_param_spec(pinfo);
+            std::string param_name;
+            inSpec = frei0r_create_in_param_spec(f0r_info, frei0r, i,
+                                                 param_name);
 #if (ENGINE_VERBOSITY > 1)
-		std::cout << "param # " << i-1 << " name '" 
-			  << pinfo.name << "'
";
+            std::cout << "param # " << i << ": '" << inSpec << "'
";
 #endif
-		f0r_param_names.push_back(pinfo.name);
-	      }
-	  }
+            f0r_param_names.push_back(param_name);
+          }
 	else
 	  {
 	    inSpec = fTable->getInputSpec(i);
@@ -769,6 +763,10 @@
       {
 	std::vector<char> buf = frei0r_create_info(f0r_info,
 						   f0r_param_names);
+
+#if (ENGINE_VERBOSITY > 1)
+        std::cout << "Inf0r: '" << &buf[0] << "'
";
+#endif
 	data = new char[buf.size()];
 	memcpy(data, &buf[0], buf.size());
 	bufLen = buf.size();
@@ -797,8 +795,8 @@
 			
 	m_infoReceiver->moduleClassLoaded(name,mi);
 
-	m_classReceiver->moduleClassLoaded(name,
-					   CModuleClass(*fTable,attributes,name, frei0r));
+        CModuleClass cm(*fTable,attributes,name, frei0r, frei0r_plugin_type);
+	m_classReceiver->moduleClassLoaded(name, cm);
 
 	m_specReceiver->moduleClassLoaded(name,ModuleClassSpec(name,inputs,
 							       defaultVals,


--- orig/engine/src/dllloader/frei0rwrapper.cpp
+++ mod/engine/src/dllloader/frei0rwrapper.cpp
@@ -6,6 +6,7 @@
 #include <iostream>
 
 #include "../../../types/src/framebuffertype/framebuffertype.h"
+#include "../../../types/src/numbertype/numbertype.h"
 #include "../engine/dllutils.h"
 
 #include "frei0r.xpm"
@@ -17,12 +18,13 @@
 
 struct f0r_wrapper_t
 {
-  f0r_wrapper_t() : funs(0), f0r_instance(0) {}
+  f0r_wrapper_t(int plugin_type_)
+    : plugin_type(plugin_type_), funs(0), f0r_instance(0) {}
 
+  int plugin_type;
   frei0r_funs_t* funs;
   f0r_instance_t f0r_instance;
 
-  FrameBufferType* inf;
   FrameBufferType* outf;
 
   std::vector<void*> input_params;
@@ -32,13 +34,14 @@
 };
 
 
-void* f0rwrapper_newInstance (frei0r_funs_t* funs, int num_inputs)
+void* f0rwrapper_newInstance (frei0r_funs_t* funs, int num_inputs,
+                              int plugin_type)
 {
-  f0r_wrapper_t* wr = new f0r_wrapper_t();
+  f0r_wrapper_t* wr = new f0r_wrapper_t(plugin_type);
 
   wr->f0r_instance = funs->construct(XSIZE, YSIZE);
   wr->funs = funs;
-  wr->input_params.resize(num_inputs-1);
+  wr->input_params.resize(num_inputs);
   wr->width  = XSIZE;
   wr->height = YSIZE;
 
@@ -59,20 +62,15 @@
 {
   f0r_wrapper_t* wr = (f0r_wrapper_t*) instance;
 
-  if (index == 0)
-    {
-      wr->inf = (FrameBufferType*) typePointer;
-    }
-  else
-    {
-      wr->input_params[index-1] = typePointer;
-    }
+  wr->input_params[index] = typePointer;
 
   return 1;
 }
 
 int f0rwrapper_setOutput (void* instance,int index,void* typePointer)
 {
+  assert(index == 0);
+
   f0r_wrapper_t* wr = (f0r_wrapper_t*) instance;
 
   FrameBufferType* fb = (FrameBufferType*) typePointer;
@@ -86,8 +84,23 @@
 {
   f0r_wrapper_t* wr = (f0r_wrapper_t*) instance;
 
+  FrameBufferType* in = 0;
+
   FrameBufferAttributes attribs;
-  framebuffer_getAttributes(wr->inf, &attribs);
+
+  if (wr->plugin_type == F0R_PLUGIN_TYPE_SOURCE)
+    {
+      attribs.xsize = trim_int(((NumberType*) wr->input_params[0])->number,
+                               8, 4096);
+
+      attribs.ysize = trim_int(((NumberType*) wr->input_params[1])->number,
+                               8, 4096);
+    }
+  else if (wr->plugin_type == F0R_PLUGIN_TYPE_FILTER)
+    {
+      in = (FrameBufferType*) wr->input_params[0];
+      framebuffer_getAttributes(in, &attribs);
+    }
 
   // TODO: check for multiples of 8
   if (attribs.xsize != wr->width || attribs.ysize != wr->height)
@@ -106,15 +119,18 @@
   attribs.ysize = wr->height;  
   framebuffer_changeAttributes(wr->outf, &attribs);
 
-  for (int i = 0; i < wr->input_params.size()-1; ++i)
+  int offset = (wr->plugin_type == F0R_PLUGIN_TYPE_SOURCE) ? 2 : 1;
+
+  for (int i = offset; i < wr->input_params.size()-1; ++i)
     {
-      wr->funs->set_param_value(wr->f0r_instance, wr->input_params[i], i);
+      wr->funs->set_param_value(wr->f0r_instance, wr->input_params[i],
+                                i-offset);
     }
 
   double time = *((double*) wr->input_params[wr->input_params.size()-1]);
 
   wr->funs->update(wr->f0r_instance, time,
-		   wr->inf->framebuffer,
+		   in ? in->framebuffer : 0,
 		   wr->outf->framebuffer);
 }
 
@@ -136,40 +152,20 @@
 }
 
 
-std::string frei0r_create_spec(f0r_plugin_info_t& f0r_info)
+std::string frei0r_create_spec(const f0r_plugin_info_t& f0r_info)
 {
   std::ostringstream os;
   // return "mod_spec { name=[mod_gradnormmodule] number_of_inputs=[3] number_of_outputs=[1] deterministic=[true] }";
 
+  int num_inputs = frei0r_num_inputs(f0r_info);
+
   os << "mod_spec { name=[mod_" << f0r_info.name
-     << "] number_of_inputs=[" << f0r_info.num_params+2
+     << "] number_of_inputs=[" << num_inputs
      << "] number_of_outputs=[1] deterministic=[true] } ";
 
   return os.str();
 }
 
-std::string frei0r_create_in_spec()
-{
-//return "input_spec { type=typ_FrameBufferType id=b const=true strong_dependency=true  } ";
-  std::ostringstream os;
-
-  os << "input_spec { type=typ_FrameBufferType "
-     << "id=in const=true strong_dependency=true } ";
-
-  return os.str();
-}
-
-std::string frei0r_create_time_spec()
-{
-//return "input_spec { type=typ_FrameBufferType id=b const=true strong_dependency=true  } ";
-  std::ostringstream os;
-
-  os << "input_spec { type=typ_NumberType "
-     << "id=frei0r_time const=true strong_dependency=true } ";
-
-  return os.str();
-}
-
 static std::string quote_spaces(const std::string& s)
 {
   std::string ret;
@@ -183,14 +179,60 @@
   return ret;
 }
 
-std::string frei0r_create_in_param_spec(f0r_param_info_t& f0r_pinfo)
+std::string frei0r_create_in_param_spec(const f0r_plugin_info_t& f0r_info,
+                                        frei0r_funs_t* frei0r, int input,
+                                        std::string& param_name)
 {
 //return "input_spec { type=typ_FrameBufferType id=b const=true strong_dependency=true  } ";
+  int index = -1;
   std::ostringstream os;
-
   os << "input_spec { type=";
+
+  if (f0r_info.plugin_type == F0R_PLUGIN_TYPE_SOURCE)
+    {
+      if (input == 0 || input == 1)
+        {
+          param_name = (input == 0) ? "width" : "height";
+          int default_value = (input == 0) ? XSIZE : YSIZE;
+
+          os << "typ_NumberType; id=frei0r_" << param_name
+             << " const=true strong_dependency=true default=" 
+             << default_value << "}";
+          return os.str();
+        }
+      index = input - 2;
+    }
+  else if (f0r_info.plugin_type == F0R_PLUGIN_TYPE_FILTER)
+    {
+      if (input == 0)
+        {
+          param_name = "input";
+
+          os << "typ_FrameBufferType; id=frei0r_" << param_name
+             << " const=true strong_dependency=true }";
+
+          return os.str();
+        }
+      index = input - 1;
+    }
+
+  // the last input is time
+  if (index == f0r_info.num_params)
+    {
+      param_name="time";
+
+      os << "typ_NumberType "
+         << "id=frei0r_"<< param_name << " const=true strong_dependency=true } ";
+
+      return os.str();
+    }
+
+  assert(index >= 0 && index < f0r_info.num_params);
+
+  f0r_param_info_t pinfo;
+  frei0r->get_param_info(&pinfo, index);
   
-  switch (f0r_pinfo.type)
+  switch (pinfo.type)
     {
     case F0R_PARAM_BOOL:
       os << "typ_NumberType"; break;
@@ -204,32 +246,51 @@
       throw std::runtime_error("Invalid frei0r parameter type");
     }
 
-  os << " id=[" << f0r_pinfo.name << "] const=true strong_dependency=true } ";
+  param_name = quote_spaces(pinfo.name);
+  os << " id=[" << param_name << "] const=true strong_dependency=true } ";
     
   return os.str();
 }
 
 std::string frei0r_create_out_spec()
 {
-  return "output_spec { type=typ_FrameBufferType id=Output } ";
+  return "output_spec { type=typ_FrameBufferType id=frei0r_output } ";
 }
 
 
-std::vector<char> frei0r_create_info(f0r_plugin_info_t& f0r_info,
+std::vector<char> frei0r_create_info(const f0r_plugin_info_t& f0r_info,
 				     const std::vector<std::string>& param_names)
 {
   std::ostringstream os;
+  int num_inputs = frei0r_num_inputs(f0r_info);
+  int param_offset;
   //  static const char* INFO = "info { name=[Gradientnorm] group=[Filter] inputs=[3 Image Lightness{lower_bound=[0] step_size=[0.01] higher_bound=[1] hidden=[true] help=[lightness] } Algorithm{widget_type=[combo_box] values=[sobel,roberts-cross] hidden=[true] help=[sobel is slower and smoother, roberts-cross is quick and dirty] } ] outputs=[1 Image ] type=xpm } ";
 
   os << "info { name=[" << f0r_info.name
      << "] group=[Frei0r] inputs=["
-     << f0r_info.num_params+2 << " Image ";
+     << num_inputs;
+
+  if (f0r_info.plugin_type == F0R_PLUGIN_TYPE_SOURCE)
+    {
+      std::string properties = "{widget_type=number_selector "
+        "lower_bound=8 step_size=8 higher_bound=4096 hidden=true}";
+
+      os << " Width" << properties << " Height" << properties;
+      param_offset = 2;
+    }
+  else if (f0r_info.plugin_type == F0R_PLUGIN_TYPE_FILTER)
+    {
+      os << " Image ";
+      param_offset = 1;
+    }
 
   for (int i = 0; i < f0r_info.num_params; ++i)
     {
-      os << quote_spaces(param_names[i]) << " ";
+      os << quote_spaces(param_names[i+param_offset]) << " ";
     }
-  os << " Time] outputs=[1 Image] type=xpm } ";
+
+  std::string time_properties = "{widget_type=unboundednumber_selector}";
+  os << " Time" << time_properties << " ] outputs=[1 Output] type=xpm } ";
 
   //  std::cout << "INFO = " << os.str() << "
";
   char* tmpBuf;
@@ -261,3 +322,27 @@
 }
 
 
+void frei0r_check_plugin_info(const f0r_plugin_info_t& f0r_info)
+{
+  if (f0r_info.plugin_type != F0R_PLUGIN_TYPE_SOURCE &&
+      f0r_info.plugin_type != F0R_PLUGIN_TYPE_FILTER)
+    throw std::runtime_error("Invalid plugin_type");
+
+  if (f0r_info.frei0r_version != 1)
+    throw std::runtime_error("Invalid frei0r version");
+}
+
+int frei0r_num_inputs(const f0r_plugin_info& f0r_info)
+{
+  switch (f0r_info.plugin_type)
+    {
+    case F0R_PLUGIN_TYPE_SOURCE:
+      // +2 for size, +1 for time
+      return 2 + f0r_info.num_params + 1;
+    case F0R_PLUGIN_TYPE_FILTER:
+      // +1 for input frame, +1 for time
+      return 1 + f0r_info.num_params + 1;
+    default:
+      throw std::runtime_error("Argl0r");
+    }
+}


--- orig/engine/src/dllloader/frei0rwrapper.h
+++ mod/engine/src/dllloader/frei0rwrapper.h
@@ -44,16 +44,21 @@
 
 void create_f0r_wrapper(CModuleFunctionTable& fTable);
 
-std::string frei0r_create_spec(f0r_plugin_info_t&);
+std::string frei0r_create_spec(const f0r_plugin_info_t&);
 
-std::string frei0r_create_in_spec();
-std::string frei0r_create_time_spec();
+std::string frei0r_create_in_param_spec(const f0r_plugin_info_t& f0r_info,
+                                        frei0r_funs_t* frei0r, int input,
+                                        std::string& param_name);
 
-std::string frei0r_create_in_param_spec(f0r_param_info_t& f0r_pinfo);
 std::string frei0r_create_out_spec();
 
 
-std::vector<char> frei0r_create_info(f0r_plugin_info_t& f0r_info,
+std::vector<char> frei0r_create_info(const f0r_plugin_info_t& f0r_info,
 				     const std::vector<std::string>& param_names);
 
+void frei0r_check_plugin_info(const f0r_plugin_info_t& f0r_info);
+
+int frei0r_num_inputs(const f0r_plugin_info& f0r_info);
+
 #endif
+


--- orig/modules/src/capturemodule/v4l1.cpp
+++ mod/modules/src/capturemodule/v4l1.cpp
@@ -12,6 +12,8 @@
 #include <sstream>
 #include <videodev.h>
 
+#include <errno.h>
+
 struct v4l1_intern
 {
   int fd;


--- orig/modules/src/chromakeymodule/chromakeymodule.c
+++ mod/modules/src/chromakeymodule/chromakeymodule.c
@@ -28,12 +28,13 @@
 #include "config.h"
 #endif
 
+#if defined(CPU_I386) && defined(OPT_INCLUDE_MMX)
 #include "cpuinfo.h"
-
-static logT s_log;
-
 static int s_mmx_supported;
 static int s_e3dnow_supported;
+#endif
+
+static logT s_log;
 
 typedef void (*chroma_key_t)(uint_8 r, uint_8 g, uint_8 b, uint_8 tolerance,
                              uint_32* dst, const uint_32* fg,


--- orig/qtgui/src/gui/ownstyle.h
+++ mod/qtgui/src/gui/ownstyle.h
@@ -43,7 +43,7 @@
     virtual int pixelMetric( QStyle::PixelMetric metric,
                              const QWidget * widget = 0 ) const
     {
-      if (metric == PM_ScrollBarExtent)
+      if (metric == QStyle::PM_ScrollBarExtent)
         return 15;
       else
         return STYLE::pixelMetric(metric, widget);



More information about the gephex-devel mailing list