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

📄 open.m

📁 VLC媒体播放程序
💻 M
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * open.m: MacOS X module for vlc ***************************************************************************** * Copyright (C) 2002-2003 VideoLAN * $Id: open.m,v 1.43 2004/01/27 22:19:04 bigben Exp $ * * Authors: Jon Lech Johansen <jon-vl@nanocrew.net>  *          Christophe Massiot <massiot@via.ecp.fr> *          Derk-Jan Hartman <thedj@users.sourceforge.net> * * 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., 59 Temple Place - Suite 330, Boston, MA  02111, 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>#include "intf.h"#include "playlist.h"#include "open.h"#include "output.h"/***************************************************************************** * 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 != NULL )    {        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 stringWithCString: psz_buf]];            }                        CFRelease( str_bsd_path );                        IOObjectRelease( next_media );                } while( ( next_media = IOIteratorNext( media_iterator ) ) != NULL );    }        IOObjectRelease( media_iterator );    o_devices = [NSArray arrayWithArray: p_list];    return( o_devices );}/***************************************************************************** * VLCOpen implementation  *****************************************************************************/@implementation VLCOpen- (void)awakeFromNib{    intf_thread_t * p_intf = [NSApp getIntf];    [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_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("Use DVD menus")];    [[o_disc_type cellAtRow:0 column:0] setTitle: _NS("VIDEO_TS folder")];    [[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")];    [o_net_udp_port setIntValue: config_GetInt( p_intf, "server-port" )];    [o_net_udp_port_stp setIntValue: config_GetInt( p_intf, "server-port" )];    [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")];    [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_ok_btn setStringValue: _NS("OK")];        [[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];}- (void)openTarget:(int)i_type{    int i_result;    [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];        o_dic = [NSMutableDictionary dictionaryWithObject: [o_mrl stringValue] forKey: @"ITEM_URL"];                if( [o_file_sub_ckbox state] == NSOnState )        {            [o_options addObject: [NSString stringWithFormat: @"sub-file=%s", [[o_file_sub_path stringValue] UTF8String]]];            if( [o_file_sub_override state] == NSOnState )            {                [o_options addObject: [NSString stringWithFormat: @"sub-delay=%i", (int)( [o_file_sub_delay intValue] * 10 )]];                [o_options addObject: [NSString stringWithFormat: @"sub-fps=%f", [o_file_sub_fps floatValue]]];            }        }        if( [o_output_ckbox state] == NSOnState )        {            [o_options addObject: [NSString stringWithString: [(VLCOutput *)o_sout_options getMRL]]];        }        [o_dic setObject: (NSArray *)[o_options copy] forKey: @"ITEM_OPTIONS"];        [o_playlist appendArray: [NSArray arrayWithObject: o_dic] atPos: -1 enqueue:NO];    }}- (void)tabView:(NSTabView *)o_tv didSelectTabViewItem:(NSTabViewItem *)o_tvi{    NSString *o_label = [o_tvi label];    if( [o_label isEqualToString: _NS("File")] )    {        [self openFilePathChanged: nil];    }    else if( [o_label isEqualToString: _NS("Disc")] )    {        [self openDiscTypeChanged: nil];    }    else if( [o_label isEqualToString: _NS("Network")] )    {        [self openNetModeChanged: nil];    }  }- (IBAction)openFileGeneric:(id)sender{    [self openFilePathChanged: nil];    [self openTarget: 0];}- (IBAction)openDisc:(id)sender{    [self openDiscTypeChanged: nil];    [self openTarget: 1];}- (IBAction)openNet:(id)sender{    [self openNetModeChanged: nil];    [self openTarget: 2];}- (void)openFilePathChanged:(NSNotification *)o_notification{    NSString *o_mrl_string;    NSString *o_filename = [o_file_path stringValue];    NSString *o_ext = [o_filename pathExtension];    vlc_bool_t b_stream = [o_file_stream state];    BOOL b_dir = NO;        [[NSFileManager defaultManager] fileExistsAtPath:o_filename isDirectory:&b_dir];    if( b_dir )    {        o_mrl_string = [NSString stringWithFormat: @"dir:%@", o_filename];    }    else if( [o_ext isEqualToString: @"bin"] ||        [o_ext isEqualToString: @"cue"] ||        [o_ext isEqualToString: @"vob"] ||        [o_ext isEqualToString: @"iso"] )    {        o_mrl_string = o_filename;    }    else    {        o_mrl_string = [NSString stringWithFormat: @"%s://%@",                        b_stream ? "stream" : "file",                        o_filename];    }    [o_mrl setStringValue: o_mrl_string]; }- (IBAction)openFileBrowse:(id)sender{    NSOpenPanel *o_open_panel = [NSOpenPanel openPanel];        [o_open_panel setAllowsMultipleSelection: NO];    [o_open_panel setCanChooseDirectories: YES];    [o_open_panel setTitle: _NS("Open File")];    [o_open_panel setPrompt: _NS("Open")];    [o_open_panel beginSheetForDirectory:nil        file:nil        types:nil        modalForWindow:[sender window]        modalDelegate: self        didEndSelector: @selector(pathChosenInPanel:                         withReturn:                        contextInfo:)        contextInfo: nil];}- (void)pathChosenInPanel: (NSOpenPanel *) sheet withReturn:(int)returnCode contextInfo:(void  *)contextInfo{    if (returnCode == NSFileHandlingPanelOKButton)    {        NSString *o_filename = [[sheet filenames] objectAtIndex: 0];        [o_file_path setStringValue: o_filename];        [self openFilePathChanged: nil];    }}- (IBAction)openFileStreamChanged:(id)sender{    [self openFilePathChanged: nil];}- (IBAction)openDiscTypeChanged:(id)sender{    NSString *o_type;    vlc_bool_t b_device, b_menus, b_title_chapter;        [o_disc_device removeAllItems];    b_title_chapter = ![o_disc_dvd_menus state];    

⌨️ 快捷键说明

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