Commit Graph

467 Commits (903bb137a0d7db3c9b2eee380742d1602bc06b65)

Author SHA1 Message Date
jp9000 f199e2c096 text-freetype2: Do not call wcslen in loop expr.
Doing this in the expression will cause it to execute the function every
time the expression is evaluated, which is needless cycles wasted.
Instead, call wcslen before the loops begin.
2014-11-17 06:47:49 -08:00
jp9000 ae862c16a6 obs-ffmpeg: If ffaac is used, change cutoff freq
If FFmpeg's experimental aac encoder is used, this changes the cutoff
frequency to better values in order to try to help make up for the
inherent lack of encoder quality a bit.  If FFmpeg is compiled to use
another encoder by default, these settings will not be applied.
2014-11-17 06:47:48 -08:00
Zachary Lund ab7fa5bdb4 linux-capture: Add X border option to xcomposite
XComposite, which is currently our only capture method for windows,
doesn't handle X border width. This works in a lot of cases but anytime
there's a border, a bug occurs where the lower right is clipped.  This
patch has two goals:

1) To position and size the capture texture correctly in accordance to
the border.

2) Adds a configuration option to allow people to toggle it (which in
most cases will simply do nothing) with a default of not including it.
2014-11-09 22:17:45 -08:00
jp9000 28ac194257 text-freetype2: Fix null pointer dereference
Somehow, there were fonts with empty face names.  Regardless, it's
always important to check your pointers.  Invalid pointers spell doom.
2014-10-31 20:39:37 -07:00
Palana a21a369ec9 mac-syphon: Track inject status and retry injecting if needed
Some applications defer loading OpenGL until after they are visible as
running applications, which causes SyphonInject to not install a server
on the first try (e.g. Minecraft does this)
2014-11-01 03:07:06 +01:00
Palana dfbe7156be mac-syphon: List bundle identifier and pid in case of duplicate names 2014-11-01 03:07:06 +01:00
Palana b766faedb3 mac-syphon: Inject the best match(es) only 2014-11-01 03:07:06 +01:00
Palana 20f805a850 mac-syphon: Keep old inject settings in case of partial match
In some cases the actual application (bundle identifier) would get
overwritten with a wrapper application bundle identifier when the
application names matched (this happened with e.g., Minecraft)
2014-11-01 03:07:05 +01:00
Palana 56d220395e mac-syphon: Move release calls to helper function 2014-11-01 03:07:05 +01:00
dodgepong 17804ec12f Add latest translations from CrowdIn 2014-10-31 21:02:47 -04:00
fryshorts d9a7b9062d linux-v4l2: Update properties when devices change.
This causes the properties for v4l2 sources to be refreshed when a
device is disconnected/connected.
2014-10-29 10:18:21 -07:00
fryshorts ac40408dfa linux-v4l2: Disable properties when device is not there.
This adds helper function to disable/enable all properties which is
used in the device selected callback to enable/disable the properties
when the selected device is available/unavailable.
2014-10-29 10:18:20 -07:00
fryshorts 3a85d662be linux-v4l2: Always display currently selected device.
This adds some code to the device enumeration that checks if the
currently selected device is present. In case it is not it will
add the device but disable it.
2014-10-29 10:18:20 -07:00
fryshorts 24d1495b84 linux-v4l2: Avoid nested device open/close.
This moves the calls to the property modified functions so the old
handler can close the device. Otherwise this would cause the device
to be opened multiple times.
2014-10-29 10:17:59 -07:00
fryshorts 1945804624 linux-v4l2: Make frame counter local.
This replaces the var in the source struct that was used to print out
the number of captured frames with a local one.
2014-10-29 09:41:34 -07:00
fryshorts 45583a759a linux-v4l2: Make timestamp offset local.
This replaces the var in the source struct that are handling the
timestamp offset with a local one in the capture thread.
This change is mostly to make the code more readable.
2014-10-29 09:41:33 -07:00
fryshorts c0f6733b58 linux-v4l2: Fix select in capture thread.
This moves the enabling/resetting of the file descriptors inside the
capture loop so it is done before each select call. Why this even worked
before is unclear, but doing it the *right* way seems to reduce latency.
2014-10-29 09:41:33 -07:00
Jim b539a5304c Merge pull request #289 from Gol-D-Ace/remove-twitch-ingest-server
Remove ingest server live-ord.twitch.tv from services.json
2014-10-27 13:28:18 -07:00
Gol-D-Ace ebffa6b47c Remove ingest server live-ord.twitch.tv from services.json
Server doesn't exist anymore
https://api.twitch.tv/kraken/ingests
http://blog.twitch.tv/2014/09/service-update-chicago-point-of-presence-closure/
2014-10-27 21:00:34 +01:00
Palana 26964634d1 mac-syphon: Add "Allow Transparency" property
Transparency is now disabled by default, so that alpha values from
injected back buffers don't propagate to OBS (e.g. Minecraft doesn't
render properly in OBS unless "Allow Transparency" is disabled)
2014-10-27 01:01:14 +01:00
jp9000 d6b3230dbc linux-v4l2: Start timestamps from 0 per device
When a new device starts up, make it so that the first timestamp that
occurs starts from 0.  This prevents the internal source timestamp
handling from trying to buffer new frames to the new timestamp value in
case the device changes.
2014-10-23 11:38:59 -07:00
jp9000 40b1cc180d linux-v4l2: Add 'Use System Timing' property
Due to potential driver issues with certain devices, the timestamps are
not always reliable.  This option allows of using the time in which the
frame was received as a timestamp instead.
2014-10-23 11:38:59 -07:00
jp9000 db81c59b5e Revert "Add flag to obs_source_frame for unbuffered video"
This reverts commit c3f4b0f018.

