⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 open.m

📁 VLC Player Source Code
💻 M
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************** * open.m: MacOS X module for vlc ***************************************************************************** * Copyright (C) 2002-2008 the VideoLAN team * $Id$ * * Authors: Jon Lech Johansen <jon-vl@nanocrew.net> *          Christophe Massiot <massiot@via.ecp.fr> *          Derk-Jan Hartman <thedj@users.sourceforge.net> *          Benjamin Pracht <bigben at videolan dot org> *          Felix Kühne <fkuehne at videolan dot org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <stdlib.h>                                      /* malloc(), free() */#include <sys/param.h>                                    /* for MAXPATHLEN */#include <string.h>#include <paths.h>#include <IOKit/IOKitLib.h>#include <IOKit/IOBSD.h>#include <IOKit/storage/IOMedia.h>#include <IOKit/storage/IOCDMedia.h>#include <IOKit/storage/IODVDMedia.h>#import "intf.h"#import "playlist.h"#import "open.h"#import "output.h"#import "eyetv.h"#define setEyeTVUnconnected \[o_capture_lbl setStringValue: _NS("No device connected")]; \[o_capture_long_lbl setStringValue: _NS("VLC could not detect any EyeTV compatible device.\n\nCheck the device's connection, make sure that the latest EyeTV software is installed and try again.")]; \[o_capture_lbl displayIfNeeded]; \[o_capture_long_lbl displayIfNeeded]; \[self showCaptureView: o_capture_label_view]/***************************************************************************** * GetEjectableMediaOfClass *****************************************************************************/NSArray *GetEjectableMediaOfClass( const char *psz_class ){    io_object_t next_media;    mach_port_t master_port;    kern_return_t kern_result;    NSArray *o_devices = nil;    NSMutableArray *p_list = nil;    io_iterator_t media_iterator;    CFMutableDictionaryRef classes_to_match;    kern_result = IOMasterPort( MACH_PORT_NULL, &master_port );    if( kern_result != KERN_SUCCESS )    {        return( nil );    }     classes_to_match = IOServiceMatching( psz_class );    if( classes_to_match == NULL )    {        return( nil );    }     CFDictionarySetValue( classes_to_match, CFSTR( kIOMediaEjectableKey ),                          kCFBooleanTrue );     kern_result = IOServiceGetMatchingServices( master_port, classes_to_match,                                                &media_iterator );    if( kern_result != KERN_SUCCESS )    {        return( nil );    }    p_list = [NSMutableArray arrayWithCapacity: 1];     next_media = IOIteratorNext( media_iterator );    if( next_media )    {        char psz_buf[0x32];        size_t dev_path_length;        CFTypeRef str_bsd_path;         do        {            str_bsd_path = IORegistryEntryCreateCFProperty( next_media,                                                            CFSTR( kIOBSDNameKey ),                                                            kCFAllocatorDefault,                                                            0 );            if( str_bsd_path == NULL )            {                IOObjectRelease( next_media );                continue;            }             snprintf( psz_buf, sizeof(psz_buf), "%s%c", _PATH_DEV, 'r' );            dev_path_length = strlen( psz_buf );             if( CFStringGetCString( str_bsd_path,                                    (char*)&psz_buf + dev_path_length,                                    sizeof(psz_buf) - dev_path_length,                                    kCFStringEncodingASCII ) )            {                [p_list addObject: [NSString stringWithUTF8String: psz_buf]];            }             CFRelease( str_bsd_path );             IOObjectRelease( next_media );         } while( ( next_media = IOIteratorNext( media_iterator ) ) );    }     IOObjectRelease( media_iterator );    o_devices = [NSArray arrayWithArray: p_list];    return( o_devices );}/***************************************************************************** * VLCOpen implementation *****************************************************************************/@implementation VLCOpenstatic VLCOpen *_o_sharedMainInstance = nil;+ (VLCOpen *)sharedInstance{    return _o_sharedMainInstance ? _o_sharedMainInstance : [[self alloc] init];}- (id)init{    if( _o_sharedMainInstance) {        [self dealloc];    } else {        _o_sharedMainInstance = [super init];    }     return _o_sharedMainInstance;}- (void)awakeFromNib{    intf_thread_t * p_intf = VLCIntf;    [o_panel setTitle: _NS("Open Source")];    [o_mrl_lbl setTitle: _NS("Media Resource Locator (MRL)")];    [o_btn_ok setTitle: _NS("OK")];    [o_btn_cancel setTitle: _NS("Cancel")];    [[o_tabview tabViewItemAtIndex: 0] setLabel: _NS("File")];    [[o_tabview tabViewItemAtIndex: 1] setLabel: _NS("Disc")];    [[o_tabview tabViewItemAtIndex: 2] setLabel: _NS("Network")];    [[o_tabview tabViewItemAtIndex: 3] setLabel: _NS("Capture")];    [o_file_btn_browse setTitle: _NS("Browse...")];    [o_file_stream setTitle: _NS("Treat as a pipe rather than as a file")];    [o_disc_device_lbl setStringValue: _NS("Device name")];    [o_disc_title_lbl setStringValue: _NS("Title")];    [o_disc_chapter_lbl setStringValue: _NS("Chapter")];    [o_disc_videots_btn_browse setTitle: _NS("Browse...")];    [o_disc_dvd_menus setTitle: _NS("No DVD menus")];    [[o_disc_type cellAtRow:0 column:0] setTitle: _NS("VIDEO_TS directory")];    [[o_disc_type cellAtRow:1 column:0] setTitle: _NS("DVD")];    [[o_disc_type cellAtRow:2 column:0] setTitle: _NS("VCD")];    [[o_disc_type cellAtRow:3 column:0] setTitle: _NS("Audio CD")];    [o_net_udp_port_lbl setStringValue: _NS("Port")];    [o_net_udpm_addr_lbl setStringValue: _NS("Address")];    [o_net_udpm_port_lbl setStringValue: _NS("Port")];    [o_net_http_url_lbl setStringValue: _NS("URL")];    [[o_net_mode cellAtRow:0 column:0] setTitle: _NS("UDP/RTP")];    [[o_net_mode cellAtRow:1 column:0] setTitle: _NS("UDP/RTP Multicast")];    [[o_net_mode cellAtRow:2 column:0] setTitle: _NS("HTTP/FTP/MMS/RTSP")];    [o_net_timeshift_ckbox setTitle: _NS("Allow timeshifting")];    [o_net_udp_port setIntValue: config_GetInt( p_intf, "server-port" )];    [o_net_udp_port_stp setIntValue: config_GetInt( p_intf, "server-port" )];    [o_eyetv_chn_bgbar setUsesThreadedAnimation: YES];    [o_capture_mode_pop removeAllItems];    if( MACOS_VERSION > 10.4f )        [o_capture_mode_pop addItemWithTitle: @"iSight"];    [o_capture_mode_pop addItemWithTitle: _NS("Screen")];    [o_capture_mode_pop addItemWithTitle: @"EyeTV"];    [o_screen_lbl setStringValue: _NS("Screen Capture Input")];    [o_screen_long_lbl setStringValue: _NS("This facility allows you to process your screen's output.")];    [o_screen_fps_lbl setStringValue: _NS("Frames per Second:")];    [o_eyetv_currentChannel_lbl setStringValue: _NS("Current channel:")];    [o_eyetv_previousProgram_btn setTitle: _NS("Previous Channel")];    [o_eyetv_nextProgram_btn setTitle: _NS("Next Channel")];    [o_eyetv_chn_status_txt setStringValue: _NS("Retrieving Channel Info...")];    [o_eyetv_noInstance_lbl setStringValue: _NS("EyeTV is not launched")];    [o_eyetv_noInstanceLong_lbl setStringValue: _NS("VLC could not connect to EyeTV.\nMake sure that you installed VLC's EyeTV plugin.")];    [o_eyetv_launchEyeTV_btn setTitle: _NS("Launch EyeTV now")];    [o_eyetv_getPlugin_btn setTitle: _NS("Download Plugin")];    [self setSubPanel];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openFilePathChanged:)        name: NSControlTextDidChangeNotification        object: o_file_path];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openDiscInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_disc_device];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openDiscInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_disc_title];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openDiscInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_disc_chapter];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openDiscInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_disc_videots_folder];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openNetInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_net_udp_port];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openNetInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_net_udpm_addr];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openNetInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_net_udpm_port];    [[NSNotificationCenter defaultCenter] addObserver: self        selector: @selector(openNetInfoChanged:)        name: NSControlTextDidChangeNotification        object: o_net_http_url];    [[NSDistributedNotificationCenter defaultCenter] addObserver: self                                                        selector: @selector(eyetvChanged:)                                                            name: NULL                                                          object: @"VLCEyeTVSupport"                                              suspensionBehavior: NSNotificationSuspensionBehaviorDeliverImmediately];    [[NSNotificationCenter defaultCenter] addObserver: self                                             selector: @selector(screenFPSfieldChanged:)                                                 name: NSControlTextDidChangeNotification                                               object: o_screen_fps_fld];    /* register clicks on text fields */    [[NSNotificationCenter defaultCenter] addObserver: self                                             selector: @selector(textFieldWasClicked:)                                                 name: @"VLCOpenTextFieldWasClicked"                                               object: nil];}- (void)setSubPanel{    intf_thread_t * p_intf = VLCIntf;    int i_index;    module_config_t * p_item;    [o_file_sub_ckbox setTitle: _NS("Load subtitles file:")];    [o_file_sub_btn_settings setTitle: _NS("Settings...")];    [o_file_sub_btn_browse setTitle: _NS("Browse...")];    [o_file_sub_override setTitle: _NS("Override parametters")];    [o_file_sub_delay_lbl setStringValue: _NS("Delay")];    [o_file_sub_delay_stp setEnabled: NO];    [o_file_sub_fps_lbl setStringValue: _NS("FPS")];    [o_file_sub_fps_stp setEnabled: NO];    [o_file_sub_encoding_lbl setStringValue: _NS("Subtitles encoding")];    [o_file_sub_encoding_pop removeAllItems];    [o_file_sub_size_lbl setStringValue: _NS("Font size")];    [o_file_sub_size_pop removeAllItems];    [o_file_sub_align_lbl setStringValue: _NS("Subtitles alignment")];    [o_file_sub_align_pop removeAllItems];    [o_file_sub_ok_btn setStringValue: _NS("OK")];    [o_file_sub_font_box setTitle: _NS("Font Properties")];    [o_file_sub_file_box setTitle: _NS("Subtitle File")];    p_item = config_FindConfig( VLC_OBJECT(p_intf), "subsdec-encoding" );    if( p_item )    {        for( i_index = 0; p_item->ppsz_list && p_item->ppsz_list[i_index];             i_index++ )        {            [o_file_sub_encoding_pop addItemWithTitle:                [NSString stringWithUTF8String: p_item->ppsz_list[i_index]]];        }        [o_file_sub_encoding_pop selectItemWithTitle:                [NSString stringWithUTF8String: p_item->value.psz]];    }    p_item = config_FindConfig( VLC_OBJECT(p_intf), "subsdec-align" );    if ( p_item )    {        for ( i_index = 0; i_index < p_item->i_list; i_index++ )        {            [o_file_sub_align_pop addItemWithTitle:                [NSString stringWithUTF8String:                p_item->ppsz_list_text[i_index]]];        }        [o_file_sub_align_pop selectItemAtIndex: p_item->value.i];    }    p_item = config_FindConfig( VLC_OBJECT(p_intf), "freetype-rel-fontsize" );    if ( p_item )    {        for ( i_index = 0; i_index < p_item->i_list; i_index++ )        {            [o_file_sub_size_pop addItemWithTitle:                [NSString stringWithUTF8String:                p_item->ppsz_list_text[i_index]]];            if ( p_item->value.i == p_item->pi_list[i_index] )            {                [o_file_sub_size_pop selectItemAtIndex: i_index];            }        }    }}- (void)openTarget:(int)i_type{    int i_result;    intf_thread_t * p_intf = VLCIntf;    b_autoplay = config_GetInt( VLCIntf, "macosx-autoplay" );    [o_tabview selectTabViewItemAtIndex: i_type];    [o_file_sub_ckbox setState: NSOffState];     i_result = [NSApp runModalForWindow: o_panel];    [o_panel close];    if( i_result )    {        NSMutableDictionary *o_dic;        NSMutableArray *o_options = [NSMutableArray array];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -