Commit Graph

2031 Commits (07007bcc6edd9604ef1924ff81953794340cea42)

Author SHA1 Message Date
jp9000 77f0f6802a win-dshow: Put device id mangling in separate file
This is going to be used for other code as well, so may as well put it
in its own file.
2014-12-21 10:14:25 -08:00
jp9000 1884fea349 win-dshow: Use obs_avc_keyframe instead of own 2014-12-21 10:14:24 -08:00
jp9000 3412a0e190 obs-outputs: Wait for packet before header output
Waiting for the first packet to arrive before sending the headers helps
prevent issues with certain types of encoders that may not get their
header/SEI until the first packet has been received.
2014-12-21 10:14:23 -08:00
jp9000 1a95004fe8 libobs: Fix bug when SEI not present
If an encoder did not possess any SEI data, it would never send data at
all because the sent_first_packet wasn't set despite the first packet
being sent.
2014-12-21 10:14:23 -08:00
jp9000 9f97b02c32 libobs: Add function to determine AVC keyframes
Added obs_avc_keyframe that returns whether an avc packet is a keyframe
or not.  This function is particularly useful for when writing custom
encoder plugins.
2014-12-21 10:14:22 -08:00
jp9000 f8e56a4e1e libobs: Expose NAL enums in obs-avc.h
I encountered some cases where I needed to use these enumerations
outside of the file, so this allows other modules to use AVC
enumerations without having to redefine them each time.  Especially
useful for custom encoder modules.
2014-12-21 10:14:21 -08:00
jp9000 923916ecce libobs: Use extern "C" on export headers if C++
I neglected to surround some files with extern "C", so if something
written with C++ used the files it would cause function exports to not
be mangled by it correctly.
2014-12-21 10:14:21 -08:00
jp9000 1d9440c6a7 Basic UI: Raise bitrate limit to 1000000
I don't know why on earth I set the limit to 16000.  There's no reason
why there should really be a low hard limit.
2014-12-21 10:14:20 -08:00
jp9000 c52406c178 libobs/media-io: Fix recursive lock in video
In certain cases the video thread could end up trying to lock itself
recursively.  This just allows the mutexes to safely be locked
recursively.
2014-12-21 10:14:19 -08:00
jp9000 817a724dea libobs: Add NV12_Reverse shader 2014-12-21 10:14:18 -08:00
Jim e113aa4fa5 Merge pull request #308 from jakeprobst/master
linux x11: get monitors with x11 if xinerama is not found
2014-12-19 22:11:47 -08:00
Jake Probst cc2d3b2d1c linux x11: get monitors: use xcb and add fallback if xinerama not found 2014-12-19 21:51:37 -08:00
Zachary Lund de6e997264 Move from libX11/GLX to XCB/libX11/GLX. 2014-12-19 19:23:08 -08:00
jp9000 793d7b51b2 UI: Fix locale typo 2014-12-15 03:00:55 -08:00
jp9000 640967b997 UI: Add video scale filters to basic settings 2014-12-15 01:55:19 -08:00
jp9000 488cd84f6f libobs: Set version to 0.7.0 2014-12-15 01:55:18 -08:00
jp9000 c88220552f (API Change) libobs: Add bicubic/lanczos scaling
This adds bicubic and lanczos scaling capability to libobs to improve
scaling quality and sharpness when the output resolution has to be
scaled relative to the base resolution.  Bilinear is also available,
although bilinear has rather poor quality and causes scaling to appear
blurry.

If the output resolution is close to the base resolution, then bilinear
is used instead as an optimization, as there's no need to use these
shaders if scaling is not in use.

The Bicubic and Lanczos effects are also exposed via exported function
to allow the ability to use those shaders in plugin modules if desired.