The obs_source_frame should not need to take flags to do this.  This
shouldn't be a setting associated with the frame, but rather a setting
associated with the source itself.  This was the wrong approach to
solving this particular problem.
2014-10-23 10:15:26 -07:00
jp9000 ae0f6b5e3f Revert "linux-v4l2: Add 'unbuffered' property"
This reverts commit cd306d975a.

This removes the 'unbuffered' property for the time being.  There should
be a better way of handling this, such as using system timestamps.
Also, the obs_source_frame::flags member needs to be removed and
replaced with something a bit more ideal.
2014-10-23 10:14:32 -07:00
jp9000 cd306d975a linux-v4l2: Add 'unbuffered' property
This allows the user to select whether to use unbuffered video or not.
Unbuffered video cause the video frames to play back as soon as they're
received, rather than be buffered and attempt to play them back
according to the timestamp value of each frame.
2014-10-22 20:32:47 -07:00
jp9000 c3f4b0f018 Add flag to obs_source_frame for unbuffered video
Add 'flags' member variable to obs_source_frame structure.

The OBS_VIDEO_UNBUFFERED flags causes the video to play back as soon as
it's received (in the next frame playback), causing it to disregard the
timestamp value for the sake of video playback (however, note that the
video timestamp is still used for audio synchronization if audio is
present on the source as well).

This is partly a convenience feature, and partly a necessity for certain
plugins (such as the linux v4l plugin) where timestamp information for
the video frames can sometimes be unreliable.
2014-10-22 20:32:47 -07:00
fryshorts 3d29662084 linux-pulseaudio: Force stereo if unknown layout
This adds a check to change the capture settings to use 2 channels when
a channel number is encountered that would otherwise be interpreted as
SPEAKERS_UNKNOWN.
2014-10-18 14:47:54 -07:00
jp9000 89591843dc linux-pulseaudio: Use defaults for pa_buffer_attr
Although these values aren't used in capture mode, set these to the
default values just to be safe.
2014-10-18 14:45:05 -07:00
fryshorts d82f986ebd linux-pulseaudio: Fix the default req. buffer len
This changes the the requested buffer length to 25ms.
2014-10-18 14:44:30 -07:00
jp9000 9898060223 win-capture: Separate window finding source code
Because other capture methods may end up needing to share this code,
separate the window finding source code to window-helpers.c and
window-helpers.h.

