📄 extended.m
字号:
o_config_changed = YES;}/* change the opaqueness of the vouts */- (IBAction)opaqueSliderAction:(id)sender{ vlc_value_t val; id o_window = [NSApp keyWindow]; NSArray *o_windows = [NSApp orderedWindows]; NSEnumerator *o_enumerator = [o_windows objectEnumerator]; playlist_t * p_playlist = pl_Yield( VLCIntf ); vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); vout_thread_t *p_real_vout; val.f_float = [o_sld_opaque floatValue] / 100; if( p_vout != NULL ) { p_real_vout = [VLCVoutView getRealVout: p_vout]; var_Set( p_real_vout, "macosx-opaqueness", val ); while ((o_window = [o_enumerator nextObject])) { if( [[o_window className] isEqualToString: @"VLCVoutWindow"] || [[[VLCMain sharedInstance] getEmbeddedList] windowContainsEmbedded: o_window]) { [o_window setAlphaValue: val.f_float]; } break; } vlc_object_release( p_vout ); } /* store to prefs */ config_PutFloat( p_playlist , "macosx-opaqueness" , val.f_float ); vlc_object_release( p_playlist ); o_config_changed = YES;}- (IBAction)enableHeadphoneVirtualizer:(id)sender{ /* en-/disable headphone virtualisation */ if ([o_ckb_hdphnVirt state] == NSOnState) [self changeAFiltersString: "headphone_channel_mixer" onOrOff: true ]; else [self changeAFiltersString: "headphone_channel_mixer" onOrOff: false ];}- (IBAction)sliderActionMaximumAudioLevel:(id)sender{ /* read-out the slider's value and apply it */ intf_thread_t * p_intf = VLCIntf; aout_instance_t * p_aout= (aout_instance_t *)vlc_object_find(p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE); if( p_aout != NULL ) { var_SetFloat( p_aout, "norm-max-level", [o_sld_maxLevel floatValue] ); vlc_object_release( p_aout ); } config_PutFloat( p_intf, "norm-max-level", [o_sld_maxLevel floatValue] ); o_config_changed = YES;}- (IBAction)enableVolumeNormalization:(id)sender{ /* en-/disable volume normalisation */ if( [o_ckb_vlme_norm state] == NSOnState ) [self changeAFiltersString: "normvol" onOrOff: YES ]; else [self changeAFiltersString: "normvol" onOrOff: NO ];}- (IBAction)videoFilterAction:(id)sender{ /* en-/disable video filters */ if (sender == o_ckb_blur) [self changeVideoFiltersString: "motionblur" onOrOff: [o_ckb_blur state]]; else if (sender == o_ckb_imgClone) [self changeVoutFiltersString: "clone" onOrOff: [o_ckb_imgClone state]]; else if (sender == o_ckb_imgCrop) [self changeVoutFiltersString: "crop" onOrOff: [o_ckb_imgCrop state]]; else if (sender == o_ckb_imgInvers) [self changeVideoFiltersString: "invert" onOrOff: [o_ckb_imgInvers state]]; else if (sender == o_ckb_trnsform) [self changeVoutFiltersString: "transform" onOrOff: [o_ckb_trnsform state]]; else if (sender == o_ckb_intZoom ) [self changeVoutFiltersString: "magnify" onOrOff: [o_ckb_intZoom state]]; else if (sender == o_ckb_wave ) [self changeVideoFiltersString: "wave" onOrOff: [o_ckb_wave state]]; else if (sender == o_ckb_gradient ) [self changeVideoFiltersString: "gradient" onOrOff: [o_ckb_gradient state]]; else if (sender == o_ckb_psycho ) [self changeVideoFiltersString: "psychedelic" onOrOff: [o_ckb_psycho state]]; else if (sender == o_ckb_ripple ) [self changeVideoFiltersString: "ripple" onOrOff: [o_ckb_ripple state]]; else msg_Err( VLCIntf, "cannot find switched video-filter" ); /* this can't happen */}- (IBAction)moreInfoVideoFilters:(id)sender{ /* show info sheet */ NSBeginInformationalAlertSheet(_NS("About the video filters"), _NS("OK"), @"", @"", o_extended_window, nil, nil, nil, nil, _NS("This panel allows on-the-fly selection of various video effects.\n" "These filters can be configured individually in the Preferences, in " "the subsections of Video/Filters.\n" "To choose the order in which the filter are applied, a filter " "option string can be set in the Preferences, Video / Filters section."));}/***************************************************************************** * methods to communicate changes to VLC's core *****************************************************************************/- (void)changeVoutFiltersString:(char *)psz_name onOrOff:(bool )b_add{ /* copied from ../wxwidgets/extrapanel.cpp * renamed to conform with Cocoa's rules */ /* this method only changes 1st generation video filters (the ones that * can't be used for transcoding). Have a look at changeVideoFiltersString * for the 2nd generation filters. */ vout_thread_t *p_vout; intf_thread_t * p_intf = VLCIntf; char *psz_parser, *psz_string; psz_string = config_GetPsz( p_intf, "vout-filter" ); if( !psz_string ) psz_string = strdup(""); psz_parser = strstr( psz_string, psz_name ); if( b_add ) { if( !psz_parser ) { psz_parser = psz_string; asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s", psz_string, psz_name ); free( psz_parser ); } else { return; } } else { if( psz_parser ) { memmove( psz_parser, psz_parser + strlen(psz_name) + (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ), strlen(psz_parser + strlen(psz_name)) + 1 ); /* Remove trailing : : */ if( *(psz_string+strlen(psz_string ) -1 ) == ':' ) { *(psz_string+strlen(psz_string ) -1 ) = '\0'; } } else { free( psz_string ); return; } } /* Vout is not kept, so put that in the config */ config_PutPsz( p_intf, "vout-filter", psz_string ); /* Try to set on the fly */ p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout ) { var_SetString( p_vout, "vout-filter", psz_string ); vlc_object_release( p_vout ); } free( psz_string ); o_config_changed = YES;}- (void)changeVideoFiltersString:(char *)psz_name onOrOff:(bool )b_add{ /* same as changeVoutFiltersString but addressing the "video-filter" * variable which represents the video filter 2 modules */ vout_thread_t *p_vout; intf_thread_t * p_intf = VLCIntf; char *psz_parser, *psz_string; psz_string = config_GetPsz( p_intf, "video-filter" ); if( !psz_string ) psz_string = strdup(""); psz_parser = strstr( psz_string, psz_name ); if( b_add ) { if( !psz_parser ) { psz_parser = psz_string; asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s", psz_string, psz_name ); free( psz_parser ); } else { return; } } else { if( psz_parser ) { memmove( psz_parser, psz_parser + strlen(psz_name) + (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ), strlen(psz_parser + strlen(psz_name)) + 1 ); /* Remove trailing : : */ if( *(psz_string+strlen(psz_string ) -1 ) == ':' ) { *(psz_string+strlen(psz_string ) -1 ) = '\0'; } } else { free( psz_string ); return; } } /* Vout is not kept, so put that in the config */ config_PutPsz( p_intf, "video-filter", psz_string ); /* Try to set on the fly */ p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout ) { var_SetString( p_vout, "video-filter", psz_string ); vlc_object_release( p_vout ); } free( psz_string ); o_config_changed = YES;}- (void)changeAFiltersString: (char *)psz_name onOrOff: (bool )b_add;{ /* copied from ../wxwidgets/extrapanel.cpp * renamed to conform with Cocoa's rules */ char *psz_parser, *psz_string; intf_thread_t * p_intf = VLCIntf; aout_instance_t * p_aout= (aout_instance_t *)vlc_object_find(p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE); if( p_aout ) { psz_string = var_GetNonEmptyString( p_aout, "audio-filter" ); } else { psz_string = config_GetPsz( p_intf, "audio-filter" ); } if( !psz_string ) psz_string = strdup(""); psz_parser = strstr( psz_string, psz_name ); if( b_add ) { if( !psz_parser ) { psz_parser = psz_string; asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s", psz_string, psz_name ); free( psz_parser ); } else { return; } } else { if( psz_parser ) { memmove( psz_parser, psz_parser + strlen(psz_name) + (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ), strlen(psz_parser + strlen(psz_name)) + 1 ); if( *(psz_string+strlen(psz_string ) -1 ) == ':' ) { *(psz_string+strlen(psz_string ) -1 ) = '\0'; } } else { free( psz_string ); return; } } if( p_aout == NULL ) { config_PutPsz( p_intf, "audio-filter", psz_string ); } else { var_SetString( p_aout, "audio-filter", psz_string ); int i = 0; while( i < p_aout->i_nb_inputs ) { p_aout->pp_inputs[i]->b_restart = true; i = (i + 1); } vlc_object_release( p_aout ); } free( psz_string ); o_config_changed = YES;}- (void)savePrefs{ /* save the preferences to make sure that our module-changes will up on * next launch again */ playlist_t * p_playlist = pl_Yield( VLCIntf ); int returnedValue; NSArray * theModules; theModules = [[NSArray alloc] initWithObjects: @"main", @"headphone", @"transform", @"adjust", @"invert", @"motionblur", @"distort", @"clone", @"crop", @"normvol", @"headphone_channel_mixer", @"macosx", nil]; unsigned int x = 0; while ( x != [theModules count] ) { returnedValue = config_SaveConfigFile( p_playlist, [[theModules objectAtIndex: x] UTF8String] ); if (returnedValue != 0) { msg_Err(p_playlist, "unable to save the preferences of the " "extended control attribute '%s' (%i)", [[theModules objectAtIndex: x] UTF8String] , returnedValue); [theModules release]; vlc_object_release( p_playlist ); return; } x = ( x + 1 ); } msg_Dbg( VLCIntf, "VLCExtended: saved certain preferences successfully" ); [theModules release]; vlc_object_release( p_playlist );}@end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -