0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 13:08:50 +02:00
Commit Graph

1679 Commits

Author SHA1 Message Date
jp9000
524ff94912 Move alignment code to obs_reset_video
It wasn't properly being set for the graphics textures as well, so it
would end up causing SSE to crash due to alignment
2014-02-11 05:12:36 -07:00
jp9000
6346662f19 I shouldn't have committed before compiling
Note to self - compile before committing.
2014-02-11 04:24:41 -07:00
jp9000
0a9440afdf Align output width to 16 byte alignment
The 444->420 conversion function will crash if you don't align the
output width to a 16 byte boundry.
2014-02-11 04:19:34 -07:00
jp9000
1b8bd57dac Do test recording to a specified file
It will now output to a a filename that you specify when you click the
record button.  This is just for testing.
2014-02-10 10:22:35 -07:00
jp9000
b067440f73 Use bzalloc instead of bmalloc then memset
Reduces needless code repetition and still allows for proper memory
alignment.  Cleans up the code a bit.
2014-02-09 12:34:07 -07:00
jp9000
9879eead83 Fix a couple of warnings 2014-02-09 08:53:19 -08:00
jp9000
8aa2b01eb9 Fix __attribute__ usage
Requires two sets of parentheses, not one.  ...I think
2014-02-09 08:10:53 -07:00
jp9000
29fb9cc9f4 Fix FORCE_INLINE macro
Accidentally put the code within a _MSC_VER #ifdef, causing the macro to
not be found on non-VC compilers
2014-02-09 08:06:34 -07:00
jp9000
20fd2c82dc Fix UTF-8 signature detection
The signature detection code when reading UTF-8 files was causing the
UTF-8 strings read from file to allocate more data than they were
supposed to, causing the last 3 bytes to be garbage
2014-02-09 08:01:08 -07:00
jp9000
4be4dd735e Use force inlining of YUV conversion functions
Force inling of the 444->420 conversion functions because their CPU
usage goes up pretty heavily without it when compiling without
optimizations
2014-02-09 07:59:00 -07:00
jp9000
e4921074c1 Fix texture_setimage
Was mapping the data without unmapping the data, causing the data to
become locked
2014-02-09 06:24:21 -07:00
jp9000
6c92cf5841 Implement output, improve video/audio subsystems
- 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)
2014-02-09 05:51:06 -07:00
jp9000
3d6d43225f Add planar audio support, improve test output
- 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.
2014-02-07 03:03:54 -07:00
jp9000
89cfbdc033 Improve naming scheme of libobs core structures 2014-02-05 21:03:06 -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
4867644776 Add wrappers for obs_data_t and obs_data_array_t 2014-02-03 05:39:25 +01:00
Palana
a2cd42abf0 Remove external ref count visibilty from obs_data_* as well 2014-02-03 05:39:25 +01:00
Palana
935fa62db6 Add missing return type to function 2014-02-03 05:39:25 +01:00
Palana
ac23df500a Remove external ref count visibility
The returned ref count was never used and the returned value doesn't
actually confer any meaning in a multithreaded environment
2014-02-03 02:34:06 +01:00
Jim
be139710a2 Merge pull request #38 from BtbN/master
Move CPack win32 generator from NSIS to WIX
2014-02-02 17:07:29 -08:00
jp9000
37ed83acec Use QMetaObject::invokeMethod in libobs callbacks
Doing this ensures Qt thread safety when adding/removing sources and
scenes, because it will defer the function call to the main thread.
2014-02-02 17:03:55 -07:00
jp9000
cfa62354cd Compact/clean up OBSRef class just a bit more
Replace a NULL with nullptr and reduce code duplication with the =
operators
2014-02-02 15:34:02 -07:00
jp9000
933549ca76 Add a comment and replace some class references
Also, removed some unused headers, and moved the constructor/destructor
functions to the top
2014-02-02 15:23:38 -07:00
BtbN
e53825f1c3 Remove autotools files and update INSTALL file 2014-02-02 22:45:05 +01:00
BtbN
e7e570b8b8 Fix copy&paste error 2014-02-02 22:38:20 +01:00
jp9000
6e1dd92f0c Improve thread safety in UI code
- 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.
2014-02-02 14:26:23 -07:00
jp9000
458325fc6f Add property list callbacks
- 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.
2014-02-01 22:46:13 -07:00
jp9000
0d17d13116 Implement properties definition interface
Implement a properties definition interface to allow modules to export
general properties associated with objects of libobs.