This include a function to fill out a property list with windows, a
function to find a window based upon priority/title/class/exe, and a
function to decode the window title/class/exe strings from a window
setting string.
2014-10-17 04:15:57 -07:00
fryshorts 8a51431fdb Fix left open file descriptor in v4l2 plugin. 2014-10-15 00:13:43 +02:00
fryshorts 9a37b2ce9c Use udev events in the v4l2 plugin.
This adds code to set up the udev monitoring library and use the events
to detect connects/disconnects of devices.
When the currently used device is disconnected the plugin will stop
recording and clean up, so that the device node is freed up.
On reconnection of the device the plugin will use the event to
automatically start the capture again.
2014-10-15 00:13:43 +02:00
fryshorts 1bae57668c Add udev helper library to v4l2 plugin.
This adds a small helper library to the v4l2 plugin that uses udev to
get events for v4l2 devices.
2014-10-15 00:13:43 +02:00
Manuel Kroeber a7af7ccbfe Add monitor selection and basic properties 2014-10-14 20:45:16 +02:00
Manuel Kroeber ff2c7bd9de Fix for enum_monitors
Function enum_monitors would always stop after first found monitor due to wrong return value.
2014-10-14 20:41:56 +02:00
Manuel Kroeber fa1b9a9048 Use of text macros instead of direct obs_module_text calls 2014-10-14 20:41:05 +02:00
jp9000 e14f0fe56b win-dshow: Fix integer size conversion warnings 2014-10-11 21:18:34 -07:00
Ben Torell 958b5c12de Latest translations from Crowdin 2014-10-11 18:47:35 -04:00
Jim 8dead6a948 Merge pull request #272 from palana/syphon
Add mac-syphon plugin
2014-10-10 17:44:24 -07:00
Christoph Hohmann ed1430622b Force PulseAudio sample format if the source format is not supported by OBS
If the sample format used by PulseAudio can not be converted into an
OBS audio format it will be handled as AUDIO_FORMAT_UNKNOWN which will
not result in a proper audio recording. So instead we request a format
that OBS supports from PulseAudio and let it do the format conversion.
2014-10-08 00:05:11 +02:00
Christoph Hohmann 8166932d00 Fix PulseAudio audio format to OBS audio format mapping
The format PA_SAMPLE_S24_32LE is a 24 bit audio format in 32 bit integers
and not a 32 bit audio format and so it should no be mapped to
AUDIO_FORMAT_32BIT.
2014-10-07 21:56:32 +02:00
jp9000 4e308c955d linux-pulseaudio: Use interpolated system timing
Before it was giving timestamps based upon system time for each new
segment of audio data.  Also, it was subtracting pulse latency from the
audio timestamp, which seems like it was really meant for use with the
pulse audio time rather than system time.

Now, it just uses system time for timestamps.  Still might not be
totally perfect, but seems to be much better than it was.

This also removes the latency calculation.  Latency is no longer used
because we're not using pulseaudio timing.
2014-10-06 18:49:53 -04:00
jp9000 164f9b4517 linux-pulseaudio: Use inline for small functions 2014-10-06 18:49:53 -04:00
Palana 019a70f0d4 Add mac-syphon plugin
Allows adding Syphon servers as sources, and provides game-capture if
used with SyphonInject (specifically the scripting additions have to be
installed for SyphonInject to work from within OBS)
2014-10-04 17:26:29 +02:00
Palana 802ae79601 mac-capture: Use obs_get_default_rect_effect 2014-10-03 23:53:37 +02:00
Palana abb95781dd mac-capture: Rename display_capture::draw_effect to …::effect 2014-10-03 23:53:37 +02:00
Palana 9c4024f5b3 Implement 'update_properties' for mac-avcapture 2014-10-01 15:48:16 +02:00
Palana 94a93abb2b (API Change) Pass data to get_properties when possible 2014-10-01 15:39:57 +02:00
BtbN 599febcb54 cmake: Replace FFMpeg modules with single module
Now using components instead of one find_package call per module
2014-09-27 09:41:13 -07:00
jp9000 c9df41c1e2 (API Change) Remove pointers from all typedefs
Typedef pointers are unsafe.  If you do:
typedef struct bla *bla_t;
then you cannot use it as a constant, such as: const bla_t, because
that constant will be to the pointer itself rather than to the
underlying data.  I admit this was a fundamental mistake that must
be corrected.

All typedefs that were pointer types will now have their pointers
removed from the type itself, and the pointers will be used when they
are actually used as variables/parameters/returns instead.

