483 Commits

Author SHA1 Message Date
jp9000
edf9d9f41f win-capture: Add 'retry_interval' variable
Adds a variable 'retry_interval' to game capture that allows the
interval at which game capture checks to update to longer intervals if
the hook initialization has some sort of failure.

The reason why I want to do this is because I don't really like it when
the hook updates too often in failure, it just leads to log file spam
that I feel can be reduced, and it frequent updates feel a bit invasive.
I just generally feel more comfortable reducing the interval at which
the hook retries after failure.
2015-01-05 02:52:57 -08:00
jp9000
272f709d1d win-hook: Fix variable name typo
Was 'error_aqcuiring', now 'error_acquiring'
2015-01-05 02:45:42 -08:00
jp9000
14bcb3ad18 win-capture: Change inject-hook intervals
This makes a minor adjustment to the interval at which the inject helper
tries to post the inject message to the target process.  Only 2 seconds
before, now up to 4 seconds, with the PostThreadMessage called every
half second for the duration.

The reason I did this is because I noticed that on rare occasions that
it wouldn't hook due to the low interval; usually just because the
target process is busy and isn't able to process its message queue, and
therefor the hook wouldn't go through due to the fact that
SetWindowsHookEx won't inject until the set event has occurred.  The
inject helper program would just close before the thread message had
finally been processed, which would cancel the SetWindowsHookEx hooking.
2015-01-05 02:45:41 -08:00
jp9000
8a97199072 text-freetype2: Set font log warning to debug only 2015-01-05 02:45:38 -08:00
jp9000
12011d4380 win-capture: Increase game capture update interval
Instead of checking every 3 seconds whether to hook, check every 2
seconds.  3 seconds felt a bit long to me.
2015-01-05 02:45:37 -08:00
jp9000
e6752f6b41 win-capture: Fix potentially overwritten values
The code neglected to take in to account that start_capture can also be
called when the texture updates its size/format in the hook and 'ready'
is signaled again, so it's possible that existing variables in the game
capture structure could be overwritten with new ones unintentionally.
2015-01-05 02:45:37 -08:00
jp9000
6d5aecbb70 win-capture: Fix cursor hotspot bug
Did I just..  forget to have it save the cursor hotspot?  You have to
have the cursor hotspot to draw it correctly.
2015-01-05 02:45:36 -08:00
jp9000
6a85407270 win-capture: Change 'Activate' text if active
The game capture 'Activate' button is likely to fool users in to
thinking it's not actually active if the game capture displays black, so
if it's active, rename the button to 'Reactivate' in order to sort of
hint at the user that it's actually active.
2015-01-05 02:42:18 -08:00
jp9000
b277f2b737 Don't update video of sources if not displaying
This is a bit of an optimization to reduce load a little bit if any of
the video capture sources are not currently being displayed on the
screen.  They will simply not capture or update their texture data if
they are not currently being shown anywhere.

The mac and window game capture sources don't really apply due to the
fact that their textures aren't updated on the source's end (they update
inside of the hooks).
2015-01-05 02:10:32 -08:00
jp9000
77105f1d93 win-dshow: Add activate/deactivate button
The DirectShow input source would always turn on first use, whether the
user wanted it to or not.  I feel like having an activate/deactivate
option is a really nice thing to have, and makes configuration feel a
little bit less awkward.
2015-01-05 02:10:31 -08:00
jp9000
f93b2fe794 Set various thread names
Helps identify which threads are which when debugging
2015-01-03 02:37:20 -08:00
jp9000
3259a6831b obs-x264: Fix color space/range not being set
I originally had it set the color space and color range in the video
info callback, but I forgot that it's a function that's called after the
encoder is initialized.  You can change the color space and color range,
but you have to reconfigure the encoder, and there's no real reason to
do that.
2015-01-03 02:37:19 -08:00
jp9000
f466e9ec1c win-capture: Add win8+ monitor capture
Uses the output duplicator API in order to get a high performance
monitor capture on windows 8+.  This is actually designed to be
interchangeable with regular GDI-based monitor capture (uses the same
source id).
2015-01-03 02:37:18 -08:00
jp9000
d3abdf39a2 win-capture: Don't draw cursor if outside area 2015-01-03 02:37:18 -08:00
jp9000
d6e98829ca win-dshow: Add buffering options
Allow the user to select whether to buffer the source or not.  The
settings are auto-detect, on, and off.  Auto-Detect turns it off for
non-encoded devices, and on for encoded devices.