The properties definition interface allows the option for automatic
settings UI generation (which will make simple plugins easier to develop
without the need for user interface), as well as allow real-time
property editing of values of things like sources/outputs/etc without
having to open property dialogs.  More property types can be added in
the future as needed as well.
2014-02-01 18:01:31 -07:00
jp9000
6f51567c93 Simplify/improve UI exporting a bit more
Reduce and simplify the UI export interface.  Having to export functions
with designated names was a bit silly for this case, it makes more sense
for inputs/outputs/etc because they have more functions associated with
them, but in this case the callback can be retrieved simply through the
enumeration exports.  Makes it a bit easier and a little less awkward
for this situation.

Also, changed the exports and names to be a bit more consistent,
labelling them both as either "modal" or "modeless", and changed the UI
function calls to obs_exec_ui and obs_create_ui to imply modal/modeless
functionality a bit more.
2014-02-01 17:43:32 -07:00
jp9000
b31d52d602 Add support for modeless UI creation
I realized that I had intended modeless UI to be usable by plugins, but
it had been pointed out to me that modeless really needs to return a
pointer/handle to the user interface object that was created.
2014-02-01 12:48:35 -07:00
jp9000
00a480f77d Don't rely on static data
The ui_enum function gets a const struct obs_ui_info **, which basically
means it expects static data to be used.  I originally had it the other
way around, but yea, it's probably not a good idea, so I'm going to
revert back to the original code instead, which doesn't rely on the data
being static.
2014-02-01 02:27:31 -07:00
jp9000
8bb208a090 Make some minor adjustments to module UI code
Made it so that enum_ui returns a const pointer to a structure rather
than require an actual structure.

Changed a few of the descriptions that I missed.
2014-02-01 01:02:20 -07:00
jp9000
a12656bd91 Add module UI export capability
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.
2014-02-01 00:49:50 -07:00
jp9000
74032922bc Fix another bug (don't commit without compiling)
Also don't code in anger
2014-01-30 12:42:20 -07:00
jp9000
73d4e1331c And cover the one in scene_destroy 2014-01-30 12:41:11 -07:00
jp9000
7b37dc6cbb Oh and while we're at it I suppose another fix 2014-01-30 12:39:26 -07:00
jp9000
f26cb706c2 Clean up the previous commit a bit
The was_removed variable was rather unnecessary
2014-01-30 12:35:21 -07:00
jp9000
f2e1ce533c Use mutex instead of variable for RC check 2014-01-30 12:29:13 -07:00
jp9000
103ef75310 Improve thread safety for scene items
Scene items previously were removed by calling obs_sceneitem_destroy,
but this proved to be a potential race condition where two different
threads could try to destroy the same scene item at the same time.

Instead of doing that, reference counting is now used on scene items,
and an explicit obs_sceneitem_remove function is used instead for item
removal, which sets a 'removed' variable to ensure it can only be called
exactly one time.
2014-01-30 01:31:52 -07:00
jp9000
3243a9f8c5 Fix the design flaw with obs_sceneitem_destroy
The previous commit used the scene as a  parameter to check to see if
the scene item was still present within the scene before destroying, but
this was actually unnecessary because the fault was because the destroy
signal was being triggered *before* the scene's mutex locked, thus
causing a race condition.  I changed the code so that it signals after
the lock instead of before, so the scene parameter should no longer be
necessary.
2014-01-29 18:27:42 -07:00
Palana
2fa208adfb Check if scene item is actually alive when calling obs_sceneitem_destroy
Prevents a double free in case the scene item was previously removed
2014-01-29 22:52:05 +01:00
Palana
af03444cbe Use recursive mutex for scene mutex
Fixes a deadlock when trying to remove a source from the GUI. The scene
item signal handlers would mark the source as removed which results in
the video thread also trying to run obs_sceneitem_destroy thereby
deadlocking the video thread (and the GUI thread)
2014-01-29 22:46:39 +01:00
jp9000
9116be8d9c Improve safety for settings usage
- 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.
2014-01-28 18:41:24 -07:00
jp9000
c6300d0956 Add a couple more setting data safety measures
Prevent null dereferencing if data is null, instead just make the
functions return and ignore the get/set requests.
2014-01-28 15:45:30 -07:00
BtbN
074f9627b7 Fixup OSX Rpath for imported external libraries on install 2014-01-28 23:07:49 +01:00
jp9000
197c0b1fdd Fix a few bugs with the new data interface
There were some possibilities of NULL pointer dereferencing.  Also,
changed one small function to inline.
2014-01-28 01:51:25 -07:00
jp9000
6c44291693 Implement settings interface for plugins
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.
2014-01-27 23:14:58 -07:00
jp9000
de288ac541 Rename obs_data structure to obs_program_data
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.
2014-01-27 09:07:13 -07:00
jp9000
563613db8f Rename obs-data.h to obs-internal.h
Renaming obs-data.h to avoid confusion about its usage
2014-01-26 18:48:14 -07:00
jp9000
a5372e9757 Finish the rest of the settings dialog code
- 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
2014-01-26 15:36:15 -07:00
Palana
83872829f9 Remove 64bit directory reference from osx plugin path
This should have been in c1599a069a
2014-01-26 05:25:54 +01:00
BtbN
668812ca3e Adjust file finding functions to also search the install root dir on Windows
This is because the installed versions of OBS is allways executed in the install root instead of inside the bin dir.
2014-01-26 02:04:37 +01:00
Palana
c1599a069a Remove unnecessary distinction between 32bit and 64bit on osx 2014-01-25 20:39:09 +01:00
jp9000
93d15ef254 Fix some formatting issues and fix cmake file 2014-01-25 12:34:37 -07:00
BtbN
6a9dda87bd Restructure installation and package generation 2014-01-25 19:13:33 +01:00
Zachary Lund
e3299d5662 Added rudimentary support for Qt on Linux 2014-01-24 21:55:10 -06:00
jp9000
9f1249326b Fix a few formatting issues
Fixed a few files that went over 80 columns, mostly just a nitpack on my
part.

libobs/obs-nix.c had a rather bad case of leading whitespace.

Also, fixed the x86 obs-studio project files so that it would properly
output to the right directory.  It couldn't find libobs.lib because
obs-studio's project settings had it outputting to a different place
than the rest of the projects.
2014-01-24 12:52:22 -07:00
BtbN
45ec80fb7d Full rewrite of all CMakeLists
CMake now works on all platforms
2014-01-24 18:56:32 +01:00
BtbN
8fa309c96e Clean old cmake files 2014-01-24 01:46:36 +01:00
jp9000
4cba9d336a Fix render issues with main preview widget
- I seem to have fixed ths issues with the main preview widget.  It
   seems you just need to set the right window attributes to stop it from
   breaking.  Though when opengl is enabled, there appears to be a weird
   background glitch in the Qt stuff -- I'm not entirely sure what's
   going on.  Bug in Qt?

   Also fixed the layout issues, and the widget now properly resizes and
   centers in to its parent widget.

 - Prevent the render loop from accessing data if the data isn't valid.
   Because obs->data is freed before the graphics stuff, it can cause
   the graphics to keep trying to query the obs->data.displays_mutex
   after it had already been destroyed.
2014-01-23 17:00:42 -07:00
jp9000
fc8851e9f4 Add preliminary ffmpeg plugin (still testing)
- 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)
2014-01-19 03:16:41 -07:00
jp9000
8d63845dd4 Use macros to improve safety loading callbacks
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.
2014-01-17 06:24:34 -07:00
jp9000
ff1afac5f8 Updated comments for outputs/encoders
Changed the comments to properly reflect the new callbacks, as I had
forgotten to update the comments for them both.

