1. 21 2月, 2014 1 次提交
    • J
      Add more volume options · 579f026c
      jp9000 提交于
      Added a "master" volume for the entire audio subsystem.
      
      Also, added a "presentation" volume for both the master volume and for
      each invidiaul source.  The presentation volume is used to control
      things like transitioning volumes, preventing sources from outputting
      any audio when they're inactive, as well as some other uses in the
      future.
      579f026c
  2. 19 2月, 2014 4 次提交
    • J
      Properly clamp audio timing and remove warnings · 27b851c0
      jp9000 提交于
      If audio was under, it originally did a full reset of the audio timing.
      However, resetting the audio timing when this happens is kind of a bad
      thing.  It's better just to clamp the value to the expected timestamp to
      ensure seamless audio output.
      
      Also, implement audio timestamp smoothing to ensure audio tries to be as
      seamless as possible.
      27b851c0
    • J
      Fix improper structure dependency · c2f5a88c
      jp9000 提交于
      I actually did compile that last commit and misread the failed projects
      as 0.  I'm just going to put the conversion stuff in video-io.h stuff
      because it requires it anyway, and video-scaler.h already depends on
      video-io.h for the video_format enum anyway.
      c2f5a88c
    • J
      Use forward instead of include · b5bcb197
      jp9000 提交于
      Had a bit of an include loop going on there which caused this issue to
      occur.
      b5bcb197
    • J
      Implement automatic video scaling (if requested) · f2d4de3c
      jp9000 提交于
      Add a scaler interface (defaults to swscale), and if a separate output
      wants to use a different scale or format than the default output format,
      allow a scaler instance to be created automatically for that output,
      which will then receive the new scaled output.
      f2d4de3c
  3. 18 2月, 2014 4 次提交
    • P
      Add Libavutil dependency for obs-ffmpeg plugin · 1044fa0e
      Palana 提交于
      av_frame_alloc, av_frame_free, among others, live in libavutil
      1044fa0e
    • J
      Implement auto output resampling (if requested) · 30094a59
      jp9000 提交于
      If there are for example more than one audio outputs and they have
      different sample rates or channels and such, this will allow automatic
      conversion of that audio to the request formats/channels/rates (but only
      if requested).
      30094a59
    • J
      Implement some basic audio mixing · 860a43c3
      jp9000 提交于
      860a43c3
    • J
      Fix precision issues with new conversion shader · a6dbe150
      jp9000 提交于
      Turns out that on some adapters, due to some sort of internal GPU
      precision error, fmod(x, y) can return x when x == y, wich is incorrect
      (and no, they were actually equal, not off due to precision errors).
      
      This would cause the shader to sample wrong coordinates on the edges
      sometimes.  Just adding 0.1 to the x value before being put in to fmod
      and then flooring the result after fixes the issue.
      a6dbe150
  4. 17 2月, 2014 3 次提交
    • J
      Fix a NULL pointer deference · 105aafbc
      jp9000 提交于
      Also, fixed an issue with the new conversion shader not compiling
      properly on some video devices
      105aafbc
    • J
      Remove redundant constant from conversion shader · f5fc9e7d
      jp9000 提交于
      f5fc9e7d
    • J
      Make a number of key optimizations · 2dbbffe4
      jp9000 提交于
       - 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
  5. 16 2月, 2014 2 次提交
  6. 15 2月, 2014 6 次提交
    • J
      Fix variable placement, not safe with goto usage · 1570fa75
      jp9000 提交于
      1570fa75
    • J
      Optimize GL staging surface and fix mac issue · 30af7dc2
      jp9000 提交于
      Staging surfaces with GL originally copied to a texture and then
      downloaded that copied texture, but I realized that there was really no
      real need to do that.  Now instead they'll copy directly from the
      texture that's given to them rather than copying to a buffer first.
      
      Secondly, hopefully fix the mac issue where the only way to perform an
      asynchronous texture download is via FBOs and glReadPixels.  It's a
      really dumb issue with macs and the amount of "gotchas" and non-standard
      internal GL functionaly on mac is really annoying.
      30af7dc2
    • J
      Fix bug with linux build · 1ed146f6
      jp9000 提交于
      ...Screw it.  %llu it is.
      1ed146f6
    • J
      Fix inttypes.h usage · 971faf09
      jp9000 提交于
      ...I neglected to put a '%' character before using the PRI* macros.
      971faf09
    • J
      Fix a some more linux/GCC specific warnings · 8b8217f6
      jp9000 提交于
      8b8217f6
    • J
      Remove majority of warnings · 966b943d
      jp9000 提交于
      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
  7. 14 2月, 2014 2 次提交
  8. 13 2月, 2014 5 次提交
    • J
      Revamp rendering system to allow custom rendering · 515f44be
      jp9000 提交于
      Originally, the rendering system was designed to only display sources
      and such, but I realized there would be a flaw; if you wanted to render
      the main viewport in a custom way, or maybe even the entire application
      as a graphics-based front end, you wouldn't have been able to do that.
      
      Displays have now been separated in to viewports and displays.  A
      viewport is used to store and draw sources, a display is used to handle
      draw callbacks.  You can even use displays without using viewports to
      draw custom render displays containing graphics calls if you wish, but
      usually they would be used in combination with source viewports at
      least.
      
      This requires a tiny bit more work to create simple source displays, but
      in the end its worth it for the added flexibility and options it brings.
      515f44be
    • J
      Add a bit more documentation · 88519f08
      jp9000 提交于
      - Add bit more documentation to some of the main headers
      
      - Fix alignment for the size of the name string of a obs_data_item.
      88519f08
    • J
      ..and the OSX test program · ed6acbb9
      jp9000 提交于
      ed6acbb9
    • J
      Fix the OSX test source · a41d4b1c
      jp9000 提交于
      Used the wrong function name with the video_render value.  This is what
      I get for not compiling it on mac first.
      a41d4b1c
    • J
      Move enum obs_source_type to obs-source.h · 526f8d4b
      jp9000 提交于
      526f8d4b
  9. 12 2月, 2014 2 次提交
    • J
      Make some admends to obs-source.h documentation · 05b936e5
      jp9000 提交于
      05b936e5
    • 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
  10. 11 2月, 2014 6 次提交
  11. 10 2月, 2014 4 次提交
  12. 09 2月, 2014 1 次提交