This does not break ABI though, which is pretty nice.
2014-09-25 21:48:11 -07:00
jp9000 d753cee1e7 win-dshow: Update libdshowcapture to 0.3.3
Adds full support for the HD-PVR Rocket
2014-09-23 04:56:39 -07:00
jp9000 46c0dd7ffb win-dshow: Change FFmpeg MPGA decoder
Apparently MPGA is equivalent to MP2, not MP1.
2014-09-23 04:56:33 -07:00
jp9000 1ccc03308d win-dshow: Add debug macros for logging timestamps 2014-09-23 04:56:32 -07:00
Jim 34e2b77c0f Merge pull request #266 from fryshorts/v4l2-input
Fix device capabilities checking and add "Leave unchanged" option for all settings.
2014-09-22 11:53:05 -07:00
fryshorts 0132453d23 Add video format check in v4l2 input.
This adds a check whether the video format from the device is compatible
with obs. This could either happen if the "Leave unchanged" option is
selected for the video format, or if the driver simply overwrites the
requested video format.
2014-09-16 21:54:42 +02:00
fryshorts 91fc59faca Refactor source structure in v4l2 input.
Due to the refactoring of the update function the separation of data
members only to be accessed from inside/outside the capture thread is
no longer needed.
2014-09-16 21:54:42 +02:00
fryshorts 875398e9dd Refactor update function for v4l2 input.
The old implementation of this function assumed that there would be some
settings that could be changed on the fly without restarting the
capture. That was actually never used for any setting.
2014-09-16 20:46:04 +02:00
fryshorts 632642010d Minor refactoring in v4l2 input.
We don't really need to use a dstr here, simply using the
right format specifier for blog will suffice.
2014-09-16 20:35:09 +02:00
fryshorts c3783d055f Add option to leave settings unchanged in v4l2 input.
This adds an additional option for all settings to leave the current
configuration of the device unchanged.
2014-09-16 00:12:45 +02:00
fryshorts dcd395f77e Use helper function to set framerate in v4l2 input. 2014-09-16 00:11:36 +02:00
fryshorts 6c8216c6a6 Use helper function to set format in v4l2 input.
Since the helper function also needs to pack/unpack the resolution, the
pack/unpack functions were moved to the helper library and prefixed with
v4l2_ in order to avoid possible collisions.
2014-09-16 00:11:28 +02:00
fryshorts 8d95a7fb47 Use helper function to set input in v4l2 input. 2014-09-16 00:09:16 +02:00
fryshorts 0abf0f5740 Do not explicitly set a default device in v4l2 input.
This was added at a time where the source properties dialog did not
pop up automatically on source creation. Now when the properties are
displayed the first device in the select input will be selected by
default if there was none already specified by the source settings.

This will make the code cleaner and also save one redundant round of
device enumeration.
2014-09-15 23:27:43 +02:00
fryshorts 841f02be87 Fix device capability checking in v4l2 input.
The capabilities flags that were used previously describe all
capabilities the physical device offers. This would cause devices
that are accessible through multiple device nodes to show up with
all device nodes while only one of the nodes might actually offer
the needed video capture capability.

If the device has more nodes the CAP_DEVICES_CAP flag might be set
in which case the device_caps field is filled with the capabilities
that only apply to that specific node that is opened.
2014-09-15 23:27:43 +02:00
BtbN 9f8b74b720 Add disable options for optional plugins 2014-09-15 19:34:53 +02:00
jp9000 f0568f772d Update libdshowcapture to 0.3.2 2014-09-14 18:36:47 -07:00
jp9000 4e78635764 win-dshow: Use a single thread per device
This prevents certain issues I've encountered with devices where they
expect to shut down in a specific thread they started up in, as well as
a number of other issues, such as the configuration dialogs.

The configuration dialogs require that a message loop be present, and
this was not the case previously because everything was in the video
thread, which has no windows-specific code.