Also, changed "setbitrate" and "request_keyframe" return values to be
boolean.
2014-01-17 00:00:21 -07:00
jp9000
29b7d3621c Add preliminary output/encoder interface
- First, I redid the output interface for libobs.  I feel like it's
  going in a pretty good direction in terms of design.

  Right now, the design is so that outputs and encoders are separate.
  One or more outputs can connect to a specific encoder to receive its
  data, or the output can connect directly to raw data from libobs
  output itself, if the output doesn't want to use a designated encoder.
  Data is received via callbacks set when you connect to the encoder or
  raw output.  Multiple outputs can receive the data from a single
  encoder context if need be (such as for streaming to multiple channels
  at once, and/or recording with the same data).

  When an encoder is first connected to, it will connect to raw output,
  and start encoding.  Additional connections will receive that same
  data being encoded as well after that.  When the last encoder has
  disconnected, it will stop encoding.  If for some reason the encoder
  needs to stop, it will use the callback with NULL to signal that
  encoding has stopped.  Some of these things may be subject to change
  in the future, though it feels pretty good with this design so far.
  Will have to see how well it works out in practice versus theory.

- Second, Started adding preliminary RTMP/x264 output plugin code.

  To speed things up, I might just make a direct raw->FFmpeg output to
  create a quick output plugin that we can start using for testing all
  the subsystems.
