Skip to content
Snippets Groups Projects
  1. Sep 25, 2014
  2. Aug 25, 2014
  3. Aug 08, 2014
    • Jim's avatar
      (API Change) Use 'get' convention in libobs (base) · a3682fc8
      Jim authored
      Instead of having functions like obs_signal_handler() that can fail to
      properly specify their actual intent in the name (does it signal a
      handler, or does it return a signal handler?), always prefix functions
      that are meant to get information with 'get' to make its functionality
      more explicit.
      
      Previous names:             New names:
      -----------------------------------------------------------
      obs_audio                   obs_get_audio
      obs_video                   obs_get_video
      obs_signalhandler           obs_get_signal_handler
      obs_prochandler             obs_get_proc_handler
      obs_source_signalhandler    obs_source_get_signal_handler
      obs_source_prochandler      obs_source_get_proc_handler
      obs_output_signalhandler    obs_output_get_signal_handler
      obs_output_prochandler      obs_output_get_proc_handler
      obs_service_signalhandler   obs_service_get_signal_handler
      obs_service_prochandler     obs_service_get_proc_handler
      a3682fc8
    • Jim's avatar
      (API Change) Unsquish libobs (base) names · 73baaa59
      Jim authored
      Previous names:             New names:
      -----------------------------------------------------------
      obs_view_setsource          obs_view_set_source
      obs_view_getsource          obs_view_get_source
      obs_source_getdisplayname   obs_source_get_display_name
      obs_source_getwidth         obs_source_get_width
      obs_source_getheight        obs_source_get_height
      obs_filter_getparent        obs_filter_get_parent
      obs_filter_gettarget        obs_filter_get_target
      obs_source_filter_setorder  obs_source_filter_set_order
      obs_source_getsettings      obs_source_get_settings
      obs_source_getname          obs_source_get_name
      obs_source_setname          obs_source_set_name
      obs_source_setvolume        obs_source_set_volume
      obs_source_getvolume        obs_source_get_volume
      obs_scene_getsource         obs_scene_get_source
      obs_scene_fromsource        obs_scene_from_source
      obs_scene_findsource        obs_scene_find_source
      obs_output_getdisplayname   obs_output_get_display_name
      obs_output_getname          obs_output_get_name
      obs_encoder_getname         obs_encoder_get_name
      obs_service_getdisplayname  obs_service_get_display_name
      obs_service_getname         obs_service_get_name
      73baaa59
  4. Jul 13, 2014
  5. Jul 08, 2014
  6. Jul 03, 2014
  7. Jun 29, 2014
  8. Jun 25, 2014
    • Jim's avatar
      Remove 'locale' parameter from all callbacks · 0b4a259e
      Jim authored
      The locale parameter was a mistake, because it puts extra needless
      burden upon the module developer to have to handle this variable for
      each and every single callback function.  The parameter is being removed
      in favor of a single centralized module callback function that
      specifically updates locale information for a module only when needed.
      0b4a259e
    • Jim's avatar
      Fix 'potentially uninitialized variable' warnings · 2e6063ce
      Jim authored
      2e6063ce
  9. Jun 23, 2014
    • Jim's avatar
      Make settings window only save data that changes · 9f652e64
      Jim authored
      Currently, if a user presses 'OK' or 'Apply' on the settings window, it
      will save all data from all controls on a settings pane, regardless of
      whether of not they were changed.  The major issue with this is that
      setting the data will overwrite all default values, making it impossible
      for default values to be used if a user didn't actually change a value.
      (Thanks to palana for pointing this fact out)
      
      So instead, mark a control as 'changed' using QObject::property() and
      QObject::sender(), and add a few helper functions to controls to ensure
      that they are checked to see whether they were actually changed directly
      by the user before saving the value to the config.
      9f652e64
  10. Jun 15, 2014
    • Jim's avatar
      UI: Add scene editing · 452e0695
      Jim authored
      So, scene editing was interesting (and by interesting I mean
      excruciating).  I almost implemented 'manipulator' visuals (ala 3dsmax
      for example), and used 3 modes for controlling position/rotation/size,
      but in a 2D editing, it felt clunky, so I defaulted back to simply
      click-and-drag for movement, and then took a similar though slightly
      different looking approach for handling scaling and reszing.
      
      I also added a number of menu item helpers related to positioning,
      scaling, rotating, flipping, and resetting the transform back to
      default.
      
      There is also a new 'transform' dialog (accessible via menu) which will
      allow you to manually edit every single transform variable of a scene
      item directly if desired.
      
      If a scene item does not have bounds active, pulling on the sides of a
      source will cause it to resize it via base scale rather than by the
      bounding box system (if the source resizes that scale will apply).  If
      bounds are active, it will modify the bounding box only instead.
      
      How a source scales when a bounding box is active depends on the type of
      bounds being used.  You can set it to scale to the inner bounds, the
      outer bounds, scale to bounds width only, scale to bounds height only,
      and a setting to stretch to bounds (which forces a source to always draw
      at the bounding box size rather than be affected by its internal size).
      You can also set it to be used as a 'maximum' size, so that the source
      doesn't necessarily get scaled unless it extends beyond the bounds.
      
      Like in OBS1, objects will snap to the edges unless the control key is
      pressed.  However, this will now happen even if the object is rotated or
      oriented in any strange way.  Snapping will also occur when stretching
      or changing the bounding box size.
      452e0695
  11. May 21, 2014
    • Jim's avatar
      UI: Add FLV file output (sharing encoders) · 00086f08
      Jim authored
      Implement the 'file path' in output settings, and implement the 'start
      recording' button, though for the time being I'm just going to make it
      use a directory rather than allow custom file names.
      
      This file output will actually share the video and audio encoder with
      the stream.
      
      I don't really know what to do about MP4 -- I don't really like the idea
      of saving directly in the program, if you do and the program crashes,
      that MP4 file is lost.  I'm contemplating making some sort of mp4 output
      process stub.  So no MP4 file output for the time being.
      
      If you need MP4, just remux it with FFmpeg:
      
      ffmpeg -i flv_file.flv -acodec copy -vcodec copy mp4_file.mp4
      00086f08
  12. May 18, 2014
    • Jim's avatar
      Add help menu with log file uploading · 5ba8b09c
      Jim authored
      Added github gist API uploading to the help menu to help make problems a
      bit easier to debug in the future.  It's somewhat vital that this
      functionality be implemented before any release in order to analyze any
      given problem a user may be experiencing.
      5ba8b09c
  13. May 15, 2014
  14. May 12, 2014
    • Socapex's avatar
      Improved settings usability. · c76b7cbf
      Socapex authored
      Don't ask user to save changes every item switch.
      Apply button greyed out when there are no changes.
      c76b7cbf
  15. May 10, 2014
    • Jim's avatar
      Add 'source selection' dialog · 345c7013
      Jim authored
      Add a 'source selection' dialog to replace the 'enter a name' dialog.
      This new dialog allows you to make new instances of pre-existing sources
      so that you can add a pre-existing source to a different scene, or in to
      the same scene more than once.
      
      Also started implementing locale.
      
      Comtemplating switching to JSON-based locale later, so we can add things
      like descriptions/disambiguation, and so we can use jansson's built-in
      hash table when doing the string lookup.
      345c7013
  16. Apr 24, 2014
    • Jim's avatar
      obs-studio UI: Implement stream settings UI · 8830c410
      Jim authored
       - Updated the services API so that it links up with an output and
         the output gets data from that service rather than via settings.
         This allows the service context to have control over how an output is
         used, and makes it so that the URL/key/etc isn't necessarily some
         static setting.
      
         Also, if the service is attached to an output, it will stick around
         until the output is destroyed.
      
       - The settings interface has been updated so that it can allow the
         usage of service plugins.  What this means is that now you can create
         a service plugin that can control aspects of the stream, and it
         allows each service to create their own user interface if they create
         a service plugin module.
      
       - Testing out saving of current service information.  Saves/loads from
         JSON in to obs_data_t, seems to be working quite nicely, and the
         service object information is saved/preserved on exit, and loaded
         again on startup.
      
       - I agonized over the settings user interface for days, and eventually
         I just decided that the only way that users weren't going to be
         fumbling over options was to split up the settings in to simple/basic
         output, pre-configured, and then advanced for advanced use (such as
         multiple outputs or services, which I'll implement later).
      
         This was particularly painful to really design right, I wanted more
         features and wanted to include everything in one interface but
         ultimately just realized from experience that users are just not
         technically knowledgable about it and will end up fumbling with the
         settings rather than getting things done.
      
         Basically, what this means is that casual users only have to enter in
         about 3 things to configure their stream:  Stream key, audio bitrate,
         and video bitrate.  I am really happy with this interface for those
         types of users, but it definitely won't be sufficient for advanced
         usage or for custom outputs, so that stuff will have to be separated.
      
       - Improved the JSON usage for the 'common streaming services' context,
         I realized that JSON arrays are there to ensure sorting, while
         forgetting that general items are optimized for hashing.  So
         basically I'm just using arrays now to sort items in it.
      8830c410
  17. Apr 04, 2014
    • Jim's avatar
      Improve properties API · 1bca7e0a
      Jim authored
      Improve the properties API so that it can actually respond somewhat to
      user input.  Maybe later this might be further improved or replaced with
      something script-based.
      
      When creating a property, you can now add a callback to that property
      that notifies when the property has been changed in the user interface.
      Return true if you want the properties to be refreshed, or false if not.
      Though now that I think about it I doubt there would ever be a case
      where you would have this callback and *not* refresh the properties.
      
      Regardless, this allows functions to change the values of properties or
      settings, or enable/disable/hide other property controls from view
      dynamically.
      1bca7e0a
  18. Mar 23, 2014
    • Jim's avatar
      Add source properties window (very preliminary) · d9251f9e
      Jim authored
       - Add a properties window for sources so that you can now actually edit
         the settings for sources.  Also, display the source by itself in the
         window (Note: not working on mac, and possibly not working on linux).
      
         When changing the settings for a source, it will call
         obs_source_update on that source when you have modified any values
         automatically.
      
       - Add a properties 'widget', eventually I want to turn this in to a
         regular nice properties view like you'd see in the designer, but
         right now it just uses a form layout in a QScrollArea with regular
         controls to display the properties.  It's clunky but works for the
         time being.
      
       - Make it so that swap chains and the main graphics subsystem will
         automatically use at least one backbuffer if none was specified
      
       - Fix bug where displays weren't added to the main display array
      
       - Make it so that you can get the properties of a source via the actual
         pointer of a source/encoder/output in addition to being able to look
         up properties via identifier.
      
       - When registering source types, check for required functions (wasn't
         doing it before).  getheight/getwidth should not be optional if it's
         a video source as well.
      
       - Add an RAII OBSObj wrapper to obs.hpp for non-reference-counted
         libobs pointers
      
       - Add an RAII OBSSignal wrapper to obs.hpp for libobs signals to
         automatically disconnect them on destruction
      
       - Move the "scale and center" calculation in window-basic-main.cpp to
         its own function and in its own source file
      
       - Add an 'update' callback to WASAPI audio sources
      d9251f9e
  19. Mar 10, 2014
    • Jim's avatar
      Fix minor warning (redundant code) · 9a07f9b8
      Jim authored
      9a07f9b8
    • Jim's avatar
      CoreAudio: fix properties for input/output · 80683787
      Jim authored
      Also, check that audio devices are available before setting defaults
      80683787
    • Jim's avatar
      Add preliminary streaming code for testing · 02a07ea0
      Jim authored
       - Add some temporary streaming code using FFmpeg.  FFmpeg itself is not
         very ideal for streaming; lack of direct control of the sockets and
         no framedrop handling means that FFmpeg is definitely not something
         you want to use without wrapper code.  I'd prefer writing my own
         network framework in this particular case just because you give away
         so much control of the network interface.  Wasted an entire day
         trying to go through FFmpeg issues.
      
         There's just no way FFmpeg should be used for real streaming (at
         least without being patched or submitting some sort of patch, but I'm
         sort of feeling "meh" on that idea)
      
         I had to end up writing multiple threads just to handle both
         connecting and writing, because av_interleaved_write_frame blocks
         every call, stalling the main encoder thread, and thus also stalling
         draw signals.
      
       - Add some temporary user interface for streaming settings.  This is
         just temporary for the time being.  It's in the outputs section of
         the basic-mode settings
      
       - Make it so that dynamic arrays do not free all their data when the
         size just happens to be reduced to 0.  This prevents constant
         reallocation when an array keeps going from 1 item to 0 items.  Also,
         it was bad to become dependent upon that functionality.  You must now
         always explicitly call "free" on it to ensure the data is free, and
         that's how it should be.  Implicit functionality can lead to
         confusion and maintainability issues.
      02a07ea0
  20. Mar 08, 2014
    • Jim's avatar
      UI: Swap audio slots · b2202c48
      Jim authored
      Had the audio restart slot connected to things that didn't require a
      restart
      b2202c48
  21. Mar 07, 2014
    • Jim's avatar
      Activate user-selected audio devices · f2ee9507
      Jim authored
       - Fix a bug where the initial audio data insertion would cause all
         audio data to unintentionally clear (mixed up < and > operators, damn
         human error)
      
       - Fixed a potential interdependant lock scenario with channel mutex
         locks and graphics mutex locks.  The main video thread could lock the
         graphics mutex and then while in the graphics mutex could lock the
         channels mutex.  Meanwhile in another thread, the channel mutex could
         get locked, and then the graphics mutex would get locked, causing a
         deadlock.
      
         The best way to deal with this is to not let mutexes lock within
         other mutexes, but sometimes it's difficult to avoid such as in the
         main video thread.
      
       - Audio devices should now be functional, and the devices in the audio
         settings can now be changed as desired.
      f2ee9507
    • Jim's avatar
      Make audio devices save to settings · fd579fe7
      Jim authored
      Also, revamp the settings dialog code and make it use signals and slots
      a bit better.
      fd579fe7
  22. Mar 06, 2014
  23. Feb 24, 2014
    • Jim's avatar
      Make ffmpeg test output sync A/V properly · 6c2d067e
      Jim authored
      FFmpeg test output wasn't make any attempt to sync data before.  Should
      be much more accurate now.
      
      Also, added a restart message to audio settings if base audio settings
      are changed.
      6c2d067e
  24. Feb 23, 2014
    • Jim's avatar
      Require restart for audio changes (for now) · 75b66872
      Jim authored
      Resetting audio while libobs is active is a real pain.  I think I'm just
      going to do audio resetting later, or maybe just require restart
      regardless just because having to shut down audio streams/lines while
      there's sources currently active requires recreating all the audio
      lines for each audio source.  Very painful.
      
      Video fortunately is no big deal, so at least there's that.
      75b66872
    • Jim's avatar
      Implement a few more audio options/functions · c232ebde
      Jim authored
      Implement a few audio options in to the user interface as well as a few
      inline audio functions in audio-io.h.
      
      Make it so ffmpeg plugin automatically converts to the desired format.
      
      Use regular interleaved float internally for audio instead of planar
      float.
      c232ebde
  25. Feb 22, 2014
    • Jim's avatar
      Fix video reset and apply new video settings · 0ff0d327
      Jim authored
      This allows the changing of bideo settings without having to completely
      reset all graphics data.  Will recreate internal output/conversion
      buffers and such and reset the main preview.
      0ff0d327
  26. 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
  27. Jan 29, 2014
  28. Jan 28, 2014
    • Jim's avatar
      Improve safety for settings usage · 9116be8d
      Jim authored
      - 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
  29. Jan 26, 2014
    • Jim's avatar
      Finish the rest of the settings dialog code · a5372e97
      Jim authored
      - Move over the last of the original settings dialog code to QT.  It was
        actually a bit easier to write in the QT version.  wxWidgets was
        definitely not ideal for that because the pages would fully
        create/destroy every time.
      
      - [Win32] Fix os_dlopen so that it only appends .dll if not present
      
      - [MacOS] Fix name dialog text edit widget issue (it would be better if
        we could just use the list widget for editing labels, will have to
        look in to that in the future)
      
      - Tweak the settings UI a bit more and make 30 FPS default
      
      - Add a macro to convert a QString to a UTF-8 const char * string
      
      - Rename build/plugins to build/obs-plugins
      
      - Remove the last of the wxWidgets code
      a5372e97
  30. Jan 25, 2014
    • Jim's avatar
      Apply a number of fixes to the main window · f09a9ed4
      Jim authored
      - Fix the size issue with list boxes on mac.  Was displaying the list
        boxes with an improper size.  Turns out it was just the wrong size
        policies on the frame below.
      
      - Ensure the main windows are fully displayed *before* initializing
        subsystems.  This ensures that the graphics system will properly start
        up on macos, and allows the glitch fix.
      
      - Made a workaround for weird QT glitch that would happen to the parent
        of a pure native widget that also has internal painting fully
        disabled.  (Should definitely write an example and report this bug on
        the QT forums)
      f09a9ed4
  31. Jan 24, 2014
    • Jim's avatar
      Fix/update forms for main and settings window · 092f36fa
      Jim authored
      - Had the wrong names set for the up/down widgets for sources/scenes
      
      - Updated the settings dialog and gave most of the widgets actual object
        names
      
      - Added code for the settings window.  Settings window should now at
        least display.
      092f36fa
Loading