Configuration/crossbar/etc dialogs will now execute correctly.
2014-09-12 20:36:34 -07:00
jp9000 1291351a2a win-dshow: Properly log colorspace on format fail 2014-09-12 20:36:34 -07:00
jp9000 8bdc967ae9 win-dshow: Implement dynamic format change support
This adds support for dynamic format changes on the fly.  Format,
resolution, sample rate, can all now be changed by the current
directshow device on the fly.
2014-09-12 20:36:34 -07:00
jp9000 24ae80a481 win-dshow: Implement decoding of encoded devices 2014-09-12 20:36:33 -07:00
jp9000 2378ecdbb5 win-dshow: Clear video/audio frame data on init 2014-09-12 20:36:33 -07:00
jp9000 755f95a3a7 win-dshow: Add FFmpeg decoding support 2014-09-12 20:36:32 -07:00
jp9000 bf1fea3494 win-dshow: Allow automatic handling of source res
On an asynchronous video source, the source resolution is automatically
handled by the core, and set to the resolution of the last video data
that was sent.  There is no need to manually specify a resolution.
2014-09-12 20:36:32 -07:00
Jim 07c2d32a68 Merge pull request #261 from fryshorts/pulse-input
Use default source settings for recording in pulse input
2014-09-12 13:03:54 -07:00
jp9000 febede1fde Update libdshowcapture to 0.2.3 (Fix audio assert) 2014-09-06 14:37:52 -07:00
jp9000 4cb0c0c6f0 Update libdshowcapture to 0.2.2 (fix for HD-PVR 1) 2014-09-06 14:15:01 -07:00
jp9000 f3c47796ab Update libdshowcapture to 0.2.1 (HD-PVR 1 support) 2014-09-06 14:00:47 -07:00
jp9000 6c14dbe6ff Update libdshowcapture to 0.2.0 2014-09-06 12:45:21 -07:00
jp9000 20e005e34a win-dshow: Swap UYVY and YVYU formats
These values were erroneously using their opposing types for the source
frame format.
2014-09-04 14:02:32 -07:00
jp9000 cabc47c147 Add more null pointer checks to text source 2014-09-02 20:44:50 -07:00
jp9000 8d76f940c6 Add null pointer check for text file
Apparently there was no check for a null pointer file name.
2014-09-02 18:22:44 -07:00
fryshorts 2fca3b38e8 Log average latency in pulse input
This adds another statistics counter to the pulse plugin in order
to print the average latency reported by pulse when the source is
destroyed.
2014-09-02 19:35:17 +02:00
jp9000 02d408c730 win-dshow: Remove MPEG2 (unlikely to be used) 2014-09-01 17:09:58 -07:00
fryshorts 164c2e01b9 Small coding style fixes in pulse input 2014-08-30 21:07:03 +02:00
fryshorts de3c7cafcc Simplify logging in pulse input
Use a macro to prefix debugging messages instead of prepending manually.
2014-08-30 21:07:03 +02:00
fryshorts b6482d8995 Use source instead of server info to get format for recording in pulse input
When setting up the capture, the plugin will now query pulse for the default
format of the specific source instead of the server.
This is useful if a source has different settings than what the defaults are
for the server, e.g. when the source is an output with 5.1 surround sound
and the microphone input is mono while the server defaults to stereo sound.
2014-08-30 21:07:03 +02:00
fryshorts bbc62f2602 Add function to get info on a specific source to pulse wrapper 2014-08-30 21:07:03 +02:00
Zachary Lund 0f228e6ee5 No need to subtract window position from translated coordinates 2014-08-30 13:09:00 -05:00
jp9000 66e8674100 linux-capture: Add cursor capture to xcomposite 2014-08-29 17:20:26 -07:00
jp9000 0102896328 linux-capture: Add x/y cursor position vars 2014-08-29 17:20:26 -07:00
jp9000 378e910ad3 linux-capture: Rename pos_* vars to render_*
the pos_x and pos_y variables were somewhat deceptive, because they were
not actually the poition of the cursor.  They represented the position
of the cursor's bitmap on the screen, not the position of the cursor.
2014-08-29 17:20:26 -07:00
jp9000 15fb027647 Combine linux-xcomposite and linux-capture (xshm) 2014-08-29 17:20:02 -07:00
jp9000 a9cd60a78f Rename linux-xshm module to linux-capture 2014-08-29 17:19:30 -07:00
jp9000 f50aa5e01b win-dshow: Add audio support
This implements audio support, allowing not only the ability to capture
the built-in audio from the video device's audio capture pin, but also
the ability to override the default audio with a custom audio device.

The DShowInput::Update function was split up and refactored a bit, as it
was getting a bit large and messy.
2014-08-28 18:34:36 -07:00
Jim 3539932d86 Merge pull request #260 from fryshorts/pulse-input
Handle audio channels correctly in pulseaudio plugin
2014-08-28 12:10:24 -07:00
fryshorts 964d6eb3db Handle audio channels correctly in pulseaudio plugin
This fixes a bug where the pulseaudio plugin always reported
a speaker layout of stereo to obs, regardless of how many channels
pulseaudio actually recorded.
If the default number of channels was different to 2 this would
cause audio distortion.
2014-08-28 20:23:28 +02:00
jp9000 1a5989a52b Update win-dshow to latest libdshowcapture ver
This makes win-dshow use the new std::function callbacks instead of the
old C-style callbacks.
2014-08-28 11:06:54 -07:00
jp9000 8ef8f52ff7 win-dshow: Change a few functions to static/inline 2014-08-28 10:09:53 -07:00
jp9000 e33d567abe text-freetype2: Do not use fontconfig for mac
Originally, I tested the fontconfig code on mac and it was working
swimmingly.  However, it seems to be related to the fact that I am using
the ports/homebrew version of fontconfig.  Most users do not have that
version, and instead use the system built-in version of fontconfig,
which apparently does not find any mac fonts..  at all.  So, this
reverts the mac code to the older mac code we were using to manually
find and associate fonts with font files on the mac.
2014-08-26 12:43:33 -07:00
jp9000 53b0d9d16f text-freetype2: Split find-font-windows.c
This moves font-finding code that can be shared to find-font.c.
2014-08-26 12:41:18 -07:00