2014-01-16 22:34:51 -07:00
jp9000
62c2b1d74e Simplify media i/o interfaces
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.
2014-01-14 01:58:47 -07:00
jp9000
02a101d1e8 Fix one minor bug with new timing code
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.
2014-01-12 03:24:01 -07:00
jp9000
9f1a3c3112 Add preliminary handling of timestamp invalidation
- 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
2014-01-12 02:40:51 -07:00
Zachary Lund
bb24591d48 Add copyright and name to files it applies to. 2014-01-11 18:09:48 -06:00
Jim
d5f5d0edb7 Merge pull request #25 from computerquip/upstream-merged
Various changes for wxGTK
2014-01-11 14:54:04 -08:00
Zachary Lund
1deb27d502 Fixed os_gettime_ns to provide correct time in ns 2014-01-11 15:08:04 -06:00
jp9000
3f0b352d7f Clean up code in audio-io.c
Clean up a little bit of code that was unnecessarily nested.  Still a
little squishy but better than it was.
2014-01-10 19:21:32 -07:00
jp9000
4aa4858ac7 Account for thread pauses for audio data
- In the audio I/O code, if there's a pause in the program or its
   threads (especially the audio thread), it'll cause it to sample too
   much data, and increase line->base_timestamp to a potentially higher
   value than the next audio timestamp that may be added to the line.
   This would cause it to crash originally, because it expects audio
   data that is within the designated buffering limit.

   Because that audio data cannot be filled by that data anyway, just
   ignore the audio data until it goes back to the right timing (which
   it will as long as the code that is using the line accounts for its
   current system time)
2014-01-10 19:03:21 -07:00
jp9000
2a89306420 Detect audio timestamp jumps and reset timing
- 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.
2014-01-10 12:45:53 -07:00
jp9000
faa7f4d20e Properly position position mixed audio data
- 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)
2014-01-10 11:55:54 -07:00
jp9000
f827ba38ef Added a sinewave audio test source
- 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.
2014-01-09 22:10:04 -07:00
jp9000
e891b3fae8 Fixed bug with circlar buffer
- Circular buffer code wasn't correctly handling the splitting of
   newly placed data segments, the code was untested and turned out to
   just be backwards.  It now copied the data to the back and front of
   the buffer properly.
2014-01-09 22:02:11 -07:00
Zachary Lund
d283f24cbb A few changes concerning wxGTK.
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.
2014-01-09 21:04:52 -06:00
jp9000
6b8e84844a Add preliminary audio processing
- 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.
2014-01-09 19:08:20 -07:00
jp9000
21fd6cd2f5 Use recursive mutex for user sources and displays
- Using a recursive mutex fixes issues where objects need to enter the
   main libobs sources mutex while already within the mutex in the same
   thread.  Otherwise it would keep getting locked on itself on
   destruction.
2014-01-08 18:07:04 -07:00
jp9000
f3dc5227e9 Apply volume before inserting into circular buffer
- Apply the volume specified with the audio data packet before
   inserting the audio data into the circular buffer.  Added functions
   for multiplying the volume with all the different audio bit depths.
   (Could probably be greatly optmimized later)
2014-01-08 16:41:40 -07:00
jp9000
3838abe1f4 Implement volumes for sources
- 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.
2014-01-07 11:03:15 -07:00
Benjamin Klettbach
ab1d4588e2 Revert "Merge pull request #19 from asgeirom/master"
This reverts commit 27ccb09473, reversing
changes made to b7eccedf8a.
2014-01-06 06:29:08 +01:00
Palana
7fa7af6c03 check for signalled event before pthread_cond_wait-ing
fixes a deadlock in obs_free_video/obs_video_thread where
video_output_stop would signal the update event before obs_video_thread
enters video_output_wait (the thread calling obs_free_video would
block on pthread_join and obs_video_thread would block on
pthread_cond_wait)
2014-01-06 02:04:32 +01:00
jp9000
a2a8a5f148 Added add/remove signals to scenes
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.
2014-01-04 13:47:48 -07:00
jp9000
968f5fed32 Added some return-style functions to calldata.h
When using signal callbacks, there is rarely a need to check to see if
the callback paramters are actually validl; in those cases, if they are
invalid, then the signal is being used incorrectly.  The calldata_get*
functions are meant to be used more for when using dynamic function
calls rather than when using signals.  The calldata_get* functions made
it so that you have to declare your varaibles, and then call that
function to assign that value to those variables, which was slightly
annoying to constantly have to do over and over.

  Therefore I created a few extra functions for returning the value
without having to check for validity.  Although you would think this
would be an issue for maintaining, keep in mind that these functions
return base types.  Admittedly, these functions are merely for
convenience.
2014-01-04 13:28:27 -07:00
Asgeir Mortensen
c95f133fac Adding <linux/time.h> for CLOCK_REALTIME define. 2014-01-04 10:29:06 +01:00
Christoph Hohmann
1a928f638c Don't close module if opening failed during graphics initialization 2014-01-03 18:15:50 +01:00
Palana
7ca68a9d04 fix function pointer types in dynamic procedure handler 2014-01-03 02:58:17 +01:00
Zachary Lund
80b8176e29 GLX implementation and *nix-specific file handling implementation
I added gl-x11 which allows compatibility with X11 (Xlib-based) and GLX.
I also added various functions to handle file finding based on FHS.
Various changes to autotools to both install files correctly and to configure correctly.
2014-01-02 18:20:58 -06:00
jp9000
1c91e0d0e0 forgot to lock the mutex when destroying a scene item 2014-01-01 10:28:37 -07:00
jp9000
966c091078 make scene items use linked list rather than array (containers are a bad habit), add a few functions for getting scene item information, also use a mutex to prevent race conditions when using the linked list 2014-01-01 10:22:55 -07:00
Palana
ec5cdf1b17 fix incompatible types warning in signal system 2014-01-01 03:33:16 +01:00
jp9000
1302e65ee6 create a sizing callback for the preview panel specifically, apparently on macos the window size isn't guaranteed to be the size it's set to in the main window size handler 2013-12-31 07:10:47 -07:00
Palana
683585938c add infrastructure for app bundle target and unmark as advanced 2013-12-30 20:52:44 +01:00
jp9000
78eb116cc8 add 'static' to inline functions in callback/calldata.h 2013-12-30 11:09:32 -07:00
jp9000
72633e40a3 also include bmem.h in the header, minor oversight 2013-12-30 10:14:28 -07:00
jp9000
f3e3aeae74 make sure to include function declarations from calldata.h 2013-12-30 10:09:20 -07:00
jp9000
d99c345595 fix bad enum for get_source_info in obs_source.c 2013-12-30 09:04:05 -07:00
jp9000
c129cc37cb update API and implement preliminary ability to add sources to scenes 2013-12-30 06:56:39 -07:00
Palana
e8ee39560c update data files copy in cmake project 2013-12-30 03:31:55 +01:00
Palana
c093f04c58 add static linking options for ffmpeg and wxwidgets to cmake 2013-12-30 03:02:11 +01: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
cec94b042e implement scene adding callbacks, make a few API tweaks 2013-12-28 05:33:16 -07:00
Zachary Lund
5f5404f8cb Fixes issues with autoconf
In particular, it removes any deprecated functionality
wxWidgets only documents their deprecated m4 macros and gives a poor example
Also to note in regard to wxWidgets, I removed any unneeded libraries from the linker line.

