Commit a51501d7 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

Remove VLCKit

parent 60e3f3c4
!Makefile
*.mode*
*.pbxuser
*.xcworkspace
xcuserdata
#
# Configure script
#
# used by VLCKit.xcodeproj
if test "x$SYMROOT" = "x"; then
echo " This script is bound to be launched by VLCKit.xcodeproj, not you"
exit 1
fi
if test "$ACTION" = "clean"; then
rm -Rf $VLC_BUILD_DIR
exit 0
fi
# Construct the vlc_build_dir
mkdir -p $VLC_BUILD_DIR
cd $VLC_BUILD_DIR
# Construct the argument list
echo "Building for $ARCHS with sdk=\"$SDKROOT\" in $VLC_BUILD_DIR"
args="--disable-nls $args"
# Mac OS X related options
args="--disable-macosx $args" # Disable old gui/macosx
args="--disable-macosx-vlc-app $args" # Don't build old vlc.app
args="--with-macosx-version-min=10.6 $args"
# optional modules
args="--enable-merge-ffmpeg $args"
args="--enable-faad $args"
args="--enable-flac $args"
args="--enable-theora $args"
args="--enable-shout $args"
args="--enable-twolame $args"
args="--enable-realrtsp $args"
args="--enable-libass $args"
args="--enable-macosx-audio $args"
args="--enable-macosx-dialog-provider $args"
args="--enable-macosx-eyetv $args"
args="--enable-macosx-qtkit $args"
args="--enable-macosx-vout $args"
# disabled stuff
args="--disable-growl $args"
args="--disable-caca $args"
args="--disable-ncurses $args"
args="--disable-httpd $args"
args="--disable-vlm $args"
args="--disable-skins2 $args"
args="--disable-glx $args"
args="--disable-xvideo $args"
args="--disable-xcb $args"
args="--disable-sdl $args"
args="--disable-sdl-image $args"
args="--disable-visual $args"
args="--disable-samplerate $args"
if test "x$SDKROOT" != "x"
then
args="--with-macosx-sdk=$SDKROOT $args"
fi
# Debug Flags
if test "$CONFIGURATION" = "Debug"; then
args="--enable-debug $args"
fi
# 64 bits switches
for arch in $ARCHS; do
this_args="$args"
# where to install
this_args="--prefix=${VLC_BUILD_DIR}/$arch/vlc_install_dir $this_args"
input="$VLC_SRC_DIR/configure"
output="$arch/Makefile"
if test -e ${output} && test ${output} -nt ${input}; then
echo "No need to re-run configure for $arch"
continue;
fi
# Construct the vlc_build_dir/$arch
mkdir -p $arch
cd $arch
echo "Running [$arch] configure $this_args"
if test $arch = "x86_64"; then
export CFLAGS="-m64 -arch x86_64"
export CXXFLAGS="-m64 -arch x86_64"
export OBJCFLAGS="-m64 -arch x86_64"
export CPPFLAGS="-m64 -arch x86_64"
this_args="--build=x86_64-apple-darwin10 --with-contrib=$VLC_SRC_DIR/contrib/x86_64-apple-darwin10 $this_args"
export PATH=$VLC_SRC_DIR/extras/tools/build/bin:$VLC_SRC_DIR/contrib/x86_64-apple-darwin10/bin:$PATH
export PKG_CONFIG_PATH=$VLC_SRC_DIR/contrib/x86_64-apple-darwin10/lib/pkgconfig
fi
if test $arch = "i386"; then
export CFLAGS="-m32 -arch i386"
export CXXFLAGS="-m32 -arch i386"
export OBJCFLAGS="-m32 -arch i386"
export CPPFLAGS="-m32 -arch i386"
this_args="--build=i686-apple-darwin9 --with-contrib=$VLC_SRC_DIR/contrib/i686-apple-darwin9 $this_args"
fi
if test $arch = "ppc"; then
export CFLAGS="-m32 -arch ppc"
export CXXFLAGS="-m32 -arch ppc"
export OBJCFLAGS="-m32 -arch ppc"
export CPPFLAGS="-m32 -arch ppc"
this_args="--build=powerpc-apple-darwin9 --with-contrib=$VLC_SRC_DIR/contrib/powerpc-apple-darwin9 $this_args"
fi
$VLC_SRC_DIR/configure $this_args
err=$?
if test $err != 0; then
exit $err
fi
cd ..
done
/* Controller */
#import <Cocoa/Cocoa.h>
#import <VLCKit/VLCKit.h>
@interface Controller : NSObject
{
IBOutlet NSView * remoteURLView;
IBOutlet NSView * workingView;
IBOutlet NSWindow * window;
IBOutlet NSButton * openConvertedFileButton;
NSNumber * selectedStreamOutput;
NSString * remoteURLAsString;
VLCMedia * media;
VLCStreamSession * streamSession;
NSString * outputFilePath;
NSString * outputFolderPath;
}
- (void)awakeFromNib;
@property (retain) VLCMedia * media;
@property (retain) VLCStreamSession * streamSession;
@property (assign) NSNumber * selectedStreamOutput;
@property (retain,readonly) NSString * outputFilePath;
@property (retain,readonly) NSString * outputFolderPath;
@property (retain) NSString * remoteURLAsString;
- (IBAction)convert:(id)sender;
- (IBAction)openConvertedFile:(id)sender;
- (IBAction)openConvertedEnclosingFolder:(id)sender;
- (IBAction)pickOutputFolderPath:(id)sender;
@end
#import "Controller.h"
/**********************************************************
* First off, some value transformer to easily play with
* bindings
*/
@interface VLCFloat10000FoldTransformer : NSObject
@end
@implementation VLCFloat10000FoldTransformer
+ (Class)transformedValueClass
{
return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation
{
return YES;
}
- (id)transformedValue:(id)value
{
if( !value ) return nil;
if(![value respondsToSelector: @selector(floatValue)])
{
[NSException raise: NSInternalInconsistencyException
format: @"Value (%@) does not respond to -floatValue.",
[value class]];
return nil;
}
return [NSNumber numberWithFloat: [value floatValue]*10000.];
}
- (id)reverseTransformedValue:(id)value
{
if( !value ) return nil;
if(![value respondsToSelector: @selector(floatValue)])
{
[NSException raise: NSInternalInconsistencyException
format: @"Value (%@) does not respond to -floatValue.",
[value class]];
return nil;
}
return [NSNumber numberWithFloat: [value floatValue]/10000.];
}
@end
/**********************************************************
* @implementation Controller
*/
@interface Controller ()
@property (retain,readwrite) NSString * outputFolderPath;
@end
@implementation Controller
- (id)init
{
if(self = [super init])
{
[self bind:@"outputFolderPath" toObject:[NSUserDefaultsController sharedUserDefaultsController]
withKeyPath:@"values.outputFolderPath" options:nil];
[[[NSUserDefaultsController sharedUserDefaultsController] values] bind:@"outputFolderPath" toObject:self
withKeyPath:@"outputFolderPath" options:nil];
VLCFloat10000FoldTransformer *float100fold;
float100fold = [[[VLCFloat10000FoldTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:(id)float100fold forName:@"Float10000FoldTransformer"];
self.media = nil;
self.streamSession = nil;
selectedStreamOutput = [[NSNumber alloc] initWithInt:0];
self.remoteURLAsString = [NSString stringWithString:@"http://youtube.com/watch?v=IXpx2OEWBdA&feature=bz303"];
outputFilePath = nil;
if( !self.outputFolderPath || [self.outputFolderPath isKindOfClass:[NSNull class]])
self.outputFolderPath = [@"~/Movies/Flash Video Converted" stringByExpandingTildeInPath];
}
return self;
}
- (void)dealloc
{
[outputFilePath release];
[remoteURLAsString release];
[streamSession release];
[media release];
[super dealloc];
}
@synthesize streamSession;
@synthesize selectedStreamOutput;
@synthesize media;
@synthesize outputFolderPath;
- (void)awakeFromNib
{
[window setShowsResizeIndicator:NO];
[NSApp setDelegate: self];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[VLCLibrary sharedLibrary];
}
- (NSString *)remoteURLAsString
{
return remoteURLAsString;
}
- (void)setRemoteURLAsString:(NSString *)newURLAsString
{
[remoteURLAsString release];
remoteURLAsString = [[newURLAsString copy] retain];
media = [[newURLAsString copy] retain];
[self setMedia:[VLCMedia mediaWithPath:newURLAsString]];
}
+ (NSSet *)keyPathsForValuesAffectingOutputFilePath
{
return [NSSet setWithObjects:@"media.metaDictionary.title", nil];
}
- (void)freezeOutputFilePath
{
[outputFilePath release];
outputFilePath = nil;
outputFilePath = [self outputFilePath];
[outputFilePath retain];
}
- (NSString *)outputFilePath
{
if(outputFilePath)
return [outputFilePath copy];
VLCMedia * aMedia = self.streamSession ? self.streamSession.media ? self.streamSession.media : self.media : self.media;
NSString * name = [[[aMedia metaDictionary] objectForKey:@"title"] lastPathComponent];
NSString * extension = [selectedStreamOutput intValue] == 2 ? @"mpeg" : @"mp4";
NSString * path = [NSString stringWithFormat:@"%@/%@.%@", self.outputFolderPath, name, extension ];
int i;
for( i = 0; [[NSFileManager defaultManager] fileExistsAtPath:path]; i ++)
{
path = [NSString stringWithFormat:@"%@/%@ %d.%@", self.outputFolderPath, name, i, extension ];
if( i > 256 )
{
/* Don't got too far */
/* FIXME: Be nicer with the user and give him a choice for the new name */
NSRunAlertPanelRelativeToWindow(@"File already exists",
[NSString stringWithFormat:
@"File '%@', already exists. The old one will be deleted when the OK button will be pressed", path],
@"OK", nil, nil, window);
break;
}
}
return path;
}
- (IBAction)convert:(id)sender
{
VLCStreamOutput * streamOutput;
[self.streamSession removeObserver:self forKeyPath:@"isComplete"];
self.streamSession = [VLCStreamSession streamSession];
[self freezeOutputFilePath];
if([selectedStreamOutput intValue] == 2)
{
streamOutput = [VLCStreamOutput mpeg2StreamOutputWithFilePath:[self outputFilePath]];
}
else if([selectedStreamOutput intValue] == 1)
{
streamOutput = [VLCStreamOutput mpeg4StreamOutputWithFilePath:[self outputFilePath]];
}
else
streamOutput = [VLCStreamOutput ipodStreamOutputWithFilePath:[self outputFilePath]];
/* Make sure we are exporting to a well known directory */
[[NSFileManager defaultManager] createDirectoryAtPath:self.outputFolderPath attributes:nil];
[self.streamSession setStreamOutput:streamOutput];
[self.streamSession setMedia:self.media];
[self.streamSession startStreaming];
[self.streamSession addObserver:self forKeyPath:@"isComplete" options:NSKeyValueObservingOptionNew context:nil];
/* Show the new view */
[[window contentView] addSubview:workingView];
NSRect frame = [workingView frame];
frame.origin.y -= NSHeight([window contentRectForFrameRect:[window frame]]) + 20.f;
[workingView setFrame:frame];
[[window animator] setFrame:NSMakeRect([window frame].origin.x, [window frame].origin.y-NSHeight([workingView frame]), NSWidth([window frame]), NSHeight([window frame])+NSHeight([workingView frame])) display:YES];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"isComplete"])
{
if([self.streamSession isComplete])
{
/* Notify the user */
[[NSSound soundNamed:@"Glass"] play];
/* Set the icon */
[openConvertedFileButton setImage:[[NSWorkspace sharedWorkspace] iconForFile:[self outputFilePath]]];
/* Rename the link with a nicer name */
NSString * oldPath = [self outputFilePath];
[self freezeOutputFilePath];
[[NSFileManager defaultManager] moveItemAtPath:oldPath toPath:[self outputFilePath] error:NULL];
}
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
- (IBAction)openConvertedFile:(id)sender
{
[[NSWorkspace sharedWorkspace] openFile:[self outputFilePath]];
}
- (IBAction)pickOutputFolderPath:(id)sender;
{
NSOpenPanel * panel = [NSOpenPanel openPanel];
[panel setCanChooseFiles:NO];
[panel setCanChooseDirectories:YES];
[panel setAllowsMultipleSelection:NO];
[panel beginSheetForDirectory:self.outputFolderPath file:nil types:nil modalForWindow:[sender window] modalDelegate:self didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:nil];
}
- (void)openPanelDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
if(returnCode != NSOKButton || ![[panel filenames] count])
return;
self.outputFolderPath = [[panel filenames] objectAtIndex:0];
}
- (IBAction)openConvertedEnclosingFolder:(id)sender
{
[[NSWorkspace sharedWorkspace] selectFile:[self outputFilePath] inFileViewerRootedAtPath:[[self outputFilePath] stringByDeletingLastPathComponent]];
}
- (IBAction)cancel:(id)sender
{
[self.streamSession stop];
}
@end
Binary files a/projects/macosx/framework/Examples/FlashVideoDownloader/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBClasses</key>
<array>
<dict>
<key>CLASS</key>
<string>GradientBackgroundView</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>SUPERCLASS</key>
<string>NSImageView</string>
</dict>
<dict>
<key>CLASS</key>
<string>FirstResponder</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>SUPERCLASS</key>
<string>NSObject</string>
</dict>
<dict>
<key>ACTIONS</key>
<dict>
<key>convert</key>
<string>id</string>
<key>openConvertedEnclosingFolder</key>
<string>id</string>
<key>openConvertedFile</key>
<string>id</string>
<key>pickOutputFolderPath</key>
<string>id</string>
</dict>
<key>CLASS</key>
<string>Controller</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>OUTLETS</key>
<dict>
<key>openConvertedFileButton</key>
<string>NSButton</string>
<key>remoteURLView</key>
<string>NSView</string>
<key>titleView</key>
<string>NSView</string>
<key>window</key>
<string>NSWindow</string>
<key>workingView</key>
<string>NSView</string>
</dict>
<key>SUPERCLASS</key>
<string>NSObject</string>
</dict>
</array>
<key>IBVersion</key>
<string>1</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBFramework Version</key>
<string>629</string>
<key>IBLastKnownRelativeProjectPath</key>
<string>../../FlashVideoDownloader.xcodeproj</string>
<key>IBOldestOS</key>
<integer>5</integer>
<key>IBOpenObjects</key>
<array>
<integer>21</integer>
<integer>169</integer>
<integer>940</integer>
<integer>704</integer>
</array>
<key>IBSystem Version</key>
<string>9B18</string>
<key>targetFramework</key>
<string>IBCocoaFramework</string>
</dict>
</plist>
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
632A105C0D39148A00AFC99B /* VLCKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 632A0F710D38F71A00AFC99B /* VLCKit.framework */; };
632A122C0D3947D900AFC99B /* GradientBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A122B0D3947D900AFC99B /* GradientBackgroundView.m */; };
6333027B0BD24CDB00193D7D /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = 633302790BD24CDB00193D7D /* Controller.m */; };
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
632A0F700D38F71A00AFC99B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = VLCKit;
};
632A0F780D38F72F00AFC99B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = VLCKit;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* FlashVideoDownloader_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FlashVideoDownloader_Prefix.pch; sourceTree = "<group>"; };
632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VLCKit.xcodeproj; path = ../../VLCKit.xcodeproj; sourceTree = SOURCE_ROOT; };
632A122A0D3947D900AFC99B /* GradientBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GradientBackgroundView.h; sourceTree = "<group>"; };
632A122B0D3947D900AFC99B /* GradientBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GradientBackgroundView.m; sourceTree = "<group>"; };
633302780BD24CDB00193D7D /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = "<group>"; };
633302790BD24CDB00193D7D /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Controller.m; sourceTree = "<group>"; };
636836780D3999E5003A1400 /* Flash Video Downloader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Flash Video Downloader.app"; sourceTree = BUILT_PRODUCTS_DIR; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
632A105C0D39148A00AFC99B /* VLCKit.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
632A122A0D3947D900AFC99B /* GradientBackgroundView.h */,
632A122B0D3947D900AFC99B /* GradientBackgroundView.m */,
633302780BD24CDB00193D7D /* Controller.h */,
633302790BD24CDB00193D7D /* Controller.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
636836780D3999E5003A1400 /* Flash Video Downloader.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* test */ = {
isa = PBXGroup;
children = (
632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = test;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* FlashVideoDownloader_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
632A0F690D38F71A00AFC99B /* Products */ = {
isa = PBXGroup;
children = (
632A0F710D38F71A00AFC99B /* VLCKit.framework */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* Flash Video Downloader */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Flash Video Downloader" */;
buildPhases = (
636836C00D399CF0003A1400 /* ShellScript */,
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
);
buildRules = (
);
dependencies = (
632A0F790D38F72F00AFC99B /* PBXTargetDependency */,
);
name = "Flash Video Downloader";
productInstallPath = "$(HOME)/Applications";
productName = test;
productReference = 636836780D3999E5003A1400 /* Flash Video Downloader.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "FlashVideoDownloader" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* test */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 632A0F690D38F71A00AFC99B /* Products */;
ProjectRef = 632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */;
},
);
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* Flash Video Downloader */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
632A0F710D38F71A00AFC99B /* VLCKit.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = VLCKit.framework;
remoteRef = 632A0F700D38F71A00AFC99B /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */,
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
636836C00D399CF0003A1400 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if test \"$SYMROOT\" == \"$PROJECT_DIR/build\"\nthen\n\tVLCFRAMEWORK=\"$SRCROOT/../../build/$CONFIGURATION/VLCKit.framework\"\nelse\n\tVLCFRAMEWORK=\"$SYMROOT/$CONFIGURATION/VLCKit.framework\"\nfi\nmkdir -p \"$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH\"\n/Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks \"$VLCFRAMEWORK\" \"$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH\"";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
6333027B0BD24CDB00193D7D /* Controller.m in Sources */,
632A122C0D3947D900AFC99B /* GradientBackgroundView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
632A0F790D38F72F00AFC99B /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = VLCKit;
targetProxy = 632A0F780D38F72F00AFC99B /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
isa = PBXVariantGroup;
children = (
29B97319FDCFA39411CA2CEA /* English */,
);
name = MainMenu.nib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
);
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../build/Release\"";
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../build/Debug\"";
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
OTHER_LDFLAGS = (
"$(LD_FLAGS_LIBINTL)",
"$(LD_FLAGS_LIBVLC)",
"$(LD_FLAGS_LIBVLC_CONTROL)",
);
PRODUCT_NAME = "Flash Video Downloader";
VLC_FRAMEWORK = "$(TARGET_BUILD_DIR)/VLC.framework";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH)";
FRAMEWORK_SEARCH_PATHS = (
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
);
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../build/Release\"";
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../build/Debug\"";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
OTHER_LDFLAGS = (
"$(LD_FLAGS_LIBINTL)",
"$(LD_FLAGS_LIBVLC)",
"$(LD_FLAGS_LIBVLC_CONTROL)",
);
PRODUCT_NAME = "Flash Video Downloader";
VLC_FRAMEWORK = "$(TARGET_BUILD_DIR)/VLC.framework";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH)";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Flash Video Downloader" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "FlashVideoDownloader" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
//
// Prefix header for all source files of the 'test' target in the 'test' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
//
// GradientBackgroundView.h
// iPodConverter
//
// Created by Pierre d'Herbemont on 1/12/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface GradientBackgroundView : NSImageView {
}
@end
//
// GradientBackgroundView.m
// iPodConverter
//
// Created by Pierre d'Herbemont on 1/12/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "GradientBackgroundView.h"
/**********************************************************
* Why not drawing something nice?
*/
@implementation GradientBackgroundView
- (void)awakeFromNib
{
/* Buggy nib files... Force us to be on the back of the view hierarchy */
NSView * superView;
[self retain];
superView = [self superview];
[self removeFromSuperview];
[superView addSubview:self positioned: NSWindowBelow relativeTo:nil];
}
- (void)drawRect:(NSRect)rect
{
NSColor * topGradient = [NSColor colorWithCalibratedWhite:.12f alpha:1.0];
NSColor * bottomGradient = [NSColor colorWithCalibratedWhite:0.55f alpha:0.9];
NSGradient * gradient = [[NSGradient alloc] initWithColorsAndLocations:bottomGradient, 0.f, bottomGradient, 0.1f, topGradient, 1.f, nil];
[gradient drawInRect:self.bounds angle:90.0];
[super drawRect:rect];
}
@end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Flash Video Downloader</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>org.videolan.flashvideodownloader</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Flash Video Downloader</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// main.m
// test
//
// Created by Pierre d'Herbemont on 13/04/07.
// Copyright __MyCompanyName__ 2007. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import <VLCKit/VLCKit.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}
/* Controller */
#import <Cocoa/Cocoa.h>
#import <VLCKit/VLCKit.h>
#import <VLCKit/VLCMediaPlayer.h>
@interface Controller : NSObject
{
IBOutlet NSView * conversionView;
IBOutlet NSWindow * window;
IBOutlet NSButton * openConvertedFileButton;
NSNumber * selectedStreamOutput;
VLCMedia * media;
VLCStreamSession * streamSession;
}
- (void)awakeFromNib;
@property (retain) VLCMedia * media;
@property (retain) VLCStreamSession * streamSession;
@property (assign) NSNumber * selectedStreamOutput;
@property (retain,readonly) NSString * outputFilePath;
- (IBAction)convert:(id)sender;
- (IBAction)openConvertedFile:(id)sender;
- (IBAction)openConvertedEnclosingFolder:(id)sender;
@end
#import "Controller.h"
/**********************************************************
* First off, some value transformer to easily play with
* bindings
*/
@interface VLCFloat10000FoldTransformer : NSObject
@end
@implementation VLCFloat10000FoldTransformer
+ (Class)transformedValueClass
{
return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation
{
return YES;
}
- (id)transformedValue:(id)value
{
if( !value ) return nil;
if(![value respondsToSelector: @selector(floatValue)])
{
[NSException raise: NSInternalInconsistencyException
format: @"Value (%@) does not respond to -floatValue.",
[value class]];
return nil;
}
return [NSNumber numberWithFloat: [value floatValue]*10000.];
}
- (id)reverseTransformedValue:(id)value
{
if( !value ) return nil;
if(![value respondsToSelector: @selector(floatValue)])
{
[NSException raise: NSInternalInconsistencyException
format: @"Value (%@) does not respond to -floatValue.",
[value class]];
return nil;
}
return [NSNumber numberWithFloat: [value floatValue]/10000.];
}
@end
/**********************************************************
* @implementation Controller
*/
@implementation Controller
- (id)init
{
if(self = [super init])
{
VLCFloat10000FoldTransformer *float100fold;
float100fold = [[[VLCFloat10000FoldTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:(id)float100fold forName:@"Float10000FoldTransformer"];
self.media = nil;
self.streamSession = nil;
selectedStreamOutput = [[NSNumber alloc] initWithInt:0];
}
return self;
}
@synthesize streamSession;
@synthesize selectedStreamOutput;
- (void)awakeFromNib
{
[window setShowsResizeIndicator:NO];
[NSApp setDelegate: self];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[VLCLibrary sharedLibrary];
}
- (VLCMedia *)media
{
return media;
}
- (void)setMedia:(VLCMedia *)newMedia
{
[media release];
media = [newMedia retain];
NSRect newFrame = [window frameRectForContentRect:[conversionView frame]];
[[window animator] setFrame:NSMakeRect([window frame].origin.x, [window frame].origin.y+NSHeight([window frame])-NSHeight(newFrame), NSWidth(newFrame), NSHeight(newFrame)) display:YES];
[[window animator] setContentView:conversionView];
[window setMinSize:newFrame.size];
[window setMaxSize:NSMakeSize(10000., NSHeight(newFrame))];
[window setShowsResizeIndicator:YES];
}
+ (NSSet *)keyPathsForValuesAffectingOutputFilePath
{
return [NSSet setWithObjects:@"media.metaDictionary.title", nil];
}
- (NSString *)outputFilePath
{
return [NSString stringWithFormat:[@"~/Movies/iPod Converted/%@.mp4" stringByExpandingTildeInPath],
[[self.media metaDictionary] objectForKey:@"title"]];
}
- (IBAction)convert:(id)sender
{
self.streamSession = [VLCStreamSession streamSession];
if([selectedStreamOutput intValue] == 0)
{
[self.streamSession setStreamOutput:
[VLCStreamOutput ipodStreamOutputWithFilePath:
[self outputFilePath]
]];
}
else
{
/* This doesn't really is useful for the iPod/iPhone...
* But one day we'll figure that out */
NSRunAlertPanelRelativeToWindow(@"Warning", @"We can't really stream to the iPod/iPhone for now...\n\nSo we're just streaming using the RTP protocol, and annoucing it via SAP.\n\n(Launch the SAP VLC service discovery module to see it).", @"OK", nil, nil, window);
[self.streamSession setStreamOutput:
[VLCStreamOutput rtpBroadcastStreamOutput]];
}
NSLog(@"Using %@", self.streamSession.streamOutput );
[self.streamSession setMedia:self.media];
[self.streamSession startStreaming];
[openConvertedFileButton setImage:[[NSWorkspace sharedWorkspace] iconForFile:[self outputFilePath]]];
}
- (IBAction)openConvertedFile:(id)sender
{
[[NSWorkspace sharedWorkspace] openFile:[self outputFilePath]];
}
- (IBAction)openConvertedEnclosingFolder:(id)sender
{
[[NSWorkspace sharedWorkspace] openFile:[[self outputFilePath] stringByDeletingLastPathComponent]];
}
@end
Binary files a/projects/macosx/framework/Examples/iPodConverter/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBClasses</key>
<array>
<dict>
<key>CLASS</key>
<string>GradientBackgroundView</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>SUPERCLASS</key>
<string>NSImageView</string>
</dict>
<dict>
<key>CLASS</key>
<string>FirstResponder</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>SUPERCLASS</key>
<string>NSObject</string>
</dict>
<dict>
<key>ACTIONS</key>
<dict>
<key>convert</key>
<string>id</string>
<key>openConvertedEnclosingFolder</key>
<string>id</string>
<key>openConvertedFile</key>
<string>id</string>
</dict>
<key>CLASS</key>
<string>Controller</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>OUTLETS</key>
<dict>
<key>conversionView</key>
<string>NSView</string>
<key>openConvertedFileButton</key>
<string>NSButton</string>
<key>window</key>
<string>NSWindow</string>
</dict>
<key>SUPERCLASS</key>
<string>NSObject</string>
</dict>
<dict>
<key>CLASS</key>
<string>MovieReceiver</string>
<key>LANGUAGE</key>
<string>ObjC</string>
<key>OUTLETS</key>
<dict>
<key>controller</key>
<string>Controller</string>
</dict>
<key>SUPERCLASS</key>
<string>NSView</string>
</dict>
</array>
<key>IBVersion</key>
<string>1</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBFramework Version</key>
<string>629</string>
<key>IBLastKnownRelativeProjectPath</key>
<string>../../iPodConverter.xcodeproj</string>
<key>IBOldestOS</key>
<integer>5</integer>
<key>IBOpenObjects</key>
<array>
<integer>317</integer>
</array>
<key>IBSystem Version</key>
<string>9B18</string>
<key>targetFramework</key>
<string>IBCocoaFramework</string>
</dict>
</plist>
//
// GradientBackgroundView.h
// iPodConverter
//
// Created by Pierre d'Herbemont on 1/12/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface GradientBackgroundView : NSImageView {
}
@end
//
// GradientBackgroundView.m
// iPodConverter
//
// Created by Pierre d'Herbemont on 1/12/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "GradientBackgroundView.h"
/**********************************************************
* Why not drawing something nice?
*/
@implementation GradientBackgroundView
- (void)awakeFromNib
{
/* Buggy nib files... Force us to be on the back of the view hierarchy */
NSView * superView;
[self retain];
superView = [self superview];
[self removeFromSuperview];
[superView addSubview:self positioned: NSWindowBelow relativeTo:nil];
}
- (void)drawRect:(NSRect)rect
{
NSColor * topGradient = [NSColor colorWithCalibratedWhite:.12f alpha:1.0];
NSColor * bottomGradient = [NSColor colorWithCalibratedWhite:0.55f alpha:0.9];
NSGradient * gradient = [[NSGradient alloc] initWithColorsAndLocations:bottomGradient, 0.f, bottomGradient, 0.1f, topGradient, 1.f, nil];
[gradient drawInRect:self.bounds angle:90.0];
[super drawRect:rect];
}
@end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>iPodConverter</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>org.videolan.ipodconverter</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// MovieReceiver.h
// iPodConverter
//
// Created by Pierre d'Herbemont on 1/12/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "Controller.h"
@interface MovieReceiver : NSView {
IBOutlet Controller * controller;
}
@end
//
// MovieReceiver.m
// iPodConverter
//
// Created by Pierre d'Herbemont on 1/12/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "MovieReceiver.h"
/**********************************************************
* This handles drag-and-drop in the main window
*/
@implementation MovieReceiver
- (void)awakeFromNib
{
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil]];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
return NSDragOperationGeneric;
}
- (NSDragOperation)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *pboard = [sender draggingPasteboard];
if ( [[pboard types] containsObject:NSFilenamesPboardType] )
{
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
for( NSString * filename in files )
{
[controller setMedia:[VLCMedia mediaWithPath:filename]];
}
}
return YES;
return NSDragOperationGeneric;
}
@end
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
632A105C0D39148A00AFC99B /* VLCKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 632A0F710D38F71A00AFC99B /* VLCKit.framework */; };
632A121B0D3945EA00AFC99B /* MovieReceiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A121A0D3945EA00AFC99B /* MovieReceiver.m */; };
632A122C0D3947D900AFC99B /* GradientBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A122B0D3947D900AFC99B /* GradientBackgroundView.m */; };
6333027B0BD24CDB00193D7D /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = 633302790BD24CDB00193D7D /* Controller.m */; };
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
632A0F700D38F71A00AFC99B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = VLCKit;
};
632A0F780D38F72F00AFC99B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = VLCKit;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* test_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = test_Prefix.pch; sourceTree = "<group>"; };
632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VLCKit.xcodeproj; path = ../../VLCKit.xcodeproj; sourceTree = SOURCE_ROOT; };
632A12190D3945EA00AFC99B /* MovieReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MovieReceiver.h; sourceTree = "<group>"; };
632A121A0D3945EA00AFC99B /* MovieReceiver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MovieReceiver.m; sourceTree = "<group>"; };
632A122A0D3947D900AFC99B /* GradientBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GradientBackgroundView.h; sourceTree = "<group>"; };
632A122B0D3947D900AFC99B /* GradientBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GradientBackgroundView.m; sourceTree = "<group>"; };
633302780BD24CDB00193D7D /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = "<group>"; };
633302790BD24CDB00193D7D /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Controller.m; sourceTree = "<group>"; };
636836780D3999E5003A1400 /* iPodConverter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPodConverter.app; sourceTree = BUILT_PRODUCTS_DIR; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
632A105C0D39148A00AFC99B /* VLCKit.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
632A122A0D3947D900AFC99B /* GradientBackgroundView.h */,
632A122B0D3947D900AFC99B /* GradientBackgroundView.m */,
632A12190D3945EA00AFC99B /* MovieReceiver.h */,
632A121A0D3945EA00AFC99B /* MovieReceiver.m */,
633302780BD24CDB00193D7D /* Controller.h */,
633302790BD24CDB00193D7D /* Controller.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
636836780D3999E5003A1400 /* iPodConverter.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* test */ = {
isa = PBXGroup;
children = (
632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = test;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* test_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
632A0F690D38F71A00AFC99B /* Products */ = {
isa = PBXGroup;
children = (
632A0F710D38F71A00AFC99B /* VLCKit.framework */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* iPodConverter */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iPodConverter" */;
buildPhases = (
636836C00D399CF0003A1400 /* ShellScript */,
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
);
buildRules = (
);
dependencies = (
632A0F790D38F72F00AFC99B /* PBXTargetDependency */,
);
name = iPodConverter;
productInstallPath = "$(HOME)/Applications";
productName = test;
productReference = 636836780D3999E5003A1400 /* iPodConverter.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iPodConverter" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* test */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 632A0F690D38F71A00AFC99B /* Products */;
ProjectRef = 632A0F680D38F71A00AFC99B /* VLCKit.xcodeproj */;
},
);
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* iPodConverter */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
632A0F710D38F71A00AFC99B /* VLCKit.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = VLCKit.framework;
remoteRef = 632A0F700D38F71A00AFC99B /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */,
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
636836C00D399CF0003A1400 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if test \"$SYMROOT\" == \"$PROJECT_DIR/build\"\nthen\n\tVLCFRAMEWORK=\"$SRCROOT/../../build/$CONFIGURATION/VLCKit.framework\"\nelse\n\tVLCFRAMEWORK=\"$SYMROOT/$CONFIGURATION/VLCKit.framework\"\nfi\nmkdir -p $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH\n/Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks $VLCFRAMEWORK $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
6333027B0BD24CDB00193D7D /* Controller.m in Sources */,
632A121B0D3945EA00AFC99B /* MovieReceiver.m in Sources */,
632A122C0D3947D900AFC99B /* GradientBackgroundView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
632A0F790D38F72F00AFC99B /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = VLCKit;
targetProxy = 632A0F780D38F72F00AFC99B /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
isa = PBXVariantGroup;
children = (
29B97319FDCFA39411CA2CEA /* English */,
);
name = MainMenu.nib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
);
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../build/Release\"";
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../build/Debug\"";
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
OTHER_LDFLAGS = (
"$(LD_FLAGS_LIBINTL)",
"$(LD_FLAGS_LIBVLC)",
"$(LD_FLAGS_LIBVLC_CONTROL)",
);
PRODUCT_NAME = iPodConverter;
VLC_FRAMEWORK = "$(TARGET_BUILD_DIR)/VLC.framework";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH)";
FRAMEWORK_SEARCH_PATHS = (
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
);
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../build/Release\"";
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../build/Debug\"";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
OTHER_LDFLAGS = (
"$(LD_FLAGS_LIBINTL)",
"$(LD_FLAGS_LIBVLC)",
"$(LD_FLAGS_LIBVLC_CONTROL)",
);
PRODUCT_NAME = iPodConverter;
VLC_FRAMEWORK = "$(TARGET_BUILD_DIR)/VLC.framework";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH)";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iPodConverter" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iPodConverter" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
//
// Prefix header for all source files of the 'test' target in the 'test' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
//
// main.m
// test
//
// Created by Pierre d'Herbemont on 13/04/07.
// Copyright __MyCompanyName__ 2007. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import <VLCKit/VLCKit.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}
/* Controller */
#import <Cocoa/Cocoa.h>
#import <VLCKit/VLCKit.h>
@interface Controller : NSObject
{
IBOutlet id window;
IBOutlet id playlistOutline;
IBOutlet id videoHolderView;
VLCVideoView * videoView;
VLCMediaList *playlist;
VLCMediaPlayer *player;
int mediaIndex;
}
- (void)awakeFromNib;
- (void)setMediaIndex:(int)value;
- (void)play:(id)sender;
- (void)pause:(id)sender;
@end
#import "Controller.h"
static void *sleepForMe(void)
{
while (1) sleep(60);
}
@implementation Controller
- (void)awakeFromNib
{
// atexit((void*)sleepForMe); // Only used for memory leak debugging
[NSApp setDelegate:self];
// Allocate a VLCVideoView instance and tell it what area to occupy.
NSRect rect = NSMakeRect(0, 0, 0, 0);
rect.size = [videoHolderView frame].size;
videoView = [[VLCVideoView alloc] initWithFrame:rect];
[videoHolderView addSubview:videoView];
[videoView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable];
videoView.fillScreen = YES;
playlist = [[VLCMediaList alloc] init];
[playlist addObserver:self forKeyPath:@"media" options:NSKeyValueObservingOptionNew context:nil];
player = [[VLCMediaPlayer alloc] initWithVideoView:videoView];
mediaIndex = -1;
[playlistOutline registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil]];
[playlistOutline setDoubleAction:@selector(changeAndPlay:)];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
}
- (void)applicationWillTerminate:(NSNotification *)aNotification
{
[playlist removeObserver:self forKeyPath:@"media"];
[player pause];
[player setMedia:nil];
[player release];
[playlist release];
[videoView release];
}
- (void)changeAndPlay:(id)sender
{
if ([playlistOutline selectedRow] != mediaIndex)
{
[self setMediaIndex:[playlistOutline selectedRow]];
if (![player isPlaying])
[player play];
}
}
- (void)setMediaIndex:(int)value
{
if ([playlist count] <= 0)
return;
if (value < 0)
value = 0;
if (value > [playlist count] - 1)
value = [playlist count] - 1;
mediaIndex = value;
[player setMedia:[playlist mediaAtIndex:mediaIndex]];
}
- (void)play:(id)sender
{
[self setMediaIndex:mediaIndex+1];
if (![player isPlaying])
{
NSLog(@"%@ length = %@", [playlist mediaAtIndex:mediaIndex], [[playlist mediaAtIndex:mediaIndex] lengthWaitUntilDate:[NSDate dateWithTimeIntervalSinceNow:60]]);
[player play];
}
}
- (void)pause:(id)sender
{
NSLog(@"Sending pause message to media player...");
[player pause];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"media"] && object == playlist) {
[playlistOutline reloadData];
}
}
// NSTableView Implementation
- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
return [playlist count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn
row:(int)row
{
return [(VLCMedia *)[playlist mediaAtIndex:row].metaDictionary valueForKey:VLCMetaInformationTitle];
}
- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info
proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)op
{
return NSDragOperationEvery; /* This is for now */
}
- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
row:(int)row dropOperation:(NSTableViewDropOperation)operation
{
int i;
NSArray *droppedItems = [[info draggingPasteboard] propertyListForType:NSFilenamesPboardType];
for (i = 0; i < [droppedItems count]; i++)
{
NSString * filename = [droppedItems objectAtIndex:i];
VLCMedia * media = [VLCMedia mediaWithURL:[NSURL fileURLWithPath:filename]];
[playlist addMedia:media];
}
return YES;
}
@end
Binary files a/projects/macosx/framework/Examples/test/English.lproj/InfoPlist.strings and /dev/null differ
{
IBClasses = (
{
ACTIONS = {pause = id; play = id; };
CLASS = Controller;
LANGUAGE = ObjC;
OUTLETS = {playlistOutline = id; videoHolderView = id; window = id; };
SUPERCLASS = NSObject;
},
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; }
);
IBVersion = 1;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>111 87 356 240 0 0 1440 878 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>108 299 338 44 0 0 1440 878 </string>
</dict>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBOpenObjects</key>
<array>
<integer>29</integer>
<integer>21</integer>
</array>
<key>IBSystem Version</key>
<string>8R2218</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.test</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// main.m
// test
//
// Created by Pierre d'Herbemont on 13/04/07.
// Copyright __MyCompanyName__ 2007. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
6333027B0BD24CDB00193D7D /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = 633302790BD24CDB00193D7D /* Controller.m */; };
63F45B790D3E144E0055CBBE /* VLCKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63F45B780D3E14450055CBBE /* VLCKit.framework */; };
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
63F45B770D3E14450055CBBE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 63F45B6A0D3E14450055CBBE /* VLCKit.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = VLCKit;
};
63F45B7E0D3E14F30055CBBE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 63F45B6A0D3E14450055CBBE /* VLCKit.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = VLCKit;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* test_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = test_Prefix.pch; sourceTree = "<group>"; };
633302780BD24CDB00193D7D /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = "<group>"; };
633302790BD24CDB00193D7D /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Controller.m; sourceTree = "<group>"; };
63F45B6A0D3E14450055CBBE /* VLCKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VLCKit.xcodeproj; path = ../../VLCKit.xcodeproj; sourceTree = SOURCE_ROOT; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = test.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
63F45B790D3E144E0055CBBE /* VLCKit.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
633302780BD24CDB00193D7D /* Controller.h */,
633302790BD24CDB00193D7D /* Controller.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
63F45B6A0D3E14450055CBBE /* VLCKit.xcodeproj */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* test.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* test */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = test;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* test_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
63F45B6B0D3E14450055CBBE /* Products */ = {
isa = PBXGroup;
children = (
63F45B780D3E14450055CBBE /* VLCKit.framework */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* test */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "test" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
);
buildRules = (
);
dependencies = (
63F45B7F0D3E14F30055CBBE /* PBXTargetDependency */,
);
name = test;
productInstallPath = "$(HOME)/Applications";
productName = test;
productReference = 8D1107320486CEB800E47090 /* test.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "test" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* test */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 63F45B6B0D3E14450055CBBE /* Products */;
ProjectRef = 63F45B6A0D3E14450055CBBE /* VLCKit.xcodeproj */;
},
);
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* test */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
63F45B780D3E14450055CBBE /* VLCKit.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = VLCKit.framework;
remoteRef = 63F45B770D3E14450055CBBE /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */,
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
6333027B0BD24CDB00193D7D /* Controller.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
63F45B7F0D3E14F30055CBBE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = VLCKit;
targetProxy = 63F45B7E0D3E14F30055CBBE /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
isa = PBXVariantGroup;
children = (
29B97319FDCFA39411CA2CEA /* English */,
);
name = MainMenu.nib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LD_FLAGS_LIBINTL = "-dylib_file @loader_path/../lib/vlc_libintl.dylib:$(VLC_FRAMEWORK)/lib/vlc_libintl.dylib";
LD_FLAGS_LIBVLC = "-dylib_file @loader_path/lib/libvlc.dylib:$(VLC_FRAMEWORK)/lib/libvlc.dylib -dylib_file @loader_path/../lib/libvlc.dylib:$(VLC_FRAMEWORK)/lib/libvlc.dylib";
LD_FLAGS_LIBVLC_CONTROL = "-dylib_file @loader_path/lib/libvlc-control.dylib:$(VLC_FRAMEWORK)/lib/libvlc-control.dylib";
OTHER_LDFLAGS = (
"$(LD_FLAGS_LIBINTL)",
"$(LD_FLAGS_LIBVLC)",
"$(LD_FLAGS_LIBVLC_CONTROL)",
);
PRODUCT_NAME = test;
SYMROOT = ../../build;
VLC_FRAMEWORK = "$(TARGET_BUILD_DIR)/VLC.framework";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH)";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LD_FLAGS_LIBINTL = "-dylib_file @loader_path/../lib/vlc_libintl.dylib:$(VLC_FRAMEWORK)/lib/vlc_libintl.dylib";
LD_FLAGS_LIBVLC = "-dylib_file @loader_path/lib/libvlc.dylib:$(VLC_FRAMEWORK)/lib/libvlc.dylib -dylib_file @loader_path/../lib/libvlc.dylib:$(VLC_FRAMEWORK)/lib/libvlc.dylib";
LD_FLAGS_LIBVLC_CONTROL = "-dylib_file @loader_path/lib/libvlc-control.dylib:$(VLC_FRAMEWORK)/lib/libvlc-control.dylib";
OTHER_LDFLAGS = (
"$(LD_FLAGS_LIBINTL)",
"$(LD_FLAGS_LIBVLC)",
"$(LD_FLAGS_LIBVLC_CONTROL)",
);
PRODUCT_NAME = test;
SYMROOT = ../../build;
VLC_FRAMEWORK = "$(TARGET_BUILD_DIR)/VLC.framework";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH)";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "test" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "test" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
//
// Prefix header for all source files of the 'test' target in the 'test' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
/*****************************************************************************
* VLCEventManager.h: VLCKit.framework VLCEventManager header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <pthread.h>
/**
* The VLCEventManager class provides a safe way for inter-thread communications.
*/
@interface VLCEventManager : NSObject
{
NSMutableArray *messageQueue; //< Holds a queue of messages.
NSMutableArray *pendingMessagesOnMainThread; //< Holds the message that are being posted on main thread.
NSLock *pendingMessagesLock;
pthread_t dispatcherThread; //< Thread responsible for dispatching messages.
pthread_mutex_t queueLock; //< Queue lock.
pthread_cond_t signalData; //< Data lock.
}
/* Factories */
/**
* Returns the shared VLCEventManager. There should only be one instance of this class.
* \return Shared event manager.
*/
+ (id)sharedManager;
/* Operations */
/**
* Sends a message to the target's delegate on the main thread.
* \discussion The main thread is the one in which the main run loop is run, which usually
* means the one in which the NSApplication object receives events. The method is performed
* when the main thread runs the run loop in one of the common run loop modes (as specified
* in the CFRunLoop documentation).
*
* The receiver is retained until the call is finished.
* \param aTarget The target object who's delegate should receive the specified message.
* \param aSelector A selector that identifies the method to invoke. The method should not
* have a significant return value and should take a single argument of type NSNotification,
* or no arguments.
*
* See “Selectors” for a description of the SEL type.
* \param aNotificiationName The name of the notification that should be sent to the
* distributed notification center.
*/
- (void)callOnMainThreadDelegateOfObject:(id)aTarget
withDelegateMethod:(SEL)aSelector
withNotificationName:(NSString *)aNotificationName;
/**
* Sends a message to the target on the main thread.
* \discussion The main thread is the one in which the main run loop is run, which usually
* means the one in which the NSApplication object receives events. The method is performed
* when the main thread runs the run loop in one of the common run loop modes (as specified
* in the CFRunLoop documentation).
*
* The receiver and arg are retained until the call is finished.
* \param aTarget The target object who should receive the specified message.
* \param aSelector A selector that identifies the method to invoke. The method should not
* have a significant return value and should take a single argument of type id,
* or no arguments.
*
* See “Selectors” for a description of the SEL type.
* \param arg The argument to pass in the message. Pass nil if the method does not take an
* argument.
* distributed notification center.
*/
- (void)callOnMainThreadObject:(id)aTarget
withMethod:(SEL)aSelector
withArgumentAsObject:(id)arg;
- (void)cancelCallToObject:(id)target;
@end
/*****************************************************************************
* VLCLibVLCbridging.h: VLCKit.framework VLCLibVLCBridging (Private) header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCLibrary.h"
#if !TARGET_OS_IPHONE
#import "VLCStreamOutput.h"
#endif
#import "VLCMediaPlayer.h"
/**
* Bridges functionality between libvlc and VLCMediaList implementation.
*/
@interface VLCMediaList (LibVLCBridging)
/* Factories */
/**
* Manufactures new object wrapped around specified media list.
* \param p_new_mlist LibVLC media list pointer.
* \return Newly create media list instance using specified media list
* pointer.
*/
+ (id)mediaListWithLibVLCMediaList:(void *)p_new_mlist;
/* Initializers */
/**
* Initializes new object wrapped around specified media list.
* \param p_new_mlist LibVLC media list pointer.
* \return Newly create media list instance using specified media list
* pointer.
*/
- (id)initWithLibVLCMediaList:(void *)p_new_mlist;
/* Properties */
@property (readonly) void * libVLCMediaList; //< LibVLC media list pointer.
@end
/**
* Bridges functionality between libvlc and VLCMedia implementation.
*/
@interface VLCMedia (LibVLCBridging)
/* Factories */
/**
* Manufactures new object wrapped around specified media descriptor.
* \param md LibVLC media descriptor pointer.
* \return Newly created media instance using specified descriptor.
*/
+ (id)mediaWithLibVLCMediaDescriptor:(void *)md;
/* Initializers */
/**
* Initializes new object wrapped around specified media descriptor.
* \param md LibVLC media descriptor pointer.
* \return Newly created media instance using specified descriptor.
*/
- (id)initWithLibVLCMediaDescriptor:(void *)md;
+ (id)mediaWithMedia:(VLCMedia *)media andLibVLCOptions:(NSDictionary *)options;
/**
* Returns the receiver's internal media descriptor pointer.
* \return The receiver's internal media descriptor pointer.
*/
@property (readonly) void * libVLCMediaDescriptor;
@end
/**
* Bridges functionality between VLCMedia and VLCMediaPlayer
*/
@interface VLCMediaPlayer (LibVLCBridging)
/* Properties */
@property (readonly) void * libVLCMediaPlayer; //< LibVLC media list pointer.
@end
/**
* Bridges functionality between VLCMediaPlayer and LibVLC core
*/
@interface VLCMedia (VLCMediaPlayerBridging)
/**
* Set's the length of the media object. This value becomes available once the
* media object is being played.
* \param value
*/
- (void)setLength:(VLCTime *)value;
@end
/**
* Bridges functionality between VLCLibrary and LibVLC core.
*/
@interface VLCLibrary (VLCLibVLCBridging)
/**
* Shared singleton instance of libvlc library instance.
* \return libvlc pointer of library instance.
*/
+ (void *)sharedInstance;
/**
* Instance of libvlc library instance.
* \return libvlc pointer of library instance.
*/
@property (readonly) void * instance;
@end
/**
* Bridges functionality between VLCLibrary and VLCAudio.
*/
@interface VLCLibrary (VLCAudioBridging)
/**
* Called by VLCAudio, each library has a singleton VLCaudio instance. VLCAudio
* calls this function to let the VLCLibrary instance know how to get in touch
* with the VLCAudio instance. TODO: Each media player instance should have it's
* own audio instance...not each library instance.
*/
- (void)setAudio:(VLCAudio *)value;
@end
/**
* Bridges functionality between VLCAudio and VLCLibrary.
*/
@interface VLCAudio (VLCAudioBridging)
/* Initializers */
/**
* Initializes a new object using the specified mediaPlayer instance.
* \return Newly created audio object using specified VLCMediaPlayer instance.
*/
- (id)initWithMediaPlayer:(VLCMediaPlayer *)mediaPlayer;
@end
/**
* TODO: Documentation
*/
#if !TARGET_OS_IPHONE
@interface VLCStreamOutput (LibVLCBridge)
- (NSString *)representedLibVLCOptions;
@end
#endif
/*****************************************************************************
* VLCVideoCommon.h: VLCKit.framework VLCVideoCommon header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <QuartzCore/QuartzCore.h>
/**
* TODO: Documentation
*/
@interface VLCVideoLayoutManager : NSObject
{
CGSize originalVideoSize;
BOOL fillScreenEntirely;
}
/* Factories */
+ (id)layoutManager;
/* Properties */
@property BOOL fillScreenEntirely;
@property CGSize originalVideoSize;
@end
/*
* MobileVLCKit.h
* VLCKit
*
* Created by Pierre d'Herbemont on 6/28/10.
* Copyright 2010 __MyCompanyName__. All rights reserved.
*
*/
#import <MobileVLCKit/VLCLibrary.h>
#import <MobileVLCKit/VLCMedia.h>
#import <MobileVLCKit/VLCMediaList.h>
#import <MobileVLCKit/VLCMediaPlayer.h>
#import <MobileVLCKit/VLCMediaDiscoverer.h>
#import <MobileVLCKit/VLCTime.h>
#import <MobileVLCKit/VLCAudio.h>
@class VLCMedia;
@class VLCMediaLibrary;
@class VLCMediaList;
@class VLCTime;
@class VLCVideoView;
@class VLCAudio;
/*****************************************************************************
* VLCAudio.h: VLCKit.framework VLCAudio header
*****************************************************************************
* Copyright (C) 2007 Faustino E. Osuna
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Faustino E. Osuna <enrique.osuna # gmail.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
/* Notification Messages */
/**
* Standard notification messages that are emitted by VLCAudio object.
*/
extern NSString * VLCMediaPlayerVolumeChanged;
@class VLCMediaPlayer;
/**
* TODO: Documentation VLCAudio
*/
@interface VLCAudio : NSObject
{
void *instance;
}
/* Properties */
- (void)setMute:(BOOL)value;
@property (setter=setMute:) BOOL isMuted;
@property (assign) NSUInteger volume;
- (void)volumeDown;
- (void)volumeUp;
@end
//
// VLCExtension.h
// VLCKit
//
// Created by Pierre d'Herbemont on 1/26/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface VLCExtension : NSObject {
struct extension_t *_instance;
}
- (id)initWithInstance:(struct extension_t *)instance; // FIXME: Should be internal
- (struct extension_t *)instance; // FIXME: Should be internal
- (NSString *)name;
- (NSString *)title;
@end
//
// VLCExtensionsManager.h
// VLCKit
//
// Created by Pierre d'Herbemont on 1/26/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class VLCExtension;
@class VLCMediaPlayer;
@interface VLCExtensionsManager : NSObject {
void *instance;
NSMutableArray *_extensions;
VLCMediaPlayer *_player;
void *_previousInput;
}
+ (VLCExtensionsManager *)sharedManager;
- (NSArray *)extensions;
- (void)runExtension:(VLCExtension *)extension;
@property (readwrite, retain) VLCMediaPlayer *mediaPlayer;
@end
/*****************************************************************************
* VLCKit.h: VLCKit.framework main header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
/**
* TODO: Framework Documentation
*/
#import <VLCKit/VLCLibrary.h>
#import <VLCKit/VLCMedia.h>
#import <VLCKit/VLCMediaLibrary.h>
#import <VLCKit/VLCMediaList.h>
#import <VLCKit/VLCMediaListPlayer.h>
#import <VLCKit/VLCMediaDiscoverer.h>
#import <VLCKit/VLCMediaPlayer.h>
#import <VLCKit/VLCTime.h>
#import <VLCKit/VLCVideoView.h>
#import <VLCKit/VLCVideoLayer.h>
#import <VLCKit/VLCStreamSession.h>
#import <VLCKit/VLCStreamOutput.h>
@class VLCMedia;
@class VLCMediaLibrary;
@class VLCMediaList;
@class VLCTime;
@class VLCVideoView;
/*****************************************************************************
* VLCLibrary.h: VLCKit.framework VLCLibrary header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
#import "VLCAudio.h"
#import "VLCMediaList.h"
#import "VLCMedia.h"
@class VLCAudio;
/**
* The VLCLibrary is the base library of the VLCKit.framework. This object provides a shared instance that exposes the
* internal functionalities of libvlc and libvlc-control. The VLCLibrary object is instantiated automatically when
* VLCKit.framework is loaded into memory. Also, it is automatically destroyed when the VLCKit.framework is unloaded
* from memory.
*
* Currently, the framework does not support multiple instances of VLCLibrary. Furthermore, you cannot destroy any
* instiantiation of VLCLibrary, as previously noted, this is done automatically by the dynamic link loader.
*/
@interface VLCLibrary : NSObject
{
void * instance;
}
/* Factories */
/**
* Returns the library's shared instance.
* \return The library's shared instance.
*/
+ (VLCLibrary *)sharedLibrary;
/**
* Returns the library's version
* \return The library version example "0.9.0-git Grishenko".
*/
@property (readonly) NSString * version;
/**
* Returns the library's changeset
* \return The library version example "adfee99".
*/
@property (readonly) NSString * changeset;
@end
/*****************************************************************************
* VLCMedia.h: VLCKit.framework VLCMedia header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
#import "VLCMediaList.h"
#import "VLCTime.h"
/* Meta Dictionary Keys */
/**
* Standard dictionary keys for retreiving meta data.
*/
extern NSString * VLCMetaInformationTitle; /* NSString */
extern NSString * VLCMetaInformationArtist; /* NSString */
extern NSString * VLCMetaInformationGenre; /* NSString */
extern NSString * VLCMetaInformationCopyright; /* NSString */
extern NSString * VLCMetaInformationAlbum; /* NSString */
extern NSString * VLCMetaInformationTrackNumber; /* NSString */
extern NSString * VLCMetaInformationDescription; /* NSString */
extern NSString * VLCMetaInformationRating; /* NSString */
extern NSString * VLCMetaInformationDate; /* NSString */
extern NSString * VLCMetaInformationSetting; /* NSString */
extern NSString * VLCMetaInformationURL; /* NSString */
extern NSString * VLCMetaInformationLanguage; /* NSString */
extern NSString * VLCMetaInformationNowPlaying; /* NSString */
extern NSString * VLCMetaInformationPublisher; /* NSString */
extern NSString * VLCMetaInformationEncodedBy; /* NSString */
extern NSString * VLCMetaInformationArtworkURL; /* NSString */
extern NSString * VLCMetaInformationArtwork; /* NSImage */
extern NSString * VLCMetaInformationTrackID; /* NSString */
/* Notification Messages */
/**
* Available notification messages.
*/
extern NSString * VLCMediaMetaChanged; //< Notification message for when the media's meta data has changed
// Forward declarations, supresses compiler error messages
@class VLCMediaList;
@class VLCMedia;
typedef enum VLCMediaState
{
VLCMediaStateNothingSpecial, //< Nothing
VLCMediaStateBuffering, //< Stream is buffering
VLCMediaStatePlaying, //< Stream is playing
VLCMediaStateError, //< Can't be played because an error occurred
} VLCMediaState;
/**
* Informal protocol declaration for VLCMedia delegates. Allows data changes to be
* trapped.
*/
@protocol VLCMediaDelegate
// TODO: SubItemAdded/SubItemRemoved implementation. Not sure if we really want to implement this.
///**
// * Delegate method called whenever a sub item has been added to the specified VLCMedia.
// * \param aMedia The media resource that has received the new sub item.
// * \param childMedia The new sub item added.
// * \param index Location of the new subitem in the aMedia's sublist.
// */
// - (void)media:(VLCMedia *)media addedSubItem:(VLCMedia *)childMedia atIndex:(int)index;
///**
// * Delegate method called whenever a sub item has been removed from the specified VLCMedia.
// * \param aMedia The media resource that has had a sub item removed from.
// * \param childMedia The sub item removed.
// * \param index The previous location of the recently removed sub item.
// */
// - (void)media:(VLCMedia *)aMedia removedSubItem:(VLCMedia *)childMedia atIndex:(int)index;
/**
* Delegate method called whenever the meta has changed for the receiver.
* \param aMedia The media resource whose meta data has been changed.
* \param oldValue The old meta data value.
* \param key The key of the value that was changed.
*/
- (void)media:(VLCMedia *)aMedia metaValueChangedFrom:(id)oldValue forKey:(NSString *)key;
/**
* Delegate method called whenever the media was parsed.
* \param aMedia The media resource whose meta data has been changed.
*/
- (void)mediaDidFinishParsing:(VLCMedia *)aMedia;
@end
/**
* Defines files and streams as a managed object. Each media object can be
* administered seperately. VLCMediaPlayer or VLCMediaList must be used
* to execute the appropriate playback functions.
* \see VLCMediaPlayer
* \see VLCMediaList
*/
@interface VLCMedia : NSObject
{
void * p_md; //< Internal media descriptor instance
NSURL * url; //< URL (MRL) for this media resource
VLCMediaList * subitems; //< Sub list of items
VLCTime * length; //< Cached duration of the media
NSMutableDictionary * metaDictionary; //< Meta data storage
id delegate; //< Delegate object
BOOL isArtFetched; //< Value used to determine of the artwork has been parsed
BOOL areOthersMetaFetched; //< Value used to determine of the other meta has been parsed
BOOL isArtURLFetched; //< Value used to determine of the other meta has been preparsed
VLCMediaState state; //< Current state of the media
BOOL isParsed;
}
/* Factories */
/**
* Manufactures a new VLCMedia object using the URL specified.
* \param anURL URL to media to be accessed.
* \return A new VLCMedia object, only if there were no errors. This object will be automatically released.
* \see initWithMediaURL
*/
+ (id)mediaWithURL:(NSURL *)anURL;
/**
* Manufactures a new VLCMedia object using the path specified.
* \param aPath Path to the media to be accessed.
* \return A new VLCMedia object, only if there were no errors. This object will be automatically released.
* \see initWithPath
*/
+ (id)mediaWithPath:(NSString *)aPath;
/**
* TODO
* \param aName TODO
* \return a new VLCMedia object, only if there were no errors. This object
* will be automatically released.
* \see initAsNodeWithName
*/
+ (id)mediaAsNodeWithName:(NSString *)aName;
/* Initializers */
/**
* Initializes a new VLCMedia object to use the specified URL.
* \param aPath Path to media to be accessed.
* \return A new VLCMedia object, only if there were no errors.
*/
- (id)initWithURL:(NSURL *)anURL;
/**
* Initializes a new VLCMedia object to use the specified path.
* \param aPath Path to media to be accessed.
* \return A new VLCMedia object, only if there were no errors.
*/
- (id)initWithPath:(NSString *)aPath;
/**
* TODO
* \param aName TODO
* \return A new VLCMedia object, only if there were no errors.
*/
- (id)initAsNodeWithName:(NSString *)aName;
/**
* Returns an NSComparisonResult value that indicates the lexical ordering of
* the receiver and a given meda.
* \param media The media with which to compare with the receiver.
* \return NSOrderedAscending if the URL of the receiver precedes media in
* lexical ordering, NSOrderedSame if the URL of the receiver and media are
* equivalent in lexical value, and NSOrderedDescending if the URL of the
* receiver follows media. If media is nil, returns NSOrderedDescending.
*/
- (NSComparisonResult)compare:(VLCMedia *)media;
/* Properties */
/**
* Receiver's delegate.
*/
@property (assign) id delegate;
/**
* A VLCTime object describing the length of the media resource, only if it is
* available. Use lengthWaitUntilDate: to wait for a specified length of time.
* \see lengthWaitUntilDate
*/
@property (retain, readonly) VLCTime * length;
/**
* Returns a VLCTime object describing the length of the media resource,
* however, this is a blocking operation and will wait until the preparsing is
* completed before returning anything.
* \param aDate Time for operation to wait until, if there are no results
* before specified date then nil is returned.
* \return The length of the media resource, nil if it couldn't wait for it.
*/
- (VLCTime *)lengthWaitUntilDate:(NSDate *)aDate;
/**
* Determines if the media has already been preparsed.
*/
@property (readonly) BOOL isParsed;
/**
* The URL for the receiver's media resource.
*/
@property (retain, readonly) NSURL * url;
/**
* The receiver's sub list.
*/
@property (retain, readonly) VLCMediaList * subitems;
/**
* The receiver's meta data as a NSDictionary object.
*/
@property (retain, readonly) NSDictionary * metaDictionary;
/**
* The receiver's state, such as Playing, Error, NothingSpecial, Buffering.
*/
@property (readonly) VLCMediaState state;
/**
* Tracks information NSDictionary Possible Keys
*/
/**
* \returns a NSNumber
*/
extern NSString *VLCMediaTracksInformationCodec;
/**
* \returns a NSNumber
*/
extern NSString *VLCMediaTracksInformationId;
/**
* \returns a NSString
* \see VLCMediaTracksInformationTypeAudio
* \see VLCMediaTracksInformationTypeVideo
* \see VLCMediaTracksInformationTypeText
* \see VLCMediaTracksInformationTypeUnknown
*/
extern NSString *VLCMediaTracksInformationType;
/**
* \returns a NSNumber
*/
extern NSString *VLCMediaTracksInformationCodecProfile;
/**
* \returns a NSNumber
*/
extern NSString *VLCMediaTracksInformationCodecLevel;
/**
* \returns the audio channels number as NSNumber
*/
extern NSString *VLCMediaTracksInformationAudioChannelsNumber;
/**
* \returns the audio rate as NSNumber
*/
extern NSString *VLCMediaTracksInformationAudioRate;
/**
* \returns the height as NSNumber
*/
extern NSString *VLCMediaTracksInformationVideoHeight;
/**
* \returns the width as NSNumber
*/
extern NSString *VLCMediaTracksInformationVideoWidth;
/**
* Tracks information NSDictionary values for
* VLCMediaTracksInformationType
*/
extern NSString *VLCMediaTracksInformationTypeAudio;
extern NSString *VLCMediaTracksInformationTypeVideo;
extern NSString *VLCMediaTracksInformationTypeText;
extern NSString *VLCMediaTracksInformationTypeUnknown;
/**
* Returns the tracks information.
*
* This is an array of NSDictionary representing each track.
* It can contains the following keys:
*
* \see VLCMediaTracksInformationCodec
* \see VLCMediaTracksInformationId
* \see VLCMediaTracksInformationType
*
* \see VLCMediaTracksInformationCodecProfile
* \see VLCMediaTracksInformationCodecLevel
*
* \see VLCMediaTracksInformationAudioChannelsNumber
* \see VLCMediaTracksInformationAudioRate
*
* \see VLCMediaTracksInformationVideoHeight
* \see VLCMediaTracksInformationVideoWidth
*/
- (NSArray *)tracksInformation;
/**
* Start asynchronously to parse the media.
* This will attempt to fetch the meta data and tracks information.
*
* This is automatically done when an accessor requiring parsing
* is called.
*
* \see -[VLCMediaDelegate mediaDidFinishParsing:]
*/
- (void)parse;
/**
* Add options to the media, that will be used to determine how
* VLCMediaPlayer will read the media. This allow to use VLC advanced
* reading/streaming options in a per-media basis
*
* The options are detailed in vlc --long-help, for instance "--sout-all"
* And on the web: http://wiki.videolan.org/VLC_command-line_help
*/
- (void) addOptions:(NSDictionary*) options;
/**
* Getter for statistics information
* Returns a NSDictionary with NSNumbers for values.
*
*/
- (NSDictionary*) stats;
@end
/*****************************************************************************
* VLCMediaDiscoverer.h: VLCKit.framework VLCMediaDiscoverer header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
#import "VLCMediaList.h"
@class VLCMediaList;
/**
* TODO: Documentation VLCMediaDiscoverer
*/
@interface VLCMediaDiscoverer : NSObject
{
NSString * localizedName; //< TODO: Documentation VLCMediaDiscoverer.localizedName
VLCMediaList * discoveredMedia; //< TODO: Documentation VLCMediaDiscoverer.discoveredMedia
void * mdis; //< TODO: Documentation VLCMediaDiscoverer.mdis
BOOL running; //< TODO: Documentation VLCMediaDiscoverer.running
}
/**
* Maintains a list of available media discoverers. This list is populated as new media
* discoverers are created.
* \return A list of available media discoverers.
*/
+ (NSArray *)availableMediaDiscoverer;
/* Initializers */
/**
* Initializes new object with specified name.
* \param aSerchName Name of the service for this VLCMediaDiscoverer object.
* \returns Newly created media discoverer.
*/
- (id)initWithName:(NSString *)aServiceName;
/**
* TODO: Documentation VLCMediaDiscoverer.discoveredMedia
*/
@property (readonly) VLCMediaList * discoveredMedia;
/**
* TODO: Documentation VLCMediaDiscoverer.localizedName
*/
@property (readonly) NSString * localizedName;
/**
* TODO: Documentation VLCMediaDiscoverer.isRunning
*/
@property (readonly) BOOL isRunning;
@end
/*****************************************************************************
* VLCMediaLibrary.h: VLCKit.framework VLCMediaDiscoverer header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCMediaList.h"
@class VLCMediaList;
/**
* TODO: Documentation
*/
@interface VLCMediaLibrary : NSObject
{
void * mlib;
VLCMediaList * allMedia;
}
/* Factories */
+ (id)sharedMediaLibrary;
/* Properties */
@property (readonly) VLCMediaList * allMedia;
@end
/*****************************************************************************
* VLCMediaList.h: VLCKit.framework VLCMediaList header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
#import "VLCMedia.h"
/* Notification Messages */
extern NSString * VLCMediaListItemAdded;
extern NSString * VLCMediaListItemDeleted;
@class VLCMedia;
@class VLCMediaList;
/**
* TODO: Documentation VLCMediaListDelegate
*/
@protocol VLCMediaListDelegate
/**
* TODO: Documentation - [VLCMediaListDelegate mediaList:mediaAdded:atIndex:]
*/
- (void)mediaList:(VLCMediaList *)aMediaList mediaAdded:(VLCMedia *)media atIndex:(NSInteger)index;
/**
* TODO: Documentation - [VLCMediaListDelegate mediaList:mediaRemovedAtIndex:]
*/
- (void)mediaList:(VLCMediaList *)aMediaList mediaRemovedAtIndex:(NSInteger)index;
@end
/**
* TODO: Documentation VLCMediaList
*/
@interface VLCMediaList : NSObject
{
void * p_mlist; //< Internal instance of media list
id <VLCMediaListDelegate,NSObject> delegate; //< Delegate object
/* We need that private copy because of Cocoa Bindings, that need to be working on first thread */
NSMutableArray * cachedMedia; //< Private copy of media objects.
}
/* Operations */
/**
* TODO: Documentation - [VLCMediaList lock]
*/
- (void)lock;
/**
* TODO: Documentation - [VLCMediaList unlock]
*/
- (void)unlock;
/**
* TODO: Documentation - [VLCMediaList addMedia:]
*/
- (NSInteger)addMedia:(VLCMedia *)media;
/**
* TODO: Documentation - [VLCMediaList insertMedia:atIndex:]
*/
- (void)insertMedia:(VLCMedia *)media atIndex:(NSInteger)index;
/**
* TODO: Documentation - [VLCMediaList removeMediaAtIndex:]
*/
- (void)removeMediaAtIndex:(NSInteger)index;
/**
* TODO: Documentation - [VLCMediaList mediaAtIndex:]
*/
- (VLCMedia *)mediaAtIndex:(NSInteger)index;
/**
* TODO: Documentation - [VLCMediaList indexOfMedia:]
*/
- (NSInteger)indexOfMedia:(VLCMedia *)media;
/* Properties */
/**
* TODO: Documentation VLCMediaList.count
*/
@property (readonly) NSInteger count;
/**
* TODO: Documentation VLCMediaList.delegate
*/
@property (assign) id delegate;
/**
* TODO: Documentation VLCMediaList.isReadOnly
*/
@property (readonly) BOOL isReadOnly;
@end
/*****************************************************************************
* VLCMediaListPlayer.h: VLCKit.framework VLCMediaListPlayer implementation
*****************************************************************************
* Copyright (C) 2009 Pierre d'Herbemont
* Partial Copyright (C) 2009 Felix Paul Kühne
* Copyright (C) 2009 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
* Felix Paul Kühne <fkuehne # videolan.org
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
@class VLCMedia, VLCMediaPlayer, VLCMediaList;
/**
* VLCRepeatMode
* (don't repeat anything, repeat one, repeat all)
*/
enum VLCRepeatMode {
VLCDoNotRepeat,
VLCRepeatCurrentItem,
VLCRepeatAllItems
};
typedef NSInteger VLCRepeatMode;
@interface VLCMediaListPlayer : NSObject {
void *instance;
VLCMedia *_rootMedia;
VLCMediaPlayer *_mediaPlayer;
VLCMediaList *_mediaList;
VLCRepeatMode _repeatMode;
}
@property (readwrite, retain) VLCMediaList *mediaList;
/**
* rootMedia - Use this method to play a media and its subitems.
* This will erase mediaList.
* Setting mediaList will erase rootMedia.
*/
@property (readwrite, retain) VLCMedia *rootMedia;
@property (readonly, retain) VLCMediaPlayer *mediaPlayer;
/**
* Basic play and stop are here. For other method, use the mediaPlayer.
* This may change.
*/
- (void)play;
- (void)stop;
/**
* Playmode selection (don't repeat anything, repeat one, repeat all)
* See VLCRepeatMode.
*/
@property (readwrite) VLCRepeatMode repeatMode;
/**
* media must be in the current media list.
*/
- (void)playMedia:(VLCMedia *)media;
@end
/*****************************************************************************
* VLCMediaPlayer.h: VLCKit.framework VLCMediaPlayer header
*****************************************************************************
* Copyright (C) 2007-2009 Pierre d'Herbemont
* Copyright (C) 2007-2009 VLC authors and VideoLAN
* Partial Copyright (C) 2009 Felix Paul Kühne
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
* Felix Paul Kühne <fkuehne # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
# import <CoreGraphics/CoreGraphics.h>
#endif
#import "VLCMedia.h"
#import "VLCTime.h"
#import "VLCAudio.h"
#if !TARGET_OS_IPHONE
@class VLCVideoView;
@class VLCVideoLayer;
#endif
/* Notification Messages */
extern NSString * VLCMediaPlayerTimeChanged;
extern NSString * VLCMediaPlayerStateChanged;
/**
* VLCMediaPlayerState describes the state of the media player.
*/
typedef enum VLCMediaPlayerState
{
VLCMediaPlayerStateStopped, //< Player has stopped
VLCMediaPlayerStateOpening, //< Stream is opening
VLCMediaPlayerStateBuffering, //< Stream is buffering
VLCMediaPlayerStateEnded, //< Stream has ended
VLCMediaPlayerStateError, //< Player has generated an error
VLCMediaPlayerStatePlaying, //< Stream is playing
VLCMediaPlayerStatePaused //< Stream is paused
} VLCMediaPlayerState;
/**
* Returns the name of the player state as a string.
* \param state The player state.
* \return A string containing the name of state. If state is not a valid state, returns nil.
*/
extern NSString * VLCMediaPlayerStateToString(VLCMediaPlayerState state);
/**
* Formal protocol declaration for playback delegates. Allows playback messages
* to be trapped by delegated objects.
*/
@protocol VLCMediaPlayerDelegate
/**
* Sent by the default notification center whenever the player's time has changed.
* \details Discussion The value of aNotification is always an VLCMediaPlayerTimeChanged notification. You can retrieve
* the VLCMediaPlayer object in question by sending object to aNotification.
*/
- (void)mediaPlayerTimeChanged:(NSNotification *)aNotification;
/**
* Sent by the default notification center whenever the player's state has changed.
* \details Discussion The value of aNotification is always an VLCMediaPlayerStateChanged notification. You can retrieve
* the VLCMediaPlayer object in question by sending object to aNotification.
*/
- (void)mediaPlayerStateChanged:(NSNotification *)aNotification;
@end
// TODO: Should we use medialist_player or our own flavor of media player?
@interface VLCMediaPlayer : NSObject
{
id delegate; //< Object delegate
void * instance; // Internal
VLCMedia * media; //< Current media being played
VLCTime * cachedTime; //< Cached time of the media being played
VLCTime * cachedRemainingTime; //< Cached remaining time of the media being played
VLCMediaPlayerState cachedState; //< Cached state of the media being played
float position; //< The position of the media being played
id drawable; //< The drawable associated to this media player
VLCAudio *audio;
}
#if !TARGET_OS_IPHONE
/* Initializers */
- (id)initWithVideoView:(VLCVideoView *)aVideoView;
- (id)initWithVideoLayer:(VLCVideoLayer *)aVideoLayer;
#endif
/* Properties */
- (void)setDelegate:(id)value;
- (id)delegate;
/* Video View Options */
// TODO: Should be it's own object?
#if !TARGET_OS_IPHONE
- (void)setVideoView:(VLCVideoView *)aVideoView;
- (void)setVideoLayer:(VLCVideoLayer *)aVideoLayer;
#endif
@property (retain) id drawable; /* The videoView or videoLayer */
- (void)setVideoAspectRatio:(char *)value;
- (char *)videoAspectRatio;
- (void)setVideoCropGeometry:(char *)value;
- (char *)videoCropGeometry;
/**
* Take a snapshot of the current video.
*
* If width AND height is 0, original size is used.
* If width OR height is 0, original aspect-ratio is preserved.
*
* \param path the path where to save the screenshot to
* \param width the snapshot's width
* \param height the snapshot's height
*/
- (void)saveVideoSnapshotAt: (NSString *)path withWidth:(NSUInteger)width andHeight:(NSUInteger)height;
/**
* Enable or disable deinterlace filter
*
* \param name of deinterlace filter to use (availability depends on underlying VLC version), NULL to disable.
*/
- (void)setDeinterlaceFilter: (NSString *)name;
@property float rate;
@property (readonly) VLCAudio * audio;
/* Video Information */
- (CGSize)videoSize;
- (BOOL)hasVideoOut;
- (float)framesPerSecond;
/**
* Sets the current position (or time) of the feed.
* \param value New time to set the current position to. If time is [VLCTime nullTime], 0 is assumed.
*/
- (void)setTime:(VLCTime *)value;
/**
* Returns the current position (or time) of the feed.
* \return VLCTIme object with current time.
*/
- (VLCTime *)time;
@property (readonly) VLCTime *remainingTime;
@property (readonly) NSUInteger fps;
/**
* Return the current video subtitle index
* \return 0 if none is set.
*
* Pass 0 to disable.
*/
@property (readwrite) NSUInteger currentVideoSubTitleIndex;
/**
* Return the video subtitle tracks
*
* It includes the disabled fake track at index 0.
*/
- (NSArray *)videoSubTitles;
/**
* Load and set a specific video subtitle, from a file.
* \param path to a file
* \return if the call succeed..
*/
- (BOOL)openVideoSubTitlesFromFile:(NSString *)path;
/**
* Chapter selection and enumeration, it is bound
* to a title option.
*/
/**
* Return the current video subtitle index, or
* \return NSNotFound if none is set.
*
* To disable subtitle pass NSNotFound.
*/
@property (readwrite) NSUInteger currentChapterIndex;
- (void)previousChapter;
- (void)nextChapter;
- (NSArray *)chaptersForTitleIndex:(NSUInteger)titleIndex;
/**
* Title selection and enumeration
* \return NSNotFound if none is set.
*/
@property (readwrite) NSUInteger currentTitleIndex;
- (NSArray *)titles;
/* Audio Options */
/**
* Return the current audio track index
* \return 0 if none is set.
*
* Pass 0 to disable.
*/
@property (readwrite) NSUInteger currentAudioTrackIndex;
/**
* Return the audio tracks
*
* It includes the "Disable" fake track at index 0.
*/
- (NSArray *)audioTracks;
- (void)setAudioChannel:(NSInteger)value;
- (NSInteger)audioChannel;
/* Media Options */
- (void)setMedia:(VLCMedia *)value;
- (VLCMedia *)media;
/* Playback Operations */
/**
* Plays a media resource using the currently selected media controller (or
* default controller. If feed was paused then the feed resumes at the position
* it was paused in.
* \return A Boolean determining whether the stream was played or not.
*/
- (BOOL)play;
/**
* Toggle's the pause state of the feed.
*/
- (void)pause;
/**
* Stop the playing.
*/
- (void)stop;
/**
* Advance one frame.
*/
- (void)gotoNextFrame;
/**
* Fast forwards through the feed at the standard 1x rate.
*/
- (void)fastForward;
/**
* Fast forwards through the feed at the rate specified.
* \param rate Rate at which the feed should be fast forwarded.
*/
- (void)fastForwardAtRate:(float)rate;
/**
* Rewinds through the feed at the standard 1x rate.
*/
- (void)rewind;
/**
* Rewinds through the feed at the rate specified.
* \param rate Rate at which the feed should be fast rewound.
*/
- (void)rewindAtRate:(float)rate;
/**
* Jumps shortly backward in current stream if seeking is supported.
* \param interval to skip, in sec.
*/
- (void)jumpBackward:(NSInteger)interval;
/**
* Jumps shortly forward in current stream if seeking is supported.
* \param interval to skip, in sec.
*/
- (void)jumpForward:(NSInteger)interval;
/**
* Jumps shortly backward in current stream if seeking is supported.
*/
- (void)extraShortJumpBackward;
/**
* Jumps shortly forward in current stream if seeking is supported.
*/
- (void)extraShortJumpForward;
/**
* Jumps shortly backward in current stream if seeking is supported.
*/
- (void)shortJumpBackward;
/**
* Jumps shortly forward in current stream if seeking is supported.
*/
- (void)shortJumpForward;
/**
* Jumps shortly backward in current stream if seeking is supported.
*/
- (void)mediumJumpBackward;
/**
* Jumps shortly forward in current stream if seeking is supported.
*/
- (void)mediumJumpForward;
/**
* Jumps shortly backward in current stream if seeking is supported.
*/
- (void)longJumpBackward;
/**
* Jumps shortly forward in current stream if seeking is supported.
*/
- (void)longJumpForward;
/* Playback Information */
/**
* Playback state flag identifying that the stream is currently playing.
* \return TRUE if the feed is playing, FALSE if otherwise.
*/
- (BOOL)isPlaying;
/**
* Playback state flag identifying wheather the stream will play.
* \return TRUE if the feed is ready for playback, FALSE if otherwise.
*/
- (BOOL)willPlay;
/**
* Playback's current state.
* \see VLCMediaState
*/
- (VLCMediaPlayerState)state;
/**
* Returns the receiver's position in the reading.
* \return A number between 0 and 1. indicating the position
*/
- (float)position;
- (void)setPosition:(float)newPosition;
- (BOOL)isSeekable;
- (BOOL)canPause;
@end
//
// VLCMediaThumbnailer.h
// VLCKit
//
// Created by Pierre d'Herbemont on 7/10/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
# import <CoreGraphics/CoreGraphics.h>
#endif
@class VLCMedia;
@protocol VLCMediaThumbnailerDelegate;
@interface VLCMediaThumbnailer : NSObject {
id<VLCMediaThumbnailerDelegate> _delegate;
VLCMedia *_media;
void *_mp;
CGImageRef _thumbnail;
void *_data;
NSTimer *_parsingTimeoutTimer;
NSTimer *_thumbnailingTimeoutTimer;
CGFloat _thumbnailHeight,_thumbnailWidth;
CGFloat _effectiveThumbnailHeight,_effectiveThumbnailWidth;
int _numberOfReceivedFrames;
BOOL _shouldRejectFrames;
}
+ (VLCMediaThumbnailer *)thumbnailerWithMedia:(VLCMedia *)media andDelegate:(id<VLCMediaThumbnailerDelegate>)delegate;
- (void)fetchThumbnail;
@property (readwrite, assign) id<VLCMediaThumbnailerDelegate> delegate;
@property (readwrite, retain) VLCMedia *media;
@property (readwrite, assign) CGImageRef thumbnail;
/**
* Thumbnail Height
* You shouldn't change this after -fetchThumbnail
* has been called.
* @return thumbnail height. Default value 240.
*/
@property (readwrite, assign) CGFloat thumbnailHeight;
/**
* Thumbnail Width
* You shouldn't change this after -fetchThumbnail
* has been called.
* @return thumbnail height. Default value 320
*/
@property (readwrite, assign) CGFloat thumbnailWidth;
@end
@protocol VLCMediaThumbnailerDelegate
@required
- (void)mediaThumbnailerDidTimeOut:(VLCMediaThumbnailer *)mediaThumbnailer;
- (void)mediaThumbnailer:(VLCMediaThumbnailer *)mediaThumbnailer didFinishThumbnail:(CGImageRef)thumbnail;
@end
/*****************************************************************************
* VLCPlaylistDataSource.h: VLC.framework VLCPlaylistDataSource header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <VLC/VLCPlaylist.h>
#import <VLC/VLCVideoView.h>
/* This class can be used as a data source for an NSOutlineView
* it will display the playlist content. If provided the videoView
* will automatically be associated to the given playlist, and actions
* in the outlineView will trigger the videoView, visual feedback of the
* current item in the videoview will be displayed in the outlineview
*/
@interface VLCPlaylistDataSource : NSObject
{
VLCPlaylist * playlist;
VLCVideoView * videoView;
NSOutlineView *outlineView;
}
- (id)initWithPlaylist:(VLCPlaylist *)aPlaylist;
- (id)initWithPlaylist:(VLCPlaylist *)aPlaylist videoView:(VLCVideoView *)aVideoView;
- (VLCPlaylist *)playlist;
- (VLCVideoView *)videoView;
@end
/* It could be really useful to use that, this probably need to be reviewed to see
* if it really belongs here */
@interface VLCPlaylistDataSource (OutlineViewDataSource)
- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item;
- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item;
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;
@end
@interface VLCPlaylistDataSource (OutlineViewDataSourceDropping)
- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(int)index;
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(int)index;
@end
/*****************************************************************************
* VLCServicesDiscoverer.h: VLC.framework VLCMediaDiscoverer header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
@interface VLCServicesDiscoverer : NSObject
{
NSArray * services;
}
+ (id)sharedDiscoverer;
- (id)init;
- (NSArray *)services;
@end
/*****************************************************************************
* VLCStreamOutput.h: VLCKit.framework VLCStreamOutput header
*****************************************************************************
* Copyright (C) 2008 Pierre d'Herbemont
* Copyright (C) 2008 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
extern NSString * VLCDefaultStreamOutputRTSP;
extern NSString * VLCDefaultStreamOutputRTP;
extern NSString * VLCDefaultStreamOutputRTP;
@interface VLCStreamOutput : NSObject {
NSMutableDictionary * options;
}
- (id)initWithOptionDictionary:(NSDictionary *)dictionary;
+ (id)streamOutputWithOptionDictionary:(NSDictionary *)dictionary;
+ (id)rtpBroadcastStreamOutputWithSAPAnnounce:(NSString *)announceName;
+ (id)rtpBroadcastStreamOutput;
+ (id)ipodStreamOutputWithFilePath:(NSString *)filePath;
+ (id)streamOutputWithFilePath:(NSString *)filePath;
+ (id)mpeg2StreamOutputWithFilePath:(NSString *)filePath;
+ (id)mpeg4StreamOutputWithFilePath:(NSString *)filePath;
@end
/*****************************************************************************
* VLCStreamSession.h: VLCKit.framework VLCStreamSession header
*****************************************************************************
* Copyright (C) 2008 Pierre d'Herbemont
* Copyright (C) 2008 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <VLCKit/VLCStreamOutput.h>
#import <VLCKit/VLCMediaPlayer.h>
#import <VLCKit/VLCMedia.h>
@interface VLCStreamSession : VLCMediaPlayer {
VLCStreamOutput * streamOutput;
VLCMedia * originalMedia;
NSUInteger reattemptedConnections;
BOOL isComplete;
}
+ (id)streamSession;
@property (retain) VLCMedia * media;
@property (retain) VLCStreamOutput * streamOutput;
@property (readonly) BOOL isComplete;
- (void)startStreaming;
- (void)stopStreaming;
@end
/*****************************************************************************
* VLCTime.h: VLCKit.framework VLCTime header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Foundation/Foundation.h>
/**
* Provides an object to define VLCMedia's time.
*/
@interface VLCTime : NSObject <NSCopying>
{
NSNumber * value; //< Holds, in milliseconds, the VLCTime value
}
/* Factories */
+ (VLCTime *)nullTime;
+ (VLCTime *)timeWithNumber:(NSNumber *)aNumber;
+ (VLCTime *)timeWithInt:(NSInteger)aInt;
/* Initializers */
- (id)initWithNumber:(NSNumber *)aNumber;
- (id)initWithInt:(int)aInt;
/* Properties */
@property (readonly) NSNumber * numberValue;
@property (readonly) NSString * stringValue;
@property (readonly) NSString * verboseStringValue;
@property (readonly) int intValue;
/* Comparitors */
- (NSComparisonResult)compare:(VLCTime *)aTime;
@end
/*****************************************************************************
* VLCVideoLayer.h: VLCKit.framework VLCVideoLayer header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <QuartzCore/QuartzCore.h>
@interface VLCVideoLayer : CALayer
{
BOOL hasVideo;
}
/* Properties */
@property (readonly) BOOL hasVideo;
@property BOOL fillScreen;
@end
/*****************************************************************************
* VLCVideoView.h: VLCKit.framework VLCVideoView header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <QuartzCore/QuartzCore.h>
@interface VLCVideoView : NSView
{
id delegate;
NSColor * backColor;
BOOL stretchesVideo;
id layoutManager;
BOOL hasVideo;
}
/* Properties */
@property (assign) id delegate;
@property (copy) NSColor *backColor;
@property BOOL fillScreen;
@property (readonly) BOOL hasVideo;
@end
VLCKit.zip: VLCKit
zip -r -y -9 $@ $<
VLCKit: build/Debug/VLCKit.framework
rm -rf $@-tmp && mkdir -p $@-tmp
cp -R $< $@-tmp
cp ../../../COPYING $@-tmp
mv $@-tmp $@ && touch $@
build/Debug/VLCKit.framework:
xcodebuild -project VLCKit.xcodeproj -target "Build Everything"
clean:
xcodebuild -project VLCKit.xcodeproj clean
rm -fr VLCKit VLCKit.zip
.PHONY: clean
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
7A5ECAF911DE917B00F66AF3 /* Aggregate static plugins */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 7A5ECB1011DE919F00F66AF3 /* Build configuration list for PBXAggregateTarget "Aggregate static plugins" */;
buildPhases = (
7A5ECAF811DE917B00F66AF3 /* Aggregate static plugins script */,
);
dependencies = (
);
name = "Aggregate static plugins";
productName = "Aggregate static plugins";
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
6360B0E211E7F0C000EAD790 /* VLCMediaDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6360B0E111E7F0C000EAD790 /* VLCMediaDiscoverer.m */; };
6360B10611E7F27300EAD790 /* VLCMediaDiscoverer.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 6360B0E311E7F0D300EAD790 /* VLCMediaDiscoverer.h */; };
636E975811EBC67A002FE8A9 /* VLCMediaThumbnailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 636E975711EBC67A002FE8A9 /* VLCMediaThumbnailer.m */; };
636E979111EBC97C002FE8A9 /* VLCMediaThumbnailer.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 636E979011EBC96D002FE8A9 /* VLCMediaThumbnailer.h */; };
7A5ECACB11DE8F7300F66AF3 /* VLCEventManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECAC411DE8F7300F66AF3 /* VLCEventManager.m */; };
7A5ECACC11DE8F7300F66AF3 /* VLCLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECAC511DE8F7300F66AF3 /* VLCLibrary.m */; };
7A5ECACD11DE8F7300F66AF3 /* VLCMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECAC611DE8F7300F66AF3 /* VLCMedia.m */; };
7A5ECACE11DE8F7300F66AF3 /* VLCMediaList.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECAC711DE8F7300F66AF3 /* VLCMediaList.m */; };
7A5ECACF11DE8F7300F66AF3 /* VLCMediaPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECAC811DE8F7300F66AF3 /* VLCMediaPlayer.m */; };
7A5ECAD011DE8F7300F66AF3 /* VLCTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECAC911DE8F7300F66AF3 /* VLCTime.m */; };
7A5ECAD111DE8F7300F66AF3 /* VLCAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5ECACA11DE8F7300F66AF3 /* VLCAudio.m */; };
7A5ECB5511DE961700F66AF3 /* VLCLibrary.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECAD411DE8FAB00F66AF3 /* VLCLibrary.h */; };
7A5ECB5611DE961700F66AF3 /* VLCMedia.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECAD511DE8FAB00F66AF3 /* VLCMedia.h */; };
7A5ECB5711DE961700F66AF3 /* VLCMediaList.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECAD611DE8FAB00F66AF3 /* VLCMediaList.h */; };
7A5ECB5811DE961700F66AF3 /* VLCMediaPlayer.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECAD711DE8FAB00F66AF3 /* VLCMediaPlayer.h */; };
7A5ECB5911DE961700F66AF3 /* VLCTime.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECAD811DE8FAB00F66AF3 /* VLCTime.h */; };
7A5ECB5A11DE961700F66AF3 /* VLCAudio.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECAD911DE8FAB00F66AF3 /* VLCAudio.h */; };
7A5ECB9E11DE975A00F66AF3 /* MobileVLCKit.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 7A5ECB9D11DE975700F66AF3 /* MobileVLCKit.h */; };
AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
7A5ECB6211DE961B00F66AF3 /* Copy Headers */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = include/MobileVLCKit;
dstSubfolderSpec = 16;
files = (
7A5ECB9E11DE975A00F66AF3 /* MobileVLCKit.h in Copy Headers */,
7A5ECB5511DE961700F66AF3 /* VLCLibrary.h in Copy Headers */,
7A5ECB5611DE961700F66AF3 /* VLCMedia.h in Copy Headers */,
636E979111EBC97C002FE8A9 /* VLCMediaThumbnailer.h in Copy Headers */,
7A5ECB5711DE961700F66AF3 /* VLCMediaList.h in Copy Headers */,
7A5ECB5811DE961700F66AF3 /* VLCMediaPlayer.h in Copy Headers */,
6360B10611E7F27300EAD790 /* VLCMediaDiscoverer.h in Copy Headers */,
7A5ECB5911DE961700F66AF3 /* VLCTime.h in Copy Headers */,
7A5ECB5A11DE961700F66AF3 /* VLCAudio.h in Copy Headers */,
);
name = "Copy Headers";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
6360B0E111E7F0C000EAD790 /* VLCMediaDiscoverer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMediaDiscoverer.m; path = Sources/VLCMediaDiscoverer.m; sourceTree = "<group>"; };
6360B0E311E7F0D300EAD790 /* VLCMediaDiscoverer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaDiscoverer.h; path = Headers/Public/VLCMediaDiscoverer.h; sourceTree = "<group>"; };
636E975711EBC67A002FE8A9 /* VLCMediaThumbnailer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMediaThumbnailer.m; path = Sources/VLCMediaThumbnailer.m; sourceTree = "<group>"; };
636E979011EBC96D002FE8A9 /* VLCMediaThumbnailer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaThumbnailer.h; path = Headers/Public/VLCMediaThumbnailer.h; sourceTree = "<group>"; };
7A5ECAC411DE8F7300F66AF3 /* VLCEventManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCEventManager.m; path = Sources/VLCEventManager.m; sourceTree = "<group>"; };
7A5ECAC511DE8F7300F66AF3 /* VLCLibrary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCLibrary.m; path = Sources/VLCLibrary.m; sourceTree = "<group>"; };
7A5ECAC611DE8F7300F66AF3 /* VLCMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMedia.m; path = Sources/VLCMedia.m; sourceTree = "<group>"; };
7A5ECAC711DE8F7300F66AF3 /* VLCMediaList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMediaList.m; path = Sources/VLCMediaList.m; sourceTree = "<group>"; };
7A5ECAC811DE8F7300F66AF3 /* VLCMediaPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMediaPlayer.m; path = Sources/VLCMediaPlayer.m; sourceTree = "<group>"; };
7A5ECAC911DE8F7300F66AF3 /* VLCTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCTime.m; path = Sources/VLCTime.m; sourceTree = "<group>"; };
7A5ECACA11DE8F7300F66AF3 /* VLCAudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCAudio.m; path = Sources/VLCAudio.m; sourceTree = "<group>"; };
7A5ECAD411DE8FAB00F66AF3 /* VLCLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCLibrary.h; path = Headers/Public/VLCLibrary.h; sourceTree = "<group>"; };
7A5ECAD511DE8FAB00F66AF3 /* VLCMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMedia.h; path = Headers/Public/VLCMedia.h; sourceTree = "<group>"; };
7A5ECAD611DE8FAB00F66AF3 /* VLCMediaList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaList.h; path = Headers/Public/VLCMediaList.h; sourceTree = "<group>"; };
7A5ECAD711DE8FAB00F66AF3 /* VLCMediaPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaPlayer.h; path = Headers/Public/VLCMediaPlayer.h; sourceTree = "<group>"; };
7A5ECAD811DE8FAB00F66AF3 /* VLCTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCTime.h; path = Headers/Public/VLCTime.h; sourceTree = "<group>"; };
7A5ECAD911DE8FAB00F66AF3 /* VLCAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCAudio.h; path = Headers/Public/VLCAudio.h; sourceTree = "<group>"; };
7A5ECAE411DE8FEF00F66AF3 /* VLCLibVLCBridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCLibVLCBridging.h; path = Headers/Internal/VLCLibVLCBridging.h; sourceTree = "<group>"; };
7A5ECAE511DE8FEF00F66AF3 /* VLCEventManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCEventManager.h; path = Headers/Internal/VLCEventManager.h; sourceTree = "<group>"; };
7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = MobileVLCKit.xcconfig; path = MobileVLCKit/MobileVLCKit.xcconfig; sourceTree = "<group>"; };
7A5ECB3411DE94D600F66AF3 /* vlc-plugins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "vlc-plugins.h"; path = "MobileVLCKit/vlc-plugins.h"; sourceTree = "<group>"; };
7A5ECB9D11DE975700F66AF3 /* MobileVLCKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MobileVLCKit.h; path = Headers/Public/MobileVLCKit.h; sourceTree = "<group>"; };
7A5ECBAC11DE987400F66AF3 /* AggregateStaticPlugins.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = AggregateStaticPlugins.sh; path = MobileVLCKit/AggregateStaticPlugins.sh; sourceTree = "<group>"; };
AA747D9E0F9514B9006C5449 /* MobileVLCKit_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobileVLCKit_Prefix.pch; sourceTree = SOURCE_ROOT; };
AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D2AAC07E0554694100DB518D /* libMobileVLCKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMobileVLCKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D2AAC07C0554694100DB518D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
034768DFFF38A50411DB9C8B /* Products */ = {
isa = PBXGroup;
children = (
D2AAC07E0554694100DB518D /* libMobileVLCKit.a */,
);
name = Products;
sourceTree = "<group>";
};
0867D691FE84028FC02AAC07 /* MobileVLCKit */ = {
isa = PBXGroup;
children = (
7A5ECAE211DE8FD200F66AF3 /* Headers */,
08FB77AEFE84172EC02AAC07 /* Sources */,
32C88DFF0371C24200C91783 /* Other Sources */,
0867D69AFE84028FC02AAC07 /* Frameworks */,
034768DFFF38A50411DB9C8B /* Products */,
);
name = MobileVLCKit;
sourceTree = "<group>";
};
0867D69AFE84028FC02AAC07 /* Frameworks */ = {
isa = PBXGroup;
children = (
AACBBE490F95108600F1A2B1 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
08FB77AEFE84172EC02AAC07 /* Sources */ = {
isa = PBXGroup;
children = (
7A5ECAC411DE8F7300F66AF3 /* VLCEventManager.m */,
7A5ECAC511DE8F7300F66AF3 /* VLCLibrary.m */,
7A5ECAC611DE8F7300F66AF3 /* VLCMedia.m */,
7A5ECAC711DE8F7300F66AF3 /* VLCMediaList.m */,
7A5ECAC811DE8F7300F66AF3 /* VLCMediaPlayer.m */,
636E975711EBC67A002FE8A9 /* VLCMediaThumbnailer.m */,
6360B0E111E7F0C000EAD790 /* VLCMediaDiscoverer.m */,
7A5ECAC911DE8F7300F66AF3 /* VLCTime.m */,
7A5ECACA11DE8F7300F66AF3 /* VLCAudio.m */,
);
name = Sources;
sourceTree = "<group>";
};
32C88DFF0371C24200C91783 /* Other Sources */ = {
isa = PBXGroup;
children = (
7A5ECBAC11DE987400F66AF3 /* AggregateStaticPlugins.sh */,
7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */,
AA747D9E0F9514B9006C5449 /* MobileVLCKit_Prefix.pch */,
);
name = "Other Sources";
sourceTree = "<group>";
};
7A5ECAE211DE8FD200F66AF3 /* Headers */ = {
isa = PBXGroup;
children = (
7A5ECB9D11DE975700F66AF3 /* MobileVLCKit.h */,
7A5ECAE311DE8FDF00F66AF3 /* Internal */,
7A5ECAD411DE8FAB00F66AF3 /* VLCLibrary.h */,
7A5ECAD511DE8FAB00F66AF3 /* VLCMedia.h */,
636E979011EBC96D002FE8A9 /* VLCMediaThumbnailer.h */,
7A5ECAD611DE8FAB00F66AF3 /* VLCMediaList.h */,
7A5ECAD711DE8FAB00F66AF3 /* VLCMediaPlayer.h */,
6360B0E311E7F0D300EAD790 /* VLCMediaDiscoverer.h */,
7A5ECAD811DE8FAB00F66AF3 /* VLCTime.h */,
7A5ECAD911DE8FAB00F66AF3 /* VLCAudio.h */,
);
name = Headers;
sourceTree = "<group>";
};
7A5ECAE311DE8FDF00F66AF3 /* Internal */ = {
isa = PBXGroup;
children = (
7A5ECB3411DE94D600F66AF3 /* vlc-plugins.h */,
7A5ECAE411DE8FEF00F66AF3 /* VLCLibVLCBridging.h */,
7A5ECAE511DE8FEF00F66AF3 /* VLCEventManager.h */,
);
name = Internal;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
D2AAC07D0554694100DB518D /* MobileVLCKit */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "MobileVLCKit" */;
buildPhases = (
D2AAC07B0554694100DB518D /* Sources */,
7A5ECB6211DE961B00F66AF3 /* Copy Headers */,
D2AAC07C0554694100DB518D /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = MobileVLCKit;
productName = MobileVLCKit;
productReference = D2AAC07E0554694100DB518D /* libMobileVLCKit.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0420;
};
buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "MobileVLCKit" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
en,
);
mainGroup = 0867D691FE84028FC02AAC07 /* MobileVLCKit */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D2AAC07D0554694100DB518D /* MobileVLCKit */,
7A5ECAF911DE917B00F66AF3 /* Aggregate static plugins */,
);
};
/* End PBXProject section */
/* Begin PBXShellScriptBuildPhase section */
7A5ECAF811DE917B00F66AF3 /* Aggregate static plugins script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Aggregate static plugins script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh ${SRCROOT}/MobileVLCKit/AggregateStaticPlugins.sh\nexit 0\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D2AAC07B0554694100DB518D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7A5ECACB11DE8F7300F66AF3 /* VLCEventManager.m in Sources */,
7A5ECACC11DE8F7300F66AF3 /* VLCLibrary.m in Sources */,
7A5ECACD11DE8F7300F66AF3 /* VLCMedia.m in Sources */,
7A5ECACE11DE8F7300F66AF3 /* VLCMediaList.m in Sources */,
7A5ECACF11DE8F7300F66AF3 /* VLCMediaPlayer.m in Sources */,
7A5ECAD011DE8F7300F66AF3 /* VLCTime.m in Sources */,
7A5ECAD111DE8F7300F66AF3 /* VLCAudio.m in Sources */,
6360B0E211E7F0C000EAD790 /* VLCMediaDiscoverer.m in Sources */,
636E975811EBC67A002FE8A9 /* VLCMediaThumbnailer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1DEB921F08733DC00010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
COPY_PHASE_STRIP = NO;
DSTROOT = /tmp/MobileVLCKit.dst;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = MobileVLCKit_Prefix.pch;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../include";
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = MobileVLCKit;
};
name = Debug;
};
1DEB922008733DC00010E9CD /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
DSTROOT = /tmp/MobileVLCKit.dst;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = MobileVLCKit_Prefix.pch;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../include";
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = MobileVLCKit;
};
name = Release;
};
1DEB922308733DC00010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
OTHER_LDFLAGS = "-ObjC";
SDKROOT = iphoneos;
};
name = Debug;
};
1DEB922408733DC00010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
OTHER_LDFLAGS = "-ObjC";
SDKROOT = iphoneos;
};
name = Release;
};
7A5ECAFA11DE917B00F66AF3 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
PRODUCT_NAME = "Aggregate static plugins";
};
name = Debug;
};
7A5ECAFB11DE917B00F66AF3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
PRODUCT_NAME = "Aggregate static plugins";
ZERO_LINK = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "MobileVLCKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB921F08733DC00010E9CD /* Debug */,
1DEB922008733DC00010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "MobileVLCKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB922308733DC00010E9CD /* Debug */,
1DEB922408733DC00010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7A5ECB1011DE919F00F66AF3 /* Build configuration list for PBXAggregateTarget "Aggregate static plugins" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7A5ECAFA11DE917B00F66AF3 /* Debug */,
7A5ECAFB11DE917B00F66AF3 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
}
#!/bin/sh
# Pre-Compile.sh
# MobileVLC
#
# Created by Pierre d'Herbemont on 6/27/10.
# Copyright 2010 __MyCompanyName__. All rights reserved.
pushd `dirname $0` > /dev/null
PROJECT_DIR=`pwd`
popd > /dev/null
echo "PROJECT DIR = $PROJECT_DIR"
VLC_ARCH="arm"
ARCH="arm"
VLC_SRC_DIR="$PROJECT_DIR/../../../.."
VLC_BUILD_DIR="$VLC_SRC_DIR/build-ios-OS"
VLC_INSTALL_DIR="$VLC_SRC_DIR/install-ios-OS"
VLC_CONTRIB_DIR="$VLC_SRC_DIR/extras/contrib/hosts/\$(VLC_ARCH)-apple-darwin10/ios"
LDFLAGS=""
echo "VLC_BUILD_DIR = $VLC_BUILD_DIR"
echo "VLC_INSTALL_DIR = $VLC_INSTALL_DIR"
echo "SRC DIR = $VLC_SRC_DIR"
echo "VLC_CONTRIB_DIR = $VLC_CONTRIB_DIR"
echo "=== Building for $ARCH ==="
echo "-"
echo "// This file is autogenerated by $(basename $0)\n\n" > $PROJECT_DIR/vlc-plugins.h
echo "// This file is autogenerated by $(basename $0)\n\n" > $PROJECT_DIR/vlc-plugins.xcconfig
VLC_MODULES=`find $VLC_BUILD_DIR/modules -name 'lib*_plugin.a'|grep -v stats|tr \\\\n \ `
#echo $VLC_MODULES
BUILTINS="const void *vlc_static_modules[] = {\n"; \
LDFLAGS=""
DEFINITION=""
for file in $VLC_MODULES; do
name=`echo $file | sed 's/.*\.libs\/lib//' | sed 's/_plugin\.a//'`
DEFINITION+="int vlc_entry__$name (int (*)(void *, void *, int, ...), void *);\n";
BUILTINS+=" vlc_entry__$name,\n"
LDFLAGS+="\$(VLC_INSTALL_DIR)/lib/vlc/plugins/lib${name}_plugin.a "
echo $name
done;
BUILTINS="$BUILTINS NULL\n};\n"
echo -e "VLC_PLUGINS_LDFLAGS=$LDFLAGS" >> $PROJECT_DIR/vlc-plugins.xcconfig
echo -e "$DEFINITION\n$BUILTINS" >> $PROJECT_DIR/vlc-plugins.h
//
// vlc.xcconfig
// VLC
//
// Created by Pierre d'Herbemont on 6/26/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
VLC_SRC_DIR=$(PROJECT_DIR)/../../..
VLC_ARCH[sdk=iphonesimulator*]=i686
VLC_ARCH[sdk=iphoneos*]=arm
VLC_PLATFORM[sdk=iphonesimulator*]=Simulator
VLC_PLATFORM[sdk=iphoneos*]=OS
VLC_INSTALL_DIR=$(VLC_SRC_DIR)/install-ios-$(VLC_PLATFORM)
//OTHER_CFLAGS= -ObjC -all_load
#include "vlc-plugins.xcconfig"
VLC_CONTRIB_DIR=$VLC_SRC_DIR/contrib/$(VLC_ARCH)-apple-darwin11
DVBPSI=$(VLC_CONTRIB_DIR)/lib/libdvbpsi.a
AVCODEC=$(VLC_CONTRIB_DIR)/lib/libavutil.a ${VLC_CONTRIB_DIR}/lib/libavcodec.a $(VLC_CONTRIB_DIR)/lib/libavformat.a $(VLC_CONTRIB_DIR)/lib/libswscale.a $(VLC_CONTRIB_DIR)/lib/libpostproc.a $(VLC_CONTRIB_DIR)/lib/libgsm.a
LIVE555=$(VLC_CONTRIB_DIR)/lib/libUsageEnvironment.a $(VLC_CONTRIB_DIR)/lib/libBasicUsageEnvironment.a $(VLC_CONTRIB_DIR)/lib/libgroupsock.a $(VLC_CONTRIB_DIR)/lib/libz.a $(VLC_CONTRIB_DIR)/lib/libliveMedia.a
FLAC=$(VLC_CONTRIB_DIR)/lib/libFLAC.a
A52=$(VLC_CONTRIB_DIR)/lib/liba52.a
DCA=$(VLC_CONTRIB_DIR)/lib/libdca.a
MKV=$(VLC_CONTRIB_DIR)/lib/libebml.a $(VLC_CONTRIB_DIR)/lib/libmatroska.a
MODPLUG=$(VLC_CONTRIB_DIR)/lib/libmodplug.a
SPEEX=$(VLC_CONTRIB_DIR)/lib/libspeex.a $(VLC_CONTRIB_DIR)/lib/libspeexdsp.a
TAGLIB=$(VLC_CONTRIB_DIR)/lib/libtag.a
OGG=$(VLC_CONTRIB_DIR)/lib/libogg.a $(VLC_CONTRIB_DIR)/lib/libtheora.a $(VLC_CONTRIB_DIR)/lib/libtheoradec.a $(VLC_CONTRIB_DIR)/lib/libtheoraenc.a
XML=$(VLC_CONTRIB_DIR)/lib/libxml2.a
PICS=$(VLC_CONTRIB_DIR)/lib/libpng.a $(VLC_CONTRIB_DIR)/lib/libopenjpeg.a
OTHER_LIBTOOLFLAGS=$(AVCODEC) $(DVBPSI) $(LIVE555) $(MODPLUG) $(A52) $(DCA) $(MKV) $(TAGLIB) $(XML) $(PICS) $(VLC_INSTALL_DIR)/lib/vlc/libcompat.a $(VLC_INSTALL_DIR)/lib/libvlc.a $(VLC_INSTALL_DIR)/lib/libvlccore.a $(VLC_PLUGINS_LDFLAGS)
//
// Prefix header for all source files of the 'CocoaTouchStaticLibrary' target in the 'CocoaTouchStaticLibrary' project.
//
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
#import <vlc/vlc.h>
#!/bin/sh
#
# Pre-Compile.sh
#
# Script that install libvlc and its modules inside VLCKit.
#
# This is for some creepy reasons also used by legacy VLC.app or
# the moz plugin.
#
# We are building VLC.app or the moz plugin
#
if test "${ACTION}" = "release-makefile"; then
echo "running Pre-Compile.sh in release-makefile mode"
FULL_PRODUCT_NAME="${PRODUCT}"
if [ "$FULL_PRODUCT_NAME" = "VLC-Plugin.plugin" ] ; then
TARGET_BUILD_DIR="${src_dir}"
else
TARGET_BUILD_DIR="${build_dir}"
fi
CONTENTS_FOLDER_PATH="${FULL_PRODUCT_NAME}/Contents/MacOS"
VLC_BUILD_DIR="${build_dir}"
VLC_SRC_DIR="${src_dir}"
ACTION="build"
RELEASE_MAKEFILE="yes"
use_archs="no"
main_build_dir="${VLC_BUILD_DIR}"
else
use_archs="yes"
main_build_dir="${VLC_BUILD_DIR}/${ARCHS%% *}"
echo "Building for $ARCHS"
fi
if test "${ACTION}" = "clean"; then
rm -Rf "${VLC_BUILD_DIR}/tmp"
exit 0
fi
if test "${ACTION}" != "build"; then
echo "This script is supposed to run from xcodebuild or Xcode"
exit 1
fi
lib="lib"
plugins="plugins"
share="share"
include="include"
target="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}"
target_bin="${target}/bin"
target_lib="${target}/${lib}" # Should we consider using a different well-known folder like shared resources?
target_plugins="${target}/${plugins}" # Should we consider using a different well-known folder like shared resources?
target_share="${target}/${share}" # Should we consider using a different well-known folder like shared resources?
linked_libs=""
prefix=".libs"
suffix="dylib"
num_archs=$(echo `echo $ARCHS | wc -w`)
##########################
# @function vlc_install_object(src_lib, dest_dir, type, lib_install_prefix, destination_name, suffix)
# @description Installs the specified library into the destination folder, automatically changes the references to dependencies
# @param src_lib source library to copy to the destination directory
# @param dest_dir destination directory where the src_lib should be copied to
vlc_install_object() {
local src_lib=${1}
local dest_dir=${2}
local type=${3}
local lib_install_prefix=${4}
local destination_name=${5}
local suffix=${6}
if [ $type = "library" ]; then
local install_name="@loader_path/lib"
elif [ $type = "module" ]; then
local install_name="@loader_path/plugins"
fi
if [ "$destination_name" != "" ]; then
local lib_dest="$dest_dir/$destination_name$suffix"
local lib_name=`basename $destination_name`
else
local lib_dest="$dest_dir/`basename $src_lib`$suffix"
local lib_name=`basename $src_lib`
fi
if [ "x$lib_install_prefix" != "x" ]; then
local lib_install_prefix="$lib_install_prefix"
else
local lib_install_prefix="@loader_path/../lib"
fi
if test ! -e ${src_lib}; then
return
fi
if ( (test ! -e ${lib_dest}) || test ${src_lib} -nt ${lib_dest} ); then
mkdir -p ${dest_dir}
# Lets copy the library from the source folder to our new destination folder
if [ "${type}" = "bin" ]; then
install -m 755 ${src_lib} ${lib_dest}
else
install -m 644 ${src_lib} ${lib_dest}
fi
# Update the dynamic library so it will know where to look for the other libraries
echo "Installing ${type} `basename ${lib_dest}`"
if [ "${type}" = "library" ]; then
# Change the reference of libvlc.1 stored in the usr directory to libvlc.dylib in the framework's library directory
install_name_tool -id "${install_name}/${lib_name}" ${lib_dest} > /dev/null
fi
if [ "${type}" != "data" ]; then
# Iterate through each installed library and modify the references to other dynamic libraries to match the framework's library directory
for linked_lib in `otool -L ${lib_dest} | grep '(' | sed 's/\((.*)\)//'`; do
local name=`basename ${linked_lib}`
case "${linked_lib}" in
*/vlc_build_dir/* | */vlc_install_dir/* | *vlc* | */extras/contrib/*)
if test -e ${linked_lib}; then
install_name_tool -change "$linked_lib" "${lib_install_prefix}/${name}" "${lib_dest}"
linked_libs="${linked_libs} ${ref_lib}"
vlc_install_object ${linked_lib} ${target_lib} "library"
fi
;;
esac
done
fi
fi
}
# @function vlc_install_object
##########################
##########################
# @function vlc_install(src_lib_dir, src_lib_name, dest_dir, type, lib_install_prefix)
# @description Installs the specified library into the destination folder, automatically changes the references to dependencies
# @param src_lib source library to copy to the destination directory
# @param dest_dir destination directory where the src_lib should be copied to
vlc_install() {
local src_dir=$1
local src=$2
local dest_dir=$3
local type=$4
if test "$use_archs" = "no"; then
vlc_install_object "$VLC_BUILD_DIR/$src_dir/$src" "$dest_dir" "$type" $5
else
if test $type = "data"; then
vlc_install_object "$main_build_dir/$src_dir/$src" "$dest_dir" "$type" $5
else
local fatdest="$dest_dir/$2"
local shouldUpdate="no"
# Determine what architectures are available in the destination image
local fatdest_archs=""
if [ -e ${fatdest} ]; then
fatdest_archs=`lipo -info "${fatdest}" 2> /dev/null | sed -E -e 's/[[:space:]]+$//' -e 's/.+:[[:space:]]*//' -e 's/[^[:space:]]+/(&)/g'`
# Check to see if the destination image needs to be reconstructed
for arch in $ARCHS; do
# Only install if the new image is newer than the one we have installed or the required arch is missing.
if test $shouldUpdate = "no" && (! [[ "$fatdest_archs" =~ \($arch\) ]] || test "$VLC_BUILD_DIR/$arch/$src_dir/$src" -nt "${fatdest}"); then
shouldUpdate="yes"
fi
fatdest_archs=${fatdest_archs//\($arch\)/}
done
# Reconstruct the destination image, if the update flag is set or if there are more archs in the desintation then we need
fatdest_archs=${fatdest_archs// /}
else
# If the destination image does not exist, then we have to reconstruct it
shouldUpdate="yes"
fi
# If we should update the destination image or if there were unexpected archs in the destination image, then reconstruct it
if test "$shouldUpdate" = "yes" || test -n "${fatdest_archs}"; then
# If the destination image exists, get rid of it so we can copy over the newly constructed image
if test -e ${fatdest}; then
rm "$fatdest"
fi
if test "$num_archs" = "1"; then
echo "Copying $ARCHS $type $fatdest"
local arch_src="$VLC_BUILD_DIR/$ARCHS/$src_dir/$src"
vlc_install_object "$arch_src" "$dest_dir" "$type" "$5" ""
else
# Create a temporary destination dir to store each ARCH object file
local tmp_dest_dir="$VLC_BUILD_DIR/tmp/$type"
rm -Rf "${tmp_dest_dir}/*"
mkdir -p "$tmp_dest_dir"
# Search for each ARCH object file used to construct a fat image
local objects=""
for arch in $ARCHS; do
local arch_src="$VLC_BUILD_DIR/$arch/$src_dir/$src"
vlc_install_object "$arch_src" "$tmp_dest_dir" "$type" "$5" "" ".$arch"
local dest="$tmp_dest_dir/$src.$arch"
if [ -e ${dest} ]; then
objects="${dest} $objects"
else
echo "Warning: building $arch_src without $arch"
fi
done;
echo "Creating fat $type $fatdest"
lipo $objects -output "$fatdest" -create
fi
fi
fi
fi
}
# @function vlc_install
##########################
##########################
# Create a symbolic link in the root of the framework
mkdir -p ${target_lib}
mkdir -p ${target_plugins}
mkdir -p ${target_bin}
if [ "$RELEASE_MAKEFILE" != "yes" ] ; then
pushd `pwd` > /dev/null
cd ${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}
ln -sf Versions/Current/${lib} .
ln -sf Versions/Current/${plugins} .
ln -sf Versions/Current/${include} .
ln -sf Versions/Current/${share} .
ln -sf Versions/Current/bin .
ln -sf ../plugins Versions/Current/bin
ln -sf ../share Versions/Current/bin
popd > /dev/null
fi
##########################
# Hack for VLC.app
if [ "$FULL_PRODUCT_NAME" = "VLC.app" ] ; then
vlc_install "bin/${prefix}" "vlc" "${target}" "bin" "@loader_path/lib"
mv ${target}/vlc ${target}/VLC
chmod +x ${target}/VLC
elif [ "$FULL_PRODUCT_NAME" = "VLC-Plugin.plugin" ] ; then
# install Safari webplugin
vlc_install "projects/mozilla/${prefix}" "npvlc.${suffix}" "${target}" "lib" "@loader_path/lib"
mv ${target}/npvlc.${suffix} "${target}/VLC Plugin"
chmod +x "${target}/VLC Plugin"
else
vlc_install "bin/${prefix}" "vlc" "${target}/bin" "bin" "@loader_path/../lib"
fi
##########################
# Build the plugins folder (Same as VLCKit.framework/plugins in Makefile)
echo "Building plugins folder..."
# Figure out what plugins are available to install
for module in `find ${main_build_dir}/modules -path "*dylib.dSYM*" -prune -o -name "lib*_plugin.dylib" -print | sed -e s:${main_build_dir}/::` ; do
# Check to see that the reported module actually exists
if test -n ${module}; then
vlc_install `dirname ${module}` `basename ${module}` ${target_plugins} "module"
fi
done
##########################
# Build the lib folder
vlc_install "lib/${prefix}" "libvlc.5.dylib" "${target_lib}" "library"
vlc_install "src/${prefix}" "libvlccore.5.dylib" "${target_lib}" "library"
pushd `pwd` > /dev/null
cd ${target_lib}
ln -sf libvlc.5.dylib libvlc.dylib
ln -sf libvlccore.5.dylib libvlccore.dylib
popd > /dev/null
##########################
# Build the share folder
if [ $PRODUCT != "VLC.app" ]; then
echo "Building share folder..."
pbxcp="/Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -exclude .DS_Store -resolve-src-symlinks -v -V"
mkdir -p ${target_share}
if test "$use_archs" = "no"; then
$pbxcp ${VLC_BUILD_DIR}/share/lua ${target_share}
else
$pbxcp ${main_build_dir}/share/lua ${target_share}
fi
fi
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Quartz</string>
<key>CFBundleIdentifier</key>
<string>org.videolan.vlckitframework</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>VLC</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.1</string>
<key>CFBundleVersion</key>
<string>0.1</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleShortVersionString</key>
<string>0.1</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>ProjectName</key>
<string>VLC</string>
</dict>
</plist>
/*****************************************************************************
* VLCAudio.m: VLCKit.framework VLCAudio implementation
*****************************************************************************
* Copyright (C) 2007 Faustino E. Osuna
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Faustino E. Osuna <enrique.osuna # gmail.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCAudio.h"
#import "VLCLibVLCBridging.h"
#define VOLUME_STEP 6
#define VOLUME_MAX 200
#define VOLUME_MIN 0
/* Notification Messages */
NSString * VLCMediaPlayerVolumeChanged = @"VLCMediaPlayerVolumeChanged";
/* libvlc event callback */
// TODO: Callbacks
@implementation VLCAudio
/**
* Use this method instead of instance directly as this one is type checked.
*/
- (libvlc_media_player_t *)instance
{
return instance;
}
- (id)init
{
return nil;
}
- (id)initWithMediaPlayer:(VLCMediaPlayer *)mediaPlayer
{
self = [super init];
if (!self)
return nil;
instance = [mediaPlayer libVLCMediaPlayer];
libvlc_media_player_retain([self instance]);
return self;
}
- (void) dealloc
{
libvlc_media_player_release([self instance]);
[super dealloc];
}
- (void)setMute:(BOOL)value
{
libvlc_audio_set_mute([self instance], value);
}
- (BOOL)isMuted
{
return libvlc_audio_get_mute([self instance]);
}
- (void)setVolume:(NSUInteger)value
{
if (value < VOLUME_MIN)
value = VOLUME_MIN;
else if (value > VOLUME_MAX)
value = VOLUME_MAX;
libvlc_audio_set_volume([self instance], value);
}
- (void)volumeUp
{
NSUInteger tempVolume = [self volume] + VOLUME_STEP;
if (tempVolume > VOLUME_MAX)
tempVolume = VOLUME_MAX;
else if (tempVolume < VOLUME_MIN)
tempVolume = VOLUME_MIN;
[self setVolume: tempVolume];
}
- (void)volumeDown
{
NSUInteger tempVolume = [self volume] - VOLUME_STEP;
if (tempVolume > VOLUME_MAX)
tempVolume = VOLUME_MAX;
else if (tempVolume < VOLUME_MIN)
tempVolume = VOLUME_MIN;
[self setVolume: tempVolume];
}
- (NSUInteger)volume
{
return libvlc_audio_get_volume([self instance]);
}
@end
/*****************************************************************************
* VLCEventManager.m: VLCKit.framework VLCEventManager implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCEventManager.h"
#import <pthread.h>
/**
* Defines the type of interthread message on the queue.
*/
typedef enum
{
VLCNotification, //< Standard NSNotification.
VLCObjectMethodWithObjectArg, //< Method with an object argument.
VLCObjectMethodWithArrayArg //< Method with an array argument.
} message_type_t;
/**
* Data structured used to enqueue messages onto the queue.
*/
typedef struct {
id target; //< Target object that should receive the message (retained until method is called).
SEL sel; //< A selector that identifies the message to be sent to the target.
union u //< Object could either be a VLCNotification or other.
{
NSString * name; //< Name to be used for NSNotification
id object; //< Object argument to pass to the target via the selector.
} u;
message_type_t type; //< Type of queued message.
} message_t;
@interface VLCEventManager (Private)
- (void)callDelegateOfObjectAndSendNotificationWithArgs:(NSData*)data;
- (void)callObjectMethodWithArgs:(NSData*)data;
- (void)callDelegateOfObject:(id) aTarget withDelegateMethod:(SEL)aSelector withNotificationName:(NSString *)aNotificationName;
- (pthread_cond_t *)signalData;
- (pthread_mutex_t *)queueLock;
- (NSMutableArray *)messageQueue;
- (NSMutableArray *)pendingMessagesOnMainThread;
- (NSLock *)pendingMessagesLock;
- (void)addMessageToHandleOnMainThread:(NSData *)messageAsData;
@end
/**
* Provides a function for the main entry point for the dispatch thread. It dispatches any messages that is queued.
* \param user_data Pointer to the VLCEventManager instance that instiated this thread.
*/
static void * EventDispatcherMainLoop(void * user_data)
{
VLCEventManager * self = user_data;
for(;;)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
message_t * message, * message_newer = NULL;
NSData * dataMessage;
NSInteger i;
/* Sleep a bit not to flood the interface */
usleep(300);
/* Wait for some data */
pthread_mutex_lock([self queueLock]);
/* Wait until we have something on the queue */
while( [[self messageQueue] count] <= 0)
{
pthread_cond_wait([self signalData], [self queueLock]);
}
//if( [[self messageQueue] count] % 100 == 0 || [[self messageQueue] count] < 100 )
// NSLog(@"[EVENT_MANAGER] On the stack we have %d elements", [[self messageQueue] count]);
/* Get the first object off the queue. */
dataMessage = [[[self messageQueue] lastObject] retain]; // Released in 'call'
[[self messageQueue] removeLastObject];
message = (message_t *)[dataMessage bytes];
/* Remove duplicate notifications. */
if( message->type == VLCNotification )
{
for( i = [[self messageQueue] count]-1; i >= 0; i-- )
{
message_newer = (message_t *)[(NSData *)[[self messageQueue] objectAtIndex:i] bytes];
if( message_newer->type == VLCNotification &&
message_newer->target == message->target &&
[message_newer->u.name isEqualToString:message->u.name] )
{
[message_newer->u.name release];
[[self messageQueue] removeObjectAtIndex:i];
}
}
}
else if( message->type == VLCObjectMethodWithArrayArg )
{
NSMutableArray * newArg = nil;
/* Collapse messages that takes array arg by sending one bigger array */
for(i = [[self messageQueue] count] - 1; i >= 0; i--)
{
message_newer = (message_t *)[(NSData *)[[self messageQueue] objectAtIndex: i] bytes];
if (message_newer->type == VLCObjectMethodWithArrayArg &&
message_newer->target == message->target &&
message_newer->sel == message->sel)
{
if (!newArg)
{
newArg = [NSMutableArray arrayWithArray:message->u.object];
[message->u.object release];
}
[newArg addObjectsFromArray:message_newer->u.object];
[message_newer->u.object release];
[[self messageQueue] removeObjectAtIndex:i];
}
/* It shouldn be a good idea not to collapse event with other kind of event in-between.
* This could be particulary problematic when the same object receive two related events
* (for instance Added and Removed).
* Ignore for now only if target is the same */
else if( message_newer->target == message->target )
break;
}
if (newArg)
message->u.object = [newArg retain];
}
[self addMessageToHandleOnMainThread:dataMessage];
pthread_mutex_unlock([self queueLock]);
if( message->type == VLCNotification )
[self performSelectorOnMainThread:@selector(callDelegateOfObjectAndSendNotificationWithArgs:)
withObject:dataMessage
waitUntilDone: NO];
else
[self performSelectorOnMainThread:@selector(callObjectMethodWithArgs:)
withObject:dataMessage
waitUntilDone: YES];
[pool drain];
}
return nil;
}
@implementation VLCEventManager
+ (id)sharedManager
{
static VLCEventManager *defaultManager = NULL;
/* We do want a lock here to avoid leaks */
if (!defaultManager)
defaultManager = [[VLCEventManager alloc] init];
return defaultManager;
}
- (void)dummy
{
/* Put Cocoa in multithreaded mode by calling a dummy function */
}
- (id)init
{
if(self = [super init])
{
if(![NSThread isMultiThreaded])
{
[NSThread detachNewThreadSelector:@selector(dummy) toTarget:self withObject:nil];
NSAssert([NSThread isMultiThreaded], @"Can't put Cocoa in multithreaded mode");
}
pthread_mutex_init(&queueLock, NULL);
pthread_cond_init(&signalData, NULL);
pthread_create(&dispatcherThread, NULL, EventDispatcherMainLoop, self);
messageQueue = [[NSMutableArray alloc] initWithCapacity:10];
pendingMessagesOnMainThread = [[NSMutableArray alloc] initWithCapacity:10];
pendingMessagesLock = [[NSLock alloc] init];
}
return self;
}
- (void)dealloc
{
pthread_kill(dispatcherThread, SIGKILL);
pthread_join(dispatcherThread, NULL);
[messageQueue release];
[pendingMessagesOnMainThread release];
[super dealloc];
}
- (void)callOnMainThreadDelegateOfObject:(id)aTarget withDelegateMethod:(SEL)aSelector withNotificationName:(NSString *)aNotificationName
{
/* Don't send on main thread before this gets sorted out */
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
message_t message =
{
aTarget,
aSelector,
[aNotificationName retain],
VLCNotification
};
if( [NSThread isMainThread] )
{
NSData *nsd_message = [NSData dataWithBytes:&message length:sizeof(message_t)];
[self addMessageToHandleOnMainThread:nsd_message];
[self callDelegateOfObjectAndSendNotificationWithArgs:[nsd_message retain] /* released in the call */];
}
else
{
pthread_mutex_lock([self queueLock]);
[[self messageQueue] insertObject:[NSData dataWithBytes:&message length:sizeof(message_t)] atIndex:0];
pthread_cond_signal([self signalData]);
pthread_mutex_unlock([self queueLock]);
}
[pool drain];
}
- (void)callOnMainThreadObject:(id)aTarget withMethod:(SEL)aSelector withArgumentAsObject:(id)arg
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
message_t message =
{
aTarget,
aSelector,
[arg retain],
[arg isKindOfClass:[NSArray class]] ? VLCObjectMethodWithArrayArg : VLCObjectMethodWithObjectArg
};
pthread_mutex_lock([self queueLock]);
[[self messageQueue] insertObject:[NSData dataWithBytes:&message length:sizeof(message_t)] atIndex:0];
pthread_cond_signal([self signalData]);
pthread_mutex_unlock([self queueLock]);
[pool drain];
}
- (void)cancelCallToObject:(id)target
{
// Remove all queued message
pthread_mutex_lock([self queueLock]);
[pendingMessagesLock lock];
NSMutableArray *queue = [self messageQueue];
for (int i = [queue count] - 1; i >= 0; i--) {
NSData *data = [queue objectAtIndex:i];
message_t *message = (message_t *)[data bytes];
if (message->target == target) {
[queue removeObjectAtIndex:i];
}
}
// Remove all pending messages
NSMutableArray *messages = pendingMessagesOnMainThread;
for (int i = [messages count] - 1; i >= 0; i--) {
NSData *data = [messages objectAtIndex:i];
message_t *message = (message_t *)[data bytes];
if (message->target == target) {
[messages removeObjectAtIndex:i];
}
}
[pendingMessagesLock unlock];
pthread_mutex_unlock([self queueLock]);
}
@end
@implementation VLCEventManager (Private)
- (void)addMessageToHandleOnMainThread:(NSData *)messageAsData
{
[pendingMessagesLock lock];
[pendingMessagesOnMainThread addObject:messageAsData];
[pendingMessagesLock unlock];
}
- (BOOL)markMessageHandledOnMainThreadIfExists:(NSData *)messageAsData
{
[pendingMessagesLock lock];
BOOL cancelled = ![pendingMessagesOnMainThread containsObject:messageAsData];
if (!cancelled)
[pendingMessagesOnMainThread removeObject:messageAsData];
[pendingMessagesLock unlock];
return !cancelled;
}
- (void)callDelegateOfObjectAndSendNotificationWithArgs:(NSData*)data
{
message_t * message = (message_t *)[data bytes];
// Check that we were not cancelled, ie, target was released
if ([self markMessageHandledOnMainThreadIfExists:data]) {
[self callDelegateOfObject:message->target withDelegateMethod:message->sel withNotificationName:message->u.name];
}
[message->u.name release];
[data release];
}
- (void)callObjectMethodWithArgs:(NSData*)data
{
message_t * message = (message_t *)[data bytes];
// Check that we were not cancelled
if ([self markMessageHandledOnMainThreadIfExists:data]) {
void (*method)(id, SEL, id) = (void (*)(id, SEL, id))[message->target methodForSelector: message->sel];
method(message->target, message->sel, message->u.object);
}
[message->u.object release];
[data release];
}
- (void)callDelegateOfObject:(id)aTarget withDelegateMethod:(SEL)aSelector withNotificationName:(NSString *)aNotificationName
{
[[NSNotificationCenter defaultCenter] postNotification: [NSNotification notificationWithName:aNotificationName object:aTarget]];
id delegate = [aTarget delegate];
if (!delegate || ![delegate respondsToSelector:aSelector])
return;
void (*method)(id, SEL, id) = (void (*)(id, SEL, id))[[aTarget delegate] methodForSelector: aSelector];
method([aTarget delegate], aSelector, [NSNotification notificationWithName:aNotificationName object:aTarget]);
}
- (NSMutableArray *)messageQueue
{
return messageQueue;
}
- (NSMutableArray *)pendingMessagesOnMainThread
{
return pendingMessagesOnMainThread;
}
- (NSLock *)pendingMessagesLock
{
return pendingMessagesLock;
}
- (pthread_cond_t *)signalData
{
return &signalData;
}
- (pthread_mutex_t *)queueLock
{
return &queueLock;
}
@end
//
// VLCExtension.m
// VLCKit
//
// Created by Pierre d'Herbemont on 1/26/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "VLCExtension.h"
#import <vlc_extensions.h>
@implementation VLCExtension
- (NSString *)description
{
return [NSString stringWithFormat:@"VLC Extension %@", [self name]];
}
- (id)initWithInstance:(struct extension_t *)instance
{
self = [super init];
if (!self)
return nil;
_instance = instance;
return self;
}
- (struct extension_t *)instance
{
return _instance;
}
- (NSString *)name
{
return [NSString stringWithUTF8String:_instance->psz_name];
}
- (NSString *)title
{
return [NSString stringWithUTF8String:_instance->psz_title];
}
@end
//
// VLCExtensionsManager.m
// VLCKit
//
// Created by Pierre d'Herbemont on 1/26/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "VLCExtensionsManager.h"
#import "VLCExtension.h"
#import "VLCLibrary.h"
#import "VLCLibVLCBridging.h"
#import <vlc_extensions.h>
#import <vlc_input.h>
#include <vlc_modules.h>
// Here comes the nasty hack.
#define MODULE_STRING "VLCKit"
#import "../../../../lib/media_player_internal.h"
#import "../../../../lib/libvlc_internal.h"
static input_thread_t *libvlc_media_player_get_input_thread(libvlc_media_player_t *player)
{
vlc_mutex_lock(&player->input.lock);
input_thread_t *input = player->input.p_thread;
if(input)
vlc_object_hold(input);
vlc_mutex_unlock(&player->input.lock);
return input;
}
static vlc_object_t *libvlc_get_vlc_instance(libvlc_instance_t *instance)
{
vlc_mutex_lock(&instance->instance_lock);
libvlc_int_t *libvlc = instance->p_libvlc_int;
if(libvlc)
vlc_object_hold(libvlc);
vlc_mutex_unlock(&instance->instance_lock);
return VLC_OBJECT(libvlc);
}
#define _instance ((extensions_manager_t *)instance)
@implementation VLCExtensionsManager
static VLCExtensionsManager *sharedManager = nil;
+ (VLCExtensionsManager *)sharedManager
{
if (!sharedManager)
{
/* Initialize a shared instance */
sharedManager = [[self alloc] init];
}
return sharedManager;
}
- (void)dealloc
{
module_unneed(_instance, _instance->p_module);
vlc_object_release(_instance);
[[NSNotificationCenter defaultCenter] removeObserver:self];
[_extensions release];
[super dealloc];
}
- (NSArray *)extensions
{
if (!instance)
{
vlc_object_t *libvlc = libvlc_get_vlc_instance([VLCLibrary sharedInstance]);
instance = vlc_object_create(libvlc, sizeof(extensions_manager_t));
if (!_instance)
{
vlc_object_release(libvlc);
return nil;
}
_instance->p_module = module_need(_instance, "extension", NULL, false);
NSAssert(_instance->p_module, @"Unable to load extensions module");
vlc_object_release(libvlc);
}
if (_extensions)
return _extensions;
_extensions = [[NSMutableArray alloc] init];
extension_t *ext;
vlc_mutex_lock(&_instance->lock);
FOREACH_ARRAY(ext, _instance->extensions)
VLCExtension *extension = [[VLCExtension alloc] initWithInstance:ext];
[_extensions addObject:extension];
[extension release];
FOREACH_END()
vlc_mutex_unlock(&_instance->lock);
return _extensions;
}
- (void)runExtension:(VLCExtension *)extension
{
extension_t *ext = [extension instance];
if(extension_TriggerOnly(_instance, ext))
extension_Trigger(_instance, ext);
else
{
if(!extension_IsActivated(_instance, ext))
extension_Activate(_instance, ext);
}
}
- (void)mediaPlayerLikelyChangedInput
{
input_thread_t *input = _player ? libvlc_media_player_get_input_thread([_player libVLCMediaPlayer]) : NULL;
// Don't send more than appropriate
if (_previousInput == input)
return;
_previousInput = input;
for(VLCExtension *extension in _extensions)
extension_SetInput(_instance, [extension instance], input);
if (input)
vlc_object_release(input);
}
- (void)setMediaPlayer:(VLCMediaPlayer *)player
{
if (_player == player)
return;
// Don't set a NULL mediaPlayer.
// so that we always have an input around.
if (!player)
return;
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center removeObserver:self name:VLCMediaPlayerStateChanged object:_player];
[_player release];
_player = [player retain];
[self mediaPlayerLikelyChangedInput];
if (player)
[center addObserver:self selector:@selector(mediaPlayerLikelyChangedInput) name:VLCMediaPlayerStateChanged object:_player];
}
- (VLCMediaPlayer *)mediaPlayer
{
return _player;
}
@end
/*****************************************************************************
* VLCLibrary.m: VLCKit.framework VLCLibrary implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCLibrary.h"
#import "VLCLibVLCBridging.h"
#if TARGET_OS_IPHONE
# include "vlc-plugins.h"
#endif
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc/vlc.h>
#include <vlc/libvlc_structures.h>
static VLCLibrary * sharedLibrary = nil;
@implementation VLCLibrary
+ (VLCLibrary *)sharedLibrary
{
if (!sharedLibrary)
{
/* Initialize a shared instance */
sharedLibrary = [[self alloc] init];
}
return sharedLibrary;
}
- (id)init
{
if (self = [super init])
{
NSArray *vlcParams = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"VLCParams"];
if (!vlcParams) {
NSMutableArray *defaultParams = [NSMutableArray array];
[defaultParams addObject:@"--play-and-pause"]; // We want every movie to pause instead of stopping at eof
[defaultParams addObject:@"--no-color"]; // Don't use color in output (Xcode doesn't show it)
[defaultParams addObject:@"--no-video-title-show"]; // Don't show the title on overlay when starting to play
[defaultParams addObject:@"--verbose=4"]; // Let's not wreck the logs
#if TARGET_OS_IPHONE
[defaultParams addObject:@"--avcodec-fast"];
[defaultParams addObject:@"--avcodec-skiploopfilter=all"];
[defaultParams addObject:@"--vout=vout_ios"];
[defaultParams addObject:@"--aout=audioqueue"];
#else
[defaultParams addObject:@"--no-sout-keep"];
[defaultParams addObject:@"--vout=macosx"]; // Select Mac OS X video output
[defaultParams addObject:@"--text-renderer=quartztext"]; // our CoreText-based renderer
[defaultParams addObject:@"--extraintf=macosx_dialog_provider"]; // Some extra dialog (login, progress) may come up from here
#endif
vlcParams = defaultParams;
}
NSUInteger paramNum = 0;
NSUInteger count = [vlcParams count];
const char *lib_vlc_params[count];
while (paramNum < count) {
NSString *vlcParam = [vlcParams objectAtIndex:paramNum];
lib_vlc_params[paramNum] = [vlcParam cStringUsingEncoding:NSASCIIStringEncoding];
paramNum++;
}
unsigned argc = sizeof(lib_vlc_params)/sizeof(lib_vlc_params[0]);
instance = libvlc_new(argc, lib_vlc_params);
NSAssert(instance, @"libvlc failed to initialize");
}
return self;
}
- (NSString *)version
{
return [NSString stringWithUTF8String:libvlc_get_version()];
}
- (NSString *)changeset
{
return [NSString stringWithUTF8String:libvlc_get_changeset()];
}
- (void)dealloc
{
if( instance )
libvlc_release( instance );
if( self == sharedLibrary )
sharedLibrary = nil;
instance = nil;
[super dealloc];
}
@end
@implementation VLCLibrary (VLCLibVLCBridging)
+ (void *)sharedInstance
{
return [self sharedLibrary].instance;
}
- (void *)instance
{
return instance;
}
@end
/*****************************************************************************
* VLCMedia.m: VLCKit.framework VLCMedia implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCMedia.h"
#import "VLCMediaList.h"
#import "VLCEventManager.h"
#import "VLCLibrary.h"
#import "VLCLibVLCBridging.h"
#include <vlc/libvlc.h>
/* Meta Dictionary Keys */
NSString * VLCMetaInformationTitle = @"title";
NSString * VLCMetaInformationArtist = @"artist";
NSString * VLCMetaInformationGenre = @"genre";
NSString * VLCMetaInformationCopyright = @"copyright";
NSString * VLCMetaInformationAlbum = @"album";
NSString * VLCMetaInformationTrackNumber = @"trackNumber";
NSString * VLCMetaInformationDescription = @"description";
NSString * VLCMetaInformationRating = @"rating";
NSString * VLCMetaInformationDate = @"date";
NSString * VLCMetaInformationSetting = @"setting";
NSString * VLCMetaInformationURL = @"url";
NSString * VLCMetaInformationLanguage = @"language";
NSString * VLCMetaInformationNowPlaying = @"nowPlaying";
NSString * VLCMetaInformationPublisher = @"publisher";
NSString * VLCMetaInformationEncodedBy = @"encodedBy";
NSString * VLCMetaInformationArtworkURL = @"artworkURL";
NSString * VLCMetaInformationArtwork = @"artwork";
NSString * VLCMetaInformationTrackID = @"trackID";
/* Notification Messages */
NSString * VLCMediaMetaChanged = @"VLCMediaMetaChanged";
/******************************************************************************
* @property (readwrite)
*/
@interface VLCMedia ()
@property (readwrite) VLCMediaState state;
@end
/******************************************************************************
* Interface (Private)
*/
// TODO: Documentation
@interface VLCMedia (Private)
/* Statics */
+ (libvlc_meta_t)stringToMetaType:(NSString *)string;
+ (NSString *)metaTypeToString:(libvlc_meta_t)type;
/* Initializers */
- (void)initInternalMediaDescriptor;
/* Operations */
- (void)fetchMetaInformationFromLibVLCWithType:(NSString*)metaType;
#if !TARGET_OS_IPHONE
- (void)fetchMetaInformationForArtWorkWithURL:(NSString *)anURL;
- (void)setArtwork:(NSImage *)art;
#endif
- (void)parseIfNeeded;
/* Callback Methods */
- (void)parsedChanged:(NSNumber *)isParsedAsNumber;
- (void)metaChanged:(NSString *)metaType;
- (void)subItemAdded;
- (void)setStateAsNumber:(NSNumber *)newStateAsNumber;
@end
static VLCMediaState libvlc_state_to_media_state[] =
{
[libvlc_NothingSpecial] = VLCMediaStateNothingSpecial,
[libvlc_Stopped] = VLCMediaStateNothingSpecial,
[libvlc_Opening] = VLCMediaStateNothingSpecial,
[libvlc_Buffering] = VLCMediaStateBuffering,
[libvlc_Ended] = VLCMediaStateNothingSpecial,
[libvlc_Error] = VLCMediaStateError,
[libvlc_Playing] = VLCMediaStatePlaying,
[libvlc_Paused] = VLCMediaStatePlaying,
};
static inline VLCMediaState LibVLCStateToMediaState( libvlc_state_t state )
{
return libvlc_state_to_media_state[state];
}
/******************************************************************************
* LibVLC Event Callback
*/
static void HandleMediaMetaChanged(const libvlc_event_t * event, void * self)
{
if( event->u.media_meta_changed.meta_type == libvlc_meta_Publisher ||
event->u.media_meta_changed.meta_type == libvlc_meta_NowPlaying )
{
/* Skip those meta. We don't really care about them for now.
* And they occure a lot */
return;
}
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(metaChanged:)
withArgumentAsObject:[VLCMedia metaTypeToString:event->u.media_meta_changed.meta_type]];
[pool drain];
}
static void HandleMediaDurationChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(setLength:)
withArgumentAsObject:[VLCTime timeWithNumber:
[NSNumber numberWithLongLong:event->u.media_duration_changed.new_duration]]];
[pool drain];
}
static void HandleMediaStateChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(setStateAsNumber:)
withArgumentAsObject:[NSNumber numberWithInt:
LibVLCStateToMediaState(event->u.media_state_changed.new_state)]];
[pool drain];
}
static void HandleMediaSubItemAdded(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(subItemAdded)
withArgumentAsObject:nil];
[pool drain];
}
static void HandleMediaParsedChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(parsedChanged:)
withArgumentAsObject:[NSNumber numberWithBool:event->u.media_parsed_changed.new_status]];
[pool release];
}
/******************************************************************************
* Implementation
*/
@implementation VLCMedia
+ (id)mediaWithURL:(NSURL *)anURL;
{
return [[[VLCMedia alloc] initWithURL:anURL] autorelease];
}
+ (id)mediaWithPath:(NSString *)aPath;
{
return [[[VLCMedia alloc] initWithPath:aPath] autorelease];
}
+ (id)mediaAsNodeWithName:(NSString *)aName;
{
return [[[VLCMedia alloc] initAsNodeWithName:aName] autorelease];
}
- (id)initWithPath:(NSString *)aPath
{
return [self initWithURL:[NSURL fileURLWithPath:aPath isDirectory:NO]];
}
- (id)initWithURL:(NSURL *)anURL
{
if (self = [super init])
{
p_md = libvlc_media_new_location([VLCLibrary sharedInstance],
[[anURL absoluteString] UTF8String]);
delegate = nil;
metaDictionary = [[NSMutableDictionary alloc] initWithCapacity:3];
// This value is set whenever the demuxer figures out what the length is.
// TODO: Easy way to tell the length of the movie without having to instiate the demuxer. Maybe cached info?
length = nil;
[self initInternalMediaDescriptor];
}
return self;
}
- (id)initAsNodeWithName:(NSString *)aName
{
if (self = [super init])
{
p_md = libvlc_media_new_as_node([VLCLibrary sharedInstance],
[aName UTF8String]);
delegate = nil;
metaDictionary = [[NSMutableDictionary alloc] initWithCapacity:3];
// This value is set whenever the demuxer figures out what the length is.
// TODO: Easy way to tell the length of the movie without having to instiate the demuxer. Maybe cached info?
length = nil;
[self initInternalMediaDescriptor];
}
return self;
}
- (void)dealloc
{
libvlc_event_manager_t * p_em = libvlc_media_event_manager(p_md);
libvlc_event_detach(p_em, libvlc_MediaMetaChanged, HandleMediaMetaChanged, self);
libvlc_event_detach(p_em, libvlc_MediaDurationChanged, HandleMediaDurationChanged, self);
libvlc_event_detach(p_em, libvlc_MediaStateChanged, HandleMediaStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaSubItemAdded, HandleMediaSubItemAdded, self);
libvlc_event_detach(p_em, libvlc_MediaParsedChanged, HandleMediaParsedChanged, self);
[[VLCEventManager sharedManager] cancelCallToObject:self];
// Testing to see if the pointer exists is not required, if the pointer is null
// then the release message is not sent to it.
delegate = nil;
[length release];
[url release];
[subitems release];
[metaDictionary release];
libvlc_media_release( p_md );
[super dealloc];
}
- (NSString *)description
{
NSString * result = [metaDictionary objectForKey:VLCMetaInformationTitle];
return [NSString stringWithFormat:@"<%@ %p> %@", [self class], self, (result ? result : [url absoluteString])];
}
- (NSComparisonResult)compare:(VLCMedia *)media
{
if (self == media)
return NSOrderedSame;
if (!media)
return NSOrderedDescending;
return p_md == [media libVLCMediaDescriptor] ? NSOrderedSame : NSOrderedAscending;
}
@synthesize delegate;
- (VLCTime *)length
{
if (!length)
{
// Try figuring out what the length is
long long duration = libvlc_media_get_duration( p_md );
if (duration > -1)
{
length = [[VLCTime timeWithNumber:[NSNumber numberWithLongLong:duration]] retain];
return [[length retain] autorelease];
}
return [VLCTime nullTime];
}
return [[length retain] autorelease];
}
- (VLCTime *)lengthWaitUntilDate:(NSDate *)aDate
{
static const long long thread_sleep = 10000;
if (!length)
{
// Force parsing of this item.
[self parseIfNeeded];
// wait until we are preparsed
while (!length && !libvlc_media_is_parsed(p_md) && [aDate timeIntervalSinceNow] > 0)
{
usleep( thread_sleep );
}
// So we're done waiting, but sometimes we trap the fact that the parsing
// was done before the length gets assigned, so lets go ahead and assign
// it ourselves.
if (!length)
return [self length];
}
return [[length retain] autorelease];
}
- (BOOL)isParsed
{
return isParsed;
}
- (void)parse
{
libvlc_media_parse_async(p_md);
}
- (void)addOptions:(NSDictionary*)options
{
if (p_md)
{
for (NSString * key in [options allKeys])
{
if ([options objectForKey:key] != [NSNull null])
libvlc_media_add_option(p_md, [[NSString stringWithFormat:@"%@=%@", key, [options objectForKey:key]] UTF8String]);
else
libvlc_media_add_option(p_md, [[NSString stringWithFormat:@"%@", key] UTF8String]);
}
}
}
- (NSDictionary*) stats
{
if(!p_md)
return NULL;
NSMutableDictionary *d = [NSMutableDictionary dictionary];
libvlc_media_stats_t p_stats;
libvlc_media_get_stats(p_md, &p_stats);
[d setObject:[NSNumber numberWithFloat: p_stats.f_demux_bitrate] forKey:@"demuxBitrate"];
[d setObject:[NSNumber numberWithFloat: p_stats.f_input_bitrate] forKey:@"inputBitrate"];
[d setObject:[NSNumber numberWithFloat: p_stats.f_send_bitrate] forKey:@"sendBitrate"];
[d setObject:[NSNumber numberWithInt: p_stats.i_decoded_audio] forKey:@"decodedAudio"];
[d setObject:[NSNumber numberWithInt: p_stats.i_decoded_video] forKey:@"decodedVideo"];
[d setObject:[NSNumber numberWithInt: p_stats.i_demux_corrupted] forKey:@"demuxCorrupted"];
[d setObject:[NSNumber numberWithInt: p_stats.i_demux_discontinuity] forKey:@"demuxDiscontinuity"];
[d setObject:[NSNumber numberWithInt: p_stats.i_demux_read_bytes] forKey:@"demuxReadBytes"];
[d setObject:[NSNumber numberWithInt: p_stats.i_displayed_pictures] forKey:@"displayedPictures"];
[d setObject:[NSNumber numberWithInt: p_stats.i_lost_abuffers] forKey:@"lostAbuffers"];
[d setObject:[NSNumber numberWithInt: p_stats.i_lost_pictures] forKey:@"lostPictures"];
[d setObject:[NSNumber numberWithInt: p_stats.i_played_abuffers] forKey:@"playedAbuffers"];
[d setObject:[NSNumber numberWithInt: p_stats.i_read_bytes] forKey:@"readBytes"];
[d setObject:[NSNumber numberWithInt: p_stats.i_sent_bytes] forKey:@"sentBytes"];
[d setObject:[NSNumber numberWithInt: p_stats.i_sent_packets] forKey:@"sentPackets"];
return d;
}
NSString *VLCMediaTracksInformationCodec = @"codec"; // NSNumber
NSString *VLCMediaTracksInformationId = @"id"; // NSNumber
NSString *VLCMediaTracksInformationType = @"type"; // NSString
NSString *VLCMediaTracksInformationTypeAudio = @"audio";
NSString *VLCMediaTracksInformationTypeVideo = @"video";
NSString *VLCMediaTracksInformationTypeText = @"text";
NSString *VLCMediaTracksInformationTypeUnknown = @"unknown";
NSString *VLCMediaTracksInformationCodecProfile = @"profile"; // NSNumber
NSString *VLCMediaTracksInformationCodecLevel = @"level"; // NSNumber
NSString *VLCMediaTracksInformationAudioChannelsNumber = @"channelsNumber"; // NSNumber
NSString *VLCMediaTracksInformationAudioRate = @"rate"; // NSNumber
NSString *VLCMediaTracksInformationVideoHeight = @"height"; // NSNumber
NSString *VLCMediaTracksInformationVideoWidth = @"width"; // NSNumber
- (NSArray *)tracksInformation
{
// Trigger parsing if needed
[self parseIfNeeded];
libvlc_media_track_info_t *tracksInfo;
int count = libvlc_media_get_tracks_info(p_md, &tracksInfo);
NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < count; i++) {
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithUnsignedInt:tracksInfo[i].i_codec], VLCMediaTracksInformationCodec,
[NSNumber numberWithInt:tracksInfo[i].i_id], VLCMediaTracksInformationId,
[NSNumber numberWithInt:tracksInfo[i].i_profile], VLCMediaTracksInformationCodecProfile,
[NSNumber numberWithInt:tracksInfo[i].i_level], VLCMediaTracksInformationCodecLevel,
nil];
NSString *type;
switch (tracksInfo[i].i_type) {
case libvlc_track_audio:
type = VLCMediaTracksInformationTypeAudio;
NSNumber *level = [NSNumber numberWithUnsignedInt:tracksInfo[i].u.audio.i_channels];
NSNumber *rate = [NSNumber numberWithUnsignedInt:tracksInfo[i].u.audio.i_rate];
[dictionary setObject:level forKey:VLCMediaTracksInformationAudioChannelsNumber];
[dictionary setObject:rate forKey:VLCMediaTracksInformationAudioRate];
break;
case libvlc_track_video:
type = VLCMediaTracksInformationTypeVideo;
NSNumber *width = [NSNumber numberWithUnsignedInt:tracksInfo[i].u.video.i_width];
NSNumber *height = [NSNumber numberWithUnsignedInt:tracksInfo[i].u.video.i_height];
[dictionary setObject:width forKey:VLCMediaTracksInformationVideoWidth];
[dictionary setObject:height forKey:VLCMediaTracksInformationVideoHeight];
break;
case libvlc_track_text:
type = VLCMediaTracksInformationTypeText;
[dictionary setObject:VLCMediaTracksInformationTypeText forKey:VLCMediaTracksInformationType];
break;
case libvlc_track_unknown:
default:
type = VLCMediaTracksInformationTypeUnknown;
break;
}
[dictionary setValue:type forKey:VLCMediaTracksInformationType];
[array addObject:dictionary];
}
free(tracksInfo);
return array;
}
@synthesize url;
@synthesize subitems;
@synthesize metaDictionary;
@synthesize state;
@end
/******************************************************************************
* Implementation VLCMedia (LibVLCBridging)
*/
@implementation VLCMedia (LibVLCBridging)
+ (id)mediaWithLibVLCMediaDescriptor:(void *)md
{
return [[[VLCMedia alloc] initWithLibVLCMediaDescriptor:md] autorelease];
}
- (id)initWithLibVLCMediaDescriptor:(void *)md
{
if (self = [super init])
{
libvlc_media_retain( md );
p_md = md;
metaDictionary = [[NSMutableDictionary alloc] initWithCapacity:3];
[self initInternalMediaDescriptor];
}
return self;
}
- (void *)libVLCMediaDescriptor
{
return p_md;
}
+ (id)mediaWithMedia:(VLCMedia *)media andLibVLCOptions:(NSDictionary *)options
{
libvlc_media_t * p_md;
p_md = libvlc_media_duplicate( [media libVLCMediaDescriptor] );
for( NSString * key in [options allKeys] )
{
if ( [options objectForKey:key] != [NSNull null] )
libvlc_media_add_option(p_md, [[NSString stringWithFormat:@"%@=%@", key, [options objectForKey:key]] UTF8String]);
else
libvlc_media_add_option(p_md, [[NSString stringWithFormat:@"%@", key] UTF8String]);
}
return [VLCMedia mediaWithLibVLCMediaDescriptor:p_md];
}
@end
/******************************************************************************
* Implementation VLCMedia (Private)
*/
@implementation VLCMedia (Private)
+ (libvlc_meta_t)stringToMetaType:(NSString *)string
{
static NSDictionary * stringToMetaDictionary = nil;
// TODO: Thread safe-ize
if( !stringToMetaDictionary )
{
#define VLCStringToMeta( name ) [NSNumber numberWithInt: libvlc_meta_##name], VLCMetaInformation##name
stringToMetaDictionary =
[[NSDictionary dictionaryWithObjectsAndKeys:
VLCStringToMeta(Title),
VLCStringToMeta(Artist),
VLCStringToMeta(Genre),
VLCStringToMeta(Copyright),
VLCStringToMeta(Album),
VLCStringToMeta(TrackNumber),
VLCStringToMeta(Description),
VLCStringToMeta(Rating),
VLCStringToMeta(Date),
VLCStringToMeta(Setting),
VLCStringToMeta(URL),
VLCStringToMeta(Language),
VLCStringToMeta(NowPlaying),
VLCStringToMeta(Publisher),
VLCStringToMeta(ArtworkURL),
VLCStringToMeta(TrackID),
nil] retain];
#undef VLCStringToMeta
}
NSNumber * number = [stringToMetaDictionary objectForKey:string];
return number ? [number intValue] : -1;
}
+ (NSString *)metaTypeToString:(libvlc_meta_t)type
{
#define VLCMetaToString( name, type ) if (libvlc_meta_##name == type) return VLCMetaInformation##name;
VLCMetaToString(Title, type);
VLCMetaToString(Artist, type);
VLCMetaToString(Genre, type);
VLCMetaToString(Copyright, type);
VLCMetaToString(Album, type);
VLCMetaToString(TrackNumber, type);
VLCMetaToString(Description, type);
VLCMetaToString(Rating, type);
VLCMetaToString(Date, type);
VLCMetaToString(Setting, type);
VLCMetaToString(URL, type);
VLCMetaToString(Language, type);
VLCMetaToString(NowPlaying, type);
VLCMetaToString(Publisher, type);
VLCMetaToString(ArtworkURL, type);
VLCMetaToString(TrackID, type);
#undef VLCMetaToString
return nil;
}
- (void)initInternalMediaDescriptor
{
char * p_url = libvlc_media_get_mrl( p_md );
url = [[NSURL URLWithString:[NSString stringWithUTF8String:p_url]] retain];
if( !url ) /* Attempt to interpret as a file path then */
url = [[NSURL fileURLWithPath:[NSString stringWithUTF8String:p_url]] retain];
free( p_url );
libvlc_media_set_user_data( p_md, (void*)self );
libvlc_event_manager_t * p_em = libvlc_media_event_manager( p_md );
libvlc_event_attach(p_em, libvlc_MediaMetaChanged, HandleMediaMetaChanged, self);
libvlc_event_attach(p_em, libvlc_MediaDurationChanged, HandleMediaDurationChanged, self);
libvlc_event_attach(p_em, libvlc_MediaStateChanged, HandleMediaStateChanged, self);
libvlc_event_attach(p_em, libvlc_MediaSubItemAdded, HandleMediaSubItemAdded, self);
libvlc_event_attach(p_em, libvlc_MediaParsedChanged, HandleMediaParsedChanged, self);
libvlc_media_list_t * p_mlist = libvlc_media_subitems( p_md );
if (!p_mlist)
subitems = nil;
else
{
subitems = [[VLCMediaList mediaListWithLibVLCMediaList:p_mlist] retain];
libvlc_media_list_release( p_mlist );
}
isParsed = libvlc_media_is_parsed(p_md);
state = LibVLCStateToMediaState(libvlc_media_get_state( p_md ));
}
- (void)fetchMetaInformationFromLibVLCWithType:(NSString *)metaType
{
char * psz_value = libvlc_media_get_meta( p_md, [VLCMedia stringToMetaType:metaType] );
NSString * newValue = psz_value ? [NSString stringWithUTF8String: psz_value] : nil;
NSString * oldValue = [metaDictionary valueForKey:metaType];
free(psz_value);
if ( newValue != oldValue && !(oldValue && newValue && [oldValue compare:newValue] == NSOrderedSame) )
{
// Only fetch the art if needed. (ie, create the NSImage, if it was requested before)
if (isArtFetched && [metaType isEqualToString:VLCMetaInformationArtworkURL])
{
[NSThread detachNewThreadSelector:@selector(fetchMetaInformationForArtWorkWithURL:)
toTarget:self
withObject:newValue];
}
[metaDictionary setValue:newValue forKeyPath:metaType];
}
}
#if !TARGET_OS_IPHONE
- (void)fetchMetaInformationForArtWorkWithURL:(NSString *)anURL
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSImage * art = nil;
if( anURL )
{
// Go ahead and load up the art work
NSURL * artUrl = [NSURL URLWithString:[anURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
// Don't attempt to fetch artwork from remote. Core will do that alone
if ([artUrl isFileURL])
art = [[[NSImage alloc] initWithContentsOfURL:artUrl] autorelease];
}
// If anything was found, lets save it to the meta data dictionary
[self performSelectorOnMainThread:@selector(setArtwork:) withObject:art waitUntilDone:NO];
[pool release];
}
- (void)setArtwork:(NSImage *)art
{
if (!art)
{
[metaDictionary removeObjectForKey:@"artwork"];
return;
}
[metaDictionary setObject:art forKey:@"artwork"];
}
#endif
- (void)parseIfNeeded
{
if (![self isParsed])
[self parse];
}
- (void)metaChanged:(NSString *)metaType
{
[self fetchMetaInformationFromLibVLCWithType:metaType];
}
- (void)subItemAdded
{
if( subitems )
return; /* Nothing to do */
libvlc_media_list_t * p_mlist = libvlc_media_subitems( p_md );
NSAssert( p_mlist, @"The mlist shouldn't be nil, we are receiving a subItemAdded");
[self willChangeValueForKey:@"subitems"];
subitems = [[VLCMediaList mediaListWithLibVLCMediaList:p_mlist] retain];
[self didChangeValueForKey:@"subitems"];
libvlc_media_list_release( p_mlist );
}
- (void)parsedChanged:(NSNumber *)isParsedAsNumber
{
[self willChangeValueForKey:@"parsed"];
isParsed = [isParsedAsNumber boolValue];
[self didChangeValueForKey:@"parsed"];
// FIXME: Probably don't even call this if there is no delegate.
if (!delegate || !isParsed)
return;
if ([delegate respondsToSelector:@selector(mediaDidFinishParsing:)]) {
[delegate mediaDidFinishParsing:self];
}
}
- (void)setStateAsNumber:(NSNumber *)newStateAsNumber
{
[self setState: [newStateAsNumber intValue]];
}
#if TARGET_OS_IPHONE
- (NSDictionary *)metaDictionary
{
if (!areOthersMetaFetched) {
areOthersMetaFetched = YES;
/* Force VLCMetaInformationTitle, that will trigger preparsing
* And all the other meta will be added through the libvlc event system */
[self fetchMetaInformationFromLibVLCWithType: VLCMetaInformationTitle];
}
if (!isArtURLFetched)
{
isArtURLFetched = YES;
/* Force isArtURLFetched, that will trigger artwork download eventually
* And all the other meta will be added through the libvlc event system */
[self fetchMetaInformationFromLibVLCWithType: VLCMetaInformationArtworkURL];
}
return metaDictionary;
}
#else
- (id)valueForKeyPath:(NSString *)keyPath
{
if( !isArtFetched && [keyPath isEqualToString:@"metaDictionary.artwork"])
{
isArtFetched = YES;
/* Force the retrieval of the artwork now that someone asked for it */
[self fetchMetaInformationFromLibVLCWithType: VLCMetaInformationArtworkURL];
}
else if( !areOthersMetaFetched && [keyPath hasPrefix:@"metaDictionary."])
{
areOthersMetaFetched = YES;
/* Force VLCMetaInformationTitle, that will trigger preparsing
* And all the other meta will be added through the libvlc event system */
[self fetchMetaInformationFromLibVLCWithType: VLCMetaInformationTitle];
}
else if( !isArtURLFetched && [keyPath hasPrefix:@"metaDictionary.artworkURL"])
{
isArtURLFetched = YES;
/* Force isArtURLFetched, that will trigger artwork download eventually
* And all the other meta will be added through the libvlc event system */
[self fetchMetaInformationFromLibVLCWithType: VLCMetaInformationArtworkURL];
}
return [super valueForKeyPath:keyPath];
}
#endif
@end
/******************************************************************************
* Implementation VLCMedia (VLCMediaPlayerBridging)
*/
@implementation VLCMedia (VLCMediaPlayerBridging)
- (void)setLength:(VLCTime *)value
{
if (length && value && [length compare:value] == NSOrderedSame)
return;
[length release];
length = value ? [value retain] : nil;
}
@end
/*****************************************************************************
* VLCMediaDiscoverer.m: VLCKit.framework VLCMediaDiscoverer implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCMediaDiscoverer.h"
#import "VLCLibrary.h"
#import "VLCLibVLCBridging.h"
#import "VLCEventManager.h"
#include <vlc/libvlc.h>
static NSMutableArray * availableMediaDiscoverer = nil; // Global list of media discoverers
/**
* Declares call back functions to be used with libvlc event callbacks.
*/
@interface VLCMediaDiscoverer (Private)
/**
* TODO: Documention
*/
- (void)mediaDiscovererStarted;
/**
* TODO: Documention
*/
- (void)mediaDiscovererEnded;
@end
/* libvlc event callback */
static void HandleMediaDiscovererStarted(const libvlc_event_t * event, void * user_data)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id self = user_data;
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaDiscovererStarted)
withArgumentAsObject:nil];
[pool drain];
}
static void HandleMediaDiscovererEnded( const libvlc_event_t * event, void * user_data)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id self = user_data;
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaDiscovererEnded)
withArgumentAsObject:nil];
[pool drain];
}
@implementation VLCMediaDiscoverer
+ (NSArray *)availableMediaDiscoverer
{
if( !availableMediaDiscoverer )
{
availableMediaDiscoverer = [[NSArray arrayWithObjects:
[[[VLCMediaDiscoverer alloc] initWithName:@"sap"] autorelease],
[[[VLCMediaDiscoverer alloc] initWithName:@"upnp"] autorelease],
[[[VLCMediaDiscoverer alloc] initWithName:@"freebox"] autorelease],
[[[VLCMediaDiscoverer alloc] initWithName:@"video_dir"] autorelease], nil] retain];
}
return availableMediaDiscoverer;
}
- (id)initWithName:(NSString *)aServiceName
{
if (self = [super init])
{
localizedName = nil;
discoveredMedia = nil;
mdis = libvlc_media_discoverer_new_from_name([VLCLibrary sharedInstance],
[aServiceName UTF8String]);
NSAssert(mdis, @"No such media discoverer");
libvlc_event_manager_t * p_em = libvlc_media_discoverer_event_manager(mdis);
libvlc_event_attach(p_em, libvlc_MediaDiscovererStarted, HandleMediaDiscovererStarted, self);
libvlc_event_attach(p_em, libvlc_MediaDiscovererEnded, HandleMediaDiscovererEnded, self);
running = libvlc_media_discoverer_is_running(mdis);
}
return self;
}
- (void)dealloc
{
libvlc_event_manager_t *em = libvlc_media_list_event_manager(mdis);
libvlc_event_detach(em, libvlc_MediaDiscovererStarted, HandleMediaDiscovererStarted, self);
libvlc_event_detach(em, libvlc_MediaDiscovererEnded, HandleMediaDiscovererEnded, self);
[[VLCEventManager sharedManager] cancelCallToObject:self];
[localizedName release];
[discoveredMedia release];
libvlc_media_discoverer_release( mdis );
[super dealloc];
}
- (VLCMediaList *) discoveredMedia
{
if( discoveredMedia )
return discoveredMedia;
libvlc_media_list_t * p_mlist = libvlc_media_discoverer_media_list( mdis );
VLCMediaList * ret = [VLCMediaList mediaListWithLibVLCMediaList:p_mlist];
libvlc_media_list_release( p_mlist );
discoveredMedia = [ret retain];
return discoveredMedia;
}
- (NSString *)localizedName
{
if ( localizedName )
return localizedName;
char * name = libvlc_media_discoverer_localized_name( mdis );
if (name)
{
localizedName = [[NSString stringWithUTF8String:name] retain];
free( name );
}
return localizedName;
}
- (BOOL)isRunning
{
return running;
}
@end
@implementation VLCMediaDiscoverer (Private)
- (void)mediaDiscovererStarted
{
[self willChangeValueForKey:@"running"];
running = YES;
[self didChangeValueForKey:@"running"];
}
- (void)mediaDiscovererEnded
{
[self willChangeValueForKey:@"running"];
running = NO;
[self didChangeValueForKey:@"running"];
}
@end
/*****************************************************************************
* VLCMediaLibrary.m: VLCKit.framework VLCMediaLibrary implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
#import "VLCMediaLibrary.h"
#import "VLCLibrary.h"
#import "VLCLibVLCBridging.h"
#include <vlc/libvlc.h>
@implementation VLCMediaLibrary
+ (id)sharedMediaLibrary
{
static VLCMediaLibrary * sharedMediaLibrary = nil;
if( !sharedMediaLibrary )
{
sharedMediaLibrary = [[VLCMediaLibrary alloc] init];
}
return sharedMediaLibrary;
}
- (id)init
{
if (self = [super init])
{
mlib = libvlc_media_library_new( [VLCLibrary sharedInstance]);
libvlc_media_library_load( mlib );
allMedia = nil;
}
return self;
}
- (void)dealloc
{
[allMedia release];
libvlc_media_library_release(mlib);
mlib = nil; // make sure that the pointer is dead
[super dealloc];
}
- (VLCMediaList *)allMedia
{
if( !allMedia )
{
libvlc_media_list_t * p_mlist = libvlc_media_library_media_list( mlib );
allMedia = [[VLCMediaList mediaListWithLibVLCMediaList:p_mlist] retain];
libvlc_media_list_release(p_mlist);
}
return allMedia;
}
@end
/*****************************************************************************
* VLCMediaList.m: VLCKit.framework VLCMediaList implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCMediaList.h"
#import "VLCLibrary.h"
#import "VLCEventManager.h"
#import "VLCLibVLCBridging.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc/vlc.h>
#include <vlc/libvlc.h>
/* Notification Messages */
NSString * VLCMediaListItemAdded = @"VLCMediaListItemAdded";
NSString * VLCMediaListItemDeleted = @"VLCMediaListItemDeleted";
// TODO: Documentation
@interface VLCMediaList (Private)
/* Initializers */
- (void)initInternalMediaList;
/* Libvlc event bridges */
- (void)mediaListItemAdded:(NSArray *)args;
- (void)mediaListItemRemoved:(NSNumber *)index;
@end
/* libvlc event callback */
static void HandleMediaListItemAdded(const libvlc_event_t * event, void * user_data)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id self = user_data;
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaListItemAdded:)
withArgumentAsObject:[NSArray arrayWithObject:[NSDictionary dictionaryWithObjectsAndKeys:
[VLCMedia mediaWithLibVLCMediaDescriptor:event->u.media_list_item_added.item], @"media",
[NSNumber numberWithInt:event->u.media_list_item_added.index], @"index",
nil]]];
[pool drain];
}
static void HandleMediaListItemDeleted( const libvlc_event_t * event, void * user_data)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id self = user_data;
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaListItemRemoved:)
withArgumentAsObject:[NSNumber numberWithInt:event->u.media_list_item_deleted.index]];
[pool drain];
}
@implementation VLCMediaList
- (id)init
{
if (self = [super init])
{
// Create a new libvlc media list instance
p_mlist = libvlc_media_list_new([VLCLibrary sharedInstance]);
// Initialize internals to defaults
cachedMedia = [[NSMutableArray alloc] init];
[self initInternalMediaList];
}
return self;
}
- (void)dealloc
{
libvlc_event_manager_t *em = libvlc_media_list_event_manager(p_mlist);
libvlc_event_detach(em, libvlc_MediaListItemDeleted, HandleMediaListItemDeleted, self);
libvlc_event_detach(em, libvlc_MediaListItemAdded, HandleMediaListItemAdded, self);
[[VLCEventManager sharedManager] cancelCallToObject:self];
// Release allocated memory
delegate = nil;
libvlc_media_list_release( p_mlist );
[cachedMedia release];
[super dealloc];
}
- (NSString *)description
{
NSMutableString * content = [NSMutableString string];
int i;
for( i = 0; i < [self count]; i++)
{
[content appendFormat:@"%@\n", [self mediaAtIndex: i]];
}
return [NSString stringWithFormat:@"<%@ %p> {\n%@}", [self class], self, content];
}
- (void)lock
{
libvlc_media_list_lock( p_mlist );
}
- (void)unlock
{
libvlc_media_list_unlock( p_mlist );
}
- (NSInteger)addMedia:(VLCMedia *)media
{
int index = [self count];
[self insertMedia:media atIndex:index];
return index;
}
- (void)insertMedia:(VLCMedia *)media atIndex: (NSInteger)index
{
[media retain];
// Add it to the libvlc's medialist
libvlc_media_list_insert_media(p_mlist, [media libVLCMediaDescriptor], index);
}
- (void)removeMediaAtIndex:(NSInteger)index
{
[[self mediaAtIndex:index] release];
// Remove it from the libvlc's medialist
libvlc_media_list_remove_index(p_mlist, index);
}
- (VLCMedia *)mediaAtIndex:(NSInteger)index
{
return [cachedMedia objectAtIndex:index];
}
- (NSInteger)indexOfMedia:(VLCMedia *)media
{
NSInteger result = libvlc_media_list_index_of_item(p_mlist, [media libVLCMediaDescriptor]);
return result;
}
/* KVC Compliance: For the @"media" key */
- (NSInteger)countOfMedia
{
return [self count];
}
- (id)objectInMediaAtIndex:(NSUInteger)i
{
return [self mediaAtIndex:i];
}
- (NSInteger)count
{
return [cachedMedia count];
}
- (void)insertObject:(id)object inMediaAtIndex:(NSUInteger)i
{
[self insertMedia:object atIndex:i];
}
- (void)removeObjectFromMediaAtIndex:(NSUInteger)i
{
[self removeMediaAtIndex:i];
}
@synthesize delegate;
- (BOOL)isReadOnly
{
return libvlc_media_list_is_readonly( p_mlist );
}
@end
@implementation VLCMediaList (LibVLCBridging)
+ (id)mediaListWithLibVLCMediaList:(void *)p_new_mlist;
{
return [[[VLCMediaList alloc] initWithLibVLCMediaList:p_new_mlist] autorelease];
}
- (id)initWithLibVLCMediaList:(void *)p_new_mlist;
{
if( self = [super init] )
{
p_mlist = p_new_mlist;
libvlc_media_list_retain( p_mlist );
libvlc_media_list_lock( p_mlist );
cachedMedia = [[NSMutableArray alloc] initWithCapacity:libvlc_media_list_count(p_mlist)];
NSUInteger i, count = libvlc_media_list_count(p_mlist);
for( i = 0; i < count; i++ )
{
libvlc_media_t * p_md = libvlc_media_list_item_at_index(p_mlist, i);
[cachedMedia addObject:[VLCMedia mediaWithLibVLCMediaDescriptor:p_md]];
libvlc_media_release(p_md);
}
[self initInternalMediaList];
libvlc_media_list_unlock(p_mlist);
}
return self;
}
- (void *)libVLCMediaList
{
return p_mlist;
}
@end
@implementation VLCMediaList (Private)
- (void)initInternalMediaList
{
// Add event callbacks
libvlc_event_manager_t * p_em = libvlc_media_list_event_manager(p_mlist);
libvlc_event_attach( p_em, libvlc_MediaListItemAdded, HandleMediaListItemAdded, self);
libvlc_event_attach( p_em, libvlc_MediaListItemDeleted, HandleMediaListItemDeleted, self);
}
- (void)mediaListItemAdded:(NSArray *)arrayOfArgs
{
/* We hope to receive index in a nide range, that could change one day */
NSInteger start = [[[arrayOfArgs objectAtIndex: 0] objectForKey:@"index"] intValue];
NSInteger end = [[[arrayOfArgs objectAtIndex: [arrayOfArgs count]-1] objectForKey:@"index"] intValue];
NSRange range = NSMakeRange(start, end-start);
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range] forKey:@"media"];
for( NSDictionary * args in arrayOfArgs )
{
NSInteger index = [[args objectForKey:@"index"] intValue];
VLCMedia * media = [args objectForKey:@"media"];
/* Sanity check */
if( index && index > [cachedMedia count] )
index = [cachedMedia count];
[cachedMedia insertObject:media atIndex:index];
}
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range] forKey:@"media"];
// Post the notification
// [[NSNotificationCenter defaultCenter] postNotificationName:VLCMediaListItemAdded
// object:self
// userInfo:args];
// Let the delegate know that the item was added
// if (delegate && [delegate respondsToSelector:@selector(mediaList:mediaAdded:atIndex:)])
// [delegate mediaList:self mediaAdded:media atIndex:index];
}
- (void)mediaListItemRemoved:(NSNumber *)index
{
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:[NSIndexSet indexSetWithIndex:[index intValue]] forKey:@"media"];
[cachedMedia removeObjectAtIndex:[index intValue]];
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:[NSIndexSet indexSetWithIndex:[index intValue]] forKey:@"media"];
// Post the notification
[[NSNotificationCenter defaultCenter] postNotificationName:VLCMediaListItemDeleted
object:self
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:
index, @"index",
nil]];
// Let the delegate know that the item is being removed
if (delegate && [delegate respondsToSelector:@selector(mediaList:mediaRemovedAtIndex:)])
[delegate mediaList:self mediaRemovedAtIndex:[index intValue]];
}
@end
/*****************************************************************************
* VLCMediaListPlayer.m: VLCKit.framework VLCMediaListPlayer implementation
*****************************************************************************
* Copyright (C) 2009 Pierre d'Herbemont
* Partial Copyright (C) 2009 Felix Paul Kühne
* Copyright (C) 2009 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
* Felix Paul Kühne <fkuehne # videolan.org
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCMediaListPlayer.h"
#import "VLCMedia.h"
#import "VLCMediaPlayer.h"
#import "VLCMediaList.h"
#import "VLCLibVLCBridging.h"
@implementation VLCMediaListPlayer
- (id)init
{
if (self = [super init])
{
_mediaPlayer = [[VLCMediaPlayer alloc] init];
instance = libvlc_media_list_player_new([VLCLibrary sharedInstance]);
libvlc_media_list_player_set_media_player(instance, [_mediaPlayer libVLCMediaPlayer]);
}
return self;
}
- (void)dealloc
{
libvlc_media_list_player_release(instance);
[_mediaPlayer release];
[_rootMedia release];
[_mediaList release];
[super dealloc];
}
- (VLCMediaPlayer *)mediaPlayer
{
return _mediaPlayer;
}
- (void)setMediaList:(VLCMediaList *)mediaList
{
if (_mediaList == mediaList)
return;
[_mediaList release];
_mediaList = [mediaList retain];
libvlc_media_list_player_set_media_list(instance, [mediaList libVLCMediaList]);
[self willChangeValueForKey:@"rootMedia"];
[_rootMedia release];
_rootMedia = nil;
[self didChangeValueForKey:@"rootMedia"];
}
- (VLCMediaList *)mediaList
{
return _mediaList;
}
- (void)setRootMedia:(VLCMedia *)media
{
if (_rootMedia == media)
return;
[_rootMedia release];
_rootMedia = nil;
VLCMediaList *mediaList = [[VLCMediaList alloc] init];
if (media)
[mediaList addMedia:media];
// This will clean rootMedia
[self setMediaList:mediaList];
// Thus set rootMedia here.
_rootMedia = [media retain];
[mediaList release];
}
- (VLCMedia *)rootMedia
{
return _rootMedia;
}
- (void)playMedia:(VLCMedia *)media
{
libvlc_media_list_player_play_item(instance, [media libVLCMediaDescriptor]);
}
- (void)play
{
libvlc_media_list_player_play(instance);
}
- (void)stop
{
libvlc_media_list_player_stop(instance);
}
- (void)setRepeatMode:(VLCRepeatMode)repeatMode
{
libvlc_playback_mode_t mode;
switch (repeatMode) {
case VLCRepeatAllItems:
mode = libvlc_playback_mode_loop;
break;
case VLCDoNotRepeat:
mode = libvlc_playback_mode_default;
break;
case VLCRepeatCurrentItem:
mode = libvlc_playback_mode_repeat;
break;
default:
NSAssert(0, @"Should not be reached");
break;
}
libvlc_media_list_player_set_playback_mode(instance, mode);
_repeatMode = repeatMode;
}
- (VLCRepeatMode)repeatMode
{
return _repeatMode;
}
@end
/*****************************************************************************
* VLCMediaPlayer.m: VLCKit.framework VLCMediaPlayer implementation
*****************************************************************************
* Copyright (C) 2007-2009 Pierre d'Herbemont
* Copyright (C) 2007-2009 VLC authors and VideoLAN
* Partial Copyright (C) 2009 Felix Paul Kühne
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
* Faustion Osuna <enrique.osuna # gmail.com>
* Felix Paul Kühne <fkuehne # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCLibrary.h"
#import "VLCMediaPlayer.h"
#import "VLCEventManager.h"
#import "VLCLibVLCBridging.h"
#if !TARGET_OS_IPHONE
# import "VLCVideoView.h"
#endif
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#if !TARGET_OS_IPHONE
/* prevent system sleep */
# import <CoreServices/CoreServices.h>
/* FIXME: Ugly hack! */
# ifdef __x86_64__
# import <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h>
# endif
#endif
#include <vlc/vlc.h>
/* Notification Messages */
NSString * VLCMediaPlayerTimeChanged = @"VLCMediaPlayerTimeChanged";
NSString * VLCMediaPlayerStateChanged = @"VLCMediaPlayerStateChanged";
NSString * VLCMediaPlayerStateToString(VLCMediaPlayerState state)
{
static NSString * stateToStrings[] = {
[VLCMediaPlayerStateStopped] = @"VLCMediaPlayerStateStopped",
[VLCMediaPlayerStateOpening] = @"VLCMediaPlayerStateOpening",
[VLCMediaPlayerStateBuffering] = @"VLCMediaPlayerStateBuffering",
[VLCMediaPlayerStateEnded] = @"VLCMediaPlayerStateEnded",
[VLCMediaPlayerStateError] = @"VLCMediaPlayerStateError",
[VLCMediaPlayerStatePlaying] = @"VLCMediaPlayerStatePlaying",
[VLCMediaPlayerStatePaused] = @"VLCMediaPlayerStatePaused"
};
return stateToStrings[state];
}
/* libvlc event callback */
static void HandleMediaInstanceVolumeChanged(const libvlc_event_t * event, void * self)
{
[[VLCEventManager sharedManager] callOnMainThreadDelegateOfObject:self
withDelegateMethod:@selector(mediaPlayerVolumeChanged:)
withNotificationName:VLCMediaPlayerVolumeChanged];
}
static void HandleMediaTimeChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaPlayerTimeChanged:)
withArgumentAsObject:[NSNumber numberWithLongLong:event->u.media_player_time_changed.new_time]];
[[VLCEventManager sharedManager] callOnMainThreadDelegateOfObject:self
withDelegateMethod:@selector(mediaPlayerTimeChanged:)
withNotificationName:VLCMediaPlayerTimeChanged];
[pool drain];
}
static void HandleMediaPositionChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaPlayerPositionChanged:)
withArgumentAsObject:[NSNumber numberWithFloat:event->u.media_player_position_changed.new_position]];
[pool drain];
}
static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void * self)
{
VLCMediaPlayerState newState;
if( event->type == libvlc_MediaPlayerPlaying )
newState = VLCMediaPlayerStatePlaying;
else if( event->type == libvlc_MediaPlayerPaused )
newState = VLCMediaPlayerStatePaused;
else if( event->type == libvlc_MediaPlayerEndReached )
newState = VLCMediaPlayerStateStopped;
else if( event->type == libvlc_MediaPlayerEncounteredError )
newState = VLCMediaPlayerStateError;
else if( event->type == libvlc_MediaPlayerBuffering )
newState = VLCMediaPlayerStateBuffering;
else if( event->type == libvlc_MediaPlayerOpening )
newState = VLCMediaPlayerStateOpening;
else
{
NSLog(@"%s: Unknown event", __FUNCTION__);
return;
}
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaPlayerStateChanged:)
withArgumentAsObject:[NSNumber numberWithInt:newState]];
[[VLCEventManager sharedManager] callOnMainThreadDelegateOfObject:self
withDelegateMethod:@selector(mediaPlayerStateChanged:)
withNotificationName:VLCMediaPlayerStateChanged];
[pool drain];
}
static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaPlayerMediaChanged:)
withArgumentAsObject:[VLCMedia mediaWithLibVLCMediaDescriptor:event->u.media_player_media_changed.new_media]];
[pool drain];
}
// TODO: Documentation
@interface VLCMediaPlayer (Private)
- (id)initWithDrawable:(id)aDrawable;
- (void)registerObservers;
- (void)unregisterObservers;
- (void)mediaPlayerTimeChanged:(NSNumber *)newTime;
- (void)mediaPlayerPositionChanged:(NSNumber *)newTime;
- (void)mediaPlayerStateChanged:(NSNumber *)newState;
- (void)mediaPlayerMediaChanged:(VLCMedia *)media;
@end
@implementation VLCMediaPlayer
/* Bindings */
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
static NSDictionary * dict = nil;
NSSet * superKeyPaths;
if( !dict )
{
dict = [[NSDictionary dictionaryWithObjectsAndKeys:
[NSSet setWithObject:@"state"], @"playing",
[NSSet setWithObjects:@"state", @"media", nil], @"seekable",
[NSSet setWithObjects:@"state", @"media", nil], @"canPause",
[NSSet setWithObjects:@"state", @"media", nil], @"description",
nil] retain];
}
if( (superKeyPaths = [super keyPathsForValuesAffectingValueForKey: key]) )
{
NSMutableSet * ret = [NSMutableSet setWithSet:[dict objectForKey: key]];
[ret unionSet:superKeyPaths];
return ret;
}
return [dict objectForKey: key];
}
/* Contructor */
- (id)init
{
return [self initWithDrawable:nil];
}
#if !TARGET_OS_IPHONE
- (id)initWithVideoView:(VLCVideoView *)aVideoView
{
return [self initWithDrawable: aVideoView];
}
- (id)initWithVideoLayer:(VLCVideoLayer *)aVideoLayer
{
return [self initWithDrawable: aVideoLayer];
}
#endif
- (void)dealloc
{
NSAssert(libvlc_media_player_get_state(instance) == libvlc_Stopped, @"You released the media player before ensuring that it is stopped");
[self unregisterObservers];
[[VLCEventManager sharedManager] cancelCallToObject:self];
// Always get rid of the delegate first so we can stop sending messages to it
// TODO: Should we tell the delegate that we're shutting down?
delegate = nil;
// Clear our drawable as we are going to release it, we don't
// want the core to use it from this point. This won't happen as
// the media player must be stopped.
libvlc_media_player_set_nsobject(instance, nil);
libvlc_media_player_release(instance);
// Get rid of everything else
[media release];
[cachedTime release];
[cachedRemainingTime release];
[drawable release];
[audio release];
[super dealloc];
}
- (void)setDelegate:(id)value
{
delegate = value;
}
- (id)delegate
{
return delegate;
}
#if !TARGET_OS_IPHONE
- (void)setVideoView:(VLCVideoView *)aVideoView
{
[self setDrawable: aVideoView];
}
- (void)setVideoLayer:(VLCVideoLayer *)aVideoLayer
{
[self setDrawable: aVideoLayer];
}
#endif
- (void)setDrawable:(id)aDrawable
{
// Make sure that this instance has been associated with the drawing canvas.
libvlc_media_player_set_nsobject(instance, aDrawable);
}
- (id)drawable
{
return libvlc_media_player_get_nsobject(instance);
}
- (VLCAudio *)audio
{
if (!audio)
audio = [[VLCAudio alloc] initWithMediaPlayer:self];
return audio;
}
#pragma mark -
#pragma mark Subtitles
- (void)setCurrentVideoSubTitleIndex:(NSUInteger)index
{
libvlc_video_set_spu(instance, (int)index);
}
- (NSUInteger)currentVideoSubTitleIndex
{
NSInteger count = libvlc_video_get_spu_count(instance);
if (count <= 0)
return NSNotFound;
return libvlc_video_get_spu(instance);
}
- (BOOL)openVideoSubTitlesFromFile:(NSString *)path
{
return libvlc_video_set_subtitle_file(instance, [path UTF8String]);
}
- (NSArray *)videoSubTitles
{
libvlc_track_description_t *currentTrack = libvlc_video_get_spu_description(instance);
NSMutableArray *tempArray = [NSMutableArray array];
while (currentTrack) {
[tempArray addObject:[NSString stringWithUTF8String:currentTrack->psz_name]];
currentTrack = currentTrack->p_next;
}
libvlc_track_description_release(currentTrack);
return [NSArray arrayWithArray: tempArray];
}
#pragma mark -
#pragma mark Video Crop geometry
- (void)setVideoCropGeometry:(char *)value
{
libvlc_video_set_crop_geometry(instance, value);
}
- (char *)videoCropGeometry
{
char * result = libvlc_video_get_crop_geometry(instance);
return result;
}
- (void)setVideoAspectRatio:(char *)value
{
libvlc_video_set_aspect_ratio( instance, value );
}
- (char *)videoAspectRatio
{
char * result = libvlc_video_get_aspect_ratio( instance );
return result;
}
- (void)saveVideoSnapshotAt:(NSString *)path withWidth:(NSUInteger)width andHeight:(NSUInteger)height
{
int failure = libvlc_video_take_snapshot(instance, 0, [path UTF8String], width, height);
if (failure)
[[NSException exceptionWithName:@"Can't take a video snapshot" reason:@"No video output" userInfo:nil] raise];
}
- (void)setDeinterlaceFilter:(NSString *)name
{
libvlc_video_set_deinterlace(instance, [name UTF8String]);
}
- (void)setRate:(float)value
{
libvlc_media_player_set_rate(instance, value);
}
- (float)rate
{
return libvlc_media_player_get_rate(instance);
}
- (CGSize)videoSize
{
unsigned height = 0, width = 0;
int failure = libvlc_video_get_size(instance, 0, &width, &height);
if (failure)
[[NSException exceptionWithName:@"Can't get video size" reason:@"No video output" userInfo:nil] raise];
return CGSizeMake(width, height);
}
- (BOOL)hasVideoOut
{
return libvlc_media_player_has_vout(instance);
}
- (float)framesPerSecond
{
return libvlc_media_player_get_fps(instance);
}
- (void)setTime:(VLCTime *)value
{
// Time is managed in seconds, while duration is managed in microseconds
// TODO: Redo VLCTime to provide value numberAsMilliseconds, numberAsMicroseconds, numberAsSeconds, numberAsMinutes, numberAsHours
libvlc_media_player_set_time(instance, value ? [[value numberValue] longLongValue] : 0);
}
- (VLCTime *)time
{
return cachedTime;
}
- (VLCTime *)remainingTime
{
return cachedRemainingTime;
}
- (NSUInteger)fps
{
return libvlc_media_player_get_fps(instance);
}
#pragma mark -
#pragma mark Chapters
- (void)setCurrentChapterIndex:(NSUInteger)value;
{
libvlc_media_player_set_chapter(instance, value);
}
- (NSUInteger)currentChapterIndex
{
NSInteger count = libvlc_media_player_get_chapter_count(instance);
if (count <= 0)
return NSNotFound;
NSUInteger result = libvlc_media_player_get_chapter(instance);
return result;
}
- (void)nextChapter
{
libvlc_media_player_next_chapter(instance);
}
- (void)previousChapter
{
libvlc_media_player_previous_chapter(instance);
}
- (NSArray *)chaptersForTitleIndex:(NSUInteger)title
{
NSInteger count = libvlc_media_player_get_chapter_count(instance);
if (count <= 0)
return [NSArray array];
libvlc_track_description_t *tracks = libvlc_video_get_chapter_description(instance, title);
NSMutableArray *tempArray = [NSMutableArray array];
NSInteger i;
for (i = 0; i < count ; i++)
{
[tempArray addObject:[NSString stringWithUTF8String:tracks->psz_name]];
tracks = tracks->p_next;
}
libvlc_track_description_release(tracks);
return [NSArray arrayWithArray:tempArray];
}
#pragma mark -
#pragma mark Titles
- (void)setCurrentTitleIndex:(NSUInteger)value
{
libvlc_media_player_set_title(instance, value);
}
- (NSUInteger)currentTitleIndex
{
NSInteger count = libvlc_media_player_get_title_count(instance);
if (count <= 0)
return NSNotFound;
return libvlc_media_player_get_title(instance);
}
- (NSUInteger)countOfTitles
{
NSUInteger result = libvlc_media_player_get_title_count(instance);
return result;
}
- (NSArray *)titles
{
libvlc_track_description_t *tracks = libvlc_video_get_title_description(instance);
NSMutableArray *tempArray = [NSMutableArray array];
NSInteger i;
for (i = 0; i < [self countOfTitles] ; i++)
{
[tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
tracks = tracks->p_next;
}
libvlc_track_description_release(tracks);
return [NSArray arrayWithArray: tempArray];
}
#pragma mark -
#pragma mark Audio tracks
- (void)setCurrentAudioTrackIndex:(NSUInteger)value
{
libvlc_audio_set_track( instance, (int)value);
}
- (NSUInteger)currentAudioTrackIndex
{
NSInteger count = libvlc_audio_get_track_count(instance);
if (count <= 0)
return NSNotFound;
NSUInteger result = libvlc_audio_get_track(instance);
return result;
}
- (NSArray *)audioTracks
{
NSInteger count = libvlc_audio_get_track_count(instance);
if (count <= 0)
return [NSArray array];
libvlc_track_description_t *tracks = libvlc_audio_get_track_description(instance);
NSMutableArray *tempArray = [NSMutableArray array];
NSUInteger i;
for (i = 0; i < count ; i++)
{
[tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
tracks = tracks->p_next;
}
libvlc_track_description_release(tracks);
return [NSArray arrayWithArray: tempArray];
}
- (void)setAudioChannel:(NSInteger)value
{
libvlc_audio_set_channel(instance, value);
}
- (NSInteger)audioChannel
{
return libvlc_audio_get_channel(instance);
}
- (void)setMedia:(VLCMedia *)value
{
if (media != value)
{
if (media && [media compare:value] == NSOrderedSame)
return;
[media release];
media = [value retain];
libvlc_media_player_set_media(instance, [media libVLCMediaDescriptor]);
}
}
- (VLCMedia *)media
{
return media;
}
- (BOOL)play
{
libvlc_media_player_play(instance);
return YES;
}
- (void)pause
{
if( [NSThread isMainThread] )
{
/* Hack because we create a dead lock here, when the vout is stopped
* and tries to recontact us on the main thread */
/* FIXME: to do this properly we need to do some locking. We may want
* to move that to libvlc */
[self performSelectorInBackground:@selector(pause) withObject:nil];
return;
}
// Pause the stream
libvlc_media_player_pause(instance);
}
- (void)stop
{
libvlc_media_player_stop(instance);
}
- (void)gotoNextFrame
{
libvlc_media_player_next_frame(instance);
}
- (void)fastForward
{
[self fastForwardAtRate: 2.0];
}
- (void)fastForwardAtRate:(float)rate
{
[self setRate:rate];
}
- (void)rewind
{
[self rewindAtRate: 2.0];
}
- (void)rewindAtRate:(float)rate
{
[self setRate: -rate];
}
- (void)jumpBackward:(NSInteger)interval
{
if( [self isSeekable] )
{
interval = interval * 1000;
[self setTime: [VLCTime timeWithInt: ([[self time] intValue] - interval)]];
}
}
- (void)jumpForward:(NSInteger)interval
{
if( [self isSeekable] )
{
interval = interval * 1000;
[self setTime: [VLCTime timeWithInt: ([[self time] intValue] + interval)]];
}
}
- (void)extraShortJumpBackward
{
[self jumpBackward:3];
}
- (void)extraShortJumpForward
{
[self jumpForward:3];
}
- (void)shortJumpBackward
{
[self jumpBackward:10];
}
- (void)shortJumpForward
{
[self jumpForward:10];
}
- (void)mediumJumpBackward
{
[self jumpBackward:60];
}
- (void)mediumJumpForward
{
[self jumpForward:60];
}
- (void)longJumpBackward
{
[self jumpBackward:300];
}
- (void)longJumpForward
{
[self jumpForward:300];
}
+ (NSSet *)keyPathsForValuesAffectingIsPlaying
{
return [NSSet setWithObjects:@"state", nil];
}
- (BOOL)isPlaying
{
VLCMediaPlayerState state = [self state];
return ((state == VLCMediaPlayerStateOpening) || (state == VLCMediaPlayerStateBuffering) ||
(state == VLCMediaPlayerStatePlaying));
}
- (BOOL)willPlay
{
return libvlc_media_player_will_play(instance);
}
static const VLCMediaPlayerState libvlc_to_local_state[] =
{
[libvlc_Stopped] = VLCMediaPlayerStateStopped,
[libvlc_Opening] = VLCMediaPlayerStateOpening,
[libvlc_Buffering] = VLCMediaPlayerStateBuffering,
[libvlc_Playing] = VLCMediaPlayerStatePlaying,
[libvlc_Paused] = VLCMediaPlayerStatePaused,
[libvlc_Ended] = VLCMediaPlayerStateEnded,
[libvlc_Error] = VLCMediaPlayerStateError
};
- (VLCMediaPlayerState)state
{
return cachedState;
}
- (float)position
{
return position;
}
- (void)setPosition:(float)newPosition
{
libvlc_media_player_set_position(instance, newPosition);
}
- (BOOL)isSeekable
{
return libvlc_media_player_is_seekable(instance);
}
- (BOOL)canPause
{
return libvlc_media_player_can_pause(instance);
}
- (void *)libVLCMediaPlayer
{
return instance;
}
@end
@implementation VLCMediaPlayer (Private)
- (id)initWithDrawable:(id)aDrawable
{
if (self = [super init])
{
delegate = nil;
media = nil;
cachedTime = [[VLCTime nullTime] retain];
cachedRemainingTime = [[VLCTime nullTime] retain];
position = 0.0f;
cachedState = VLCMediaPlayerStateStopped;
// Create a media instance, it doesn't matter what library we start off with
// it will change depending on the media descriptor provided to the media
// instance
instance = libvlc_media_player_new([VLCLibrary sharedInstance]);
[self registerObservers];
[self setDrawable:aDrawable];
}
return self;
}
- (void)registerObservers
{
// Attach event observers into the media instance
libvlc_event_manager_t * p_em = libvlc_media_player_event_manager(instance);
libvlc_event_attach(p_em, libvlc_MediaPlayerPlaying, HandleMediaInstanceStateChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerPaused, HandleMediaInstanceStateChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerEncounteredError, HandleMediaInstanceStateChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerEndReached, HandleMediaInstanceStateChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerOpening, HandleMediaInstanceStateChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerBuffering, HandleMediaInstanceStateChanged, self);
/* FIXME: We may want to turn that off when none is interested by that */
libvlc_event_attach(p_em, libvlc_MediaPlayerPositionChanged, HandleMediaPositionChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerTimeChanged, HandleMediaTimeChanged, self);
libvlc_event_attach(p_em, libvlc_MediaPlayerMediaChanged, HandleMediaPlayerMediaChanged, self);
}
- (void)unregisterObservers
{
libvlc_event_manager_t * p_em = libvlc_media_player_event_manager(instance);
libvlc_event_detach(p_em, libvlc_MediaPlayerPlaying, HandleMediaInstanceStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerPaused, HandleMediaInstanceStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerEncounteredError, HandleMediaInstanceStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerEndReached, HandleMediaInstanceStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerOpening, HandleMediaInstanceStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerBuffering, HandleMediaInstanceStateChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerPositionChanged, HandleMediaPositionChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerTimeChanged, HandleMediaTimeChanged, self);
libvlc_event_detach(p_em, libvlc_MediaPlayerMediaChanged, HandleMediaPlayerMediaChanged, self);
}
- (void)mediaPlayerTimeChanged:(NSNumber *)newTime
{
[self willChangeValueForKey:@"time"];
[self willChangeValueForKey:@"remainingTime"];
[cachedTime release];
cachedTime = [[VLCTime timeWithNumber:newTime] retain];
[cachedRemainingTime release];
double currentTime = [[cachedTime numberValue] doubleValue];
double remaining = currentTime / position * (1 - position);
cachedRemainingTime = [[VLCTime timeWithNumber:[NSNumber numberWithDouble:-remaining]] retain];
[self didChangeValueForKey:@"remainingTime"];
[self didChangeValueForKey:@"time"];
}
#if !TARGET_OS_IPHONE
- (void)delaySleep
{
UpdateSystemActivity(UsrActivity);
}
#endif
- (void)mediaPlayerPositionChanged:(NSNumber *)newPosition
{
#if !TARGET_OS_IPHONE
// This seems to be the most relevant place to delay sleeping and screen saver.
[self delaySleep];
#endif
[self willChangeValueForKey:@"position"];
position = [newPosition floatValue];
[self didChangeValueForKey:@"position"];
}
- (void)mediaPlayerStateChanged:(NSNumber *)newState
{
[self willChangeValueForKey:@"state"];
cachedState = [newState intValue];
[self didChangeValueForKey:@"state"];
}
- (void)mediaPlayerMediaChanged:(VLCMedia *)newMedia
{
[self willChangeValueForKey:@"media"];
if (media != newMedia)
{
[media release];
media = [newMedia retain];
}
[self didChangeValueForKey:@"media"];
}
@end
//
// VLCMediaThumbnailer.m
// VLCKit
//
// Created by Pierre d'Herbemont on 7/10/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <vlc/vlc.h>
#import "VLCMediaThumbnailer.h"
#import "VLCLibVLCBridging.h"
@interface VLCMediaThumbnailer ()
- (void)didFetchThumbnail;
- (void)notifyDelegate;
- (void)fetchThumbnail;
- (void)startFetchingThumbnail;
@property (readonly, assign) void *dataPointer;
@property (readonly, assign) BOOL shouldRejectFrames;
@end
static void *lock(void *opaque, void **pixels)
{
VLCMediaThumbnailer *thumbnailer = opaque;
*pixels = [thumbnailer dataPointer];
assert(*pixels);
return NULL;
}
static const size_t kDefaultImageWidth = 320;
static const size_t kDefaultImageHeight = 240;
static const float kSnapshotPosition = 0.5;
void unlock(void *opaque, void *picture, void *const *p_pixels)
{
VLCMediaThumbnailer *thumbnailer = opaque;
assert(!picture);
assert([thumbnailer dataPointer] == *p_pixels);
// We may already have a thumbnail if we are receiving picture after the first one.
// Just ignore.
if ([thumbnailer thumbnail] || [thumbnailer shouldRejectFrames])
return;
[thumbnailer performSelectorOnMainThread:@selector(didFetchThumbnail) withObject:nil waitUntilDone:YES];
}
void display(void *opaque, void *picture)
{
}
@implementation VLCMediaThumbnailer
@synthesize media=_media;
@synthesize delegate=_delegate;
@synthesize thumbnail=_thumbnail;
@synthesize dataPointer=_data;
@synthesize thumbnailWidth=_thumbnailWidth;
@synthesize thumbnailHeight=_thumbnailHeight;
@synthesize shouldRejectFrames=_shouldRejectFrames;
+ (VLCMediaThumbnailer *)thumbnailerWithMedia:(VLCMedia *)media andDelegate:(id<VLCMediaThumbnailerDelegate>)delegate
{
id obj = [[[self class] alloc] init];
[obj setMedia:media];
[obj setDelegate:delegate];
return [obj autorelease];
}
- (void)dealloc
{
NSAssert(!_thumbnailingTimeoutTimer, @"Timer not released");
NSAssert(!_parsingTimeoutTimer, @"Timer not released");
NSAssert(!_data, @"Data not released");
NSAssert(!_mp, @"Not properly retained");
if (_thumbnail)
CGImageRelease(_thumbnail);
[_media release];
[super dealloc];
}
- (void)fetchThumbnail
{
NSAssert(!_data, @"We are already fetching a thumbnail");
[self retain]; // Balanced in -notifyDelegate
if (![_media isParsed]) {
[_media addObserver:self forKeyPath:@"parsed" options:0 context:NULL];
[_media parse];
NSAssert(!_parsingTimeoutTimer, @"We already have a timer around");
_parsingTimeoutTimer = [[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(mediaParsingTimedOut) userInfo:nil repeats:NO] retain];
return;
}
[self startFetchingThumbnail];
}
- (void)startFetchingThumbnail
{
NSArray *tracks = [_media tracksInformation];
// Find the video track
NSDictionary *videoTrack = nil;
for (NSDictionary *track in tracks) {
NSString *type = [track objectForKey:VLCMediaTracksInformationType];
if ([type isEqualToString:VLCMediaTracksInformationTypeVideo]) {
videoTrack = track;
break;
}
}
unsigned imageWidth = _thumbnailWidth > 0 ? _thumbnailWidth : kDefaultImageWidth;
unsigned imageHeight = _thumbnailHeight > 0 ? _thumbnailHeight : kDefaultImageHeight;
if (!videoTrack)
NSLog(@"WARNING: Can't find video track info, still attempting to thumbnail in doubt");
else {
int videoHeight = [[videoTrack objectForKey:VLCMediaTracksInformationVideoHeight] intValue];
int videoWidth = [[videoTrack objectForKey:VLCMediaTracksInformationVideoWidth] intValue];
// Constraining to the aspect ratio of the video.
double ratio;
if ((double)imageWidth / imageHeight < (double)videoWidth / videoHeight)
ratio = (double)imageHeight / videoHeight;
else
ratio = (double)imageWidth / videoWidth;
int newWidth = round(videoWidth * ratio);
int newHeight = round(videoHeight * ratio);
imageWidth = newWidth > 0 ? newWidth : imageWidth;
imageHeight = newHeight > 0 ? newHeight : imageHeight;
}
_numberOfReceivedFrames = 0;
NSAssert(!_shouldRejectFrames, @"Are we still running?");
_effectiveThumbnailHeight = imageHeight;
_effectiveThumbnailWidth = imageWidth;
_data = calloc(1, imageWidth * imageHeight * 4);
NSAssert(_data, @"Can't create data");
NSAssert(!_mp, @"We are already fetching a thumbnail");
_mp = libvlc_media_player_new([VLCLibrary sharedInstance]);
libvlc_media_add_option([_media libVLCMediaDescriptor], "no-audio");
libvlc_media_player_set_media(_mp, [_media libVLCMediaDescriptor]);
libvlc_video_set_format(_mp, "RGBA", imageWidth, imageHeight, 4 * imageWidth);
libvlc_video_set_callbacks(_mp, lock, unlock, display, self);
libvlc_media_player_play(_mp);
libvlc_media_player_set_position(_mp, kSnapshotPosition);
NSAssert(!_thumbnailingTimeoutTimer, @"We already have a timer around");
_thumbnailingTimeoutTimer = [[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(mediaThumbnailingTimedOut) userInfo:nil repeats:NO] retain];
}
- (void)mediaParsingTimedOut
{
NSLog(@"WARNING: media thumbnailer media parsing timed out");
[_media removeObserver:self forKeyPath:@"parsed"];
[self startFetchingThumbnail];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (object == _media && [keyPath isEqualToString:@"parsed"]) {
if ([_media isParsed]) {
[_parsingTimeoutTimer invalidate];
[_parsingTimeoutTimer release];
_parsingTimeoutTimer = nil;
[_media removeObserver:self forKeyPath:@"parsed"];
[self startFetchingThumbnail];
}
return;
}
return [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
- (void)didFetchThumbnail
{
if (_shouldRejectFrames)
return;
// The video thread is blocking on us. Beware not to do too much work.
_numberOfReceivedFrames++;
// Make sure we are getting the right frame
if (libvlc_media_player_get_position(_mp) < kSnapshotPosition / 2 &&
// Arbitrary choice to work around broken files.
libvlc_media_player_get_length(_mp) > 1000 &&
_numberOfReceivedFrames < 10)
{
return;
}
NSAssert(_data, @"We have no data");
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
const CGFloat width = _effectiveThumbnailWidth;
const CGFloat height = _effectiveThumbnailHeight;
const CGFloat pitch = 4 * width;
CGContextRef bitmap = CGBitmapContextCreate(_data,
width,
height,
8,
pitch,
colorSpace,
kCGImageAlphaNoneSkipLast);
CGColorSpaceRelease(colorSpace);
NSAssert(bitmap, @"Can't create bitmap");
// Create the thumbnail image
//NSAssert(!_thumbnail, @"We already have a thumbnail");
if (_thumbnail)
CGImageRelease(_thumbnail);
_thumbnail = CGBitmapContextCreateImage(bitmap);
// Put a new context there.
CGContextRelease(bitmap);
// Make sure we don't block the video thread now
[self performSelector:@selector(notifyDelegate) withObject:nil afterDelay:0];
}
- (void)stopAsync
{
libvlc_media_player_stop(_mp);
libvlc_media_player_release(_mp);
_mp = NULL;
// Now release data
free(_data);
_data = NULL;
_shouldRejectFrames = NO;
}
- (void)endThumbnailing
{
_shouldRejectFrames = YES;
[_thumbnailingTimeoutTimer invalidate];
[_thumbnailingTimeoutTimer release];
_thumbnailingTimeoutTimer = nil;
// Stop the media player
NSAssert(_mp, @"We have already destroyed mp");
[self performSelectorInBackground:@selector(stopAsync) withObject:nil];
[self autorelease]; // Balancing -fetchThumbnail
}
- (void)notifyDelegate
{
[self endThumbnailing];
// Call delegate
[_delegate mediaThumbnailer:self didFinishThumbnail:_thumbnail];
}
- (void)mediaThumbnailingTimedOut
{
[self endThumbnailing];
// Call delegate
[_delegate mediaThumbnailerDidTimeOut:self];
}
@end
/*****************************************************************************
* VLCPlaylistDataSource.m: VLC.framework VLCPlaylistDataSource implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <VLC/VLCPlaylistDataSource.h>
#import "VLCEventManager.h"
@implementation VLCPlaylistDataSource
- (id)init
{
if (self = [super init])
{
playlist = nil;
videoView = nil;
}
return self;
}
- (id)initWithPlaylist:(VLCPlaylist *)aPlaylist
{
if (self = [super init])
{
playlist = [aPlaylist retain];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(playlistDidChange:) name:VLCPlaylistItemAdded object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(itemDidAddSubitem:) name:VLCMediaSubItemAdded object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(itemDidChange:) name:VLCPlaylistItemChanged object:nil];
videoView = nil;
outlineView = nil;
}
return self;
}
- (id)initWithPlaylist:(VLCPlaylist *)aPlaylist videoView:(VLCVideoView *)aVideoView;
{
if (self = [super init])
{
playlist = [aPlaylist retain];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(playlistDidChange:) name:VLCPlaylistItemAdded object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(itemDidAddSubitem:) name:VLCMediaSubItemAdded object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(itemDidChange:) name:VLCPlaylistItemChanged object:nil];
videoView = [aVideoView retain];
/* Will be automatically set if an outline view ask us data,
* be careful not to connect two outlineView to this object or this goes wrong. */
outlineView = nil;
}
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
if (playlist)
[playlist release];
if (videoView)
[videoView release];
[super dealloc];
}
- (VLCPlaylist *)playlist
{
return playlist;
}
- (VLCVideoView *)videoView
{
return videoView;
}
@end
@implementation VLCPlaylistDataSource (OutlineViewDataSource)
- (BOOL) outlineView: (NSOutlineView *)ov isItemExpandable: (id)item { return NO; }
- (int) outlineView: (NSOutlineView *)ov numberOfChildrenOfItem:(id)item { return 0; }
- (id) outlineView: (NSOutlineView *)ov child:(int)index ofItem:(id)item { return nil; }
- (id) outlineView: (NSOutlineView *)ov objectValueForTableColumn:(NSTableColumn*)col byItem:(id)item { return nil; }
@end
@implementation VLCPlaylistDataSource (TableViewDropping)
/* Dummy implementation cause we need them */
- (int)numberOfRowsInTableView:(NSTableView *)aTableView { return 0; }
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {return nil;}
- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)op
{
return NSDragOperationEvery; /* This is for now */
}
- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
row:(int)row dropOperation:(NSTableViewDropOperation)operation
{
int i;
NSArray * droppedItems = [[info draggingPasteboard] propertyListForType: NSFilenamesPboardType];
for (i = 0; i < [droppedItems count]; i++)
{
NSString * filename = [droppedItems objectAtIndex:i];
[[self playlist] insertMedia:[VLCMedia mediaWithURL:filename] atIndex:row+i];
}
}
@end
@interface NSObject (UnknownBindingsObject)
/* OutlineViewDataSourceDropping and bindings hack */
- (id)observedObject;
@end
@implementation VLCPlaylistDataSource (OutlineViewDataSourceDropping)
- (BOOL)outlineView:(NSOutlineView *)aOutlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(int)index
{
NSArray * droppedItems = [[info draggingPasteboard] propertyListForType: NSFilenamesPboardType];
VLCPlaylist * aPlaylist;
int i;
if (!item)
item = [self playlist]; /* The root object is our playlist */
else
item = [item observedObject];
if (![item isMemberOfClass:[VLCPlaylist class]])
return NO;
if (index < 0) /* No precise item given, put it as the first one */
index = 0;
aPlaylist = item;
if (!droppedItems)
{
/* XXX: localization */
NSRunCriticalAlertPanelRelativeToWindow(@"Error", @"Unable to drop the provided item.", @"OK", nil, nil, [outlineView window]);
return NO;
}
for (i = 0; i < [droppedItems count]; i++)
{
NSString * filename = [droppedItems objectAtIndex:i];
[aPlaylist insertMedia:[VLCMedia mediaWithURL:filename] atIndex:index+i];
}
return YES;
}
- (NSDragOperation)outlineView:(NSOutlineView *)aOutlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(int)index
{
return NSDragOperationEvery;
}
@end
\ No newline at end of file
/*****************************************************************************
* VLCServicesDiscoverer.m: VLC.framework VLCMediaDiscoverer implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
#import <VLC/VLCServicesDiscoverer.h>
#import <VLC/VLCMediaDiscoverer.h>
#import "VLCLibrary.h"
#include <vlc/libvlc.h>
static VLCServicesDiscoverer * sharedDiscoverer = NULL;
@implementation VLCServicesDiscoverer
+ (id)sharedDiscoverer
{
if (!sharedDiscoverer)
{
sharedDiscoverer = [[self alloc] init];
}
return sharedDiscoverer;
}
- (id) init
{
if( self = [super init] )
{
services = [[NSArray arrayWithObjects:
[[[VLCMediaDiscoverer alloc] initWithName:@"sap"] autorelease],
[[[VLCMediaDiscoverer alloc] initWithName:@"shoutcast"] autorelease],
[[[VLCMediaDiscoverer alloc] initWithName:@"shoutcasttv"] autorelease], nil] retain];
}
return self;
}
- (NSArray *) services
{
return [[services copy] autorelease];
}
@end
/*****************************************************************************
* VLCStreamOutput.m: VLCKit.framework VLCStreamOutput implementation
*****************************************************************************
* Copyright (C) 2008 Pierre d'Herbemont
* Copyright (C) 2008 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCStreamOutput.h"
#import "VLCLibVLCBridging.h"
@implementation VLCStreamOutput
- (id)initWithOptionDictionary:(NSDictionary *)dictionary
{
if( self = [super init] )
{
options = [[NSMutableDictionary dictionaryWithDictionary:dictionary] retain];
}
return self;
}
- (NSString *)description
{
return [self representedLibVLCOptions];
}
+ (id)streamOutputWithOptionDictionary:(NSDictionary *)dictionary
{
return [[[self alloc] initWithOptionDictionary:dictionary] autorelease];
}
+ (id)rtpBroadcastStreamOutputWithSAPAnnounce:(NSString *)announceName
{
NSString *name = [announceName copy];
id output = [self streamOutputWithOptionDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
@"ts", @"muxer",
@"file", @"access",
@"sdp", @"sdp",
@"sap", @"sap",
name, @"name",
@"239.255.1.1", @"destination", nil
], @"rtpOptions",
nil
]
];
[name release];
return output;
}
+ (id)rtpBroadcastStreamOutput
{
return [self rtpBroadcastStreamOutputWithSAPAnnounce:@"Helloworld!"];
}
+ (id)ipodStreamOutputWithFilePath:(NSString *)filePath
{
return [self streamOutputWithOptionDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
@"h264", @"videoCodec",
@"1024", @"videoBitrate", // max by Apple: 1.5 mbps
@"mp4a", @"audioCodec",
@"128", @"audioBitrate", // max by Apple: 160 kbps
@"2", @"channels",
@"640", @"width", // max by Apple: do.
@"480", @"canvasHeight", // max by Apple: do.
@"Yes", @"audio-sync",
nil
], @"transcodingOptions",
[NSDictionary dictionaryWithObjectsAndKeys:
@"mp4", @"muxer",
@"file", @"access",
[[filePath copy] autorelease], @"destination",
nil
], @"outputOptions",
nil
]
];
}
+ (id)mpeg4StreamOutputWithFilePath:(NSString *)filePath
{
return [self streamOutputWithOptionDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
@"mp4v", @"videoCodec",
@"1024", @"videoBitrate",
@"mp4a", @"audioCodec",
@"192", @"audioBitrate",
nil
], @"transcodingOptions",
[NSDictionary dictionaryWithObjectsAndKeys:
@"mp4", @"muxer",
@"file", @"access",
[[filePath copy] autorelease], @"destination", nil
], @"outputOptions",
nil
]
];
}
+ (id)streamOutputWithFilePath:(NSString *)filePath
{
return [self streamOutputWithOptionDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
@"ps", @"muxer",
@"file", @"access",
[[filePath copy] autorelease], @"destination", nil
], @"outputOptions",
nil
]
];
}
+ (id)mpeg2StreamOutputWithFilePath:(NSString *)filePath;
{
return [self streamOutputWithOptionDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
@"mp2v", @"videoCodec",
@"1024", @"videoBitrate",
@"mpga", @"audioCodec",
@"128", @"audioBitrate",
@"Yes", @"audio-sync",
nil
], @"transcodingOptions",
[NSDictionary dictionaryWithObjectsAndKeys:
@"ps", @"muxer",
@"file", @"access",
[[filePath copy] autorelease], @"destination", nil
], @"outputOptions",
nil
]
];
}
@end
@implementation VLCStreamOutput (LibVLCBridge)
- (NSString *)representedLibVLCOptions
{
NSString * representedOptions;
NSMutableArray * subOptions = [NSMutableArray array];
NSMutableArray * optionsAsArray = [NSMutableArray array];
NSDictionary * transcodingOptions = [options objectForKey:@"transcodingOptions"];
if( transcodingOptions )
{
NSString * videoCodec = [transcodingOptions objectForKey:@"videoCodec"];
NSString * audioCodec = [transcodingOptions objectForKey:@"audioCodec"];
NSString * videoBitrate = [transcodingOptions objectForKey:@"videoBitrate"];
NSString * audioBitrate = [transcodingOptions objectForKey:@"audioBitrate"];
NSString * channels = [transcodingOptions objectForKey:@"channels"];
NSString * height = [transcodingOptions objectForKey:@"height"];
NSString * canvasHeight = [transcodingOptions objectForKey:@"canvasHeight"];
NSString * width = [transcodingOptions objectForKey:@"width"];
NSString * audioSync = [transcodingOptions objectForKey:@"audioSync"];
NSString * videoEncoder = [transcodingOptions objectForKey:@"videoEncoder"];
if( videoEncoder ) [subOptions addObject:[NSString stringWithFormat:@"venc=%@", videoEncoder]];
if( videoCodec ) [subOptions addObject:[NSString stringWithFormat:@"vcodec=%@", videoCodec]];
if( videoBitrate ) [subOptions addObject:[NSString stringWithFormat:@"vb=%@", videoBitrate]];
if( width ) [subOptions addObject:[NSString stringWithFormat:@"width=%@", width]];
if( height ) [subOptions addObject:[NSString stringWithFormat:@"height=%@", height]];
if( canvasHeight ) [subOptions addObject:[NSString stringWithFormat:@"canvas-height=%@", canvasHeight]];
if( audioCodec ) [subOptions addObject:[NSString stringWithFormat:@"acodec=%@", audioCodec]];
if( audioBitrate ) [subOptions addObject:[NSString stringWithFormat:@"ab=%@", audioBitrate]];
if( channels ) [subOptions addObject:[NSString stringWithFormat:@"channels=%@", channels]];
if( audioSync ) [subOptions addObject:[NSString stringWithFormat:@"audioSync", width]];
[optionsAsArray addObject: [NSString stringWithFormat:@"#transcode{%@}", [subOptions componentsJoinedByString:@","]]];
[subOptions removeAllObjects];
}
NSDictionary * outputOptions = [options objectForKey:@"outputOptions"];
if( outputOptions )
{
NSString * muxer = [outputOptions objectForKey:@"muxer"];
NSString * destination = [outputOptions objectForKey:@"destination"];
NSString * url = [outputOptions objectForKey:@"url"];
NSString * access = [outputOptions objectForKey:@"access"];
if( muxer ) [subOptions addObject:[NSString stringWithFormat:@"mux=%@", muxer]];
if( destination ) [subOptions addObject:[NSString stringWithFormat:@"dst=\"%@\"", [destination stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]]];
if( url ) [subOptions addObject:[NSString stringWithFormat:@"url=\"%@\"", [url stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]]];
if( access ) [subOptions addObject:[NSString stringWithFormat:@"access=%@", access]];
NSString *std = [NSString stringWithFormat:@"std{%@}", [subOptions componentsJoinedByString:@","]];
if ( !transcodingOptions )
std = [NSString stringWithFormat:@"#%@", std];
[optionsAsArray addObject:std];
[subOptions removeAllObjects];
}
NSDictionary * rtpOptions = [options objectForKey:@"rtpOptions"];
if( rtpOptions )
{
NSString * muxer = [rtpOptions objectForKey:@"muxer"];
NSString * destination = [rtpOptions objectForKey:@"destination"];
NSString * sdp = [rtpOptions objectForKey:@"sdp"];
NSString * name = [rtpOptions objectForKey:@"name"];
NSString * sap = [rtpOptions objectForKey:@"sap"];
if( muxer ) [subOptions addObject:[NSString stringWithFormat:@"muxer=%@", muxer]];
if( destination ) [subOptions addObject:[NSString stringWithFormat:@"dst=%@", destination]];
if( sdp ) [subOptions addObject:[NSString stringWithFormat:@"sdp=%@", sdp]];
if( sap ) [subOptions addObject:@"sap"];
if( name ) [subOptions addObject:[NSString stringWithFormat:@"name=\"%@\"", name]];
NSString *rtp = [NSString stringWithFormat:@"#rtp{%@}", [subOptions componentsJoinedByString:@","]];
if ( !transcodingOptions )
rtp = [NSString stringWithFormat:@"#%@", rtp];
[optionsAsArray addObject:rtp];
[subOptions removeAllObjects];
}
representedOptions = [optionsAsArray componentsJoinedByString:@":"];
return representedOptions;
}
@end
/*****************************************************************************
* VLCStreamSession.m: VLCKit.framework VLCStreamSession implementation
*****************************************************************************
* Copyright (C) 2008 Pierre d'Herbemont
* Copyright (C) 2008 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCStreamSession.h"
#import "VLCLibVLCBridging.h"
@interface VLCStreamSession ()
@property (readwrite) BOOL isComplete;
@end
@implementation VLCStreamSession
@synthesize media=originalMedia;
@synthesize streamOutput;
@synthesize isComplete;
- (id)init
{
if( self = [super init] )
{
reattemptedConnections = 0;
[self addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil];
self.isComplete = NO;
}
return self;
}
- (void)dealloc
{
[self removeObserver:self forKeyPath:@"state"];
[super dealloc];
}
+ (id)streamSession
{
return [[[self alloc] init] autorelease];
}
- (void)startStreaming
{
self.isComplete = NO;
[self play];
}
- (void)stopStreaming
{
self.isComplete = YES;
[super stop];
}
- (BOOL)play
{
NSString * libvlcArgs;
if( self.drawable )
libvlcArgs = [NSString stringWithFormat:@"#duplicate{dst=display,dst=\"%@\"}",[streamOutput representedLibVLCOptions]];
else
libvlcArgs = [streamOutput representedLibVLCOptions];
if( libvlcArgs )
{
[super setMedia: [VLCMedia mediaWithMedia:originalMedia andLibVLCOptions:
[NSDictionary dictionaryWithObject: libvlcArgs forKey: @"sout"]]];
}
else
{
[super setMedia: self.media];
}
[super play];
return YES;
}
+ (NSSet *)keyPathsForValuesAffectingDescription
{
return [NSSet setWithObjects:@"isCompleted", @"state", nil];
}
- (NSString *)description
{
if([self isComplete])
return @"Done.";
else if([self state] == VLCMediaPlayerStateError)
return @"Error while Converting. Open Console.app to diagnose.";
else
return @"Converting...";
}
+ (NSSet *)keyPathsForValuesAffectingEncounteredError
{
return [NSSet setWithObjects:@"state", nil];
}
- (BOOL)encounteredError;
{
return ([self state] == VLCMediaPlayerStateError);
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"state"])
{
if( (([self position] == 1.0 || [self state] == VLCMediaPlayerStateEnded || ([self state] == VLCMediaPlayerStateStopped && self.media)) ||
[self encounteredError] ) && ![super.media subitems] )
{
self.isComplete = YES;
return;
}
if( reattemptedConnections > 4 )
return;
/* Our media has in fact gained subitems, let's change our playing media */
if( [[super.media subitems] count] > 0 )
{
[self stop];
self.media = [[super.media subitems] mediaAtIndex:0];
[self play];
reattemptedConnections++;
}
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
@end
/*****************************************************************************
* VLCTime.m: VLCKit.framework VLCTime implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCTime.h"
@implementation VLCTime
/* Factories */
+ (VLCTime *)nullTime
{
static VLCTime * nullTime = nil;
if (!nullTime)
nullTime = [[VLCTime timeWithNumber:nil] retain];
return nullTime;
}
+ (VLCTime *)timeWithNumber:(NSNumber *)aNumber
{
return [[[VLCTime alloc] initWithNumber:aNumber] autorelease];
}
+ (VLCTime *)timeWithInt:(NSInteger)aInt
{
return [[[VLCTime alloc] initWithInt:aInt] autorelease];
}
/* Initializers */
- (id)initWithNumber:(NSNumber *)aNumber
{
if (self = [super init])
{
if (aNumber)
value = [aNumber copy];
else
value = nil;
}
return self;
}
- (id)initWithInt:(int)aInt
{
if (self = [super init])
{
if (aInt)
value = [[NSNumber numberWithInt: aInt] retain];
else
value = nil;
}
return self;
}
- (void)dealloc
{
[value release];
[super dealloc];
}
- (id)copyWithZone:(NSZone *)zone
{
return [[VLCTime alloc] initWithNumber:value];
}
/* NSObject Overrides */
- (NSString *)description
{
return self.stringValue;
}
/* Operations */
- (NSNumber *)numberValue
{
return value ? [[value copy] autorelease] : nil;
}
- (NSString *)stringValue
{
if (value)
{
long long duration = [value longLongValue] / 1000;
long long positiveDuration = llabs(duration);
if( positiveDuration > 3600 )
return [NSString stringWithFormat:@"%s%01d:%02d:%02d",
duration < 0 ? "-" : "",
(long) (positiveDuration / 3600),
(long)((positiveDuration / 60) % 60),
(long) (positiveDuration % 60)];
else
return [NSString stringWithFormat:@"%s%02d:%02d",
duration < 0 ? "-" : "",
(long)((positiveDuration / 60) % 60),
(long) (positiveDuration % 60)];
}
else
{
// Return a string that represents an undefined time.
return @"--:--";
}
}
- (NSString *)verboseStringValue
{
if (value)
{
long long duration = [value longLongValue] / 1000;
long long positiveDuration = llabs(duration);
long hours = positiveDuration / 3600;
long mins = (positiveDuration / 60) % 60;
long seconds = positiveDuration % 60;
const char * remaining = duration < 0 ? " remaining" : "";
if (hours > 0)
return [NSString stringWithFormat:@"%d hours %d minutes%s", hours, mins, remaining];
else if (mins > 5)
return [NSString stringWithFormat:@"%d minutes%s", mins, remaining];
else if (mins > 0)
return [NSString stringWithFormat:@"%d minutes %d seconds%s", mins, seconds, remaining];
else
return [NSString stringWithFormat:@"%d seconds%s", seconds, remaining];
}
else
{
// Return a string that represents an undefined time.
return @"";
}
}
- (int)intValue
{
if( value )
return [value intValue];
return 0;
}
- (NSComparisonResult)compare:(VLCTime *)aTime
{
if (!aTime && !value)
return NSOrderedSame;
else if (!aTime)
return NSOrderedDescending;
else
return [value compare:aTime.numberValue];
}
@end
/*****************************************************************************
* VLCVideoCommon.m: VLCKit.framework VLCVideoCommon implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCVideoCommon.h"
/******************************************************************************
* Implementation VLCVideoLayoutManager
*
* Manage the size of the video layer
*/
@implementation VLCVideoLayoutManager
/* Factories */
+ (id)layoutManager
{
return [[[self alloc] init] autorelease];
}
/* CALayoutManager Impelmentation */
- (void)layoutSublayersOfLayer:(CALayer *)layer
{
/* After having done everything normally resize the vlcopengllayer */
if( [[layer sublayers] count] > 0 && [[[[layer sublayers] objectAtIndex:0] name] isEqualToString:@"vlcopengllayer"])
{
CALayer * videolayer = [[layer sublayers] objectAtIndex:0];
CGRect bounds = layer.bounds;
CGRect videoRect = bounds;
CGFloat xRatio = CGRectGetWidth(bounds)/originalVideoSize.width;
CGFloat yRatio = CGRectGetHeight(bounds)/originalVideoSize.height;
CGFloat ratio = fillScreenEntirely ? MAX(xRatio, yRatio) : MIN(xRatio, yRatio);
videoRect.size.width = ratio*originalVideoSize.width;
videoRect.size.height = ratio*originalVideoSize.height;
videoRect.origin.x += (CGRectGetWidth(bounds) - CGRectGetWidth(videoRect))/2.0;
videoRect.origin.y += (CGRectGetHeight(bounds) - CGRectGetHeight(videoRect))/2.0;
videolayer.frame = videoRect;
}
}
/* Properties */
@synthesize fillScreenEntirely;
@synthesize originalVideoSize;
@end
/*****************************************************************************
* VLCVideoLayer.m: VLCKit.framework VLCVideoLayer implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCVideoLayer.h"
#import "VLCLibrary.h"
#import "VLCEventManager.h"
#import "VLCVideoCommon.h"
/* Libvlc */
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc/vlc.h>
#include <vlc/libvlc.h>
#import <QuartzCore/QuartzCore.h>
/******************************************************************************
* VLCVideoView (Private)
*/
@interface VLCVideoLayer (Private)
/* Method */
- (void)addVoutLayer:(CALayer *)aLayer;
@end
@interface VLCVideoLayer ()
@property (readwrite) BOOL hasVideo;
@end
/******************************************************************************
* Implementation VLCVideoLayer
*/
@implementation VLCVideoLayer
@synthesize hasVideo;
- (BOOL)fillScreen
{
return [self.layoutManager fillScreenEntirely];
}
- (void)setFillScreen:(BOOL)fillScreen
{
[self.layoutManager setFillScreenEntirely:fillScreen];
[self setNeedsLayout];
}
@end
/******************************************************************************
* Implementation VLCVideoLayer (Private)
*/
@implementation VLCVideoLayer (Private)
/* This is called by the libvlc module 'opengllayer' as soon as there is one
* vout available
*/
- (void)addVoutLayer:(CALayer *)voutLayer
{
[CATransaction begin];
voutLayer.name = @"vlcopengllayer";
VLCVideoLayoutManager * layoutManager = [VLCVideoLayoutManager layoutManager];
layoutManager.originalVideoSize = voutLayer.bounds.size;
self.layoutManager = layoutManager;
[self insertSublayer:voutLayer atIndex:0];
[self setNeedsDisplayOnBoundsChange:YES];
[CATransaction commit];
/* Trigger by hand, as it doesn't go through else. Assumed bug from Cocoa */
[self willChangeValueForKey:@"hasVideo"];
self.hasVideo = YES;
[self didChangeValueForKey:@"hasVideo"];
}
- (void)removeVoutLayer:(CALayer*)voutLayer
{
[CATransaction begin];
[voutLayer removeFromSuperlayer];
[CATransaction commit];
/* Trigger by hand, as it doesn't go through else. Assumed bug from Cocoa */
[self willChangeValueForKey:@"hasVideo"];
self.hasVideo = NO;
[self didChangeValueForKey:@"hasVideo"];
}
@end
/*****************************************************************************
* VLCVideoView.m: VLCKit.framework VLCVideoView implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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.
*****************************************************************************/
#import "VLCVideoView.h"
#import "VLCLibrary.h"
#import "VLCEventManager.h"
#import "VLCVideoCommon.h"
/* Libvlc */
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc/vlc.h>
#include <vlc/libvlc.h>
#import <QuartzCore/QuartzCore.h>
/******************************************************************************
* Soon deprecated stuff
*/
/* This is a forward reference to VLCOpenGLVoutView specified in minimal_macosx
library. We could get rid of this, but it prevents warnings from the
compiler. (Scheduled to deletion) */
@interface VLCOpenGLVoutView : NSView
- (void)detachFromVout;
@end
/* Depreacted methods */
@interface VLCVideoView (Deprecated)
- (void)setStretchesVideo:(BOOL)value;
- (BOOL)stretchesVideo;
- (void)addVoutSubview:(NSView *)aView; /* (Scheduled to deletion) */
- (void)removeVoutSubview:(NSView *)aView; /* (Scheduled to deletion) */
@end
/******************************************************************************
* VLCVideoView (Private)
*/
@interface VLCVideoView (Private)
/* Method */
- (void)addVoutLayer:(CALayer *)aLayer;
@end
@interface VLCVideoView ()
/* Proeprties */
@property (readwrite) BOOL hasVideo;
@end
/******************************************************************************
* Implementation VLCVideoView
*/
@implementation VLCVideoView
/* Initializers */
- (id)initWithFrame:(NSRect)rect
{
if (self = [super initWithFrame:rect])
{
self.delegate = nil;
self.backColor = [NSColor blackColor];
self.fillScreen = NO;
self.hasVideo = NO;
[self setStretchesVideo:NO];
[self setAutoresizesSubviews:YES];
layoutManager = [[VLCVideoLayoutManager layoutManager] retain];
}
return self;
}
- (void)dealloc
{
self.delegate = nil;
self.backColor = nil;
[layoutManager release];
[super dealloc];
}
/* NSView Overrides */
- (void)drawRect:(NSRect)aRect
{
[self lockFocus];
[backColor set];
NSRectFill(aRect);
[self unlockFocus];
}
- (BOOL)isOpaque
{
return YES;
}
/* Properties */
@synthesize delegate;
@synthesize backColor;
@synthesize hasVideo;
- (BOOL)fillScreen
{
return [layoutManager fillScreenEntirely];
}
- (void)setFillScreen:(BOOL)fillScreen
{
[(VLCVideoLayoutManager *)layoutManager setFillScreenEntirely:fillScreen];
[[self layer] setNeedsLayout];
}
@end
/******************************************************************************
* Implementation VLCVideoView (Private)
*/
@implementation VLCVideoView (Private)
/* This is called by the libvlc module 'opengllayer' as soon as there is one
* vout available
*/
- (void)addVoutLayer:(CALayer *)aLayer
{
[CATransaction begin];
[self setWantsLayer: YES];
CALayer * rootLayer = [self layer];
aLayer.name = @"vlcopengllayer";
[layoutManager setOriginalVideoSize:aLayer.bounds.size];
[rootLayer setLayoutManager:layoutManager];
[rootLayer insertSublayer:aLayer atIndex:0];
[aLayer setNeedsDisplayOnBoundsChange:YES];
[CATransaction commit];
self.hasVideo = YES;
}
- (void)removeVoutLayer:(CALayer *)voutLayer
{
[CATransaction begin];
[voutLayer removeFromSuperlayer];
[CATransaction commit];
self.hasVideo = NO;
}
@end
/******************************************************************************
* Implementation VLCVideoView (Deprecated)
*/
@implementation VLCVideoView (Deprecated)
- (void)setStretchesVideo:(BOOL)value
{
stretchesVideo = value;
}
- (BOOL)stretchesVideo
{
return stretchesVideo;
}
/* This is called by the libvlc module 'minimal_macosx' as soon as there is one
* vout available
*/
- (void)addVoutSubview:(NSView *)aView /* (Scheduled to deletion) */
{
[aView setFrame:[self bounds]];
[self addSubview:aView];
// TODO: Should we let the media player specify these values?
[aView setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable];
}
- (void)removeVoutSubview:(NSView *)view /* (Scheduled to deletion) */
{
// Should we do something? I don't know, however the protocol requires
// this to be implemented
}
@end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Quartz</string>
<key>CFBundleIdentifier</key>
<string>org.videolan.vlckitframework</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>VLC</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.1</string>
<key>CFBundleVersion</key>
<string>0.1</string>
</dict>
</plist>
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
6337547910ED090A0072A0D9 /* Make VLC */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 6337548110ED093B0072A0D9 /* Build configuration list for PBXAggregateTarget "Make VLC" */;
buildPhases = (
6337548010ED091D0072A0D9 /* make */,
633754D310ED0D330072A0D9 /* install */,
);
dependencies = (
CC4C58F413F539B900FB0EFC /* PBXTargetDependency */,
);
name = "Make VLC";
productName = "Make VLC 2";
};
633BD6E40D2ADF030012A314 /* Setup VLC contribs */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 633BD6EC0D2ADF460012A314 /* Build configuration list for PBXAggregateTarget "Setup VLC contribs" */;
buildPhases = (
633BD6E30D2ADF030012A314 /* make */,
);
dependencies = (
);
name = "Setup VLC contribs";
productName = "vlc-contrib";
};
63FFDBCE0D2AE2AE0092FC96 /* Run VLC configure */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 63FFDBD50D2AE3250092FC96 /* Build configuration list for PBXAggregateTarget "Run VLC configure" */;
buildPhases = (
631A90420D5A007D0014A2CE /* bootstrap */,
63FFDBCD0D2AE2AE0092FC96 /* configure */,
);
dependencies = (
);
name = "Run VLC configure";
productName = "vlc-bootstrap";
};
CC61094C112F4AB500FAFD22 /* Make VLC and VLCKit */ = {
isa = PBXAggregateTarget;
buildConfigurationList = CC61095D112F4AD400FAFD22 /* Build configuration list for PBXAggregateTarget "Make VLC and VLCKit" */;
buildPhases = (
);
dependencies = (
CC610951112F4ABB00FAFD22 /* PBXTargetDependency */,
CC610953112F4ABF00FAFD22 /* PBXTargetDependency */,
);
name = "Make VLC and VLCKit";
productName = "Make VLC and VLCKit";
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
63014A7A1042ACE100534090 /* VLCMediaListPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 63014A781042ACE100534090 /* VLCMediaListPlayer.m */; };
63014B7E1042E64A00534090 /* VLCMediaListPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 63014B7D1042E64A00534090 /* VLCMediaListPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
63098FDC110E7159005F46AE /* VLCExtensionsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 63098FDA110E7159005F46AE /* VLCExtensionsManager.m */; };
63099116110F0EC3005F46AE /* VLCExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 63099114110F0EC3005F46AE /* VLCExtension.m */; };
6309994B110FC791005F46AE /* VLCExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 63099949110FC791005F46AE /* VLCExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
6309994C110FC791005F46AE /* VLCExtensionsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6309994A110FC791005F46AE /* VLCExtensionsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
632A0E850D3835C400AFC99B /* VLCStreamSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 632A0E830D3835C400AFC99B /* VLCStreamSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
632A0E860D3835C400AFC99B /* VLCStreamSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A0E840D3835C400AFC99B /* VLCStreamSession.m */; };
632A0EC30D38392E00AFC99B /* VLCStreamOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 632A0EC10D38392E00AFC99B /* VLCStreamOutput.h */; settings = {ATTRIBUTES = (Public, ); }; };
632A0EC40D38392E00AFC99B /* VLCStreamOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A0EC20D38392E00AFC99B /* VLCStreamOutput.m */; };
6341FCAF0D2C0929002A97B7 /* VLCVideoLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6341FCAE0D2C0929002A97B7 /* VLCVideoLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
6341FCB10D2C0936002A97B7 /* VLCVideoLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6341FCB00D2C0936002A97B7 /* VLCVideoLayer.m */; };
636E974E11E8DCF1002FE8A9 /* VLCMediaThumbnailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 636E974C11E8DCF1002FE8A9 /* VLCMediaThumbnailer.m */; };
637CFB940D2D280900A041B6 /* VLCLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 637CFB930D2D280800A041B6 /* VLCLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; };
637D5ABD0CF6F2650073EA45 /* VLCMediaDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 637D5ABC0CF6F2650073EA45 /* VLCMediaDiscoverer.h */; settings = {ATTRIBUTES = (Public, ); }; };
637D5ADC0CF6F2720073EA45 /* VLCMediaDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 637D5ADB0CF6F2720073EA45 /* VLCMediaDiscoverer.m */; };
6384FD080D0DBA20005EB1F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6384FD070D0DBA20005EB1F7 /* QuartzCore.framework */; };
63D88D93124E9BF600F65FA0 /* VLCMediaThumbnailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D88D92124E9BF600F65FA0 /* VLCMediaThumbnailer.h */; };
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
A7A0CEA40D2EF13000F2C039 /* VLCVideoCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A0CEA20D2EF13000F2C039 /* VLCVideoCommon.h */; };
A7A0CEA50D2EF13000F2C039 /* VLCVideoCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = A7A0CEA30D2EF13000F2C039 /* VLCVideoCommon.m */; };
CC4C591113F53EA400FB0EFC /* VLCEventManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD3C0CAEEFF600354E6E /* VLCEventManager.m */; };
CC4C591213F53EA400FB0EFC /* VLCLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD3D0CAEEFF600354E6E /* VLCLibrary.m */; };
CC4C591313F53EA400FB0EFC /* VLCMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD3E0CAEEFF600354E6E /* VLCMedia.m */; };
CC4C591413F53EA400FB0EFC /* VLCMediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD400CAEEFF600354E6E /* VLCMediaLibrary.m */; };
CC4C591513F53EA400FB0EFC /* VLCMediaList.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD410CAEEFF600354E6E /* VLCMediaList.m */; };
CC4C591613F53EA400FB0EFC /* VLCTime.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD440CAEEFF600354E6E /* VLCTime.m */; };
CC4C591713F53EA400FB0EFC /* VLCVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD450CAEEFF600354E6E /* VLCVideoView.m */; };
CC4C591813F53EA400FB0EFC /* VLCMediaPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = EF8BB8CF0CAFA8D80038A613 /* VLCMediaPlayer.m */; };
CC4C591913F53EA400FB0EFC /* VLCAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = EF73118F0CB5797B009473B4 /* VLCAudio.m */; };
CC4C591A13F53EA400FB0EFC /* VLCMediaDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 637D5ADB0CF6F2720073EA45 /* VLCMediaDiscoverer.m */; };
CC4C591B13F53EA400FB0EFC /* VLCVideoLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6341FCB00D2C0936002A97B7 /* VLCVideoLayer.m */; };
CC4C591C13F53EA400FB0EFC /* VLCVideoCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = A7A0CEA30D2EF13000F2C039 /* VLCVideoCommon.m */; };
CC4C591D13F53EA400FB0EFC /* VLCStreamSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A0E840D3835C400AFC99B /* VLCStreamSession.m */; };
CC4C591E13F53EA400FB0EFC /* VLCStreamOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A0EC20D38392E00AFC99B /* VLCStreamOutput.m */; };
CC4C591F13F53EA400FB0EFC /* VLCMediaListPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 63014A781042ACE100534090 /* VLCMediaListPlayer.m */; };
CC4C592013F53EA400FB0EFC /* VLCExtensionsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 63098FDA110E7159005F46AE /* VLCExtensionsManager.m */; };
CC4C592113F53EA400FB0EFC /* VLCExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 63099114110F0EC3005F46AE /* VLCExtension.m */; };
CC4C592213F53EA400FB0EFC /* VLCMediaThumbnailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 636E974C11E8DCF1002FE8A9 /* VLCMediaThumbnailer.m */; };
CC4C592413F53EA400FB0EFC /* VLCEventManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD0D0CAEEEC300354E6E /* VLCEventManager.h */; settings = {ATTRIBUTES = (); }; };
CC4C592513F53EA400FB0EFC /* VLCKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD120CAEEEE700354E6E /* VLCKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592613F53EA400FB0EFC /* VLCMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD130CAEEEE700354E6E /* VLCMedia.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592713F53EA400FB0EFC /* VLCMediaLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD150CAEEEE700354E6E /* VLCMediaLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592813F53EA400FB0EFC /* VLCMediaList.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD160CAEEEE700354E6E /* VLCMediaList.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592913F53EA400FB0EFC /* VLCTime.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD190CAEEEE700354E6E /* VLCTime.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592A13F53EA400FB0EFC /* VLCVideoView.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD1A0CAEEEE700354E6E /* VLCVideoView.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592B13F53EA400FB0EFC /* VLCMediaPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF8BB8CE0CAFA8D80038A613 /* VLCMediaPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592C13F53EA400FB0EFC /* VLCAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = EF73118E0CB5797B009473B4 /* VLCAudio.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592D13F53EA400FB0EFC /* VLCLibVLCBridging.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD551DC0CC6DD720074CEE1 /* VLCLibVLCBridging.h */; };
CC4C592E13F53EA400FB0EFC /* VLCMediaDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 637D5ABC0CF6F2650073EA45 /* VLCMediaDiscoverer.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C592F13F53EA400FB0EFC /* VLCVideoLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6341FCAE0D2C0929002A97B7 /* VLCVideoLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593013F53EA400FB0EFC /* VLCLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 637CFB930D2D280800A041B6 /* VLCLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593113F53EA400FB0EFC /* VLCVideoCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A0CEA20D2EF13000F2C039 /* VLCVideoCommon.h */; };
CC4C593213F53EA400FB0EFC /* VLCStreamSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 632A0E830D3835C400AFC99B /* VLCStreamSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593313F53EA400FB0EFC /* VLCStreamOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 632A0EC10D38392E00AFC99B /* VLCStreamOutput.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593413F53EA400FB0EFC /* VLCMediaListPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 63014B7D1042E64A00534090 /* VLCMediaListPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593513F53EA400FB0EFC /* VLCExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 63099949110FC791005F46AE /* VLCExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593613F53EA400FB0EFC /* VLCExtensionsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6309994A110FC791005F46AE /* VLCExtensionsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
CC4C593713F53EA400FB0EFC /* VLCMediaThumbnailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D88D92124E9BF600F65FA0 /* VLCMediaThumbnailer.h */; };
CC4C593A13F53EA400FB0EFC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
CC4C593B13F53EA400FB0EFC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6384FD070D0DBA20005EB1F7 /* QuartzCore.framework */; };
EF7311900CB5797B009473B4 /* VLCAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = EF73118E0CB5797B009473B4 /* VLCAudio.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF7311910CB5797B009473B4 /* VLCAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = EF73118F0CB5797B009473B4 /* VLCAudio.m */; };
EF78BD100CAEEEC300354E6E /* VLCEventManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD0D0CAEEEC300354E6E /* VLCEventManager.h */; settings = {ATTRIBUTES = (); }; };
EF78BD1B0CAEEEE700354E6E /* VLCKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD120CAEEEE700354E6E /* VLCKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF78BD1C0CAEEEE700354E6E /* VLCMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD130CAEEEE700354E6E /* VLCMedia.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF78BD1E0CAEEEE700354E6E /* VLCMediaLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD150CAEEEE700354E6E /* VLCMediaLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF78BD1F0CAEEEE700354E6E /* VLCMediaList.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD160CAEEEE700354E6E /* VLCMediaList.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF78BD460CAEEFF600354E6E /* VLCEventManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD3C0CAEEFF600354E6E /* VLCEventManager.m */; };
EF78BD470CAEEFF600354E6E /* VLCLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD3D0CAEEFF600354E6E /* VLCLibrary.m */; };
EF78BD480CAEEFF600354E6E /* VLCMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD3E0CAEEFF600354E6E /* VLCMedia.m */; };
EF78BD4A0CAEEFF600354E6E /* VLCMediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD400CAEEFF600354E6E /* VLCMediaLibrary.m */; };
EF78BD4B0CAEEFF600354E6E /* VLCMediaList.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD410CAEEFF600354E6E /* VLCMediaList.m */; };
EF78BE0F0CAF039400354E6E /* VLCTime.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD190CAEEEE700354E6E /* VLCTime.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF78BE100CAF039400354E6E /* VLCTime.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD440CAEEFF600354E6E /* VLCTime.m */; };
EF78BEF30CAF07E100354E6E /* VLCVideoView.h in Headers */ = {isa = PBXBuildFile; fileRef = EF78BD1A0CAEEEE700354E6E /* VLCVideoView.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF78BEF40CAF07E500354E6E /* VLCVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = EF78BD450CAEEFF600354E6E /* VLCVideoView.m */; };
EF8BB8D00CAFA8D80038A613 /* VLCMediaPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF8BB8CE0CAFA8D80038A613 /* VLCMediaPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
EF8BB8D10CAFA8D80038A613 /* VLCMediaPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = EF8BB8CF0CAFA8D80038A613 /* VLCMediaPlayer.m */; };
EFD551DD0CC6DD720074CEE1 /* VLCLibVLCBridging.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD551DC0CC6DD720074CEE1 /* VLCLibVLCBridging.h */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
CC4C58F313F539B900FB0EFC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 63FFDBCE0D2AE2AE0092FC96;
remoteInfo = "Run VLC configure";
};
CC4C590A13F53EA400FB0EFC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 633BD6E40D2ADF030012A314;
remoteInfo = "Setup VLC contribs";
};
CC4C590C13F53EA400FB0EFC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 63FFDBCE0D2AE2AE0092FC96;
remoteInfo = "Run VLC configure";
};
CC4C590E13F53EA400FB0EFC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6337547910ED090A0072A0D9;
remoteInfo = "Make VLC";
};
CC610950112F4ABB00FAFD22 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6337547910ED090A0072A0D9;
remoteInfo = "Make VLC";
};
CC610952112F4ABF00FAFD22 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = VLCKit;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
32DBCF5E0370ADEE00C91783 /* VLC_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLC_Prefix.pch; sourceTree = "<group>"; };
63014A781042ACE100534090 /* VLCMediaListPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCMediaListPlayer.m; sourceTree = "<group>"; };
63014B7D1042E64A00534090 /* VLCMediaListPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaListPlayer.h; path = Public/VLCMediaListPlayer.h; sourceTree = "<group>"; };
63030CC70CCA652C0088ECD1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = Info.plist; path = Resources/Info.plist; sourceTree = "<group>"; };
63098FDA110E7159005F46AE /* VLCExtensionsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCExtensionsManager.m; sourceTree = "<group>"; };
63099114110F0EC3005F46AE /* VLCExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCExtension.m; sourceTree = "<group>"; };
63099949110FC791005F46AE /* VLCExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCExtension.h; path = Public/VLCExtension.h; sourceTree = "<group>"; };
6309994A110FC791005F46AE /* VLCExtensionsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCExtensionsManager.h; path = Public/VLCExtensionsManager.h; sourceTree = "<group>"; };
632A0E830D3835C400AFC99B /* VLCStreamSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCStreamSession.h; path = Public/VLCStreamSession.h; sourceTree = "<group>"; };
632A0E840D3835C400AFC99B /* VLCStreamSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCStreamSession.m; sourceTree = "<group>"; };
632A0EC10D38392E00AFC99B /* VLCStreamOutput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCStreamOutput.h; path = Public/VLCStreamOutput.h; sourceTree = "<group>"; };
632A0EC20D38392E00AFC99B /* VLCStreamOutput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCStreamOutput.m; sourceTree = "<group>"; };
633753FF10ECE1C60072A0D9 /* Configure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = Configure.sh; sourceTree = "<group>"; };
634117B911D9344400FA3A70 /* MobileVLCKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MobileVLCKit.h; path = Public/MobileVLCKit.h; sourceTree = "<group>"; };
6341FCAE0D2C0929002A97B7 /* VLCVideoLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCVideoLayer.h; path = Public/VLCVideoLayer.h; sourceTree = "<group>"; };
6341FCB00D2C0936002A97B7 /* VLCVideoLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCVideoLayer.m; sourceTree = "<group>"; };
636E974C11E8DCF1002FE8A9 /* VLCMediaThumbnailer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCMediaThumbnailer.m; sourceTree = "<group>"; };
637CFB930D2D280800A041B6 /* VLCLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCLibrary.h; path = Public/VLCLibrary.h; sourceTree = "<group>"; };
637D5ABC0CF6F2650073EA45 /* VLCMediaDiscoverer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCMediaDiscoverer.h; path = Public/VLCMediaDiscoverer.h; sourceTree = "<group>"; };
637D5ADB0CF6F2720073EA45 /* VLCMediaDiscoverer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCMediaDiscoverer.m; sourceTree = "<group>"; };
6384FD070D0DBA20005EB1F7 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = "<absolute>"; };
63D88C56124E9A5100F65FA0 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
63D88CA9124E9A8200F65FA0 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; };
63D88D92124E9BF600F65FA0 /* VLCMediaThumbnailer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaThumbnailer.h; path = Public/VLCMediaThumbnailer.h; sourceTree = "<group>"; };
A26DCC7314279D2400EA47A0 /* VLCKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VLCKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A7A0CEA20D2EF13000F2C039 /* VLCVideoCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCVideoCommon.h; path = Internal/VLCVideoCommon.h; sourceTree = "<group>"; };
A7A0CEA30D2EF13000F2C039 /* VLCVideoCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCVideoCommon.m; sourceTree = "<group>"; };
CC4C594013F53EA400FB0EFC /* VLCKit-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "VLCKit-Info.plist"; path = "/Users/dilaroga/dev/vlc_workspace/vlc/projects/macosx/framework/VLCKit-Info.plist"; sourceTree = "<absolute>"; };
CCEC5B73114D9BE800D34AAB /* deprecated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = deprecated.h; path = ../../../include/vlc/deprecated.h; sourceTree = SOURCE_ROOT; };
CCEC5B74114D9BE800D34AAB /* libvlc_events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_events.h; path = ../../../include/vlc/libvlc_events.h; sourceTree = SOURCE_ROOT; };
CCEC5B75114D9BE800D34AAB /* libvlc_media_discoverer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_media_discoverer.h; path = ../../../include/vlc/libvlc_media_discoverer.h; sourceTree = SOURCE_ROOT; };
CCEC5B76114D9BE800D34AAB /* libvlc_media_library.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_media_library.h; path = ../../../include/vlc/libvlc_media_library.h; sourceTree = SOURCE_ROOT; };
CCEC5B77114D9BE800D34AAB /* libvlc_media_list_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_media_list_player.h; path = ../../../include/vlc/libvlc_media_list_player.h; sourceTree = SOURCE_ROOT; };
CCEC5B78114D9BE800D34AAB /* libvlc_media_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_media_list.h; path = ../../../include/vlc/libvlc_media_list.h; sourceTree = SOURCE_ROOT; };
CCEC5B79114D9BE800D34AAB /* libvlc_media_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_media_player.h; path = ../../../include/vlc/libvlc_media_player.h; sourceTree = SOURCE_ROOT; };
CCEC5B7A114D9BE800D34AAB /* libvlc_media.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_media.h; path = ../../../include/vlc/libvlc_media.h; sourceTree = SOURCE_ROOT; };
CCEC5B7B114D9BE800D34AAB /* libvlc_structures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_structures.h; path = ../../../include/vlc/libvlc_structures.h; sourceTree = SOURCE_ROOT; };
CCEC5B7C114D9BE800D34AAB /* libvlc_vlm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc_vlm.h; path = ../../../include/vlc/libvlc_vlm.h; sourceTree = SOURCE_ROOT; };
CCEC5B7D114D9BE800D34AAB /* libvlc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvlc.h; path = ../../../include/vlc/libvlc.h; sourceTree = SOURCE_ROOT; };
CCEC5B7E114D9BE800D34AAB /* vlc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vlc.h; path = ../../../include/vlc/vlc.h; sourceTree = SOURCE_ROOT; };
D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
EF73118E0CB5797B009473B4 /* VLCAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCAudio.h; path = Public/VLCAudio.h; sourceTree = "<group>"; };
EF73118F0CB5797B009473B4 /* VLCAudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCAudio.m; sourceTree = "<group>"; };
EF78BD0D0CAEEEC300354E6E /* VLCEventManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCEventManager.h; path = Internal/VLCEventManager.h; sourceTree = "<group>"; };
EF78BD120CAEEEE700354E6E /* VLCKit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCKit.h; path = Public/VLCKit.h; sourceTree = "<group>"; };
EF78BD130CAEEEE700354E6E /* VLCMedia.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCMedia.h; path = Public/VLCMedia.h; sourceTree = "<group>"; };
EF78BD150CAEEEE700354E6E /* VLCMediaLibrary.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCMediaLibrary.h; path = Public/VLCMediaLibrary.h; sourceTree = "<group>"; };
EF78BD160CAEEEE700354E6E /* VLCMediaList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCMediaList.h; path = Public/VLCMediaList.h; sourceTree = "<group>"; };
EF78BD190CAEEEE700354E6E /* VLCTime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCTime.h; path = Public/VLCTime.h; sourceTree = "<group>"; };
EF78BD1A0CAEEEE700354E6E /* VLCVideoView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCVideoView.h; path = Public/VLCVideoView.h; sourceTree = "<group>"; };
EF78BD350CAEEFB000354E6E /* Pre-Compile.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = "Pre-Compile.sh"; sourceTree = "<group>"; };
EF78BD3C0CAEEFF600354E6E /* VLCEventManager.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCEventManager.m; sourceTree = "<group>"; };
EF78BD3D0CAEEFF600354E6E /* VLCLibrary.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCLibrary.m; sourceTree = "<group>"; };
EF78BD3E0CAEEFF600354E6E /* VLCMedia.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCMedia.m; sourceTree = "<group>"; };
EF78BD400CAEEFF600354E6E /* VLCMediaLibrary.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCMediaLibrary.m; sourceTree = "<group>"; };
EF78BD410CAEEFF600354E6E /* VLCMediaList.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCMediaList.m; sourceTree = "<group>"; };
EF78BD440CAEEFF600354E6E /* VLCTime.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCTime.m; sourceTree = "<group>"; };
EF78BD450CAEEFF600354E6E /* VLCVideoView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCVideoView.m; sourceTree = "<group>"; };
EF8BB8CE0CAFA8D80038A613 /* VLCMediaPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaPlayer.h; path = Public/VLCMediaPlayer.h; sourceTree = "<group>"; };
EF8BB8CF0CAFA8D80038A613 /* VLCMediaPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCMediaPlayer.m; sourceTree = "<group>"; };
EFD551DC0CC6DD720074CEE1 /* VLCLibVLCBridging.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLCLibVLCBridging.h; path = Internal/VLCLibVLCBridging.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8DC2EF560486A6940098B216 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */,
6384FD080D0DBA20005EB1F7 /* QuartzCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CC4C593913F53EA400FB0EFC /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CC4C593A13F53EA400FB0EFC /* Cocoa.framework in Frameworks */,
CC4C593B13F53EA400FB0EFC /* QuartzCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
034768DFFF38A50411DB9C8B /* Products */ = {
isa = PBXGroup;
children = (
A26DCC7314279D2400EA47A0 /* VLCKit.framework */,
);
name = Products;
sourceTree = "<group>";
};
0867D691FE84028FC02AAC07 /* VLC */ = {
isa = PBXGroup;
children = (
EF78BD3B0CAEEFD000354E6E /* Headers */,
08FB77AEFE84172EC02AAC07 /* Sources */,
32C88DFF0371C24200C91783 /* Other Sources */,
089C1665FE841158C02AAC07 /* Resources */,
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
034768DFFF38A50411DB9C8B /* Products */,
63D88C56124E9A5100F65FA0 /* Quartz.framework */,
63D88CA9124E9A8200F65FA0 /* ApplicationServices.framework */,
CC4C594013F53EA400FB0EFC /* VLCKit-Info.plist */,
);
name = VLC;
sourceTree = "<group>";
};
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
EF53DD5F0CBD7BD100D3D4D0 /* Linked Libraries */,
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */,
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */,
);
name = "External Frameworks and Libraries";
sourceTree = "<group>";
};
089C1665FE841158C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
EF78BD350CAEEFB000354E6E /* Pre-Compile.sh */,
633753FF10ECE1C60072A0D9 /* Configure.sh */,
63030CC70CCA652C0088ECD1 /* Info.plist */,
);
name = Resources;
sourceTree = "<group>";
};
08FB77AEFE84172EC02AAC07 /* Sources */ = {
isa = PBXGroup;
children = (
EF78BD3C0CAEEFF600354E6E /* VLCEventManager.m */,
EF78BD3D0CAEEFF600354E6E /* VLCLibrary.m */,
EF78BD3E0CAEEFF600354E6E /* VLCMedia.m */,
637D5ADB0CF6F2720073EA45 /* VLCMediaDiscoverer.m */,
EF78BD410CAEEFF600354E6E /* VLCMediaList.m */,
63014A781042ACE100534090 /* VLCMediaListPlayer.m */,
EF8BB8CF0CAFA8D80038A613 /* VLCMediaPlayer.m */,
636E974C11E8DCF1002FE8A9 /* VLCMediaThumbnailer.m */,
EF78BD400CAEEFF600354E6E /* VLCMediaLibrary.m */,
A7A0CEA30D2EF13000F2C039 /* VLCVideoCommon.m */,
6341FCB00D2C0936002A97B7 /* VLCVideoLayer.m */,
EF78BD450CAEEFF600354E6E /* VLCVideoView.m */,
EF78BD440CAEEFF600354E6E /* VLCTime.m */,
EF73118F0CB5797B009473B4 /* VLCAudio.m */,
63098FDA110E7159005F46AE /* VLCExtensionsManager.m */,
63099114110F0EC3005F46AE /* VLCExtension.m */,
632A0F7B0D38F78500AFC99B /* Stream */,
);
path = Sources;
sourceTree = "<group>";
};
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
6384FD070D0DBA20005EB1F7 /* QuartzCore.framework */,
1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
0867D6A5FE840307C02AAC07 /* AppKit.framework */,
D2F7E79907B2D74100F64583 /* CoreData.framework */,
0867D69BFE84028FC02AAC07 /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
32C88DFF0371C24200C91783 /* Other Sources */ = {
isa = PBXGroup;
children = (
32DBCF5E0370ADEE00C91783 /* VLC_Prefix.pch */,
);
name = "Other Sources";
sourceTree = "<group>";
};
632A0F7B0D38F78500AFC99B /* Stream */ = {
isa = PBXGroup;
children = (
632A0E840D3835C400AFC99B /* VLCStreamSession.m */,
632A0EC20D38392E00AFC99B /* VLCStreamOutput.m */,
);
name = Stream;
sourceTree = "<group>";
};
632A0F7C0D38F79200AFC99B /* Stream */ = {
isa = PBXGroup;
children = (
632A0E830D3835C400AFC99B /* VLCStreamSession.h */,
632A0EC10D38392E00AFC99B /* VLCStreamOutput.h */,
);
name = Stream;
sourceTree = "<group>";
};
637CFB960D2D281900A041B6 /* Internal */ = {
isa = PBXGroup;
children = (
63D88D92124E9BF600F65FA0 /* VLCMediaThumbnailer.h */,
EFD551DC0CC6DD720074CEE1 /* VLCLibVLCBridging.h */,
EF78BD0D0CAEEEC300354E6E /* VLCEventManager.h */,
A7A0CEA20D2EF13000F2C039 /* VLCVideoCommon.h */,
);
name = Internal;
sourceTree = "<group>";
};
CCEC5B6C114D9BD300D34AAB /* libvlc (not distributed) */ = {
isa = PBXGroup;
children = (
CCEC5B73114D9BE800D34AAB /* deprecated.h */,
CCEC5B74114D9BE800D34AAB /* libvlc_events.h */,
CCEC5B75114D9BE800D34AAB /* libvlc_media_discoverer.h */,
CCEC5B76114D9BE800D34AAB /* libvlc_media_library.h */,
CCEC5B77114D9BE800D34AAB /* libvlc_media_list_player.h */,
CCEC5B78114D9BE800D34AAB /* libvlc_media_list.h */,
CCEC5B79114D9BE800D34AAB /* libvlc_media_player.h */,
CCEC5B7A114D9BE800D34AAB /* libvlc_media.h */,
CCEC5B7B114D9BE800D34AAB /* libvlc_structures.h */,
CCEC5B7C114D9BE800D34AAB /* libvlc_vlm.h */,
CCEC5B7D114D9BE800D34AAB /* libvlc.h */,
CCEC5B7E114D9BE800D34AAB /* vlc.h */,
);
name = "libvlc (not distributed)";
sourceTree = "<group>";
};
EF53DD5F0CBD7BD100D3D4D0 /* Linked Libraries */ = {
isa = PBXGroup;
children = (
);
name = "Linked Libraries";
sourceTree = "<group>";
};
EF6BC9110DA1932F00DD37EF /* Public */ = {
isa = PBXGroup;
children = (
634117B911D9344400FA3A70 /* MobileVLCKit.h */,
EF78BD120CAEEEE700354E6E /* VLCKit.h */,
637CFB930D2D280800A041B6 /* VLCLibrary.h */,
EF78BD130CAEEEE700354E6E /* VLCMedia.h */,
637D5ABC0CF6F2650073EA45 /* VLCMediaDiscoverer.h */,
EF78BD160CAEEEE700354E6E /* VLCMediaList.h */,
63014B7D1042E64A00534090 /* VLCMediaListPlayer.h */,
EF8BB8CE0CAFA8D80038A613 /* VLCMediaPlayer.h */,
EF78BD150CAEEEE700354E6E /* VLCMediaLibrary.h */,
6341FCAE0D2C0929002A97B7 /* VLCVideoLayer.h */,
EF78BD1A0CAEEEE700354E6E /* VLCVideoView.h */,
EF78BD190CAEEEE700354E6E /* VLCTime.h */,
EF73118E0CB5797B009473B4 /* VLCAudio.h */,
63099949110FC791005F46AE /* VLCExtension.h */,
6309994A110FC791005F46AE /* VLCExtensionsManager.h */,
632A0F7C0D38F79200AFC99B /* Stream */,
);
name = Public;
sourceTree = "<group>";
};
EF78BD3B0CAEEFD000354E6E /* Headers */ = {
isa = PBXGroup;
children = (
CCEC5B6C114D9BD300D34AAB /* libvlc (not distributed) */,
637CFB960D2D281900A041B6 /* Internal */,
EF6BC9110DA1932F00DD37EF /* Public */,
);
path = Headers;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8DC2EF500486A6940098B216 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
EF78BD100CAEEEC300354E6E /* VLCEventManager.h in Headers */,
EF78BD1B0CAEEEE700354E6E /* VLCKit.h in Headers */,
EF78BD1C0CAEEEE700354E6E /* VLCMedia.h in Headers */,
EF78BD1E0CAEEEE700354E6E /* VLCMediaLibrary.h in Headers */,
EF78BD1F0CAEEEE700354E6E /* VLCMediaList.h in Headers */,
EF78BE0F0CAF039400354E6E /* VLCTime.h in Headers */,
EF78BEF30CAF07E100354E6E /* VLCVideoView.h in Headers */,
EF8BB8D00CAFA8D80038A613 /* VLCMediaPlayer.h in Headers */,
EF7311900CB5797B009473B4 /* VLCAudio.h in Headers */,
EFD551DD0CC6DD720074CEE1 /* VLCLibVLCBridging.h in Headers */,
637D5ABD0CF6F2650073EA45 /* VLCMediaDiscoverer.h in Headers */,
6341FCAF0D2C0929002A97B7 /* VLCVideoLayer.h in Headers */,
637CFB940D2D280900A041B6 /* VLCLibrary.h in Headers */,
A7A0CEA40D2EF13000F2C039 /* VLCVideoCommon.h in Headers */,
632A0E850D3835C400AFC99B /* VLCStreamSession.h in Headers */,
632A0EC30D38392E00AFC99B /* VLCStreamOutput.h in Headers */,
63014B7E1042E64A00534090 /* VLCMediaListPlayer.h in Headers */,
6309994B110FC791005F46AE /* VLCExtension.h in Headers */,
6309994C110FC791005F46AE /* VLCExtensionsManager.h in Headers */,
63D88D93124E9BF600F65FA0 /* VLCMediaThumbnailer.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CC4C592313F53EA400FB0EFC /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
CC4C592413F53EA400FB0EFC /* VLCEventManager.h in Headers */,
CC4C592513F53EA400FB0EFC /* VLCKit.h in Headers */,
CC4C592613F53EA400FB0EFC /* VLCMedia.h in Headers */,
CC4C592713F53EA400FB0EFC /* VLCMediaLibrary.h in Headers */,
CC4C592813F53EA400FB0EFC /* VLCMediaList.h in Headers */,
CC4C592913F53EA400FB0EFC /* VLCTime.h in Headers */,
CC4C592A13F53EA400FB0EFC /* VLCVideoView.h in Headers */,
CC4C592B13F53EA400FB0EFC /* VLCMediaPlayer.h in Headers */,
CC4C592C13F53EA400FB0EFC /* VLCAudio.h in Headers */,
CC4C592D13F53EA400FB0EFC /* VLCLibVLCBridging.h in Headers */,
CC4C592E13F53EA400FB0EFC /* VLCMediaDiscoverer.h in Headers */,
CC4C592F13F53EA400FB0EFC /* VLCVideoLayer.h in Headers */,
CC4C593013F53EA400FB0EFC /* VLCLibrary.h in Headers */,
CC4C593113F53EA400FB0EFC /* VLCVideoCommon.h in Headers */,
CC4C593213F53EA400FB0EFC /* VLCStreamSession.h in Headers */,
CC4C593313F53EA400FB0EFC /* VLCStreamOutput.h in Headers */,
CC4C593413F53EA400FB0EFC /* VLCMediaListPlayer.h in Headers */,
CC4C593513F53EA400FB0EFC /* VLCExtension.h in Headers */,
CC4C593613F53EA400FB0EFC /* VLCExtensionsManager.h in Headers */,
CC4C593713F53EA400FB0EFC /* VLCMediaThumbnailer.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8DC2EF4F0486A6940098B216 /* Build just VLCKit */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Build just VLCKit" */;
buildPhases = (
EF78BD2E0CAEEF9500354E6E /* ShellScript */,
8DC2EF540486A6940098B216 /* Sources */,
8DC2EF500486A6940098B216 /* Headers */,
8DC2EF520486A6940098B216 /* Resources */,
8DC2EF560486A6940098B216 /* Frameworks */,
);
buildRules = (
);
comments = "-lvlc -lvlc-control -dylib_file @loader_path/../lib/vlc_libintl.dylib:$(TARGET_BUILD_DIR)/$(PROJECT_NAME).framework/lib/vlc_libintl.dylib -dylib_file @loader_path/../lib/libvlc.dylib:$(TARGET_BUILD_DIR)/$(PROJECT_NAME).framework/lib/libvlc.dylib";
dependencies = (
);
name = "Build just VLCKit";
productInstallPath = "$(HOME)/Library/Frameworks";
productName = VLC;
productReference = A26DCC7314279D2400EA47A0 /* VLCKit.framework */;
productType = "com.apple.product-type.framework";
};
CC4C590813F53EA400FB0EFC /* Build Everything */ = {
isa = PBXNativeTarget;
buildConfigurationList = CC4C593C13F53EA400FB0EFC /* Build configuration list for PBXNativeTarget "Build Everything" */;
buildPhases = (
CC4C590F13F53EA400FB0EFC /* ShellScript */,
CC4C591013F53EA400FB0EFC /* Sources */,
CC4C592313F53EA400FB0EFC /* Headers */,
CC4C593813F53EA400FB0EFC /* Resources */,
CC4C593913F53EA400FB0EFC /* Frameworks */,
);
buildRules = (
);
comments = "-lvlc -lvlc-control -dylib_file @loader_path/../lib/vlc_libintl.dylib:$(TARGET_BUILD_DIR)/$(PROJECT_NAME).framework/lib/vlc_libintl.dylib -dylib_file @loader_path/../lib/libvlc.dylib:$(TARGET_BUILD_DIR)/$(PROJECT_NAME).framework/lib/libvlc.dylib";
dependencies = (
CC4C590913F53EA400FB0EFC /* PBXTargetDependency */,
CC4C590B13F53EA400FB0EFC /* PBXTargetDependency */,
CC4C590D13F53EA400FB0EFC /* PBXTargetDependency */,
);
name = "Build Everything";
productInstallPath = "$(HOME)/Library/Frameworks";
productName = VLC;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0430;
};
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "VLCKit" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 0867D691FE84028FC02AAC07 /* VLC */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
633BD6E40D2ADF030012A314 /* Setup VLC contribs */,
63FFDBCE0D2AE2AE0092FC96 /* Run VLC configure */,
6337547910ED090A0072A0D9 /* Make VLC */,
8DC2EF4F0486A6940098B216 /* Build just VLCKit */,
CC61094C112F4AB500FAFD22 /* Make VLC and VLCKit */,
CC4C590813F53EA400FB0EFC /* Build Everything */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8DC2EF520486A6940098B216 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
CC4C593813F53EA400FB0EFC /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
631A90420D5A007D0014A2CE /* bootstrap */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"$(SRCROOT)/../../../bootstrap",
);
name = bootstrap;
outputPaths = (
"$(SRCROOT)/../../../configure",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "top_srcdir=`pwd`/../../..\n\nif test \"$ACTION\" = \"clean\"\nthen\n exit 0\nfi\n\nif test \"$arch\" = \"x86_64\"; then\n export PATH=$top_srcdir/contrib/x86_64-apple-darwin10:$PATH\nfi\n\nexport PATH=$top_srcdir/extras/tools/build/bin:$PATH\ncd \"$top_srcdir\" && ./bootstrap\n";
showEnvVarsInLog = 0;
};
6337548010ED091D0072A0D9 /* make */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = make;
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "for arch in $ARCHS; do\n\techo \"Make [$arch]\"\n\tcd $VLC_BUILD_DIR/$arch\n\tmake\ndone";
};
633754D310ED0D330072A0D9 /* install */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"$(SYMROOT)/vlc_build_dir/src/.lib/libvlccore.dylib",
"$(SYMROOT)/vlc_build_dir/src/.lib/libvlc.dylib",
"$(SYMROOT)/vlc_build_dir/bin/.lib/vlc",
);
name = install;
outputPaths = (
"$(SYMROOT)/vlc_build_dir/lib/libvlccore.dylib",
"$(SYMROOT)/vlc_build_dir/lib/libvlc.dylib",
"$(SYMROOT)/vlc_build_dir/bin/vlc",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "for arch in $ARCHS; do\n\tcd $VLC_BUILD_DIR/$arch\n\tcd src\n\techo \"Installing [$arch] libvlc, libvlccore, vlc\"\n\tmake install --quiet > /dev/null\ndone";
};
633BD6E30D2ADF030012A314 /* make */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = make;
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if test $ACTION = \"clean\"\nthen\nmake clean\nexit 0\nfi\n\necho \"Building tools\"\necho \"\"\ncd $SOURCE_ROOT/../../../extras/tools\n./bootstrap\nmake\n\necho \"Building a set of contribs for $ARCHS...\"\necho \"\"\ncd $SOURCE_ROOT/../../../contrib\n\nfor arch in $ARCHS; do\n\techo \"Making contribs for $arch\"\n\trm -rf vlckit-$arch\t\n\tmkdir vlckit-$arch\n\tcd vlckit-$arch\n\tif test \"$arch\" = \"x86_64\"; then\n export OSX_VERSION=10.6\nexport TRIPLET=x86_64-apple-darwin10\nelse\nexport TRIPLET=i686-apple-darwin9\nfi\n ../bootstrap --build=$TRIPLET --host=$TRIPLET\n\tmake prebuilt\ndone\n";
showEnvVarsInLog = 0;
};
63FFDBCD0D2AE2AE0092FC96 /* configure */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = configure;
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "sh $SOURCE_ROOT/Configure.sh";
};
CC4C590F13F53EA400FB0EFC /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "sh $SOURCE_ROOT/Pre-Compile.sh";
showEnvVarsInLog = 0;
};
EF78BD2E0CAEEF9500354E6E /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "sh $SOURCE_ROOT/Pre-Compile.sh";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8DC2EF540486A6940098B216 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EF78BD460CAEEFF600354E6E /* VLCEventManager.m in Sources */,
EF78BD470CAEEFF600354E6E /* VLCLibrary.m in Sources */,
EF78BD480CAEEFF600354E6E /* VLCMedia.m in Sources */,
EF78BD4A0CAEEFF600354E6E /* VLCMediaLibrary.m in Sources */,
EF78BD4B0CAEEFF600354E6E /* VLCMediaList.m in Sources */,
EF78BE100CAF039400354E6E /* VLCTime.m in Sources */,
EF78BEF40CAF07E500354E6E /* VLCVideoView.m in Sources */,
EF8BB8D10CAFA8D80038A613 /* VLCMediaPlayer.m in Sources */,
EF7311910CB5797B009473B4 /* VLCAudio.m in Sources */,
637D5ADC0CF6F2720073EA45 /* VLCMediaDiscoverer.m in Sources */,
6341FCB10D2C0936002A97B7 /* VLCVideoLayer.m in Sources */,
A7A0CEA50D2EF13000F2C039 /* VLCVideoCommon.m in Sources */,
632A0E860D3835C400AFC99B /* VLCStreamSession.m in Sources */,
632A0EC40D38392E00AFC99B /* VLCStreamOutput.m in Sources */,
63014A7A1042ACE100534090 /* VLCMediaListPlayer.m in Sources */,
63098FDC110E7159005F46AE /* VLCExtensionsManager.m in Sources */,
63099116110F0EC3005F46AE /* VLCExtension.m in Sources */,
636E974E11E8DCF1002FE8A9 /* VLCMediaThumbnailer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CC4C591013F53EA400FB0EFC /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CC4C591113F53EA400FB0EFC /* VLCEventManager.m in Sources */,
CC4C591213F53EA400FB0EFC /* VLCLibrary.m in Sources */,
CC4C591313F53EA400FB0EFC /* VLCMedia.m in Sources */,
CC4C591413F53EA400FB0EFC /* VLCMediaLibrary.m in Sources */,
CC4C591513F53EA400FB0EFC /* VLCMediaList.m in Sources */,
CC4C591613F53EA400FB0EFC /* VLCTime.m in Sources */,
CC4C591713F53EA400FB0EFC /* VLCVideoView.m in Sources */,
CC4C591813F53EA400FB0EFC /* VLCMediaPlayer.m in Sources */,
CC4C591913F53EA400FB0EFC /* VLCAudio.m in Sources */,
CC4C591A13F53EA400FB0EFC /* VLCMediaDiscoverer.m in Sources */,
CC4C591B13F53EA400FB0EFC /* VLCVideoLayer.m in Sources */,
CC4C591C13F53EA400FB0EFC /* VLCVideoCommon.m in Sources */,
CC4C591D13F53EA400FB0EFC /* VLCStreamSession.m in Sources */,
CC4C591E13F53EA400FB0EFC /* VLCStreamOutput.m in Sources */,
CC4C591F13F53EA400FB0EFC /* VLCMediaListPlayer.m in Sources */,
CC4C592013F53EA400FB0EFC /* VLCExtensionsManager.m in Sources */,
CC4C592113F53EA400FB0EFC /* VLCExtension.m in Sources */,
CC4C592213F53EA400FB0EFC /* VLCMediaThumbnailer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
CC4C58F413F539B900FB0EFC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 63FFDBCE0D2AE2AE0092FC96 /* Run VLC configure */;
targetProxy = CC4C58F313F539B900FB0EFC /* PBXContainerItemProxy */;
};
CC4C590913F53EA400FB0EFC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 633BD6E40D2ADF030012A314 /* Setup VLC contribs */;
targetProxy = CC4C590A13F53EA400FB0EFC /* PBXContainerItemProxy */;
};
CC4C590B13F53EA400FB0EFC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 63FFDBCE0D2AE2AE0092FC96 /* Run VLC configure */;
targetProxy = CC4C590C13F53EA400FB0EFC /* PBXContainerItemProxy */;
};
CC4C590D13F53EA400FB0EFC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6337547910ED090A0072A0D9 /* Make VLC */;
targetProxy = CC4C590E13F53EA400FB0EFC /* PBXContainerItemProxy */;
};
CC610951112F4ABB00FAFD22 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6337547910ED090A0072A0D9 /* Make VLC */;
targetProxy = CC610950112F4ABB00FAFD22 /* PBXContainerItemProxy */;
};
CC610953112F4ABF00FAFD22 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 8DC2EF4F0486A6940098B216 /* Build just VLCKit */;
targetProxy = CC610952112F4ABF00FAFD22 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1DEB91AE08733DA50010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = VLC_Prefix.pch;
GCC_VERSION = "";
HEADER_SEARCH_PATHS = (
"$(VLC_SRC_DIR)/include",
"Headers/**",
);
INFOPLIST_FILE = Resources/Info.plist;
INSTALL_PATH = "@loader_path/../Frameworks";
LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/lib";
OTHER_LDFLAGS = (
"-lvlccore",
"-single_module",
"-read_only_relocs",
suppress,
"-lvlc",
);
PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
PRODUCT_NAME = VLCKit;
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
SDKROOT = macosx;
WRAPPER_EXTENSION = framework;
};
name = Debug;
};
1DEB91AF08733DA50010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = "";
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = VLC_Prefix.pch;
GCC_VERSION = "";
HEADER_SEARCH_PATHS = (
"$(VLC_SRC_DIR)/include",
"Headers/**",
);
INFOPLIST_FILE = Resources/Info.plist;
INSTALL_PATH = "@loader_path/../Frameworks";
LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/lib";
OTHER_LDFLAGS = (
"-lvlccore",
"-single_module",
"-read_only_relocs",
suppress,
"-lvlc",
);
PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
PRODUCT_NAME = VLCKit;
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
SDKROOT = macosx;
WRAPPER_EXTENSION = framework;
};
name = Release;
};
1DEB91B208733DA50010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
x86_64,
i386,
);
GCC_C_LANGUAGE_STANDARD = c99;
GCC_ENABLE_OBJC_GC = supported;
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
VALID_ARCHS = "i386 ppc ppc64 ppc7400 x86_64";
VLC_BUILD_DIR = "$(SYMROOT)/$(CONFIGURATION)/vlc_build_dir";
VLC_SRC_DIR = "$(SRCROOT)/../../..";
};
name = Debug;
};
1DEB91B308733DA50010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
x86_64,
i386,
);
GCC_C_LANGUAGE_STANDARD = c99;
GCC_ENABLE_OBJC_GC = supported;
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = macosx;
VALID_ARCHS = "i386 ppc ppc64 ppc7400 x86_64";
VLC_BUILD_DIR = "$(SYMROOT)/$(CONFIGURATION)/vlc_build_dir";
VLC_SRC_DIR = "$(SRCROOT)/../../..";
};
name = Release;
};
6337547C10ED090B0072A0D9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = VLC;
SDKROOT = macosx;
};
name = Debug;
};
6337547D10ED090B0072A0D9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = VLC;
SDKROOT = macosx;
};
name = Release;
};
633BD6E50D2ADF030012A314 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = "vlc-contrib";
SDKROOT = macosx;
};
name = Debug;
};
633BD6E60D2ADF030012A314 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = "vlc-contrib";
SDKROOT = macosx;
ZERO_LINK = NO;
};
name = Release;
};
63FFDBD00D2AE2AE0092FC96 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CC = "xcrun clang";
COPY_PHASE_STRIP = NO;
CXX = "xcrun clang++";
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
OBJC = "xcrun clang";
PRODUCT_NAME = "vlc-bootstrap";
SDKROOT = macosx;
};
name = Debug;
};
63FFDBD10D2AE2AE0092FC96 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CC = "xcrun clang";
COPY_PHASE_STRIP = YES;
CXX = "xcrun clang++";
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
OBJC = "xcrun clang";
PRODUCT_NAME = "vlc-bootstrap";
SDKROOT = macosx;
ZERO_LINK = NO;
};
name = Release;
};
CC4C593D13F53EA400FB0EFC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = VLC_Prefix.pch;
GCC_VERSION = "";
HEADER_SEARCH_PATHS = (
"$(VLC_SRC_DIR)/include",
"Headers/**",
);
INFOPLIST_FILE = "VLCKit-Info.plist";
INSTALL_PATH = "@loader_path/../Frameworks";
LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/lib";
OTHER_LDFLAGS = (
"-lvlccore",
"-single_module",
"-read_only_relocs",
suppress,
"-lvlc",
);
PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
PRODUCT_NAME = VLCKit;
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
SDKROOT = macosx;
WRAPPER_EXTENSION = framework;
};
name = Debug;
};
CC4C593E13F53EA400FB0EFC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = "";
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = VLC_Prefix.pch;
GCC_VERSION = "";
HEADER_SEARCH_PATHS = (
"$(VLC_SRC_DIR)/include",
"Headers/**",
);
INFOPLIST_FILE = "VLCKit-Info.plist";
INSTALL_PATH = "@loader_path/../Frameworks";
LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/lib";
OTHER_LDFLAGS = (
"-lvlccore",
"-single_module",
"-read_only_relocs",
suppress,
"-lvlc",
);
PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
PRODUCT_NAME = VLCKit;
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
SDKROOT = macosx;
WRAPPER_EXTENSION = framework;
};
name = Release;
};
CC61094D112F4AB600FAFD22 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = "Make VLC and VLCKit";
SDKROOT = macosx;
};
name = Debug;
};
CC61094E112F4AB600FAFD22 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = "Make VLC and VLCKit";
SDKROOT = macosx;
ZERO_LINK = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Build just VLCKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB91AE08733DA50010E9CD /* Debug */,
1DEB91AF08733DA50010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "VLCKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB91B208733DA50010E9CD /* Debug */,
1DEB91B308733DA50010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
6337548110ED093B0072A0D9 /* Build configuration list for PBXAggregateTarget "Make VLC" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6337547C10ED090B0072A0D9 /* Debug */,
6337547D10ED090B0072A0D9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
633BD6EC0D2ADF460012A314 /* Build configuration list for PBXAggregateTarget "Setup VLC contribs" */ = {
isa = XCConfigurationList;
buildConfigurations = (
633BD6E50D2ADF030012A314 /* Debug */,
633BD6E60D2ADF030012A314 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
63FFDBD50D2AE3250092FC96 /* Build configuration list for PBXAggregateTarget "Run VLC configure" */ = {
isa = XCConfigurationList;
buildConfigurations = (
63FFDBD00D2AE2AE0092FC96 /* Debug */,
63FFDBD10D2AE2AE0092FC96 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
CC4C593C13F53EA400FB0EFC /* Build configuration list for PBXNativeTarget "Build Everything" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CC4C593D13F53EA400FB0EFC /* Debug */,
CC4C593E13F53EA400FB0EFC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
CC61095D112F4AD400FAFD22 /* Build configuration list for PBXAggregateTarget "Make VLC and VLCKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CC61094D112F4AB600FAFD22 /* Debug */,
CC61094E112F4AB600FAFD22 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
}
//
// Prefix header for all source files of the 'VLC' target in the 'VLC' project.
//
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
# define IPHONE_OS
#endif
#ifdef __OBJC__
# ifndef IPHONE_OS
# import <Cocoa/Cocoa.h>
# else
# import <UIKit/UIKit.h>
# endif
#endif
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc/vlc.h>
#include <vlc/libvlc_structures.h>
#include <vlc/libvlc.h>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment