Commit Graph

222 Commits (f3104d92d52a2ff7bc2ac5cb886ac69232dab95e)

Author SHA1 Message Date
jp9000 9832a760b8 (API Change) Always use planar float audio output
Core API functions changed:
-----------------------------
EXPORT bool obs_reset_audio(struct audio_output_info *aoi);
EXPORT bool obs_get_audio_info(struct audio_output_info *aoi);

To:
-----------------------------
EXPORT bool obs_reset_audio(const struct obs_audio_info *oai);
EXPORT bool obs_get_audio_info(struct obs_audio_info *oai);

Core structure added:
-----------------------------
struct obs_audio_info {
	uint32_t            samples_per_sec;
	enum speaker_layout speakers;
	uint64_t            buffer_ms;
};

Non-interleaved (planar) floating point output is standard with audio
filtering, so to prevent audio filters from having to worry about
different audio format implementations and for the sake consistency
between user interfaces, make it so that audio is always set to
non-interleaved floating point output.
2015-03-12 22:22:02 -07:00
Socapex 6a16778bc9 UI: Implement theme selection option
OBS will offer the user a list of themes which are .qss files inside
data/obs-studio/themes.  If no theme is found in the configuration, it
loads the default theme for the system.
2015-03-12 09:27:18 -07:00
jp9000 5faa5157c5 UI: Change default retry delay to ten seconds
Two seconds is a bit low apparently, and some services don't seem to
like it.
2015-03-07 10:10:41 -08:00
Socapex baa1890ed6 UI: Save position and size of main window
Resolves bug tracker issue #0000143

Closes Pull Request #396
2015-03-06 08:54:31 -08:00
jp9000 f4704cf4a8 UI: Use 'reorder' signal for scene item reordering
The old signals for for reordering have been removed; the new signal to
use is the 'reorder' signal, which means that the list needs to be
refreshed.
2015-03-05 02:28:17 -08:00
Caleb Anderson c3e382c8f7 UI: View Log menu entry in Help -> Log Files menu
Since the file being logged to changes with each run, opening a log
file is a tad more involved than desirable when it's necessary to view
the log each time OBS is run. This new menu entry shortcuts opening the
file from the file system manually.
2015-02-24 01:44:37 -07:00
Socapex 86d4ee68e6 UI: Do not save the project if null
If the jsonData string is null, then there's nothing that should be
written.

Closes pull request #366 from Socapex/debugcrash
2015-02-14 12:19:41 -08:00
fryshorts 90ccae6f4c UI: Ensure only one advanced audio settings window
Add a check to prevent that the advanced audio settings dialog is only
once. When the dialog is already present raise it to the top instead.
2015-02-13 13:11:15 +01:00
jp9000 c2832b8b1c UI: Add "enforce streaming service settings"
Add a checkbox named "Enforce streaming service encoder settings"
checkbox to advanced output.  Disabling this checkbox allows the user to
optionally disable the enforcement of streaming service encoder
settings.  I had a user complain that they didn't want to always have
the service's preferred encoder settings forced on them.
2015-02-10 22:10:40 -08:00
jp9000 b72e68afe7 (API Change) Fix obs_service_gettype func name
Before:                After:
obs_service_gettype    obs_service_get_type

It seems there was an API function that was missed when we were doing
our big API consistency update.  Unsquishes obs_service_gettype to
obs_service_get_type.
2015-02-07 08:19:34 -08:00
jp9000 69c6714090 UI: Make service settings use OK/Apply/Cancel
Currently service settings are updated in real time via the properties
view, which means that OK/Cancel/Apply have no effect.  This fixes that
by using the new type of properties view that operates only on settings
data, not an object.
2015-02-07 08:11:46 -08:00
jp9000 17c342bf61 UI: If active, prompt user before exiting
Precautionary measure to prevent the user from accidentally clicking the
'exit' buttons
2015-02-07 03:39:16 -08:00
jp9000 a3e47e53bf UI: Add button for adv. audio properties
Add a button to the main window to access advanced audio properties to
make it a bit more visible to users.

To facilitate this, the bottom part of the window was switched to a grid
layout.
2015-02-07 02:43:37 -08:00
jp9000 8b2614ddc2 UI: Add advanced output settings
Adds an 'advanced' mode to the output settings to allow more powerful
and complex streaming and recording options:

- Optionally use a different encoder for recording than for streaming to
  allow the recording to use a different encoder or encoder settings if
  desired (though at the cost if increased CPU usage depending on the
  encoders being used)

- Use encoders other than x264

- Rescale the recording or streaming encoders in case the user wishes to
  stream and record at different resolutions

- Select the specific mixer to use for recording and for streaming,
  allowing the stream and recording to use separate mixers (to for
  example allow a user to stream the game/mic audio but only record the
  game audio)

