Skip to content
Snippets Groups Projects
  1. Mar 16, 2014
    • Jim's avatar
      Use atomic functions where appropriate · 154e0c59
      Jim authored
      Also, rename atomic functions to be consistent with the rest of the
      platform/threading functions, and move atomic functions to threading*
      files rather than platform* files
      154e0c59
    • Jim's avatar
      Implement encoder interface (still preliminary) · fd37d9e9
      Jim authored
       - Implement OBS encoder interface.  It was previously incomplete, but
         now is reaching some level of completion, though probably should
         still be considered preliminary.
      
         I had originally implemented it so that encoders only have a 'reset'
         function to reset their parameters, but I felt that having both a
         'start' and 'stop' function would be useful.
      
         Encoders are now assigned to a specific video/audio media output each
         rather than implicitely assigned to the main obs video/audio
         contexts.  This allows separate encoder contexts that aren't
         necessarily assigned to the main video/audio context (which is useful
         for things such as recording specific sources).  Will probably have
         to do this for regular obs outputs as well.
      
         When creating an encoder, you must now explicitely state whether that
         encoder is an audio or video encoder.
      
         Audio and video can optionally be automatically converted depending
         on what the encoder specifies.
      
         When something 'attaches' to an encoder, the first attachment starts
         the encoder, and the encoder automatically attaches to the media
         output context associated with it.  Subsequent attachments won't have
         the same effect, they will just start receiving the same encoder data
         when the next keyframe plays (along with SEI if any).  When detaching
         from the encoder, the last detachment will fully stop the encoder and
         detach the encoder from the media output context associated with the
         encoder.
      
         SEI must actually be exported separately; because new encoder
         attachments may not always be at the beginning of the stream, the
         first keyframe they get must have that SEI data in it.  If the
         encoder has SEI data, it needs only add one small function to simply
         query that SEI data, and then that data will be handled automatically
         by libobs for all subsequent encoder attachments.
      
       - Implement x264 encoder plugin, move x264 files to separate plugin to
         separate necessary dependencies.
      
       - Change video/audio frame output structures to not use const
         qualifiers to prevent issues with non-const function usage elsewhere.
         This was an issue when writing the x264 encoder, as the x264 encoder
         expects non-const frame data.
      
         Change stagesurf_map to return a non-const data type to prevent this
         as well.
      
       - Change full range parameter of video scaler to be an enum rather than
         boolean
      fd37d9e9
  2. Mar 05, 2014
    • Jim's avatar
      Reimplement monitor capture · 4f7ab552
      Jim authored
       - Implement windows monitor capture (code is so much cleaner than in
         OBS1).  Will implement duplication capture later
      
       - Add GDI texture support to d3d11 graphics library
      
       - Fix precision issue with sleep timing, you have to call
         timeBeginPeriod otherwise windows sleep will be totally erratic.
      4f7ab552
  3. Mar 03, 2014
    • Jim's avatar
      Split output/input audio capture sources · 9c6da6f5
      Jim authored
       - Split input and output audio captures so that they're different
         sources.  This allows easier handling and enumeration of audio
         devices without having to do some sort of string processing.
      
         This way the user interface code can handle this a bit more easily,
         and so that it doesn't confuse users either.  This should be done for
         all audio capture sources for all operating systems.  You don't have
         to duplicate any code, you just need to create input/output wrapper
         functions to designate the audio as input or output before creation.
      
       - Make it detect soundflower and wavtap devices as mac "output" devices
         (even though they're actually input) for the mac output capture, and
         make it so that users can select a default output capture and
         automatically use soundflower or wavtap.
      
         I'm not entirely happy about having to do this, but because mac is
         designed this way, this is really the only way to handle it that
         makes it easier for users and UI code to deal with.
      
         Note that soundflower and wavtap are still also designated as input
         devices, so will still show up in input device enumeration.
      
       - Remove pragma messages because they were kind polluting the other
         compiler messages and just getting in the way.  In the future we can
         just do a grep for TODO to find them.
      
       - Redo list property again, this time using a safer internal array,
         rather than requiring sketchy array inputs.  Having functions handle
         everything behind the scenes is much safer.
      
       - Remove the reference counter debug log code, as it was included
         unintentionally in a commit.
      9c6da6f5
  4. Mar 01, 2014
    • Jim's avatar
      Simplify and extend callback/signalling system · e9342143
      Jim authored
      - Signals and dynamic callbacks now require declarations to be made
        before being used.  What this does is allows us to get information
        about the functions dynamically which can be relayed to the user and
        plugins for future extended usage (this should have big implications
        later for scripting in particular, hopefully).
      
      - Reduced the number of types calldata uses from "everything I could
        think of" to simply integer, float, bool, pointer/object, string.
        Integer data is now stored as long long.  Floats are now stored as
        doubles (check em).
      
      - Use a more consistent naming scheme for lexer error/warning macros.
      
      - Fixed a rather nasty bug where switching to an existing scene would
        cause it to increment sourceSceneRefs, which would mean that it would
        never end up never properly removing the source when the user clicks
        removed (stayed in limbo, obs_source_remove never got called)
      e9342143
    • Jim's avatar
      Give cf_parser functions better naming · e560a426
      Jim authored
      e560a426
  5. Feb 28, 2014
    • Jim's avatar
      Be just a bit more consistent. · 94a2d207
      Jim authored
      See, it can sometimes be a bit confusing.  These functions should
      definitely not fail under normal circumstances, and these errors may
      affect the user and/or application in some way.
      94a2d207
    • Jim's avatar
      Be more consistent about log levels · 771eac60
      Jim authored
      LOG_ERROR should be used in places where though recoverable (or at least
      something that can be handled safely), was unexpected, and may affect
      the user/application.
      
      LOG_WARNING should be used in places where it's not entirely unexpected,
      is recoverable, and doesn't really affect the user/application.
      771eac60
  6. Feb 24, 2014
  7. Feb 17, 2014
    • Jim's avatar
      Fix a NULL pointer deference · 105aafbc
      Jim authored
      Also, fixed an issue with the new conversion shader not compiling
      properly on some video devices
      105aafbc
  8. Feb 16, 2014
    • Jim's avatar
      Make a number of key optimizations · 2dbbffe4
      Jim authored
       - Changed glMapBuffer to glMapBufferRange to allow invalidation.  Using
         just glMapBuffer alone was causing some unacceptable stalls.
      
       - Changed dynamic buffers from GL_DYNAMIC_WRITE to GL_STREAM_WRITE
         because I had misunderstood the OpenGL specification
      
       - Added _OPENGL and _D3D11 builtin preprocessor macros to effects to
         allow special processing if needed
      
       - Added fmod support to shaders (NOTE: D3D and GL do not function
         identically with negative numbers when using this.  Positive numbers
         however function identically)
      
       - Created a planar conversion shader that converts from packed YUV to
         planar 420 right on the GPU without any CPU processing.  Reduces
         required GPU download size to approximately 37.5% of its normal rate
         as well.  GPU usage down by 10 entire percentage points despite the
         extra required pass.
      2dbbffe4
  9. Feb 14, 2014
    • Jim's avatar
      Remove majority of warnings · 966b943d
      Jim authored
      There were a *lot* of warnings, managed to remove most of them.
      
      Also, put warning flags before C_FLAGS and CXX_FLAGS, rather than after,
      as -Wall -Wextra was overwriting flags that came before it.
      966b943d
  10. 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
  11. Feb 09, 2014
    • Jim's avatar
      Use bzalloc instead of bmalloc then memset · b067440f
      Jim authored
      Reduces needless code repetition and still allows for proper memory
      alignment.  Cleans up the code a bit.
      b067440f
    • Jim's avatar
      Fix texture_setimage · e4921074
      Jim authored
      Was mapping the data without unmapping the data, causing the data to
      become locked
      e4921074
    • Jim's avatar
      Implement output, improve video/audio subsystems · 6c92cf58
      Jim authored
       - 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
  12. Jan 09, 2014
    • Zachary Lund's avatar
      A few changes concerning wxGTK. · d283f24c
      Zachary Lund authored
      For one, I added a new member gs_window for future use.
      The member is "display" which represents our connection to X11.
      Ideally, we should use this specific connection to deal with our Window.
      For now, it's disabled. Read comment for more information.
      
      Secondly, wxGTK apparently doesn't map our window in some cases.
      This causes the window ID passed to be bad and will stop (or segfault)
      our program. This might be related to the first commit above.
      
      For now, all this commit does is realize the window manually.
      d283f24c
  13. Jan 03, 2014
  14. Jan 02, 2014
  15. Dec 23, 2013
  16. Dec 21, 2013
  17. Dec 20, 2013
  18. Dec 12, 2013
  19. Dec 03, 2013
  20. Nov 27, 2013
  21. Nov 20, 2013
  22. Nov 14, 2013
  23. Oct 26, 2013
  24. Oct 25, 2013
  25. Oct 24, 2013
  26. Oct 18, 2013
  27. Oct 17, 2013
  28. Oct 14, 2013
  29. Oct 12, 2013
  30. Oct 10, 2013
Loading