Overview
Request 5044 (accepted)
- Update to version 25.0.2:
* linux-v4l2: readonly controls cause infinite loop
* libobs: Update version to 25.0.2 (linux hotfix)
* UI: Set correct window title for fullscreen projector
* CI: Update Linux CI from Ubuntu 16.04 to 18.04
* UI: Make links in updater clickable
* obs-filters: Fix LUT file extension filter on Linux
* win-wasapi: Fix leaking IPropertyStore
* win-wasapi: Fix crash on certain devices
* obs-qsv11: Fix target usage values
* UI: Fix crash on settings update
* libobs: Add move assignment operator for BPtr
* libobs: Fix missing assignment operator return
* libobs: Fix size mismatch warning
* libobs: Handle noexcept warnings
* UI: Make Importer destructor virtual
* UI: Add setting for Mixer add-on choice
* linux-capture: Use RandR monitors for screen information
- Created by boombatower about 5 years ago
- In state accepted
-
Package maintainers:
boombatower,
darix, and
frispete
obs-studio.changes
Changed
-------------------------------------------------------------------
+Mon Mar 23 16:10:08 UTC 2020 - jimmy@boombatower.com
+
+- Update to version 25.0.2:
+ * linux-v4l2: readonly controls cause infinite loop
+ * libobs: Update version to 25.0.2 (linux hotfix)
+ * UI: Set correct window title for fullscreen projector
+ * CI: Update Linux CI from Ubuntu 16.04 to 18.04
+ * UI: Make links in updater clickable
+ * obs-filters: Fix LUT file extension filter on Linux
+ * win-wasapi: Fix leaking IPropertyStore
+ * win-wasapi: Fix crash on certain devices
+ * obs-qsv11: Fix target usage values
+ * UI: Fix crash on settings update
+ * libobs: Add move assignment operator for BPtr
+ * libobs: Fix missing assignment operator return
+ * libobs: Fix size mismatch warning
+ * libobs: Handle noexcept warnings
+ * UI: Make Importer destructor virtual
+ * UI: Add setting for Mixer add-on choice
+ * linux-capture: Use RandR monitors for screen information
+
+-------------------------------------------------------------------
Thu Mar 19 19:26:37 UTC 2020 - jimmy@boombatower.com
- Update to version 25.0.1:
obs-studio.spec
Changed
Name: obs-studio
-Version: 25.0.1
+Version: 25.0.2
Release: 0
Summary: A recording/broadcasting program
Group: Productivity/Multimedia/Video/Editors and Convertors
_service
Changed
<services>
<service name="tar_scm" mode="disabled">
<param name="versionformat">@PARENT_TAG@</param>
- <param name="revision">refs/tags/25.0.1</param>
+ <param name="revision">refs/tags/25.0.2</param>
<param name="url">git://github.com/jp9000/obs-studio.git</param>
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
_servicedata
Changed
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/jp9000/obs-studio.git</param>
- <param name="changesrevision">b19ea6fe3516a7a8bdf44f50bb95a36f4681330d</param>
+ <param name="changesrevision">a0e8adbc42df198f95c3778335e4a883e0c2fd09</param>
</service>
</servicedata>
obs-studio-25.0.1.tar.xz/UI/auth-mixer.cpp -> obs-studio-25.0.2.tar.xz/UI/auth-mixer.cpp
Changed
return OAuthStreamKey::LoadInternal();
}
+static const char *elixr_script = "\
+var elixr = document.createElement('script');\
+elixr.setAttribute('src','https://api.mixrelixr.com/scripts/elixr-emotes-embedded-chat.bundle.js');\
+document.head.appendChild(elixr);";
+
void MixerAuth::LoadUI()
{
if (!cef)
OBSBasic::InitBrowserPanelSafeBlock();
OBSBasic *main = OBSBasic::Get();
+ std::string script = "";
std::string url;
url += "https://mixer.com/embed/chat/";
url += id;
QCefWidget *browser = cef->create_widget(nullptr, url, panel_cookies);
chat->SetWidget(browser);
+ const int mxAddonChoice =
+ config_get_int(main->Config(), service(), "AddonChoice");
+ if (mxAddonChoice) {
+ if (mxAddonChoice & 0x1)
+ script += elixr_script;
+ }
+
+ browser->setStartupScript(script);
+
main->addDockWidget(Qt::RightDockWidgetArea, chat.data());
chatMenu.reset(main->AddDockWidget(chat.data()));
obs-studio-25.0.1.tar.xz/UI/data/locale/en-US.ini -> obs-studio-25.0.2.tar.xz/UI/data/locale/en-US.ini
Changed
Basic.Settings.Stream.TTVAddon.BTTV="BetterTTV"
Basic.Settings.Stream.TTVAddon.FFZ="FrankerFaceZ"
Basic.Settings.Stream.TTVAddon.Both="BetterTTV and FrankerFaceZ"
+Basic.Settings.Stream.MixerAddon="Mixer Chat Add-Ons"
+Basic.Settings.Stream.MixerAddon.None="None"
+Basic.Settings.Stream.MixerAddon.MEE="MixrElixr Emotes"
Basic.Settings.Stream.MissingSettingAlert="Missing Stream Setup"
Basic.Settings.Stream.StreamSettingsWarning="Open Settings"
Basic.Settings.Stream.MissingUrlAndApiKey="URL and Stream Key are missing.\n\nOpen settings to enter the URL and Stream Key in the 'stream' tab."
obs-studio-25.0.1.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-25.0.2.tar.xz/UI/forms/OBSBasicSettings.ui
Changed
<rect>
<x>0</x>
<y>0</y>
- <width>806</width>
- <height>1254</height>
+ <width>803</width>
+ <height>1026</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_19">
</property>
</widget>
</item>
- <item row="8" column="0">
+ <item row="9" column="0">
<widget class="QLabel" name="authUsernameLabel">
<property name="text">
<string>Basic.Settings.Stream.Custom.Username</string>
</property>
</widget>
</item>
- <item row="8" column="1">
+ <item row="9" column="1">
<widget class="QLineEdit" name="authUsername"/>
</item>
- <item row="9" column="0">
+ <item row="10" column="0">
<widget class="QLabel" name="authPwLabel">
<property name="text">
<string>Basic.Settings.Stream.Custom.Password</string>
</property>
</widget>
</item>
- <item row="9" column="1">
+ <item row="10" column="1">
<widget class="QWidget" name="authPwWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_25">
<property name="leftMargin">
</property>
</widget>
</item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="mixerAddonLabel">
+ <property name="text">
+ <string>Basic.Settings.Stream.MixerAddon</string>
+ </property>
+ <property name="buddy">
+ <cstring>mixerAddonDropdown</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QComboBox" name="mixerAddonDropdown"/>
+ </item>
</layout>
</widget>
</widget>
<rect>
<x>0</x>
<y>0</y>
- <width>813</width>
- <height>761</height>
+ <width>603</width>
+ <height>631</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_21">
<rect>
<x>0</x>
<y>0</y>
- <width>767</width>
- <height>582</height>
+ <width>555</width>
+ <height>469</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_50">
<rect>
<x>0</x>
<y>0</y>
- <width>791</width>
- <height>970</height>
+ <width>596</width>
+ <height>781</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_23">
obs-studio-25.0.1.tar.xz/UI/forms/OBSUpdate.ui -> obs-studio-25.0.2.tar.xz/UI/forms/OBSUpdate.ui
Changed
</widget>
</item>
<item>
- <widget class="QTextEdit" name="text">
+ <widget class="QTextBrowser" name="text">
<property name="readOnly">
<bool>true</bool>
</property>
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p></body></html></string>
</property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
</widget>
</item>
<item>
obs-studio-25.0.1.tar.xz/UI/importers/importers.hpp -> obs-studio-25.0.2.tar.xz/UI/importers/importers.hpp
Changed
class Importer {
public:
+ virtual ~Importer() {}
virtual std::string Prog() { return "Null"; };
virtual int ImportScenes(const std::string &path, std::string &name,
json11::Json &res) = 0;
obs-studio-25.0.1.tar.xz/UI/window-basic-settings-stream.cpp -> obs-studio-25.0.2.tar.xz/UI/window-basic-settings-stream.cpp
Changed
ui->bandwidthTestEnable->setVisible(false);
ui->twitchAddonDropdown->setVisible(false);
ui->twitchAddonLabel->setVisible(false);
+ ui->mixerAddonDropdown->setVisible(false);
+ ui->mixerAddonLabel->setVisible(false);
int vertSpacing = ui->topStreamLayout->verticalSpacing();
ui->twitchAddonDropdown->addItem(
QTStr("Basic.Settings.Stream.TTVAddon.Both"));
+ ui->mixerAddonDropdown->addItem(
+ QTStr("Basic.Settings.Stream.MixerAddon.None"));
+ ui->mixerAddonDropdown->addItem(
+ QTStr("Basic.Settings.Stream.MixerAddon.MEE"));
+
connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
SLOT(UpdateServerList()));
connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
idx = config_get_int(main->Config(), "Twitch", "AddonChoice");
ui->twitchAddonDropdown->setCurrentIndex(idx);
+
+ idx = config_get_int(main->Config(), "Mixer", "AddonChoice");
+ ui->mixerAddonDropdown->setCurrentIndex(idx);
}
UpdateServerList();
if (choiceExists && currentChoice != newChoice)
forceAuthReload = true;
}
+ if (!!auth && strcmp(auth->service(), "Mixer") == 0) {
+ bool choiceExists = config_has_user_value(
+ main->Config(), "Mixer", "AddonChoice");
+ int currentChoice =
+ config_get_int(main->Config(), "Mixer", "AddonChoice");
+ int newChoice = ui->mixerAddonDropdown->currentIndex();
+
+ config_set_int(main->Config(), "Mixer", "AddonChoice",
+ newChoice);
+
+ if (choiceExists && currentChoice != newChoice)
+ forceAuthReload = true;
+ }
obs_data_set_string(settings, "key", QT_TO_UTF8(ui->key->text()));
ui->bandwidthTestEnable->setVisible(false);
ui->twitchAddonDropdown->setVisible(false);
ui->twitchAddonLabel->setVisible(false);
+ ui->mixerAddonDropdown->setVisible(false);
+ ui->mixerAddonLabel->setVisible(false);
#ifdef BROWSER_AVAILABLE
if (cef) {
ui->twitchAddonLabel->setVisible(true);
ui->twitchAddonDropdown->setVisible(true);
}
+ if (strcmp(a->service(), "Mixer") == 0) {
+ ui->mixerAddonLabel->setVisible(true);
+ ui->mixerAddonDropdown->setVisible(true);
+ }
}
ui->streamStackWidget->setCurrentIndex((int)Section::StreamKey);
obs-studio-25.0.1.tar.xz/UI/window-basic-settings.cpp -> obs-studio-25.0.2.tar.xz/UI/window-basic-settings.cpp
Changed
HookWidget(ui->key, EDIT_CHANGED, STREAM1_CHANGED);
HookWidget(ui->bandwidthTestEnable, CHECK_CHANGED, STREAM1_CHANGED);
HookWidget(ui->twitchAddonDropdown, COMBO_CHANGED, STREAM1_CHANGED);
+ HookWidget(ui->mixerAddonDropdown, COMBO_CHANGED, STREAM1_CHANGED);
HookWidget(ui->useAuth, CHECK_CHANGED, STREAM1_CHANGED);
HookWidget(ui->authUsername, EDIT_CHANGED, STREAM1_CHANGED);
HookWidget(ui->authPw, EDIT_CHANGED, STREAM1_CHANGED);
bool audioRestart = (ui->channelSetup->currentIndex() != channelIndex ||
ui->sampleRate->currentIndex() != sampleRateIndex);
bool browserHWAccelChanged =
- (ui->browserHWAccel->isChecked() != prevBrowserAccel);
+ (ui->browserHWAccel &&
+ ui->browserHWAccel->isChecked() != prevBrowserAccel);
if (langChanged || audioRestart || browserHWAccelChanged)
restart = true;
obs-studio-25.0.1.tar.xz/UI/window-projector.cpp -> obs-studio-25.0.2.tar.xz/UI/window-projector.cpp
Changed
type = type_;
setWindowIcon(QIcon::fromTheme("obs", QIcon(":/res/images/obs.png")));
- UpdateProjectorTitle(QT_UTF8(obs_source_get_name(source)));
if (monitor == -1)
resize(480, 270);
else
SetMonitor(monitor);
+ UpdateProjectorTitle(QT_UTF8(obs_source_get_name(source)));
+
QAction *action = new QAction(this);
action->setShortcut(Qt::Key_Escape);
addAction(action);
obs-studio-25.0.1.tar.xz/azure-pipelines.yml -> obs-studio-25.0.2.tar.xz/azure-pipelines.yml
Changed
jobs:
- job: Prebuild
pool:
- vmImage: 'ubuntu-16.04'
+ vmImage: 'ubuntu-18.04'
steps:
- bash: |
if curl -s "https://api.github.com/repos/$BUILD_REPOSITORY_ID/issues/$SYSTEM_PULLREQUEST_PULLREQUESTNUMBER/labels" | grep '"name": "Seeking Testers"'
variables:
prHasCILabel: $[ dependencies.Prebuild.outputs['checkPrLabel.prHasCILabel'] ]
pool:
- vmImage: 'ubuntu-16.04'
+ vmImage: 'ubuntu-18.04'
steps:
- script: git submodule update --init --recursive
displayName: 'Checkout Submodules'
obs-studio-25.0.1.tar.xz/libobs/obs-config.h -> obs-studio-25.0.2.tar.xz/libobs/obs-config.h
Changed
*
* Reset to zero each major or minor version
*/
-#define LIBOBS_API_PATCH_VER 1
+#define LIBOBS_API_PATCH_VER 2
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
((major << 24) | (minor << 16) | patch)
obs-studio-25.0.1.tar.xz/libobs/obs-source.c -> obs-studio-25.0.2.tar.xz/libobs/obs-source.c
Changed
const struct obs_source_frame *src,
uint32_t plane, uint32_t lines)
{
- if (dst->linesize[plane] != src->linesize[plane])
+ if (dst->linesize[plane] != src->linesize[plane]) {
for (uint32_t y = 0; y < lines; y++)
copy_frame_data_line(dst, src, plane, y);
- else
+ } else {
memcpy(dst->data[plane], src->data[plane],
- dst->linesize[plane] * lines);
+ (size_t)dst->linesize[plane] * (size_t)lines);
+ }
}
static void copy_frame_data(struct obs_source_frame *dst,
obs-studio-25.0.1.tar.xz/libobs/obs.hpp -> obs-studio-25.0.2.tar.xz/libobs/obs.hpp
Changed
}
OBSSignal(const OBSSignal &) = delete;
- OBSSignal(OBSSignal &&other)
+ OBSSignal(OBSSignal &&other) noexcept
: handler(other.handler),
signal(other.signal),
callback(other.callback),
}
OBSSignal &operator=(const OBSSignal &) = delete;
- OBSSignal &operator=(OBSSignal &&other)
+ OBSSignal &operator=(OBSSignal &&other) noexcept
{
Disconnect();
obs-studio-25.0.1.tar.xz/libobs/util/util.hpp -> obs-studio-25.0.2.tar.xz/libobs/util/util.hpp
Changed
#include <string.h>
#include <stdarg.h>
+#include <utility>
#include "bmem.h"
#include "config-file.h"
public:
inline BPtr(T *p = nullptr) : ptr(p) {}
- inline BPtr(BPtr &&other) : ptr(other.ptr) { other.ptr = nullptr; }
+ inline BPtr(BPtr &&other) { *this = std::move(other); }
inline ~BPtr() { bfree(ptr); }
inline T *operator=(T *p)
ptr = p;
return p;
}
+
+ inline BPtr &operator=(BPtr &&other)
+ {
+ ptr = other.ptr;
+ other.ptr = nullptr;
+ return *this;
+ }
+
inline operator T *() { return ptr; }
inline T **operator&()
{
public:
inline ConfigFile() : config(NULL) {}
- inline ConfigFile(ConfigFile &&other) : config(other.config)
+ inline ConfigFile(ConfigFile &&other) noexcept : config(other.config)
{
other.config = nullptr;
}
public:
inline TextLookup(lookup_t *lookup = nullptr) : lookup(lookup) {}
- inline TextLookup(TextLookup &&other) : lookup(other.lookup)
+ inline TextLookup(TextLookup &&other) noexcept : lookup(other.lookup)
{
other.lookup = nullptr;
}
obs-studio-25.0.1.tar.xz/libobs/util/windows/CoTaskMemPtr.hpp -> obs-studio-25.0.2.tar.xz/libobs/util/windows/CoTaskMemPtr.hpp
Changed
{
Clear();
ptr = val;
+ return *this;
}
inline T **operator&()
obs-studio-25.0.1.tar.xz/plugins/linux-capture/xhelpers.c -> obs-studio-25.0.2.tar.xz/plugins/linux-capture/xhelpers.c
Changed
return true;
}
+static bool randr_has_monitors(xcb_connection_t *xcb)
+{
+ xcb_randr_query_version_cookie_t ver_c;
+ xcb_randr_query_version_reply_t *ver_r;
+
+ ver_c = xcb_randr_query_version(xcb, XCB_RANDR_MAJOR_VERSION,
+ XCB_RANDR_MINOR_VERSION);
+ ver_r = xcb_randr_query_version_reply(xcb, ver_c, 0);
+ if (!ver_r)
+ return 0;
+
+ bool ret = ver_r->major_version > 1 || ver_r->minor_version >= 5;
+ free(ver_r);
+ return ret;
+}
+
int randr_screen_count(xcb_connection_t *xcb)
{
if (!xcb)
xcb_screen_t *screen;
screen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
+ if (randr_has_monitors(xcb)) {
+ xcb_randr_get_monitors_cookie_t mon_c;
+ xcb_randr_get_monitors_reply_t *mon_r;
+
+ mon_c = xcb_randr_get_monitors(xcb, screen->root, true);
+ mon_r = xcb_randr_get_monitors_reply(xcb, mon_c, 0);
+ if (!mon_r)
+ return 0;
+
+ int count = xcb_randr_get_monitors_monitors_length(mon_r);
+ free(mon_r);
+ return count;
+ }
xcb_randr_get_screen_resources_cookie_t res_c;
xcb_randr_get_screen_resources_reply_t *res_r;
int randr_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
int_fast32_t *x, int_fast32_t *y, int_fast32_t *w,
- int_fast32_t *h, xcb_screen_t **rscreen)
+ int_fast32_t *h, xcb_screen_t **rscreen, char **name)
{
xcb_screen_t *xscreen;
xscreen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
+ if (randr_has_monitors(xcb)) {
+ xcb_randr_get_monitors_cookie_t mon_c;
+ xcb_randr_get_monitors_reply_t *mon_r;
+
+ mon_c = xcb_randr_get_monitors(xcb, xscreen->root, true);
+ mon_r = xcb_randr_get_monitors_reply(xcb, mon_c, 0);
+ if (!mon_r)
+ return 0;
+
+ int monitors = xcb_randr_get_monitors_monitors_length(mon_r);
+ if (screen < 0 || screen >= monitors) {
+ free(mon_r);
+ goto fail;
+ }
+
+ xcb_randr_monitor_info_iterator_t mon_i;
+ mon_i = xcb_randr_get_monitors_monitors_iterator(mon_r);
+
+ int s;
+ for (s = 0; s < screen; s++)
+ xcb_randr_monitor_info_next(&mon_i);
+
+ xcb_randr_monitor_info_t *mon = mon_i.data;
+
+ *x = mon->x;
+ *y = mon->y;
+ *w = mon->width;
+ *h = mon->height;
+ if (rscreen)
+ *rscreen = xscreen;
+
+ if (mon->name && name) {
+ xcb_get_atom_name_cookie_t atom_c;
+ xcb_get_atom_name_reply_t *atom_r;
+
+ atom_c = xcb_get_atom_name(xcb, mon->name);
+ atom_r = xcb_get_atom_name_reply(xcb, atom_c, 0);
+ if (atom_r) {
+ *name = strndup(
+ xcb_get_atom_name_name(atom_r),
+ xcb_get_atom_name_name_length(atom_r));
+ free(atom_r);
+ }
+ }
+ free(mon_r);
+ return 0;
+ }
xcb_randr_get_screen_resources_cookie_t res_c;
xcb_randr_get_screen_resources_reply_t *res_r;
obs-studio-25.0.1.tar.xz/plugins/linux-capture/xhelpers.h -> obs-studio-25.0.2.tar.xz/plugins/linux-capture/xhelpers.h
Changed
*/
int randr_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
int_fast32_t *x, int_fast32_t *y, int_fast32_t *w,
- int_fast32_t *h, xcb_screen_t **rscreen);
+ int_fast32_t *h, xcb_screen_t **rscreen, char **name);
/**
* Get screen geometry for a X11 screen
obs-studio-25.0.1.tar.xz/plugins/linux-capture/xshm-input.c -> obs-studio-25.0.2.tar.xz/plugins/linux-capture/xshm-input.c
Changed
if (data->use_randr) {
if (randr_screen_geo(data->xcb, data->screen_id, &data->x_org,
&data->y_org, &data->width, &data->height,
- &data->xcb_screen) < 0) {
+ &data->xcb_screen, NULL) < 0) {
return -1;
}
} else if (data->use_xinerama) {
: xcb_setup_roots_length(xcb_get_setup(xcb));
for (int_fast32_t i = 0; i < count; ++i) {
+ char *name;
+ char name_tmp[12];
int_fast32_t x, y, w, h;
x = y = w = h = 0;
+ name = NULL;
if (randr)
- randr_screen_geo(xcb, i, &x, &y, &w, &h, NULL);
+ randr_screen_geo(xcb, i, &x, &y, &w, &h, NULL, &name);
else if (xinerama)
xinerama_screen_geo(xcb, i, &x, &y, &w, &h);
else
x11_screen_geo(xcb, i, &w, &h);
+ if (name == NULL) {
+ sprintf(name_tmp, "%" PRIuFAST32, i);
+ name = name_tmp;
+ }
+
dstr_printf(&screen_info,
- "Screen %" PRIuFAST32 " (%" PRIuFAST32
- "x%" PRIuFAST32 " @ %" PRIuFAST32 ",%" PRIuFAST32
- ")",
- i, w, h, x, y);
+ "Screen %s (%" PRIuFAST32 "x%" PRIuFAST32
+ " @ %" PRIuFAST32 ",%" PRIuFAST32 ")",
+ name, w, h, x, y);
+
+ if (name != name_tmp)
+ free(name);
if (h > 0 && w > 0)
obs_property_list_add_int(screens, screen_info.array,
obs-studio-25.0.1.tar.xz/plugins/linux-v4l2/v4l2-controls.c -> obs-studio-25.0.2.tar.xz/plugins/linux-v4l2/v4l2-controls.c
Changed
memset(&qctrl, 0, sizeof(qctrl));
qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
while (0 == v4l2_ioctl(dev, VIDIOC_QUERYCTRL, &qctrl)) {
+ qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
+
if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) {
blog(LOG_INFO, "found control %s but it is disabled",
qctrl.name);
(char *)qctrl.name, qctrl.default_value);
break;
}
-
- qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
}
return 0;
obs-studio-25.0.1.tar.xz/plugins/obs-filters/color-grade-filter.c -> obs-studio-25.0.2.tar.xz/plugins/obs-filters/color-grade-filter.c
Changed
obs_properties_t *props = obs_properties_create();
struct dstr filter_str = {0};
- dstr_cat(&filter_str, "(*.cube;*.png)");
+ dstr_cat(&filter_str, "(*.cube *.png)");
if (s && s->file && *s->file) {
dstr_copy(&path, s->file);
obs-studio-25.0.1.tar.xz/plugins/obs-qsv11/QSV_Encoder.h -> obs-studio-25.0.2.tar.xz/plugins/obs-qsv11/QSV_Encoder.h
Changed
{"AVBR", false}, {"ICQ", true}, {"LA_ICQ", true}, {"LA_CBR", true},
{"LA_VBR", true}, {0, false}};
static const char *const qsv_profile_names[] = {"high", "main", "baseline", 0};
-static const char *const qsv_usage_names[] = {"quality",
- "balanced",
- "speed",
- "veryslow",
- "slower",
- "slow",
- "medium",
- "fast",
- "faster"
- "veryfast",
- 0};
+static const char *const qsv_usage_names[] = {"quality", "balanced", "speed",
+ "veryslow", "slower", "slow",
+ "medium", "fast", "faster",
+ "veryfast", 0};
typedef struct qsv_t qsv_t;
obs-studio-25.0.1.tar.xz/plugins/win-wasapi/win-wasapi.cpp -> obs-studio-25.0.2.tar.xz/plugins/win-wasapi/win-wasapi.cpp
Changed
resSample =
store->GetValue(PKEY_AudioEngine_DeviceFormat, &prop);
if (!FAILED(resSample)) {
- deviceFormatProperties =
- (PWAVEFORMATEX)prop.blob.pBlobData;
- device_sample = std::to_string(
- deviceFormatProperties->nSamplesPerSec);
+ if (prop.vt != VT_EMPTY && prop.blob.pBlobData) {
+ deviceFormatProperties =
+ (PWAVEFORMATEX)prop.blob.pBlobData;
+ device_sample = std::to_string(
+ deviceFormatProperties->nSamplesPerSec);
+ }
}
+
+ store->Release();
}
InitClient();
No build results available
No rpmlint results available
Request History
boombatower created request about 5 years ago
- Update to version 25.0.2:
* linux-v4l2: readonly controls cause infinite loop
* libobs: Update version to 25.0.2 (linux hotfix)
* UI: Set correct window title for fullscreen projector
* CI: Update Linux CI from Ubuntu 16.04 to 18.04
* UI: Make links in updater clickable
* obs-filters: Fix LUT file extension filter on Linux
* win-wasapi: Fix leaking IPropertyStore
* win-wasapi: Fix crash on certain devices
* obs-qsv11: Fix target usage values
* UI: Fix crash on settings update
* libobs: Add move assignment operator for BPtr
* libobs: Fix missing assignment operator return
* libobs: Fix size mismatch warning
* libobs: Handle noexcept warnings
* UI: Make Importer destructor virtual
* UI: Add setting for Mixer add-on choice
* linux-capture: Use RandR monitors for screen information
boombatower accepted request about 5 years ago
ok