The API change adds a variable 'scale_type' to the obs_video_info
structure that allows the user interface to choose what type of scaling
filter should be used.
2014-12-15 01:55:12 -08:00
jp9000 1b454647bd Don't copy D3D compiler binary on windows (cmake)
Copying this binary is kind of unnecessary because it's something that
everyone has as long as they update DirectX, and isn't something we can
distribute because it's a Microsoft DLL.
2014-12-15 01:27:51 -08:00
fryshorts 43552478fc obs: Remove update time from volume meter
Remove the update time check from the volume meter since it is no longer
nescessary. The update interval can now be set with the volmeter which has
the added benefit of not loosing data where previously updates had been
skipped.
2014-12-14 18:39:54 +01:00
fryshorts 73883e6fa8 libobs: Remove volume level signal from obs_source
Remove the calculation of volume levels and the corresponding signal
from obs_source since this is now handled in the volume meter.
Code that is interested in the volume levels can either use the
volmeter provided from obs_audio_controls or use the audio_data signal
to gain access to the raw audio data.
2014-12-14 18:39:54 +01:00
fryshorts c0e6324278 libobs: Signal own levels in volmeter
Signal updated volume levels when they become available in the volume
meter. The frequency of the updates can be adjusted by setting a
different update interval.
2014-12-14 18:39:54 +01:00
fryshorts 94445ddba2 libobs: Remove audio levels handler from volmeter
Remove the the signal handler for the volume_level signal of audio
sources from the volume meter in anticipation of using the levels
calculated in the volume meter itself.
2014-12-14 18:39:54 +01:00
fryshorts 6e0c1533fc libobs: Add level calculations to volmeter
Use the new audio_data signal from sources to calculate the volume
levels in the volume meter.
2014-12-14 18:39:54 +01:00
fryshorts 63399bbfd8 libobs: Add peak hold property to volmeter
Add a property to the volume meter that specifies the time for which
peak value should be held until it is reset.
2014-12-14 18:39:54 +01:00
fryshorts e0ce484b81 libobs: Add update interval property to volmeter
Add a property to the volume meter that specifies the length of the
interval in which the audio data should be sampled before the
audio_levels signal is emitted.
2014-12-14 18:39:28 +01:00
fryshorts 984dd53389 libobs: Add data signal to audio sources
This adds a new signal to (audio) sources which is emitted whenever new
audio data is received from the source. This enables other code that is
interested in the raw audio data to directly access it when it becomes
available.
2014-12-13 14:10:45 +01:00
jp9000 35d7a9ff1f obs-x264: Set x264 to use the cur. set cs/range
This causes x264 to use the currently set color space and color range
of the video media.  This helps prevent issues with decoding where the
colors wouldn't look right due to the fact that these settings were
never specified to x264, and prevents darkness and brightness from
looking washed out due to a potentially incorrect color range.
2014-12-11 20:06:54 -08:00
jp9000 b07862286a (API Change) Add colorspace info to obs_video_info
This was an important change because we were originally using an
hard-coded 709/partial range color matrix for the output, which was
causing problems for people wanting to use different formats or color
spaces.  This will now automatically generate the color matrix depending
on the format, color space, and range, or use an identity matrix if the
video format is RGB instead of YUV.
2014-12-11 19:51:30 -08:00
jp9000 59c4731aa6 libobs/media-io: Add colorspace to video info
This is useful for keeping track of what the current colorspace/range is
if a YUV format is being used.
2014-12-11 19:47:51 -08:00
jp9000 56899df08f win-capture: Add game capture
This adds the windows version of game capture.

New features:

- An option to hook any fullscreen application automatically (that
  doesn't have borders) so that no specific window configuration is
  required.  Definitely a sorely needed feature

- An option to force memory capture for the sake of compatibility with
  things such as SLI, multi-adapter setups (usually laptops), as well as
  the ability to be used with the OpenGL renderer

- An optimization option to force scaling on the GPU before texture
  transfer, reducing the transfer bandwidth (which is especially
  important for compatibility capture)

- An optimization option to limit framerate to the current OBS framerate
  to improve capture performance (mostly useful for compatibility
  capture)

- An option to capture third-party overlays (such as steam)

- Logging improvements, game capture log will now be sent via pipe
  instead of written to a separate file, making diagnosing problems a
  little bit easier
2014-12-09 15:25:59 -08:00
jp9000 ca59b0c7d0 win-capture: Add cursor capture capability 2014-12-09 14:21:08 -08:00
jp9000 a5872955f4 win-capture: Add graphics-hook library
This library is a completely refactored and rewritten version of the
original graphics hook.  The code is more clean, readable, and has a
variety of new features, such as scaling and forcing memory capture.

Currently, only D3D9, 10, and 11 are implemented.  (This commit may be
updated on this branch)
2014-12-09 14:21:07 -08:00
jp9000 cb0db6240b win-capture: Add inject-helper program
This program simply injects a library in to the target progress using
SetWindowsHookEx.
2014-12-09 14:21:07 -08:00
jp9000 f02342ac0c win-capture: Add get-graphics-offsets helper
Before, game capture would find addresses to important graphics
functions by creating a graphics context for the desired API inside of
the hook, and then find the function addresses that way.

The big problem with that is that the context could often cause the
hooked application to crash, especially if another hook was active.

This bypasses that entire need by a simple console application that
creates the contexts, finds the hook address offsets and then returns
them via console output.
2014-12-09 14:21:06 -08:00
jp9000 afbd376f71 win-capture: Add d3d8 headers
These headers allow Direct3D 8 to be used.
2014-12-09 14:21:05 -08:00
jp9000 8c3878b0b6 win-capture: Add graphics-hook-info.h
This header contains global defines, structures, and helper inline
functions for the graphics hook that will be shared between game
capture, the hook, and the get-graphics-addrs helper application.
2014-12-09 14:21:04 -08:00
jp9000 6ece794334 win-capture: Add hook helper functions for IPC
These inline functions simplify the process of using windows IPC
objects, such as mutexes and events.
2014-12-09 14:21:04 -08:00
jp9000 46aeb46757 win-capture: Add hooking functions
These functions allow the safe hooking of windows functions,
specifically windows API functions that may or may not have built-in
machine code to help aid in reverse chain hooks.

If a new hook is applied to an existing forward hook, that hook will be
preserved to prevent that new hook's data from being removed
unintentionally.

Hopefully with all these precautions this will reduce the likelihood of
crashes and abnormal hook behavior, while allowing existing hooks to be
preserved, and allowing new hooks to be applied.
2014-12-09 14:21:03 -08:00
jp9000 a69524a271 libobs: Add obs_property_list_insert_* functions
These functions allow you to insert items at a specific index in a list
instead of being forced to always append to the end.
2014-12-09 14:21:02 -08:00
jp9000 e88632ed73 libobs-opengl: Don't display unimportant messages
The glDebugMessageCallback function will set a callback that will relay
all messages coming from the driver (on supported drivers at least).
For nvidia, sometimes there are a lot of irrelevant messages, which is
nice depending on the type of application you're writing.

I actually at first thought these messages were important, but it turns
out that they're almost always irrelevant and not actually warnings.
Most of the messages at a certain type/severity are mostly for debugging
purposes or minor hints about how to maximize performance, so
unfortunately there ends up being a lot of pointless spam in the debug
output.

The particular performance messages are related to optimizations you can
get via multithreading, and are optimizations you would expect for games
more than for this type of application.  They don't really apply for our
use cases most of the time.

High severity messages however are not omitted regardless of message
type.

These messages can be enabled again by simply defining the
SHOW_ALL_GL_MESSAGES macro.
2014-12-09 14:21:02 -08:00
jp9000 ca8a9fb5a7 libobs: Fix conversion shader D3D display bug
Just for a quick background: D3D's fmod intrinsic is very imprecise.
Naturally floating points aren't precise at all, and when the numbers
you're dealing with become very large, it can often be off by 0.1 or
more.

However, apparently 0.1 isn't enough of an offset to ensure a proper
value when using the fmod intrinsic and then flooring the value.  0.2
seems to fix the issue and make the image display properly.
2014-12-09 14:21:01 -08:00
jp9000 5d9526d98c Add ipc-util static library for IPC functions
Originally I made the "win_pipe" stuff for named pipes on windows but it
was argued that it should be available to all modules and
programs/libraries that the modules might communicate with.

It cannot really be put in to libobs due to the fact that there would
hypothetically be things unrelated to libobs that might want to use it,
so I felt the best option was just to create a simple static library
specific for interprocess communication.

Non-windows versions of these functions are still yet to be implemented.
2014-12-08 01:53:53 -08:00
jp9000 dcae2a0624 win-capture: Expose get_window_exe as extern
This allows get_window_exe to be used with other .c files in the module.
2014-12-08 01:53:53 -08:00
jp9000 5e2eef6231 win-capture: Fix a bug with INCLUDE_MINIMIZED
This fixes a bug where if INCLUDE_MINIMIZED was set and the window size
was (0, 0), the window would still be excluded from the resulting list
that was created.
2014-12-08 01:53:52 -08:00
jp9000 422c6ffe86 win-capture: Obfuscate OpenProcess in win-helpers
OpenProcess can often be misinterpreted as invasive.  To avoid it, a
simple obfuscation workaround does the trick.
2014-12-08 01:53:52 -08:00
jp9000 a49d731df8 win-capture: Add obfuscation functions
This adds obfuscation functions primarily for use with GetProcAddress.
This takes an obfuscated string and uses a simple integer key to
de-obfuscate it to the intended function name string, which is then
loaded dynamically using GetProcAddress.

This is typically only used with functions such as OpenProcess,
SetWindowsHookEx, and the like, which can often be misinterpreted the
wrong way by security programs if those strings are found within the
strings segment of a scanned executable.
2014-12-08 01:53:51 -08:00
jp9000 7bf69e8a0a win-capture: Always set class/title/exe to null
When getting the class/title/exe of a particular window handle in the
build_window_strings function, always set the class/title/exe pointers
to null to prevent any potential references to invalid values if any of
them do not happen to be set for whatever reason.
2014-12-08 01:53:51 -08:00
jp9000 87ac9c91bc libobs: Add flush to video pipeline
On certain GPUs, if you don't flush and the window is minimized it can
endlessly accumulate memory due to what I'm assuming are driver design
flaws (though I can't know for sure).  The flush seems to prevent this
from happening, at least from my tests.  It would be nice if this
weren't necessary.
2014-12-07 23:15:13 -08:00
Jim fe6622c653 Merge pull request #306 from fryshorts/volume-meter-improvements
Volume meter improvements
2014-12-07 22:51:21 -08:00
fryshorts 014a333807 obs/libobs: Use new volume meter api
This replaces the old code for the audio meter that was using
calculations in two different places with the new audio meter api.
The source signal will now emit simple levels instead of dB values,
in order to avoid dB conversion and calculation in the source.
The GUI on the other hand now expects simple position values from
the volume meter api with no knowledge about dB calculus either.
That way all code that handles those conversions is in one place,
with the option to easily add new mappings that can be used
everywhere.
2014-12-04 21:58:35 +01:00