Commit Graph

33 Commits (04d07831ccd41a1d84e88ce54e103fcb040d35f9)

Author SHA1 Message Date
jp9000 5288467aeb Ensure names are valid
Ensure that a source has a valid name.  Duplicates aren't a big deal
internally, but sources without a name are probably something that
should be avoided.  Made is so that if a source is programmatically
created without a name, it's assigned an index based name.

In the main basic-mode window, made it check to make sure the name was
valid as well.
2014-03-10 13:39:51 -07:00
jp9000 4f7ab552df Reimplement monitor capture
- 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.
2014-03-05 10:43:14 -07:00
jp9000 0ff0d32731 Fix video reset and apply new video settings
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.
2014-02-22 20:14:19 -07:00
jp9000 a6dbe1501d Fix precision issues with new conversion shader
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.
2014-02-17 09:28:27 -07:00
jp9000 105aafbc96 Fix a NULL pointer deference
Also, fixed an issue with the new conversion shader not compiling
properly on some video devices
2014-02-16 22:42:35 -07:00
jp9000 f5fc9e7da8 Remove redundant constant from conversion shader 2014-02-16 19:55:59 -07:00
jp9000 2dbbffe4a2 Make a number of key optimizations
- 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.
2014-02-16 19:28:21 -07:00
jp9000 8e81d8be56 Revamp API and start using doxygen
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.
2014-02-12 08:04:50 -07:00
jp9000 ab4ab95790 Implement output scaling/conversion/downloading
- 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.
2014-02-05 20:36:21 -07:00
Palana 4fd4b12c84 Add example monitor capture for OSX (need to clean up (CMake) files) 2014-01-17 02:38:35 +01:00
jp9000 c129cc37cb update API and implement preliminary ability to add sources to scenes 2013-12-30 06:56:39 -07:00
jp9000 6fe59f77ec make sure another source by the same name doesn't already exist when choosing a name for that scene 2013-12-29 09:17:00 -07:00
jp9000 c4af3e2a75 change obs_scene_destroy to obs_scene_release, add ability to add scenes, fix name dialog sizing 2013-12-29 08:54:06 -07:00
jp9000 10aa94f00e Add ability to use two desktop audio devices at once in basic UI 2013-12-28 22:00:32 -07:00
jp9000 399b0c8d10 apply configure video settings on startup 2013-12-22 23:40:07 -07:00
jp9000 bd47d9fe74 clear up a minor inconsistency in default effect naming 2013-12-22 01:33:11 -07:00
jp9000 19c4ee995e add major optimization to filter processing, and as a nice side effect, make it easier to create new filters and sources 2013-12-22 01:30:18 -07:00
jp9000 24c45458b5 use the preview window as the main window associated with the OpenGL context 2013-12-18 22:57:39 -07:00
jp9000 a8ada497b3 finish up preliminary settings stuff 2013-12-18 12:09:20 -07:00
jp9000 0decd607c1 fix typo in english locale file 2013-12-18 10:08:31 -07:00
jp9000 b5bbe74120 add in code for OK/Cancel/Apply buttons in basic settings window 2013-12-17 13:56:58 -07:00
jp9000 3d88a43520 add video settings code and set up default video setting values for the config 2013-12-16 00:07:08 -07:00
jp9000 7ba497fe61 add move constructor to wx connector class, add simple connector list class, add initial video settings class, update build files 2013-12-13 23:11:23 -07:00
jp9000 e27ded192f rename locale file to use sub-language tags only when actually necessary 2013-12-12 21:45:44 -07:00
jp9000 28786349f3 added more text for settings window 2013-12-10 11:22:09 -07:00
jp9000 ec30222fc3 change build directory structure for a bit more consistency 2013-12-07 09:56:06 -07:00
jp9000 8847d11e8e adjust file locations to be more portable 2013-11-01 14:33:00 -07:00
jp9000 fa0a65a41c and fix another minor bug in the new effect file 2013-10-29 06:03:11 -07:00
jp9000 a43e291577 fill in the texture_setimage function, fill in a few other functions, and change certain names to be a little more consistent 2013-10-25 10:25:28 -07:00
jp9000 e2e5454385 Added some more techniques to the default effect 2013-10-25 02:50:08 -07:00
jp9000 e4b920fb9d renamed the default draw effect 2013-10-25 02:45:01 -07:00
jp9000 8421690c33 made some slight corrections 2013-10-24 01:03:45 -07:00
jp9000 ac2c08927f added intial async audio/video code, fixed a few bugs, improved thread safety, and made a few other minor adjustments 2013-10-24 00:57:55 -07:00