1. 12 2月, 2014 1 次提交
    • J
      Revamp API and start using doxygen · 8e81d8be
      jp9000 提交于
      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. 10 2月, 2014 1 次提交
  3. 09 2月, 2014 1 次提交
    • J
      Implement output, improve video/audio subsystems · 6c92cf58
      jp9000 提交于
       - Fill in the rest of the FFmpeg test output code for testing so it
         actually properly outputs data.
      
       - Improve the main video subsystem to be a bit more optimal and
         automatically output I420 or NV12 if needed.
      
       - Fix audio subsystem insertation and byte calculation.  Now it will
         seamlessly insert new audio data in to the audio stream based upon
         its timestamp value.  (Be extremely cautious when using floating
         point calculations for important things like this, and always round
         your values and check your values)
      
       - Use 32 byte alignment in case of future optimizations and export a
         function to get the current alignment.
      
       - Make os_sleepto_ns return true if slept, false if the time has
         already been passed before the call.
      
       - Fix sinewave output so that it actually properly calculates a middle
         C sinewave.
      
       - Change the use of row_bytes to linesize (also makes it a bit more
         consistent with FFmpeg's naming as well)
      6c92cf58
  4. 07 2月, 2014 1 次提交
    • J
      Add planar audio support, improve test output · 3d6d4322
      jp9000 提交于
      - Add planar audio support.  FFmpeg and libav use planar audio for many
        encoders, so it was somewhat necessary to add support in libobs
        itself.
      
      - Improve/adjust FFmpeg test output plugin.  The exports were somewhat
        messed up (making me rethink how exports should be done).  Not yet
        functional; it handles video properly, but it still does not handle
        audio properly.
      
      - Improve planar video code.  The planar video code was not properly
        accounting for row sizes for each plane.  Specifying row sizes for
        each plane has now been added.  This will also make it more compatible
        with FFmpeg/libav.
      
      - Fixed a bug where callbacks wouldn't create properly in audio-io and
        video-io code.
      
      - Implement 'blogva' function to allow for va_list usage with libobs
        logging.
      3d6d4322
  5. 06 2月, 2014 2 次提交
    • J
      Improve naming scheme of libobs core structures · 89cfbdc0
      jp9000 提交于
      89cfbdc0
    • J
      Implement output scaling/conversion/downloading · ab4ab957
      jp9000 提交于
      - Implement texture scaling/conversion/downloading for the main view so
        we can finally start getting data to output.
      
        Also, redesign how it works a bit, it will now properly wait one full
        frame for each step in the process:  rendering the main texture,
        scaling the main texture to an output texture, staging/downloading the
        ouput texture, and then outputting that staged data.  This way, the
        GPU will have more than enough time to fully complete each step.
      
      - Fix a bug with OpenGL plugin's texture staging function.  Was using
        glBindBuffer instead of what should have been used:  glBindTexture.
      
      - Change the naming scheme of the variables in default.effect.  It's now
        named with the idea of just "color matrix" in mind instead of "yuv
        matrix", and instead of DrawRGBToYUV, it's now just DrawMatrix.
      ab4ab957
  6. 03 2月, 2014 3 次提交
    • P
      Remove external ref count visibility · ac23df50
      Palana 提交于
      The returned ref count was never used and the returned value doesn't
      actually confer any meaning in a multithreaded environment
      ac23df50
    • J
      Use QMetaObject::invokeMethod in libobs callbacks · 37ed83ac
      jp9000 提交于
      Doing this ensures Qt thread safety when adding/removing sources and
      scenes, because it will defer the function call to the main thread.
      37ed83ac
    • J
      Improve thread safety in UI code · 6e1dd92f
      jp9000 提交于
      - Implemented better C++ classes for handling scenes/sources/items in
        obs.hpp, allowing them to automatically increment and decrement the
        references of each, as well as assign them to QVariants.
      
      - Because QVariants are now using the C++ classes, remove the pointer
        QVariant wrapper.
      
      - Use the new C++ classes with the QVariant user data of list box items,
        both for the sake of thread safety and to ensure that the data
        referenced is not freed until removed.  NOTE: still might need some
        testing.
      
      - Implemented a source-remove signal from libobs, and start using that
        signal instead of the source-destroy signal for signalling item
        removal.
      6e1dd92f
  7. 02 2月, 2014 1 次提交
    • J
      Add property list callbacks · 458325fc
      jp9000 提交于
      - 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
  8. 01 2月, 2014 1 次提交
    • J
      Add module UI export capability · a12656bd
      jp9000 提交于
      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
  9. 29 1月, 2014 2 次提交
    • J
      Improve safety for settings usage · 9116be8d
      jp9000 提交于
      - Add 'set_default' functions to obs-data.*.  These functions ensure
        that a paramter exists and that the parameter is of a specific type.
        If not, it will create or overwrite the value with the default setting
        instead.
      
        These functions are meant to be explicitly called before using any of
        the 'get' functions.  The reason why it was designed this way is to
        encourage defaults to be set in a single place/function.
      
        For example, ideal usage is to create one function for your data,
        "set_my_defaults(obs_data_t data)", set all the default values within
        that function, and then call that function on create/update, that way
        all defaults are centralized to a single place.
      
      - Ensure that data passed to sources/encoders/outputs/etc is always
        valid, and not a null value.
      
      - While I'm remembering, fix a few defaults of the main program config
        file data.
      9116be8d
    • J
      Add a couple more setting data safety measures · c6300d09
      jp9000 提交于
      Prevent null dereferencing if data is null, instead just make the
      functions return and ignore the get/set requests.
      c6300d09
  10. 28 1月, 2014 2 次提交
    • J
      Implement settings interface for plugins · 6c442916
      jp9000 提交于
      Add a fairly easy to use settings interface that can be passed to
      plugins, and replaced the old character string system that was being
      used before.  The new data interface allows for an easier method of
      getting/altering settings for plugins, and is built to be serializable
      to/from JSON.
      
      Also, removed another wxFormBuilder file that was no longer in use.
      6c442916
    • J
      Rename obs_data structure to obs_program_data · de288ac5
      jp9000 提交于
      I'm doing this because I might create another data structure called
      obs_data for a different purpose.  That and obs_program_data feels a bit
      less vague for what it does.
      de288ac5
  11. 27 1月, 2014 1 次提交
  12. 19 1月, 2014 1 次提交
    • J
      Add preliminary ffmpeg plugin (still testing) · fc8851e9
      jp9000 提交于
      - Added some code for FFmpeg output that I'm still playing around with.
        Right now I'm just trying to get it to output to file and try to
        understand the FFmpeg/libav APIs.  Hopefully in the future this plugin
        can be used for any sort of output to FFmpeg.
      
      - Fixed a cast warning in audio-io.c with size_t -> uint32_t
      
      - Renamed the 'video_info' and 'audio_info' structures to
        'video_conver_info' and 'audio_convert_info' to better represent their
        actual purpose, and to avoid confusion with 'audio_output_info' and
        'video_output_info' structures.
      
      - Removed a few macros from obs-def.h that were at one point going to be
        used but no longer going to be used (at least for now)
      fc8851e9
  13. 17 1月, 2014 1 次提交
    • J
      Use macros to improve safety loading callbacks · 8d63845d
      jp9000 提交于
      Just a minor fix mostly because I noticed that I kept accidentally
      forgetting to add checks to the code properly.  This is one of those
      cases where macros come in useful, as macros can automate the process
      and help prevent these mistakes from happening by accident.
      8d63845d
  14. 14 1月, 2014 1 次提交
    • J
      Simplify media i/o interfaces · 62c2b1d7
      jp9000 提交于
      Completely revamped the entire media i/o data and handlers.  The
      original idea was to have a system that would have connecting media
      inputs and outputs, but at a certain point I realized that this was an
      unnecessary complexity for what we wanted to do.  (Also, it reminded me
      of directshow filters, and I HATE directshow with a passion, and
      wouldn't wish it upon my greatest enemy)
      
      Now, audio/video outputs are connected to directly, with better callback
      handlers, and will eventually have the ability to automatically handle
      conversions such as 4:4:4 to 4:2:0 when connecting to an input that uses
      them.  Doing this will allow the video/audio i/o handlers to also
      prevent duplicate conversion, as well as make it easier/simple to use.
      
      My true goal for this is to make output and encoder plugins as simple to
      create as possible.  I want to be able to be able to create an output
      plugin with almost no real hassle of having to worry about image
      conversions, media inputs/outputs, etc.  A plugin developer shouldn't
      have to handle that sort of stuff when he/she doesn't really need to.
      
      Plugins will be able to simply create a callback via obs_video() and/or
      obs_audio(), and they will automatically receive the audio/video data in
      the formats requested via a simple callback, without needing to do
      almost anything else at all.
      62c2b1d7
  15. 12 1月, 2014 2 次提交
    • J
      Fix one minor bug with new timing code · 02a101d1
      jp9000 提交于
      When the first async video frame is used it would not set audio timing,
      moved that code into obs_source_getframe.  Also, might consider renaming
      obs_source_getframe.  "Query frame" instead perhaps?  Will sleep on it,
      might not even bother.
      02a101d1
    • J
      Add preliminary handling of timestamp invalidation · 9f1a3c31
      jp9000 提交于
      - Add preliminary (yet to be tested) handling of timestamp invalidation
        issues that can happen with specific devices, where timestamps can
        reset or go backward/forward in time with no rhyme or reason.  Spent
        the entire day just trying to figure out the best way to handle this.
      
        If both audio and video are present, it will increment a reference
        counter if video timestamps invalidate, and decrement the reference
        counter when the audio timestamps invalidate.  When the reference
        counter is not 0, it will not send audio as the audio will have
        invalid timing.  What this does is it ensures audio data will never go
        out of bounds in relation to the video, and waits for both audio and
        video timestamps to "jump" together before resuming audio.
      
      - Moved async video frame timing adjustment code into
        obs_source_getframe instead so it's automatically handled whenever
        called.
      
      - Removed the 'audio wait buffer' as it was an unnecessary complexity
        that could have had problems in the future.  Instead, audio will not
        be added until video starts for sources that have both async
        audio/video.  Audio could have buffered for too long of a time anyway,
        who knows what devices are going to do.
      
      - Fixed a minor conversion warning in audio-io.c
      9f1a3c31
  16. 11 1月, 2014 2 次提交
    • J
      Detect audio timestamp jumps and reset timing · 2a893064
      jp9000 提交于
       - Often, timestamps will go "back" in time with certain..  terrible
         devices that no one should use.  When this occurs, timing is now
         reset so that the new audio comes in directly after the old audio
         seamlessly.
      2a893064
    • J
      Properly position position mixed audio data · faa7f4d2
      jp9000 提交于
       - Audio data was just being popped to the "front" of the mix buffer, so
         instead it now properly pops into the correct position in the mix
         buffer (proper mixing still needs to be implemented)
      faa7f4d2
  17. 10 1月, 2014 2 次提交
    • J
      Added a sinewave audio test source · f827ba38
      jp9000 提交于
       - Added a test audio sinewave test source that should just play a sine
         wave of the middle C note.  Using unsigned 8 bit mono to test
         ffmpeg's audio resampler, seems to work pretty good.
      
       - Fixed a boolean trap in threading.h for the event_init function, it
         now uses enum event_type, which can be EVENT_TYPE_MANUAL or
         EVENT_TYPE_AUTO, to specify whether the event is automatically reset
         or not.
      
       - Changed display names of test sources to something a little less
         vague.
      
       - Removed te whole "if timestamp is 0 just use current system time"
         when outputting source audio, if you want to use system time you
         should just use system time yourself.  Using 0 as some sort of
         "indicator" like that just makes things confusing, and prevents you
         from legitimately using 0 as a timestamp for your audio data.
      f827ba38
    • J
      Add preliminary audio processing · 6b8e8484
      jp9000 提交于
       - Mixing still isn't implemented, but the audio system should be able
         to start up, and mix at least once audio line for the time being.
         Will have to write some test audio sources to verify things are
         working properly, and build the rest of the output functionality.
      6b8e8484
  18. 08 1月, 2014 1 次提交
    • J
      Implement volumes for sources · 3838abe1
      jp9000 提交于
       - Added a volume variable to the obs_source structure and implemented
         functions for manipulating source volume.
      
       - Added a volume variable to the audio_data structure so that the
         volume will be applied when mixing.
      3838abe1
  19. 05 1月, 2014 1 次提交
    • J
      Added add/remove signals to scenes · a2a8a5f1
      jp9000 提交于
        Scenes will now signal via their source when an item has been added
      or removed from them.
      
        "add" - Item added to the scene.
        Parameters:  "scene": Scene that the item was added to.
                     "item":  Item that was added.
      
        "remove" - Item removed from the scene.
        Parameters:  "scene": Scene that the item was removed from.
                     "item":  Item that was removed.
      a2a8a5f1
  20. 31 12月, 2013 2 次提交
  21. 30 12月, 2013 1 次提交
  22. 28 12月, 2013 2 次提交
  23. 27 12月, 2013 2 次提交
  24. 22 12月, 2013 3 次提交
  25. 21 12月, 2013 3 次提交