[vlc-devel] [PATCH V2 17/17] macosx: setup filter variables on the main vout
Thomas Guillem
thomas at gllm.fr
Tue Apr 16 16:25:27 CEST 2019
The vout is now always present, there is no need to use the old playlist as a
proxy.
IMPORTANT: the video filter settings will now only change for the main vout. We
need to define a way to change vout settings for other windows.
---
.../coreinteraction/VLCVideoFilterHelper.m | 76 +++------
.../panels/VLCVideoEffectsWindowController.m | 151 +++++++++---------
2 files changed, 97 insertions(+), 130 deletions(-)
diff --git a/modules/gui/macosx/coreinteraction/VLCVideoFilterHelper.m b/modules/gui/macosx/coreinteraction/VLCVideoFilterHelper.m
index b3dd9b801b..fb6627fb9f 100644
--- a/modules/gui/macosx/coreinteraction/VLCVideoFilterHelper.m
+++ b/modules/gui/macosx/coreinteraction/VLCVideoFilterHelper.m
@@ -24,7 +24,6 @@
#import <vlc_modules.h>
#import <vlc_charset.h>
-#import <vlc_playlist_legacy.h>
#import "main/VLCMain.h"
#import "playlist/VLCPlaylistController.h"
@@ -58,7 +57,6 @@
intf_thread_t *p_intf = getIntf();
if (!p_intf)
return;
- playlist_t *p_playlist = pl_Get(p_intf);
char *psz_string, *psz_parser;
const char *psz_filter_type = [self getFilterType:psz_name];
@@ -67,9 +65,14 @@
return;
}
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *vout = [playerController mainVideoOutputThread];
+ if (!vout)
+ return;
+
msg_Dbg(p_intf, "will turn filter '%s' %s", psz_name, b_on ? "on" : "off");
- psz_string = var_InheritString(p_playlist, psz_filter_type);
+ psz_string = var_InheritString(vout, psz_filter_type);
if (b_on) {
if (psz_string == NULL) {
@@ -81,7 +84,10 @@
}
} else {
if (!psz_string)
+ {
+ vout_Release(vout);
return;
+ }
psz_parser = strstr(psz_string, psz_name);
if (psz_parser) {
@@ -97,22 +103,12 @@
*(psz_string + strlen(psz_string) -1) = '\0';
} else {
free(psz_string);
+ vout_Release(vout);
return;
}
}
- var_SetString(p_playlist, psz_filter_type, psz_string);
-
- /* Try to set non splitter filters on the fly */
- if (strcmp(psz_filter_type, "video-splitter")) {
- NSArray<NSValue *> *vouts = [[[[VLCMain sharedInstance] playlistController] playerController] allVideoOutputThreads];
- if (vouts)
- for (NSValue * val in vouts) {
- vout_thread_t *p_vout = [val pointerValue];
- var_SetString(p_vout, psz_filter_type, psz_string);
- vout_Release(p_vout);
- }
- }
-
+ var_SetString(vout, psz_filter_type, psz_string);
+ vout_Release(vout);
free(psz_string);
}
@@ -120,13 +116,10 @@
forFilter: (char const *)psz_filter
withValue: (vlc_value_t)value
{
- NSArray<NSValue *> *vouts = [[[[VLCMain sharedInstance] playlistController] playerController] allVideoOutputThreads];
intf_thread_t *p_intf = getIntf();
if (!p_intf)
return;
- playlist_t *p_playlist = pl_Get(p_intf);
-
int i_type = 0;
bool b_is_command = false;
char const *psz_filter_type = [self getFilterType: psz_filter];
@@ -135,47 +128,18 @@
return;
}
- if (vouts && [vouts count])
- {
- i_type = var_Type((vout_thread_t *)[[vouts firstObject] pointerValue], psz_property);
- b_is_command = i_type & VLC_VAR_ISCOMMAND;
- }
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *vout = [playerController mainVideoOutputThread];
+ if (!vout)
+ return;
+
+ i_type = var_Type(vout, psz_property);
if (!i_type)
i_type = config_GetType(psz_property);
i_type &= VLC_VAR_CLASS;
- if (i_type == VLC_VAR_BOOL)
- var_SetBool(p_playlist, psz_property, value.b_bool);
- else if (i_type == VLC_VAR_INTEGER)
- var_SetInteger(p_playlist, psz_property, value.i_int);
- else if (i_type == VLC_VAR_FLOAT)
- var_SetFloat(p_playlist, psz_property, value.f_float);
- else if (i_type == VLC_VAR_STRING)
- var_SetString(p_playlist, psz_property, EnsureUTF8(value.psz_string));
- else
- {
- msg_Err(p_intf,
- "Module %s's %s variable is of an unsupported type ( %d )",
- psz_filter, psz_property, i_type);
- b_is_command = false;
- }
-
- if (b_is_command)
- if (vouts)
- for (NSValue *ptr in vouts)
- {
- vout_thread_t *p_vout = [ptr pointerValue];
- var_SetChecked(p_vout, psz_property, i_type, value);
-#ifndef NDEBUG
- int i_cur_type = var_Type(p_vout, psz_property);
- assert((i_cur_type & VLC_VAR_CLASS) == i_type);
- assert(i_cur_type & VLC_VAR_ISCOMMAND);
-#endif
- }
-
- if (vouts)
- for (NSValue *ptr in vouts)
- vout_Release((vout_thread_t *)[ptr pointerValue]);
+ var_SetChecked(vout, psz_property, i_type, value);
+ vout_Release(vout);
}
diff --git a/modules/gui/macosx/panels/VLCVideoEffectsWindowController.m b/modules/gui/macosx/panels/VLCVideoEffectsWindowController.m
index 6b2ad1a9a5..5866b45575 100644
--- a/modules/gui/macosx/panels/VLCVideoEffectsWindowController.m
+++ b/modules/gui/macosx/panels/VLCVideoEffectsWindowController.m
@@ -32,8 +32,6 @@
#import "playlist/VLCPlaylistController.h"
#import "playlist/VLCPlayerController.h"
-#import <vlc_playlist_legacy.h>
-
#define getWidgetBoolValue(w) ((vlc_value_t){ .b_bool = [w state] })
#define getWidgetIntValue(w) ((vlc_value_t){ .i_int = [w intValue] })
#define getWidgetFloatValue(w) ((vlc_value_t){ .f_float = [w floatValue] })
@@ -91,7 +89,6 @@
- (void)loadProfile
{
intf_thread_t *p_intf = getIntf();
- playlist_t *p_playlist = pl_Get(p_intf);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger profileIndex = [self currentProfileIndex];
@@ -111,36 +108,27 @@
/* filter handling */
NSString *tempString = B64DecNSStr([items firstObject]);
- NSArray<NSValue *> *vouts = [[[[VLCMain sharedInstance] playlistController] playerController] allVideoOutputThreads];
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *vout = [playerController mainVideoOutputThread];
/* enable the new filters */
- var_SetString(p_playlist, "video-filter", [tempString UTF8String]);
- if (vouts) {
- for (NSValue *ptr in vouts) {
- vout_thread_t *p_vout = [ptr pointerValue];
- var_SetString(p_vout, "video-filter", [tempString UTF8String]);
- }
- }
+ if (vout)
+ var_SetString(vout, "video-filter", [tempString UTF8String]);
tempString = B64DecNSStr([items objectAtIndex:1]);
/* enable another round of new filters */
- var_SetString(p_playlist, "sub-source", [tempString UTF8String]);
- if (vouts) {
- for (NSValue *ptr in vouts) {
- vout_thread_t *p_vout = [ptr pointerValue];
- var_SetString(p_vout, "sub-source", [tempString UTF8String]);
- vout_Release(p_vout);
- }
- }
+ if (vout)
+ var_SetString(vout, "sub-source", [tempString UTF8String]);
tempString = B64DecNSStr([items objectAtIndex:2]);
/* enable another round of new filters */
- char *psz_current_splitter = var_GetString(p_playlist, "video-splitter");
- bool b_filter_changed = ![tempString isEqualToString:toNSStr(psz_current_splitter)];
+ char *psz_current_splitter = vout ? var_GetString(vout, "video-splitter") : NULL;
+ bool b_filter_changed = psz_current_splitter && ![tempString isEqualToString:toNSStr(psz_current_splitter)];
free(psz_current_splitter);
if (b_filter_changed)
- var_SetString(p_playlist, "video-splitter", [tempString UTF8String]);
+ var_SetString(vout, "video-splitter", [tempString UTF8String]);
+ vout_Release(vout);
/* try to set filter values on-the-fly and store them appropriately */
// index 3 is deprecated
@@ -413,7 +401,6 @@
- (void)setWidgetValue: (id)widget forOption: (char *)psz_option enabled: (bool)b_state
{
intf_thread_t *p_intf = getIntf();
- playlist_t *p_playlist = pl_Get(p_intf);
vlc_value_t val;
int i_type = config_GetType(psz_option) & VLC_VAR_CLASS;
@@ -429,10 +416,17 @@
return;
}
- if (var_Create(p_playlist, psz_option, i_type | VLC_VAR_DOINHERIT) ||
- var_GetChecked(p_playlist, psz_option, i_type, &val)) {
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *vout = [playerController mainVideoOutputThread];
+ if (!vout)
+ return;
+
+ if (var_Create(vout, psz_option, i_type | VLC_VAR_DOINHERIT) ||
+ var_GetChecked(vout, psz_option, i_type, &val)) {
+ vout_Release(vout);
return;
}
+ vout_Release(vout);
if (i_type == VLC_VAR_BOOL || i_type == VLC_VAR_INTEGER)
{
@@ -482,12 +476,15 @@
- (void)resetValues
{
intf_thread_t *p_intf = getIntf();
- playlist_t *p_playlist = pl_Get(p_intf);
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *vout = [playerController mainVideoOutputThread];
+ if (!vout)
+ return;
BOOL b_state;
/* do we have any filter enabled? if yes, show it. */
char * psz_vfilters;
- psz_vfilters = var_InheritString(p_playlist, "video-filter");
+ psz_vfilters = var_InheritString(vout, "video-filter");
if (psz_vfilters) {
[_adjustCheckbox setState: (NSInteger)strstr(psz_vfilters, "adjust")];
[_sharpenCheckbox setState: (NSInteger)strstr(psz_vfilters, "sharpen")];
@@ -531,7 +528,7 @@
[_anaglyphCheckbox setState: NSOffState];
}
- psz_vfilters = var_InheritString(p_playlist, "sub-source");
+ psz_vfilters = var_InheritString(vout, "sub-source");
if (psz_vfilters) {
[_addTextCheckbox setState: (NSInteger)strstr(psz_vfilters, "marq")];
[_addLogoCheckbox setState: (NSInteger)strstr(psz_vfilters, "logo")];
@@ -541,7 +538,7 @@
[_addLogoCheckbox setState: NSOffState];
}
- psz_vfilters = var_InheritString(p_playlist, "video-splitter");
+ psz_vfilters = var_InheritString(vout, "video-splitter");
if (psz_vfilters) {
[_cloneCheckbox setState: (NSInteger)strstr(psz_vfilters, "clone")];
[_wallCheckbox setState: (NSInteger)strstr(psz_vfilters, "wall")];
@@ -551,6 +548,8 @@
[_wallCheckbox setState: NSOffState];
}
+ vout_Release(vout);
+
/* fetch and show the various values */
b_state = [_adjustCheckbox state];
[self setWidgetValue: _adjustHueSlider forOption: "hue" enabled: b_state];
@@ -653,45 +652,50 @@
- (NSString *)generateProfileString
{
intf_thread_t *p_intf = getIntf();
- playlist_t *p_playlist = pl_Get(p_intf);
- return [NSString stringWithFormat:@"%@;%@;%@;%lli;%f;%f;%f;%f;%f;%lli;%f;%@;%lli;%lli;%lli;%lli;%lli;%lli;%@;%lli;%lli;%lli;%lli;%lli;%@;%lli;%@;%lli;%lli;%lli;%lli;%lli;%lli;%f",
- B64EncAndFree(var_InheritString(p_playlist, "video-filter")),
- B64EncAndFree(var_InheritString(p_playlist, "sub-source")),
- B64EncAndFree(var_InheritString(p_playlist, "video-splitter")),
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *vout = [playerController mainVideoOutputThread];
+ if (!vout)
+ return nil;
+ NSString *string = [NSString stringWithFormat:@"%@;%@;%@;%lli;%f;%f;%f;%f;%f;%lli;%f;%@;%lli;%lli;%lli;%lli;%lli;%lli;%@;%lli;%lli;%lli;%lli;%lli;%@;%lli;%@;%lli;%lli;%lli;%lli;%lli;%lli;%f",
+ B64EncAndFree(var_InheritString(vout, "video-filter")),
+ B64EncAndFree(var_InheritString(vout, "sub-source")),
+ B64EncAndFree(var_InheritString(vout, "video-splitter")),
0LL, // former "hue" value, deprecated since 3.0.0
- var_InheritFloat(p_playlist, "contrast"),
- var_InheritFloat(p_playlist, "brightness"),
- var_InheritFloat(p_playlist, "saturation"),
- var_InheritFloat(p_playlist, "gamma"),
- var_InheritFloat(p_playlist, "sharpen-sigma"),
- var_InheritInteger(p_playlist, "gradfun-radius"),
- var_InheritFloat(p_playlist, "grain-variance"),
- B64EncAndFree(var_InheritString(p_playlist, "transform-type")),
- var_InheritInteger(p_playlist, "puzzle-rows"),
- var_InheritInteger(p_playlist, "puzzle-cols"),
- var_InheritInteger(p_playlist, "colorthres-color"),
- var_InheritInteger(p_playlist, "colorthres-saturationthres"),
- var_InheritInteger(p_playlist, "colorthres-similaritythres"),
- var_InheritInteger(p_playlist, "sepia-intensity"),
- B64EncAndFree(var_InheritString(p_playlist, "gradient-mode")),
- (int64_t)var_InheritBool(p_playlist, "gradient-cartoon"),
- var_InheritInteger(p_playlist, "gradient-type"),
- var_InheritInteger(p_playlist, "extract-component"),
- var_InheritInteger(p_playlist, "posterize-level"),
- var_InheritInteger(p_playlist, "blur-factor"),
- B64EncAndFree(var_InheritString(p_playlist, "marq-marquee")),
- var_InheritInteger(p_playlist, "marq-position"),
- B64EncAndFree(var_InheritString(p_playlist, "logo-file")),
- var_InheritInteger(p_playlist, "logo-position"),
- var_InheritInteger(p_playlist, "logo-opacity"),
- var_InheritInteger(p_playlist, "clone-count"),
- var_InheritInteger(p_playlist, "wall-rows"),
- var_InheritInteger(p_playlist, "wall-cols"),
+ var_InheritFloat(vout, "contrast"),
+ var_InheritFloat(vout, "brightness"),
+ var_InheritFloat(vout, "saturation"),
+ var_InheritFloat(vout, "gamma"),
+ var_InheritFloat(vout, "sharpen-sigma"),
+ var_InheritInteger(vout, "gradfun-radius"),
+ var_InheritFloat(vout, "grain-variance"),
+ B64EncAndFree(var_InheritString(vout, "transform-type")),
+ var_InheritInteger(vout, "puzzle-rows"),
+ var_InheritInteger(vout, "puzzle-cols"),
+ var_InheritInteger(vout, "colorthres-color"),
+ var_InheritInteger(vout, "colorthres-saturationthres"),
+ var_InheritInteger(vout, "colorthres-similaritythres"),
+ var_InheritInteger(vout, "sepia-intensity"),
+ B64EncAndFree(var_InheritString(vout, "gradient-mode")),
+ (int64_t)var_InheritBool(vout, "gradient-cartoon"),
+ var_InheritInteger(vout, "gradient-type"),
+ var_InheritInteger(vout, "extract-component"),
+ var_InheritInteger(vout, "posterize-level"),
+ var_InheritInteger(vout, "blur-factor"),
+ B64EncAndFree(var_InheritString(vout, "marq-marquee")),
+ var_InheritInteger(vout, "marq-position"),
+ B64EncAndFree(var_InheritString(vout, "logo-file")),
+ var_InheritInteger(vout, "logo-position"),
+ var_InheritInteger(vout, "logo-opacity"),
+ var_InheritInteger(vout, "clone-count"),
+ var_InheritInteger(vout, "wall-rows"),
+ var_InheritInteger(vout, "wall-cols"),
// version 2 of profile string:
- (int64_t)var_InheritBool(p_playlist, "brightness-threshold"), // index: 32
+ (int64_t)var_InheritBool(vout, "brightness-threshold"), // index: 32
// version 3 of profile string: (vlc-3.0.0)
- var_InheritFloat(p_playlist, "hue") // index: 33
+ var_InheritFloat(vout, "hue") // index: 33
];
+ vout_Release(vout);
+ return string;
}
#pragma mark -
@@ -1020,16 +1024,15 @@
[self setCropRightValue: [self cropLeftValue]];
}
- NSArray<NSValue *> *vouts = [[[[VLCMain sharedInstance] playlistController] playerController] allVideoOutputThreads];
- if (vouts)
- for (NSValue *ptr in vouts) {
- vout_thread_t *p_vout = [ptr pointerValue];
- var_SetInteger(p_vout, "crop-top", [_cropTopTextField intValue]);
- var_SetInteger(p_vout, "crop-bottom", [_cropBottomTextField intValue]);
- var_SetInteger(p_vout, "crop-left", [_cropLeftTextField intValue]);
- var_SetInteger(p_vout, "crop-right", [_cropRightTextField intValue]);
- vout_Release(p_vout);
- }
+ VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
+ vout_thread_t *p_vout = [playerController mainVideoOutputThread];
+ if (p_vout) {
+ var_SetInteger(p_vout, "crop-top", [_cropTopTextField intValue]);
+ var_SetInteger(p_vout, "crop-bottom", [_cropBottomTextField intValue]);
+ var_SetInteger(p_vout, "crop-left", [_cropLeftTextField intValue]);
+ var_SetInteger(p_vout, "crop-right", [_cropRightTextField intValue]);
+ vout_Release(p_vout);
+ }
}
#pragma mark -
--
2.20.1
More information about the vlc-devel
mailing list