This refactors the sub-window code a bit so that instead of deleting the
window pointers, it calls QWidget::close() on them to safely trigger a
normal close on them instead (which will also delete them).
Moves setting the DeleteOnClose flag from inside of the Dialog classes
into the OBSBasic class, to make that behaviour more obvious.
This causes the main window to signal the application to exit and delete
its own pointer on close. This fixes an issue where apparently some
windows that aren't explicitly connected to the main window would be
left open when the main window was closed because by default Qt will
only exit when all windows have been closed.
Because it deletes its own pointer, instead of storing it in a
std::unique_ptr, use a QPointer because it has an internal mechanism for
automatically tracking QObject deletion even if the deletion was not
done on the QPointer itself, where as unique_ptr does not have that
functionality. In other words, if the pointer is deleted elsewhere for
whatever reason, the QPointer will still set that internal pointer value
to null.
(message and minor modificiations by Jim)
Changed API functions:
libobs: obs_reset_video
Before, video initialization returned a boolean, but "failed" is too
little information, if it fails due to lack of device capabilities or
bad video device parameters, the front-end needs to know that.
The OBS Basic UI has also been updated to reflect this API change.
Stuff like automake stuff is no longer used, as well as a number of
other files that are no longer in use.
Also fixed cmbuild/ and build/ to /cmbuild/ and /build/ to emphasize
that they're fot root-level. Not that they'll ever be used recursively,
but still.
This can make it a bit easier to set up 32bit/64bit environments
separately on windows. This simply allows you to additionally set
FFmpegPath32, FFmpegPath64, x264Path32, x264Path64, etc.
If the cmake user variable COPY_DEPENDENCIES is set, this script will
make it so that a windows build will automatically copy all required
dependencies (FFmpeg, x264, and Qt5) to the respective
additional_install_files\exec(32|64) directory. This makes it much
easier to set up a development environment on windows, and much easier
to make usable test builds.
It will also copy the appropriate Direct3D compiler DLL, along with
dependencies of dependencies (the icu*.dll and EGL/GLES files for Qt)
There's no need to find DirectX because with VS2013 and mingw it's
already available by default. Older visual studio versions that didn't
come with DirectX by default are no longer supported anyway.
(Also mingw doesn't currently work at all due to lack of proper headers,
but once they do it'll be available in the same way. I think.)
There's no need to initialize the map value to 0. What was happening is
that obs_scene_add was adding a ref to a non-existent value, which
simply created it and added 1, which is perfectly fine. Then,
obs_add_source would set the ref to 0, overwriting the existing value.
So this meant that if you didn't call them in the right order, it
wouldn't work properly, and would break, which was pretty stupid.
Turns out that if you access a map value that doesn't exist, it'll
create one with the default constructor of that type. In this case, int
will initialize to 0, which was exactly what we wanted in the first
place, and defeats the purpose of even needing to initialize the value
to 0. So, there's no need to manually set it to 0 in
OBSBasic::SourceAdded, or worry about the order in which the functions
are called.
Just goes to show you have to be careful with reference counting.
Until a proper fix is found to support devices that use stepwise
or continuous values for framesize and framerate this adds fixed
values that can be selected.
For devices that support discrete values those are still queried
and used.