- Use FFmpeg output for the recording button instead of only recording
  h264/aac to FLV, allowing the user to output to various different
  types of file formats or remote URLs, as well as allowing the user to
  select and use different encoders and encoder settings that are
  available in the FFmpeg library

- Optionally allow the use of multiple audio tracks in a single output
  if the file formats or stream services support it
2015-02-06 11:55:48 -08:00
jp9000 a2373b1258 UI: Add buffer size to 'simple' settings 2015-02-06 03:56:19 -08:00
jp9000 07007bcc6e UI: Refactor output handling
To accommodate multiple types of outputs, there has to be some level of
abstraction.  The BasicOutputHandler structure will give us a way that
we can switch between different output configurations.
2015-02-06 03:17:33 -08:00
jp9000 84e1f47ced (API Change) Add support for multiple audio mixers
API changed:
--------------------------

void obs_output_set_audio_encoder(
		obs_output_t *output,
		obs_encoder_t *encoder);

obs_encoder_t *obs_output_get_audio_encoder(
		const obs_output_t *output);

obs_encoder_t *obs_audio_encoder_create(
		const char *id,
		const char *name,
		obs_data_t *settings);

Changed to:
--------------------------

/* 'idx' specifies the track index of the output */
void obs_output_set_audio_encoder(
		obs_output_t *output,
		obs_encoder_t *encoder,
		size_t idx);

/* 'idx' specifies the track index of the output */
obs_encoder_t *obs_output_get_audio_encoder(
		const obs_output_t *output,
		size_t idx);

/* 'mixer_idx' specifies the mixer index to capture audio from */
obs_encoder_t *obs_audio_encoder_create(
		const char *id,
		const char *name,
		obs_data_t *settings,
		size_t mixer_idx);

Overview
--------------------------
This feature allows multiple audio mixers to be used at a time.  This
capability was able to be added with surprisingly very little extra
overhead.  Audio will not be mixed unless it's assigned to a specific
mixer, and mixers will not mix unless they have an active mix
connection.

Mostly this will be useful for being able to separate out specific audio
for recording versus streaming, but will also be useful for certain
streaming services that support multiple audio streams via RTMP.

I didn't want to use a variable amount of mixers due to the desire to
reduce heap allocations, so currently I set the limit to 4 simultaneous
mixers; this number can be increased later if needed, but honestly I
feel like it's just the right number to use.

Sources:

Sources can now specify which audio mixers their audio is mixed to; this
can be a single mixer or multiple mixers at a time.  The
obs_source_set_audio_mixers function sets the audio mixer which an audio
source applies to.  For example, 0xF would mean that the source applies
to all four mixers.

Audio Encoders:

Audio encoders now must specify which specific audio mixer they use when
they encode audio data.

Outputs:

Outputs that use encoders can now support multiple audio tracks at once
if they have the OBS_OUTPUT_MULTI_TRACK capability flag set.  This is
mostly only useful for certain types of RTMP transmissions, though may
be useful for file formats that support multiple audio tracks as well
later on.
2015-02-04 16:51:29 -08:00
HomeWorld 0fea987ed4 UI: Apply a style sheet using path
This allows the usage of other resources in the style sheet, like
icons/etc, relative to the style sheet location.  For example, to change
the main window app icon, add #OBSBasic { qproperty-windowIcon:
url("basic/newicon.png") } in the style sheet, where "basic/newicon.png"
is a path relative to the qss file location.
2015-01-26 11:48:32 -08:00
HomeWorld 5b641d87fb UI: Fix missing widget parent from constructor
The styling isn't applied if the widget doesn't have a parent
2015-01-16 11:21:11 +02:00
Blackhive 9b3c204707 UI: Enable load of stylesheet.qss from config dir
This will allow obs to load stylesheet.qss (Qt stylesheet). It enables
users to theme obs how they please within Qt stylesheet guidelines. A
default stylesheet is not yet available.
2015-01-16 00:28:25 -08:00
jp9000 82320a9ca7 (API Change) Make os_get_config_path safer to use
Changed:
  char *os_get_config_path(const char *name);

To:
  int os_get_config_path(char *dst, size_t size, const char *name);

Also added:
  char *os_get_config_path_ptr(const char *name);

I don't like this function returning an allocation by default.
Similarly to what was done with the wide character conversion functions,
this function now operates on an array argument, and if you really want
to just get a pointer for convenience, you use the *_ptr version of the
function that clearly indicates that it's returning an allocation.
2015-01-15 23:44:38 -08:00
Weikardzaena 2152b40e68 UI: Add Okay/Cancel Buttons to Properties Dialog
Use QDialogButtonBox to add "Okay" and "Cancel" buttons to the
properties dialog. The core functionality of the dialog is not changed;
I.E. the settings are still applied to the source as the user changes
them. If the user clicks "Okay", the dialog simply exits. If the user
clicks "Cancel", the original settings are reapplied to the source then
the dialog exits. If the window is closed by any other means (I.E. by
the main obs window closing) then the properties dialog prompts the user
if they changed anything and asks if they wish to save their settings.

In order to implement this last feature, a method of checking for open
dialogs and sending each a quit message is added to the closeEvent()
method for OBSBasic.
2015-01-15 21:49:03 -08:00
Carl Fürstenberg 6095e7ef51 Add SOVERSION to libobs-opengl
Because libobs-opengl is a public library, it's customary to have SONAME
embedded in the library file.  Also remove the prefix override and
remove the prefixing "lib" from the output name.  This also requires us
to pass the library file name to dlopen invocations.
2015-01-13 17:51:38 -08:00
jp9000 f58ca29484 UI: Use config file for color format/space/range
Allows the color format, color space, and color range to be set by the
user.  This will need user interface for in the future, though it'll
have to be an advanced setting that's hidden from the user by default
because I don't feel comfortable exposing this to a typical user.
2015-01-10 18:35:58 -08:00
jp9000 e8002dc9ed UI: Save at regular intervals
Save the file when "start recording" or "start streaming" is clicked,
and also save at every 20 second interval
2015-01-05 02:45:40 -08:00
jp9000 0332cdce1c UI: Remove some trailing whitespace 2015-01-05 02:45:39 -08:00
jp9000 ebc2d4ab11 UI: Implement SaveProject function 2015-01-05 02:45:39 -08:00
jp9000 6fc52dfb16 UI: Add advanced audio properties dialog
This dialog gives options such as increasing audio past 100%, forcing
the audio of a source to mono, and setting the audio sync offset of a
source (which was an oft-requested feature)
2014-12-28 01:51:56 -08:00
fryshorts ca8ac4e809 obs: Refactor network requests.
Remove unneeded class members for request and buffer handling.
Let Qt do all the hard work here, keeping track of requests and
associated data.
2014-12-25 14:53:09 +01:00
jp9000 640967b997 UI: Add video scale filters to basic settings 2014-12-15 01:55:19 -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
Palana ce782b44b7 Fix Qt unregistered datatype messages 2014-10-29 16:06:18 +01:00
Palana 6dcdaab2be Register OBSSource as Qt metatype 2014-10-29 16:06:18 +01:00
Palana 1e41dab7b5 Open source properties on double click 2014-10-19 19:16:04 +02:00
Palana eadea9a7e5 Disable double click renaming for both scenes and sources 2014-10-19 19:16:04 +02:00
Palana 9465a8c437 Add "Rename" entry to scenes context menu 2014-10-19 19:16:04 +02:00
Palana 55d2af0e60 Fix "Remove" shortcut (Del) to work for both scenes and sources 2014-10-19 19:16:04 +02:00
Palana 523baef7f5 Add "Remove" shortcut to scenes context menu 2014-10-19 19:16:04 +02:00
Palana 2e290b8493 Fix sources context menu "Remove" shortcut for OSX 2014-10-19 19:16:04 +02:00
Palana a88700540e Ignore source deselection until multiple selection is implemented 2014-10-15 02:00:39 +02:00
Palana 1df9bcfa49 Log warning when falling back to OpenGL on windows 2014-10-14 18:08:30 +02:00
Palana cf3ca1d5fc Propagate preview window selection to sources list 2014-10-13 22:16:32 +02:00
Palana 444a080218 Do not display name exists dialog if source name does not change 2014-10-13 18:36:30 +02:00
Palana c9ee436e1c Add UI for remuxing recordings via FFmpeg 2014-10-12 19:56:52 +02:00
Palana e7cfd58e9e Add option to use Sparkle for updates
OBS Sparkle feeds have two extensions to vanilla Sparkle feeds:
- There can be two kinds of items per feed: (zipped) .app and .mpkg
  via <ce:packageType>app|mpkg</ce:packageType> (default is mpkg)
- Feed items can be disabled via <ce:deployed>false</ce:deployed>; these
  items will not be considered for updates unless
  "[General] UpdateToUndeployed=1" is set the global config

Unlike other Sparkle implementations the FeedURL cannot be updated via user
preferences because we support multiple app packages with the same package
identifier but different FeedURL settings on the same machine
2014-10-11 22:17:18 +02: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 4a06960188 Basic UI: Add "Use Constant Bitrate" advanced option.
It's better to use VBR for local recordings, so this option should be
nice for people who want to do that.
2014-09-24 21:22:50 -07:00
John Bradley 4221134748 Add interaction gui 2014-09-15 18:29:26 -05:00
John Bradley 3f993e40df Add helper function to get specific scene item 2014-09-15 18:19:39 -05:00
BtbN 05af461282 Fix path to modules in AppData 2014-09-04 14:03:46 -07:00