1266 Commits

Author SHA1 Message Date
shiina424
0d5a23d5f7 obs-ffmpeg: Don't allow 32kb/s with FFmpeg AAC encoder
FFmpeg's AAC encoder is unideal at very low bitrates.

Closes jp9000/obs-studio#722
2016-12-18 06:16:16 -08:00
jp9000
68a8a5bf2b win-capture: Do not fall back to other windows for UWP windows
If capturing a UWP window, do not fall back to matching windows with the
same window class if the exact window is not found, as this will get any
other UWP window on the system (due to the fact that they all have the
same window class name).
2016-12-16 14:06:05 -08:00
jp9000
4f4aea4562 win-capture: Add debug messages when hooking
These are helpful for debugging UWP capture issues.
2016-12-16 14:06:04 -08:00
jp9000
61773bcbf2 win-capture: Fix cursor not painting with UWP windows
Because the hook cannot get the window handle of UWP windows, fall back
to using the window handle stored in the game capture source itself if
it's unavailable from the hook.
2016-12-16 14:06:03 -08:00
jp9000
b3119e0a8d win-capture: Don't hard fail if thread ID not found
Under certain circumstances, the program may not be able to acquire the
window thread ID for a UWP process, but will be able to acquire the
process ID.  In this case, it should soft fail and retry, rather than
assume it's unacquirable and stop trying to reacquire.
2016-12-16 14:06:02 -08:00
jp9000
a5337605cd win-capture: Add ApplicationFrameHost to game capture blacklist
The ApplicationFrameHost process is a sandbox process, and should not be
hooked.
2016-12-16 14:06:01 -08:00
jp9000
480d0e986f win-capture: Fix "attempting to hook [executable]" message
The "attempting to hook [executable]" message would not display the
correct executable if it's fallen back to a different window with the
same window class.
2016-12-16 14:06:00 -08:00
jp9000
209bcda1f4 win-capture: Wait a few frames for hook to load
Now that the game capture hook creates and controls all the
synchronization objects, it's no longer possible to expect that the hook
is fully loaded by the time game capture tries to initialize it.  In
that case, allow game capture to retry the hook for a few frames before
assuming something failed.
2016-12-16 14:05:59 -08:00
jp9000
bddd9766ac win-capture: Don't hook suspended processes
Remote threads in suspended processes will also start up suspended, so
do not attempt to hook suspended processes.
2016-12-16 14:05:58 -08:00
jp9000
e29638ebf9 win-capture: Log plugin-side when capture successful/lost 2016-12-16 14:05:57 -08:00
jp9000
d4a99e062b win-capture: Output hook debug messages if addresses missing 2016-12-16 14:05:57 -08:00
jp9000
926b9c5f96 win-capture: Open UWP named objects with helper functions
This detects whether the target process is a UWP process, and then uses
the open_app_* functions for mutexes/events/mapping.  Also slightly
refactors named object open functions.
2016-12-16 14:05:56 -08:00
jp9000
aeb1d7ae1b win-capture: Add ability to open UWP named kernel objects
The only way to open named kernel objects within a UWP "app" is to get
the AppContainer SID, and then open the objects with their full
system namespace names via undocumented NT functions.
2016-12-16 14:05:55 -08:00
jp9000
b5f216ef88 win-capture: Use wide strings for named objects
Prevents from having to mix ansi/wide string usage for opening UWP
programs.
2016-12-16 02:21:10 -08:00
jp9000
c63bb17b08 win-capture: Remove redundant function
This function now already exists elsewhere -- open_event_plus_id.
2016-12-16 02:21:09 -08:00
jp9000
ec4c05f406 win-capture: Don't use "Local\" for game capture shared mem
The "Local\" prefix effectively does nothing.
2016-12-16 02:21:08 -08:00
jp9000
ab9bda52e0 win-capture: Create all named objects within hook
All named objects (including file mapped shared memory) need to be
created within the hook itself due to the fact that UWP programs cannot
access named objects outside of the UWP process.

Because shared memory needs to be created within the hook, the capture
loop cannot start until the shared memory has been filled with valid
data.  Creating an additional "initialize" event fixes this issue.

