[vlc-devel] [vlc-commits] macosx: fix post-proc menu item (refs #11613)

David Fuhrmann david.fuhrmann at gmail.com
Mon Jun 16 23:19:11 CEST 2014


Am 16.06.2014 um 12:13 schrieb Felix Paul Kühne <git at videolan.org>:

> vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Mon Jun 16 12:11:54 2014 +0200| [03648ce931fb388493684ad03d43414a5da24f43] | committer: Felix Paul Kühne
> 
> macosx: fix post-proc menu item (refs #11613)
> 
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=03648ce931fb388493684ad03d43414a5da24f43
> ---
> 
> modules/gui/macosx/MainMenu.h |    1 +
> modules/gui/macosx/MainMenu.m |  133 +++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 128 insertions(+), 6 deletions(-)
> 
> diff --git a/modules/gui/macosx/MainMenu.h b/modules/gui/macosx/MainMenu.h
> index 1fe68e4..5ddb2e8 100644
> --- a/modules/gui/macosx/MainMenu.h
> +++ b/modules/gui/macosx/MainMenu.h
> @@ -277,6 +277,7 @@
> - (IBAction)switchSubtitleBackgroundOpacity:(id)sender;
> - (IBAction)telxTransparent:(id)sender;
> - (IBAction)telxNavLink:(id)sender;
> +- (IBAction)togglePostProcessing:(id)sender;
> 
> - (IBAction)showWizard:(id)sender;
> - (IBAction)showConvertAndSave:(id)sender;
> diff --git a/modules/gui/macosx/MainMenu.m b/modules/gui/macosx/MainMenu.m
> index cac6e2d..5331b2b 100644
> --- a/modules/gui/macosx/MainMenu.m
> +++ b/modules/gui/macosx/MainMenu.m
> @@ -267,6 +267,37 @@ static VLCMainMenu *_o_sharedInstance = nil;
> 
>     [self setupExtensionsMenu];
> 
> +    NSUInteger count = (NSUInteger) [o_mu_ffmpeg_pp numberOfItems];
> +    if (count > 0)
> +        [o_mu_ffmpeg_pp removeAllItems];
> +
> +    NSMenuItem * o_mitem;
> +    [o_mu_ffmpeg_pp setAutoenablesItems: YES];
> +    [o_mu_ffmpeg_pp addItemWithTitle: _NS("Disable") action:@selector(togglePostProcessing:) keyEquivalent:@""];
> +    o_mitem = [o_mu_ffmpeg_pp itemAtIndex: 0];
> +    [o_mitem setTag: -1];
> +    [o_mitem setEnabled: YES];
> +    [o_mitem setTarget: self];
> +    for (NSUInteger x = 0; x < 7; x++) {
> +        [o_mu_ffmpeg_pp addItemWithTitle:[NSString stringWithFormat:_NS("Level %i"), x]
> +                                               action:@selector(togglePostProcessing:)
> +                                        keyEquivalent:@""];
> +        o_mitem = [o_mu_ffmpeg_pp itemAtIndex:x+1];
> +        [o_mitem setEnabled: YES];
> +        [o_mitem setTag:x];
> +        [o_mitem setTarget: self];
> +    }
> +    char *psz_config = config_GetPsz(p_intf, "video-filter");
> +    if (psz_config) {
> +        if (!strstr(psz_config, "postprocess"))
> +            [[o_mu_ffmpeg_pp itemAtIndex:0] setState:NSOnState];
> +        else
> +            [[o_mu_ffmpeg_pp itemWithTag:config_GetInt(p_intf, "postproc-q")] setState:NSOnState];
> +        free(psz_config);
> +    } else
> +        [[o_mu_ffmpeg_pp itemAtIndex:0] setState:NSOnState];
> +    [o_mi_ffmpeg_pp setEnabled: NO];
> +
>     [self refreshAudioDeviceList];
> 
>     /* setup subtitles menu */
> @@ -583,17 +614,16 @@ static VLCMainMenu *_o_sharedInstance = nil;
>             [self setupVarMenuItem: o_mi_deinterlace_mode target: (vlc_object_t *)p_vout
>                                      var: "deinterlace-mode" selector: @selector(toggleVar:)];
> 
> -            [self setupVarMenuItem: o_mi_ffmpeg_pp target: (vlc_object_t *)p_vout
> -                               var:"postprocess" selector: @selector(toggleVar:)];
> -
>             vlc_object_release(p_vout);
> 
>             [self refreshVoutDeviceMenu:nil];
>         }
> +        [o_mi_ffmpeg_pp setEnabled:YES];
>         vlc_object_release(p_input);
> -    }
> -    else
> +    } else {
>         [o_mi_record setEnabled: NO];
> +        [o_mi_ffmpeg_pp setEnabled:NO];
> +    }
> }
> 
> - (void)refreshVoutDeviceMenu:(NSNotification *)o_notification
> @@ -637,7 +667,6 @@ static VLCMainMenu *_o_sharedInstance = nil;
>     [o_mi_channels setEnabled: b_enabled];
>     [o_mi_deinterlace setEnabled: b_enabled];
>     [o_mi_deinterlace_mode setEnabled: b_enabled];
> -    [o_mi_ffmpeg_pp setEnabled: b_enabled];
>     [o_mi_screen setEnabled: b_enabled];
>     [o_mi_aspect_ratio setEnabled: b_enabled];
>     [o_mi_crop setEnabled: b_enabled];
> @@ -930,6 +959,98 @@ static VLCMainMenu *_o_sharedInstance = nil;
>     }
> }
> 
> +- (void)_disablePostProcessing
> +{
> +    char *psz_name = "postprocess";
> +    char *psz_string, *psz_parser;
> +    psz_string = config_GetPsz(p_intf, "video-filter");
> +
> +    if (!psz_string)
> +        return;
> +
> +    psz_parser = strstr(psz_string, psz_name);
> +    if (psz_parser) {
> +        if (*(psz_parser + strlen(psz_name)) == ':') {
> +            memmove(psz_parser, psz_parser + strlen(psz_name) + 1,
> +                    strlen(psz_parser + strlen(psz_name) + 1) + 1);
> +        } else
> +            *psz_parser = '\0';
> +
> +        /* Remove trailing : : */
> +        if (strlen(psz_string) > 0 && *(psz_string + strlen(psz_string) -1) == ':')
> +            *(psz_string + strlen(psz_string) -1) = '\0';
> +    } else {
> +        free(psz_string);
> +        return;
> +    }
> +    config_PutPsz(p_intf, "video-filter", psz_string);
> +
> +    /* Try to set on the fly */
> +    vout_thread_t *p_vout = getVout();
> +    if (p_vout) {
> +        var_SetString(p_vout, "video-filter", psz_string);
> +        vlc_object_release(p_vout);
> +    }
> +}
> +
> +- (void)_enablePostProcessing
> +{
> +    char *psz_name = "postprocess";
> +    char *psz_string, *psz_parser;
> +    psz_string = config_GetPsz(p_intf, "video-filter");
> +
> +    if (psz_string == NULL)
> +        psz_string = psz_name;
> +    else if (strstr(psz_string, psz_name) == NULL) {
> +        char *psz_tmp = strdup([[NSString stringWithFormat: @"%s:%s", psz_string, psz_name] UTF8String]);
> +        free(psz_string);
> +        psz_string = psz_tmp;
> +    }
> +
> +    config_PutPsz(p_intf, "video-filter", psz_string);
> +
> +    /* Try to set on the fly */
> +    vout_thread_t *p_vout = getVout();
> +    if (p_vout) {
> +        var_SetString(p_vout, "video-filter", psz_string);
> +        vlc_object_release(p_vout);
> +    }
> +}
> +
> +- (IBAction)togglePostProcessing:(id)sender
> +{
> +    char *psz_name = "postprocess";
> +    NSInteger count = [o_mu_ffmpeg_pp numberOfItems];
> +    for (NSUInteger x = 0; x < count; x++)
> +        [[o_mu_ffmpeg_pp itemAtIndex:x] setState:NSOffState];
> +
> +    if ([sender tag] == -1) {
> +        [self _disablePostProcessing];
> +        [sender setState:NSOnState];
> +    } else {
> +        [self _enablePostProcessing];
> +        [sender setState:NSOnState];
> +
> +        vout_thread_t *p_vout = getVout();
> +        vlc_object_t *p_filter;
> +
> +        config_PutInt(p_intf, "postproc-q", [sender tag]);
> +
> +        if (p_vout) {
> +            p_filter = vlc_object_find_name(pl_Get(p_intf), psz_name);
> +
> +            if (!p_filter) {
> +                msg_Warn(p_intf, "filter '%s' isn't enabled", psz_name);
> +                vlc_object_release(p_vout);
> +                return;
> +            }
> +            var_SetInteger(p_filter, "postproc-q", [sender tag]);
> +            vlc_object_release(p_vout);
> +            vlc_object_release(p_filter);
> +        }
> +    }
> +}
> +
> - (IBAction)toggleFullscreenDevice:(id)sender
> {
>     config_PutInt(VLCIntf, "macosx-vdev", [sender tag]);
> 

Hi Felix,

I’m just getting "macosx interface error: Unable to find filter module "postprocess“.“ when trying to choose a menu item. Does it work for you?

Additionally, you should disable the menu when audio-only is playing. Now, this is the only enabled menu item within the video menu in this case, which looks ugly. :-)

With best regards,
David


More information about the vlc-devel mailing list