Webcams, internal devices, and other such things on windows do not
really need to be buffered, and buffering incurs a tiny bit of delay, so
turning off buffering is actually a little better for non-encoded
devices.
2015-01-03 02:37:17 -08:00
jp9000
a7d2450d8e obs-outputs: Fix FLV corruption bug
The 'sent_headers' member variable of the FLV output would not be reset
when the output was restarted, causing important data to not be written,
thus creating an invalid FLV file.
2014-12-31 04:03:46 -08:00
Jim
903bb137a0 Merge pull request #312 from fryshorts/xshm-xcb-conversion
linux-capture: Xshm plugin xcb conversion
2014-12-28 23:31:32 -08:00
raincomplex
01491a96d3 Mark windows changed on Expose
On i3wm, windows aren't unmapped when switching away from a window's
workspace, but it does cause OBS to lose the capture. Because
switching back will not trigger a MapNotify, the capture fails to
restart unless you resize or move the window (ConfigureNotify). An
Expose event is fired by the wm, however, so catching this correctly
restarts the capture.
2014-12-24 15:23:08 -05:00
fryshorts
db9b71b80b linux-capture: Refactor source data
Remove comments from and align members in the source data struct for the
xshm capture plugin.
2014-12-22 00:47:44 +01:00
fryshorts
ed839dce19 linux-capture: Remove unused dependencies
Remove dependencies from cmake that are no longer needed due to the
port to xcb.
2014-12-22 00:47:44 +01:00
fryshorts
2dffa894f3 linux-capture: Port display connection to xcb
Remove the last bits of Xlib code from the xshm capture plugin and use
xcb exclusively.
2014-12-22 00:30:14 +01:00
fryshorts
114ccd33ee linux-capture: Port geometry functions to xcb
Replace XLib code with xcb in the geometry helper functions.
2014-12-22 00:13:42 +01:00
fryshorts
4d2e730bfa linux-capture: Remove XLib based shm helpers
Remove the old XLib based shm helper functions from xhelpers.
2014-12-22 00:13:41 +01:00
fryshorts
008f4467f0 linux-capture: Use xcb to check for extensions
Use the previously added helper function to check for needed extensions.
2014-12-22 00:13:41 +01:00
fryshorts
aa016706a2 linux-capture: Port cursor handling to xcb
Use the new xcb based cursor library to handle the cursor in the
xshm plugin.
2014-12-22 00:13:41 +01:00
fryshorts
38f2c57c12 linux-capture: Port xshm handling to xcb
Use the new xcb based xshm functions to attach the shared memory segment
and capture the image from the xserver.
2014-12-22 00:13:41 +01:00
fryshorts
e20cf649b8 linux-capture: Add xcb screen to source data
Add xcb screen structure to the source data for later use in the porting
process.
2014-12-22 00:13:41 +01:00
fryshorts
53ee22ae5a linux-capture: Add xcb connection to source data
Add a xcb connection to the source data for the xshm capture for later
use in the porting process.
2014-12-22 00:13:41 +01:00
fryshorts
4ad41004e0 linux-capture: Add function to check extensions
Add an internal function to check for all the extensions needed by the
xshm capture to work.
2014-12-21 23:21:46 +01:00
fryshorts
172a4d7a52 linux-capture: Add xcb cursor helper library
Add a new helper library to handle the mouse cursor using xcb.
Since porting the old library without either keeping legacy code or
breaking the api would have been non-trivial, this is added as a
completely separate implementation. Once all code is ported over to
use this library, the old one can be removed.
2014-12-21 23:13:46 +01:00
fryshorts
069ee92ff4 linux-capture: Add helper to get xcb screen
Add a helper function to get a xcb screen from a screen id.
2014-12-21 23:13:27 +01:00
fryshorts
e7cdb837aa linux-capture: Add xcb helper functions for shm
Add new helper functions managing the shm segment with xcb to xhelpers.
2014-12-21 23:13:27 +01:00
fryshorts
8caba4deca linux-capture: Add xcb libraries to cmake
Add xcb libraries needed to port the plugin away from xlib to cmake.
2014-12-21 23:13:25 +01:00
jp9000
c456e42191 win-dshow: Use actual encoder names
Was using a temporary name for the encoders still; now uses the actual
encoder names.
2014-12-21 10:41:30 -08:00
jp9000
eb4a05667f win-dshow: Add C985/C353 hardware h264 encoders
This adds support for the AverMedia C985 encoder (which is available on
C985 capture cards) as well as the C353 hardware encoder (which is
currently available on the X99S Gaming 9 motherboards).

These encoders have some limitations, such as limited resolutions
(1280x720 and 1024x768), a max GOP size of 30, and the encoder format
only supports YV12, which requires conversion if the current output
format isn't the same.  The C985 and C353 encoders seem to be pretty
much identical, although it seems like the C353 has a bit more efficient
encoding.

I don't believe these are really suitable for streaming, as they do not
really have the encoding efficiency needed to stream at lower bitrates,
and seem to only support variable bitrate.  However, for recording these
encoders are quite nice to have available, and work quite well.
2014-12-21 10:14:27 -08:00
jp9000
bbff0eeeb9 win-dshow: Move module loading to separate file
The main module code was originally all packed in to the win-dshow.cpp
file, which isn't exactly ideal or clean if one wants to add other
things to the module as a whole.
2014-12-21 10:14:26 -08:00
jp9000
67587fbced win-dshow: Allow use of YV12 video format
Previously, due to a bug in libdshowcapture, the NV12 format was
actually being used for YV12 erroneously, and no actual support for YV12
existed.  This fixes the bug with NV12 and adds support for YV12.
2014-12-21 10:14:26 -08:00
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
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
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