Any warning messages provided by autoconf has been supressed in the most appropriate manner possible.
2013-12-27 16:41:01 -06:00
jp9000
bbd8178dab fixed a typo in a function call 2013-12-27 15:23:42 -07:00
jp9000
261b9d7056 fix a few bugs with callback system, add some test signals 2013-12-27 05:08:58 -07:00
jp9000
6edcd456fe implement signal/procedure handling into libobs and individual sources 2013-12-26 23:10:15 -07:00
jp9000
3b48f79442 fix one minor bug with the disconnct function 2013-12-26 04:33:16 -07:00
jp9000
233694ad04 add one minor error message to signal handler 2013-12-26 04:28:09 -07:00
jp9000
6ac6256ac5 fill in rest of signal/callback/proc 2013-12-26 04:26:17 -07:00
jp9000
a136748bd3 don't hide calldata structure, no reason to, and forced an unnecessary allocation which is bad 2013-12-26 02:02:24 -07:00
jp9000
e9ded173f1 add my signal/callback interface from another project, also update license of utility files to ISC 1.3 2013-12-25 22:40:33 -07:00
Palana
d97250933b fix prototype 2013-12-24 17:06:57 +01:00
jp9000
123ca280a0 fix unix version of os_get_config_path to make it append a slash to $HOME 2013-12-23 19:04:41 -07:00
jp9000
9e9c2551ec Merge branch 'master' of https://github.com/jp9000/obs-studio 2013-12-23 19:00:11 -07:00
jp9000
bb53a39aee change os_get_home_path to a better and more clear function, os_get_config_path 2013-12-23 18:59:54 -07:00
Palana
74aa1c466b add osx iosurface opengl integration 2013-12-23 16:35:14 +01:00
jp9000
399b0c8d10 apply configure video settings on startup 2013-12-22 23:40:07 -07:00
jp9000
991b5739d6 move libobs C++ bindings to libobs 2013-12-22 17:42:02 -07:00
jp9000
922eb7b8e8 make direct filter rendering optional (can be useful for certain cases) 2013-12-22 02:03:40 -07:00
jp9000
bd47d9fe74 clear up a minor inconsistency in default effect naming 2013-12-22 01:33:11 -07:00
jp9000
cdeb81e3bf Merge branch 'master' of https://github.com/jp9000/obs-studio 2013-12-22 01:30:27 -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
Palana
1dde992990 remove mipmap texture filter from min_filter for rectangle textures 2013-12-22 04:47:18 +01:00
jp9000
9218627892 add obs_source functions to allow name manipulation and lookup based upon name, and a few other functions related to getting/setting source information 2013-12-20 19:35:12 -07:00
jp9000
95a7da2d4c add names to sources, use 'id' for the internal source identifier names rather than 'name' 2013-12-20 17:23:19 -07:00
jp9000
0781670ba2 add handling of GL_TEXTURE_RECTANGLE target, and add automatic handling if using it as a sprite 2013-12-20 12:36:38 -07:00
jp9000
f41bb4b7e9 add support for texture_rect texture type in shaders, add new form, clear up a few things in the API 2013-12-20 11:58:09 -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
4da1c193dc fix minor bug in config file parser 2013-12-18 12:08:38 -07:00
jp9000
eeb76237eb removed deprecated/unused function 2013-12-17 22:45:50 -07:00
jp9000
6d5ef2fb62 fixed some warnings (when on earth did I do a bad find/replace on these functions?) 2013-12-17 22:30:22 -07:00
jp9000
3b871a00fb fixed a bug where new locale text segments properly replace old ones if adding a new language file on top of another 2013-12-17 18:17:22 -07:00
jp9000
a4055e4257 fixed a bug writing to config files where it would use a brace instead of a bracket when creating a section 2013-12-17 18:16:36 -07:00
jp9000
0c3ed3ceca fixed bug with dynamic string where it wouldn't set the capacity properly 2013-12-17 18:15:47 -07:00
jp9000
50666040e5 allow loading of other locals on top of the current locale (to enable unfilled strings to default to english if necessary) 2013-12-17 13:55:09 -07:00
jp9000
ed388fc82e replaced boolean trap parameter in the base lexer 2013-12-16 00:05:27 -07:00
Palana
42375302d7 fixed typo 2013-12-16 01:59:07 +01:00
jp9000
aead95f5e3 converted project to vs2013, removed 2010 support (ugh) 2013-12-14 16:01:30 -07:00
jp9000
9743b0efc5 fixed a lexer bug with detecting alphanumeric character text (not happy about it though) 2013-12-12 21:46:29 -07:00
jp9000
5edc9cf9cb added some more config file functions for going through each section 2013-12-12 21:42:44 -07:00
jp9000
2a9e3a7179 Merge branch 'master' of https://github.com/jp9000/obs-studio 2013-12-12 21:41:53 -07:00
jp9000
de21e622b5 removed os_gettime_ms, added os_file_exists 2013-12-12 21:41:46 -07:00
Palana
3da014543e fix min_adjust usage in calc_torque 2013-12-12 23:57:36 +01:00
Jim
6887f00359 Merge pull request #7 from MattMcNam/master
Updated CMake with new effect file locations
2013-12-07 15:03:08 -08:00
Ján Mlynek
1005a841d4 fixed build for *nix platform 2013-12-07 22:51:58 +01:00
Ján Mlynek
c37fe1fd16 added functions to platform-nix.c 2013-12-07 22:32:29 +01:00
Matthew McNamara
a76a5937df Updated CMakeLists with new effect file locations, added cmake & xcode build folders to gitignore 2013-12-07 21:05:31 +01:00
jp9000
5d3f3e0d1b make text lookup use a simple linked lists rather than an unnecessary array of pointers 2013-12-07 11:23:49 -07:00
jp9000
9b882c097b should only check for ending quote character in locale data if it began with a quote 2013-12-07 10:25:34 -07:00
jp9000
70290b8c2b fixed locale code, added locale files, made wx use locale files, fixed some bugs, and added platform-specific files to the main program 2013-12-07 10:22:56 -07:00
Palana
0199c84687 updated automake files with latest osx changes 2013-12-07 17:40:27 +01:00
Palana
e6017ec1ba changed allocation counter to uint64_t
also avoids format string confusion for bnum_allocs
2013-12-07 17:39:43 +01:00
Palana
968f9c03bd use %u for size_t on microsoft compilers 2013-12-07 16:50:05 +01:00
Palana
2284ef09fa compile libobs with -fobjc-arc 2013-12-06 21:31:42 +01:00
jp9000
ff47b3a2dc added functions to get current audio/video output information 2013-12-06 06:38:19 -07:00
jp9000
8298fa4dc7 With the permission of my fellow contributors, I'm switching obs-studio back to GPL v2+ to prevent issues between this project and the original OBS project, and for personal reasons to avoid legal ambiguity (not political reasons, I admittedly would prefer GPL v3+) 2013-12-02 22:24:38 -07:00
Palana
1bd2b9fd99 added os_get_home_path and os_mkdir to osx cocoa platform 2013-11-29 22:38:05 +01:00
jp9000
58810f9806 changed gs_draw_sprite to allow custom sizes, added output textures to the core, and adjusted the test code to accommodate the changes 2013-11-26 22:26:14 -07:00
jp9000
32e34ffe25 fixed a bug in matrix3_transpose - rotate the vector, don't transform the vector 2013-11-26 22:24:10 -07:00
jp9000
74dc470681 made it so that graphics device and associated objects are not lost every time video settings are changed 2013-11-26 22:20:11 -07:00
jp9000
fcf7e508a9 added os_mkdir to platform functions 2013-11-23 23:35:03 -07:00
jp9000
3c6494a11d fixed a few bugs with config files, and replaced a boolean parameter with an enum 2013-11-23 23:34:38 -07:00
jp9000
e1da9099f9 remove ssize_t because it's not even used anyway anymore 2013-11-23 11:12:44 -07:00
jp9000
93dd3cec50 made the getframe function a bit more safe and modified a few names for clarity 2013-11-22 16:18:31 -07:00
jp9000
d8b49034c9 added jansson to the main project 2013-11-22 10:02:57 -07:00
jp9000
71890e0365 removed now-redundant callback enum_children from sources 2013-11-20 21:52:20 -07:00
jp9000
f1decd08f4 adjusted the way source removal is handled to make it a bit more safe 2013-11-20 18:36:46 -07:00
Palana
5fa2f28577 fixed broken comparison 2013-11-20 23:12:12 +01:00
jp9000
409b011a8e cleaned up main internal data structure design, changed to reference counting for sources to ensure safe destruction of source objects from all parts of the system, added some service-related stuff for testing 2013-11-20 15:00:16 -07:00
jp9000
e778a4c04f added OSX files to automake scripts 2013-11-15 06:40:03 -07:00
Palana
ec411fe046 added cmake build files 2013-11-14 18:36:46 +01:00
Palana
d7a04aea8c added osx cocoa support files 2013-11-14 18:31:18 +01:00
Palana
f263d585bf enable format string diagnostics for blog and bcrash on gcc and clang 2013-11-14 18:31:18 +01:00
Palana
3b3d612ceb add noreturn attribute to def_crash_handler 2013-11-14 18:31:17 +01:00
jp9000
146e9a7dbd added support for jansson, added new output files, made some adjustments to the API, fixed a UI subclass issue 2013-11-13 06:24:20 -07:00
John Bradley
21a0292f7a Removed unnecessary <malloc.h> include from bmem 2013-11-07 19:14:24 -06:00
jp9000
f5e41f441e added initial main program and directshow files, finally have a UI functioning 2013-11-07 16:45:03 -07:00
jp9000
37c7db5dbe fixed some bugs and fixed a variable that wasn't declared at the top 2013-11-02 14:44:40 -07:00
Palana
85dd2ad073 fixed log output 2013-11-02 02:16:18 +01:00
jp9000
0790148950 ...had the wrong code in the wrong function, fixed os_dlopen 2013-11-01 17:01:56 -07:00
Palana
727ed4d7ec actually use found path in obs_load_module 2013-11-02 00:53:26 +01:00
jp9000
8847d11e8e adjust file locations to be more portable 2013-11-01 14:33:00 -07:00
jp9000
a6a6118c04 finish up most of the source audio stuff and rename some variables/structs/enum to be a bit more consistent 2013-10-31 10:28:47 -07:00
jp9000
99d2965e21 fix a minor warning and make ffmpeg dependencies a little bit easier to deal with in VS 2013-10-30 18:19:52 -07:00
jp9000
6147446059 remove some redundant code in the resampler wrapper 2013-10-30 17:12:51 -07:00
jp9000
60e6ddbf71 add audio resampling, add ffmpeg support 2013-10-30 17:07:01 -07:00
jp9000
3adfaf7f9f not sure how a backslash slipped into an include, but it's gone now 2013-10-29 23:54:43 -07:00
jp9000
676a0bd67d update build system to autotools (finally) 2013-10-29 23:21:40 -07:00
jp9000
ab08c2c3f2 fixed a minor bug in the gl shader parser 2013-10-29 06:01:19 -07:00
jp9000
93905e516b modify w32-pthreads location in source/project files 2013-10-28 06:29:12 -07:00
jp9000
d2ba08e46b add frame flipping code 2013-10-26 15:05:51 -07:00
jp9000
7dada3bef4 fill out the rest of the source video frame functions, added nv12 decompression function, and cleaned up the design of the source video frame stuff 2013-10-26 14:32:06 -07:00
jp9000
75a1a02a97 fix function definition names for two of the conversion functions 2013-10-25 10:30:50 -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
603b262d4c add format conversion functions 2013-10-25 10:23:11 -07:00
jp9000
bb329b9278 avoid using 'default' for enum switches 2013-10-24 01:29:06 -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
jp9000
ae3cecf09f make data access in the threads a bit more safe (note: probably will need some more safety measures later on) 2013-10-18 20:25:13 -07:00
jp9000
ebbf4175d3 minor tweaks and get rid of the linker dependency I used for testing 2013-10-17 18:44:37 -07:00
jp9000
18834c6a45 some static analysis cleanup 2013-10-17 17:21:42 -07:00
jp9000
6e6535d568 initialize variable to NULL to be safe against uninitialized usage 2013-10-17 00:36:32 -07:00
jp9000
dfa2dc6eab fix up the rest of the GL code, add glew to project, add makefiles for opengl, fix makefiles so that it can be built with gcc, update project files to automatically output to the build directory 2013-10-16 23:31:18 -07:00
jp9000
0dfc844abc woops, left some spaces by accident 2013-10-14 12:42:45 -07:00
jp9000
9570f0b8d7 change names, fix some bugs, minor GL/D3D fixes, update tests, fix effect files, output a little more debug information 2013-10-14 12:37:52 -07:00
Peter SZTANOJEV
0301b24ace modernize header guards to #pragma once 2013-10-14 13:21:15 +02:00
jp9000
9577ddcf9b fill in the rest of the GL functions. finally 2013-10-12 20:18:05 -07:00
jp9000
c1939de49b added z-stencil buffers to GL and made a GS_MAX_TEXTURES macro 2013-10-10 12:37:03 -07:00
jp9000
806bf557e5 removed a fairly pointless constant for the time being 2013-10-10 07:46:27 -07:00
jp9000
20490010e9 fix effect parser to properly parse and output uniform variables 2013-10-09 21:38:55 -07:00
jp9000
fda2ee1147 added initial GL shader code 2013-10-09 15:48:16 -07:00
jp9000
34357f00fb finish up GLSL conversion stuff and make some minor tweaks to shader parser 2013-10-08 13:36:15 -07:00
jp9000
f9d1a4b9ed added first GLSL code, moved some graphics functions around, and adjusted some existing shader parser code 2013-10-06 18:29:29 -07:00
jp9000
f9c2aadf53 remove some more code duplication, fix a string, and remove a potential bug 2013-10-05 09:40:43 -07:00
jp9000
5c92f22f0d moved some stuff around to avoid code duplication and finish up gl 2D texture code 2013-10-05 00:34:43 -07:00
jp9000
543d2481f1 move around some graphics stuff and put in copyright comments 2013-10-04 12:13:59 -07:00
jp9000
ec86c3eaf7 fixed code that used the newer gs_create_texture version 2013-10-04 09:01:39 -07:00
jp9000
75262e6e0b update graphics subsystem code to add mipmap support and also add initial GL texture stuff and helper functions 2013-10-04 08:55:33 -07:00
jp9000
817044721b made better checks when shutting down graphics subsystem 2013-10-02 23:13:26 -07:00
jp9000
e0393ba7a9 fixed static w32-pthreads initialization (release builds should work now on windows) 2013-10-01 18:16:23 -07:00
jp9000
b44ba06543 fixed the alignment issues for good 2013-10-01 07:24:59 -07:00
jp9000
7f8a2890a1 ...and should have probably compiled it first 2013-10-01 06:19:11 -07:00
jp9000
493537d7bc forgot one more alignment call 2013-10-01 06:18:29 -07:00
jp9000
658a27362d fixed some more alignment issues for SSE usage (maybe I should cut donw the size of the align function) 2013-10-01 06:16:40 -07:00
jp9000
92f48c1aa5 remove comment about removed api export 2013-10-01 05:56:07 -07:00
jp9000
4e6affdfc3 add an optional aligned new operator and use it with the d3d11 subsystem to prevent SIMD crashes 2013-10-01 00:27:14 -07:00
jp9000
f255ae1922 first commit 2013-09-30 19:37:13 -07:00