Skip to content
Snippets Groups Projects
  1. Feb 12, 2014
    • Jim's avatar
      Revamp API and start using doxygen · 8e81d8be
      Jim authored
      The API used to be designed in such a way to where it would expect
      exports for each individual source/output/encoder/etc.  You would export
      functions for each and it would automatically load those functions based
      on a specific naming scheme from the module.
      
      The idea behind this was that I wanted to limit the usage of structures
      in the API so only functions could be used.  It was an interesting idea
      in theory, but this idea turned out to be flawed in a number of ways:
      
       1.) Requiring exports to create sources/outputs/encoders/etc meant that
           you could not create them by any other means, which meant that
           things like faruton's .net plugin would become difficult.
      
       2.) Export function declarations could not be checked, therefore if you
           created a function with the wrong parameters and parameter types,
           the compiler wouldn't know how to check for that.
      
       3.) Required overly complex load functions in libobs just to handle it.
           It makes much more sense to just have a load function that you call
           manually.  Complexity is the bane of all good programs.
      
       4.) It required that you have functions of specific names, which looked
           and felt somewhat unsightly.
      
      So, to fix these issues, I replaced it with a more commonly used API
      scheme, seen commonly in places like kernels and typical C libraries
      with abstraction.  You simply create a structure that contains the
      callback definitions, and you pass it to a function to register that
      definition (such as obs_register_source), which you call in the
      obs_module_load of the module.
      
      It will also automatically check the structure size and ensure that it
      only loads the required values if the structure happened to add new
      values in an API change.
      
      The "main" source file for each module must include obs-module.h, and
      must use OBS_DECLARE_MODULE() within that source file.
      
      Also, started writing some doxygen documentation in to the main library
      headers.  Will add more detailed documentation as I go.
      8e81d8be
  2. Feb 02, 2014
    • Jim's avatar
      Add property list callbacks · 458325fc
      Jim authored
      - Add property list callbacks to sources/outputs/encoders so that if
        necessary user interface can be automatically generated or perhaps a
        property list widget can be used for them.
      
      - Change some of the property API names.  obs_property_list_t felt a bit
        awkward when actually using it, so I just renamed it to
        obs_properties_t.
      
      - Removed the getdata/setdata nad getparam/setparam functions from
        sources/services, they will be superseded by the dynamic procedure
        call API.
      458325fc
  3. Feb 01, 2014
    • Jim's avatar
      Simplify/improve UI exporting a bit more · 6f51567c
      Jim authored
      Reduce and simplify the UI export interface.  Having to export functions
      with designated names was a bit silly for this case, it makes more sense
      for inputs/outputs/etc because they have more functions associated with
      them, but in this case the callback can be retrieved simply through the
      enumeration exports.  Makes it a bit easier and a little less awkward
      for this situation.
      
      Also, changed the exports and names to be a bit more consistent,
      labelling them both as either "modal" or "modeless", and changed the UI
      function calls to obs_exec_ui and obs_create_ui to imply modal/modeless
      functionality a bit more.
      6f51567c
    • Jim's avatar
      Add support for modeless UI creation · b31d52d6
      Jim authored
      I realized that I had intended modeless UI to be usable by plugins, but
      it had been pointed out to me that modeless really needs to return a
      pointer/handle to the user interface object that was created.
      b31d52d6
    • Jim's avatar
      Don't rely on static data · 00a480f7
      Jim authored
      The ui_enum function gets a const struct obs_ui_info **, which basically
      means it expects static data to be used.  I originally had it the other
      way around, but yea, it's probably not a good idea, so I'm going to
      revert back to the original code instead, which doesn't rely on the data
      being static.
      00a480f7
    • Jim's avatar
      Make some minor adjustments to module UI code · 8bb208a0
      Jim authored
      Made it so that enum_ui returns a const pointer to a structure rather
      than require an actual structure.
      
      Changed a few of the descriptions that I missed.
      8bb208a0
    • Jim's avatar
      Add module UI export capability · a12656bd
      Jim authored
      Add the ability to be able to call and use toolkit-specific or
      program-specific user interface in modules.
      
      User interface code can be either bundled with the module, or 'split'
      out in to separate libraries (recommended).
      
      There are three reasons why splitting is recommended:
      
        1.) It allows plugins to be able to create custom user interface for
            each toolkit if desired.
      
        2.) Often, UI will be programmed in one language (the language of the
            toolkit), and core logic may be programmed in another.  This
            allows plugins to keep the languages separated if necessary.
      
        3.) It prevents direct linkage of UI toolkits libraries with core
            module logic.
      
      Splitting is not required, though is recommended if you want your plugin
      to be more flexible with other user interface toolkits or programs.
      
      Will implement a generic properties lookup next, which will be used for
      automatic UI handling so that plugin UI isn't necessarily required.
      a12656bd
Loading