Additionally, changed the way that named kernel objects are
opened/created.  Before, there were functions that would first try to
open named objects and then implicitly create them if opening failed
(assuming that if the hook didn't create it first, game capture would),
now it's been changed so that you can only either explicitly open or
create.
2016-12-16 02:21:07 -08:00
jp9000
d19342442f win-capture: Use window for keepalive check
To check to make sure game capture is still active in the capture
program, it currently uses a named event, and then it checks to see if
that named event exists.  However with UWP programs, you can't open a
named event outside of the UWP process.  FindWindow on the other hand
does work, so instead of checking to see if a named kernel object
exists, create a window and check to see if that window exists.
2016-12-16 02:21:06 -08:00
jp9000
1e48b522fa win-capture: Fix getting proper UWP window handles
The "main" windows detected for UWP programs are basically to help
sandbox the programs -- they run in the ApplicationFrameHost process and
help reduce the possibility of other programs trying to access the
actual process window, which is a child window.

To bypass this, go through the list of child windows for the
ApplicationFrameHost window, and then find the one that's attached to
a different process; that different process will always be the target,
and will allows us to open the actual process of the UWP program.
2016-12-16 02:21:05 -08:00
jp9000
4ec1033741 win-capture: Do not require pipe/mutex within hook
Named pipes cannot be used within UWP programs, so make them optional.
2016-12-15 13:03:44 -08:00
jp9000
746061fb3a win-capture: Always use minimal access rights within hook
This prevents issues with opening handles to objects within UWP
programs, which have increased security limitations.
2016-12-15 13:03:42 -08:00
jp9000
e148087636 win-capture: Only duplicate to get cur thread handle
Instead of calling OpenThread, use DuplicateHandle with the minimal
access rights (SYNCHRONIZE) to be able to get the current thread handle
within a UWP program.
2016-12-12 08:10:06 -08:00
jp9000
f2e85b8352 obs-ffmpeg: Add replay buffer output
This output allows buffering the encoded data, and then muxing the
current buffer to a file on the spot via a hotkey the user sets.
2016-12-08 03:36:17 -08:00
jp9000
7d6e6eee79 libobs: Use reference counting for encoder packets
Prevents reallocation of encoded packet data.

Deprecates:
obs_duplicate_encoder_packet
obs_free_encoder_packet

Replaces those functions with:
obs_encoder_packet_ref
obs_encoder_packet_release
2016-12-08 03:27:39 -08:00
jp9000
ca607f8b35 cmake: Add _CRT_SECURE_NO_WARNINGS to all projects
This prevents issues with using standard C functions, where microsoft
would otherwise spit out pointless warnings to encourage using
microsoft-specific functions instead.
2016-12-08 03:27:36 -08:00
Richard Stanway
7df46d4a8e
obs-outputs: Fix librtmp IP bind / resolve behavior
Fixes a case where OBS would prefer trying to connect
to an IPv4 address even though you had bound it to an
IPv6 interface for example.
2016-11-30 22:11:17 +01:00
derrod
bfc2987f02 rtmp-services: remove shut down services 2016-11-25 23:55:35 +01:00
Jim
22b1306eb1 Merge pull request #700 from Dead133/master
rtmp-services: Update ingests list for Restream.io
2016-11-25 13:39:50 -08:00
jp9000
e87031f4d6 Revert "obs-transitions: Avoid branching in slide_transition.effect"
This reverts commit 0edaebe192839083528c856bd0d9e1bcab7a8006.

The commit was actually less optimal than it was before.  Shaders are
always fully unfolded and both sides of a branch are always executed.
Despite that fact, the "avoid branching" commit actually *added* two
extra unnecessary instructions with the same number of actual sample
instructions, making it arguably less optimal than before.

This was tested via the D3DDissamble function.
2016-11-25 12:20:42 -08:00
jp9000
2f305cb550 win-capture: Use static runtimes for hooks/helpers
(Note: This commit also modifies the ipc-util/seg-service modules)

When compiling the final project, always compile
ipc-util/get-graphics-offsets/graphics-hook/inject-helper/seg-service
with static MSVC runtimes to prevent the need of requiring the MSVC
runtimes for both architectures.
2016-11-23 06:03:00 -08:00
Jim
b7b8ad476f Merge pull request #703 from Xaymar/feature_amd-encoder
enc-amf: Avoid using C++17 for VS2013 compatibility
2016-11-20 08:49:19 -08:00
Michael Fabian Dirks
f792846c83 enc-amf: Avoid using C++17 for VS2013 compatibility 2016-11-20 17:46:13 +01:00
Gol-D-Ace
2d47dc4e2c Update translations from Crowdin 2016-11-20 12:22:26 +01:00
jp9000
4c4025a242 win-ivcam: Add Intel RealSense plugin 2016-11-19 03:15:21 -08:00
Andrew Surzhynskyi
072e24eb9e rtmp-services: Update ingest list for Restream.io 2016-11-18 17:40:21 +02:00
Jim
36b5527667 Merge pull request #698 from Xaymar/feature_amd-encoder
enc-amf: Update to 1.4.2.3
2016-11-17 05:57:59 -08:00
Michael Fabian Dirks
920d41220b enc-amf: Update to 1.4.2.3 2016-11-17 13:43:39 +01:00
Jim
80f1a19c62 Merge pull request #692 from RytoEX/youtube-recs
rtmp-services: Change YouTube keyint from 4 to 2
2016-11-16 20:51:30 -08:00
Michael Fabian Dirks
1e9ace42af enc-amf: Update to 1.4.2.2 2016-11-17 05:19:11 +01:00
Gol-D-Ace
90e805ad9b Update translations from CrowdIn 2016-11-16 00:32:47 +01:00
jp9000
edfc2bed05 obs-qsv11: Manually mark priority bits for QSV frames
QSV frame priority bits are not being marked correctly; their priorities
are always marked either low or disposable, whereas I-frames should be
marked as highest (3), P-frames should be marked as high (2), and other
frames should be marked as either low or disposable.  This helps ensure
that the correct frames are dropped when frames need to be dropped.
2016-11-14 17:34:46 -08:00
jp9000
53eb817d43 text-freetype2: Defer loading of plugin until source created
Helps significantly boost initialization time.
2016-11-14 17:34:45 -08:00
jp9000
eaa32c20be win-capture: Defer hook offset loading to separate thread
Boosts startup time significantly to defer this to a separate thread.
2016-11-14 17:34:44 -08:00
jp9000
35285a26b7 win-capture: Do not load 64bit hook offsets on 32bit systems 2016-11-14 17:34:32 -08:00
jp9000
67e9cafaba enc-amf: Update to temporary fix branch
Fixes the previous submodule commit, which is broken.  The temporary
branch used here ensures that users with multi-GPU laptops won't crash
on startup.
2016-11-14 17:34:31 -08:00
jp9000
b0054a16d0 enc-amf: Update to commit which prevents crash on startup
On certain switchable laptops with AMD graphics, due to a driver
bug/issue, the program will crash when querying capabilities.  The
commit this updates to fixes that by not querying capabilities on
startup.
2016-11-14 14:17:38 -08:00
jp9000
c5706d726b obs-outputs: Use correct variable for drop priority
There are two variables used for 'priority', the general marked frame
priority, and the drop priority.  They can sometimes be different
because some encoders don't always use the correct frame priority.
2016-11-13 16:29:23 -08:00
Ryan Foster
9f33ff0b99 rtmp-services: Change YouTube keyint from 4 to 2
YouTube recommends a keyframe interval of 2 seconds with a maximum
interval of 4 seconds.
2016-11-09 19:58:28 -05:00
Michael Fabian Dirks
ffbf115ef3 enc-amf: Update to version 1.4.1.5 2016-11-09 21:49:16 +01:00
Ricardo Constantino
8c3b475812
obs-ffmpeg: Fix assumption about plane height with i444
Affected both FFmpeg and nvenc encoders.
Fixes issue 667.
2016-11-09 16:04:12 +00:00