Cleaned up project settings to current defaults, except for the macOS deployment version, which is still 10.13. Cleaned up a lot of headers and such to include with angle braces instead of double quotes. Enabled build sandbox in a lot of places. Disabled subproject signing in several places, for libraries and frameworks which will be stripped and signed when they are copied into place in the final build. Also, while trying to solve compilation issues, the visualization controller was reverted to the Objective C implementation, which is probably faster anyway. Stupid Swift/Objective-C language mixing issues. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
114 lines
3.6 KiB
Objective-C
114 lines
3.6 KiB
Objective-C
// Plugins! HOORAY!
|
|
|
|
#import <CogAudio/AudioChunk.h>
|
|
|
|
@protocol CogSource <NSObject>
|
|
+ (NSArray *)schemes; // http, file, etc
|
|
|
|
- (NSURL *)url;
|
|
- (NSString *)mimeType;
|
|
|
|
- (BOOL)open:(NSURL *)url;
|
|
- (BOOL)seekable;
|
|
- (BOOL)seek:(long)position whence:(int)whence;
|
|
- (long)tell;
|
|
- (long)read:(void *)buffer amount:(long)amount; // reads UP TO amount, returns amount read.
|
|
- (void)close;
|
|
- (void)dealloc;
|
|
@end
|
|
|
|
@protocol CogVersionCheck <NSObject>
|
|
+ (BOOL)shouldLoadForOSVersion:(NSOperatingSystemVersion)version;
|
|
@end
|
|
|
|
@protocol CogContainer <NSObject>
|
|
+ (NSArray *)fileTypes; // mp3, ogg, etc
|
|
+ (NSArray *)mimeTypes;
|
|
+ (float)priority;
|
|
|
|
+ (NSArray *)urlsForContainerURL:(NSURL *)url;
|
|
|
|
@optional
|
|
+ (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url;
|
|
@end
|
|
|
|
@protocol CogDecoder <NSObject>
|
|
@required
|
|
+ (NSArray *)mimeTypes;
|
|
+ (NSArray *)fileTypes; // mp3, ogg, etc
|
|
+ (NSArray *)fileTypeAssociations; // array of NSArray of NSString, where first item in array is the type name, the second is the icon name, and the rest are the extensions
|
|
+ (float)priority; // should be 0.0 ... 1.0, higher means you get selected first, should default to 1.0 unless you know a reason why any of your extensions may behave badly, ie. greedily taking over some file type extension without performing any header validation on it
|
|
|
|
// For KVO
|
|
//- (void)setProperties:(NSDictionary *)p;
|
|
- (NSDictionary *)properties;
|
|
- (NSDictionary *)metadata; // Only to be implemented for dynamic metadata, send events on change
|
|
|
|
- (AudioChunk *)readAudio;
|
|
|
|
- (BOOL)open:(id<CogSource>)source;
|
|
- (long)seek:(long)frame;
|
|
- (void)close;
|
|
|
|
@optional
|
|
- (void)dealloc;
|
|
|
|
- (BOOL)setTrack:(NSURL *)track;
|
|
|
|
// These are in NSObject, so as long as you are a subclass of that, you are ok.
|
|
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
|
|
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
|
|
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(void *)context;
|
|
|
|
- (BOOL)isSilence;
|
|
@end
|
|
|
|
@protocol CogMetadataReader <NSObject>
|
|
+ (NSArray *)fileTypes;
|
|
+ (NSArray *)mimeTypes;
|
|
+ (float)priority;
|
|
+ (NSDictionary *)metadataForURL:(NSURL *)url;
|
|
@end
|
|
|
|
@protocol CogMetadataWriter <NSObject>
|
|
//+ (NSArray *)fileTypes;
|
|
//+ (NSArray *)mimeTypes;
|
|
+ (int)putMetadataInURL:(NSURL *)url tagData:(NSDictionary *)tagData;
|
|
@end
|
|
|
|
@protocol CogPropertiesReader <NSObject>
|
|
+ (NSArray *)fileTypes;
|
|
+ (NSArray *)mimeTypes;
|
|
+ (float)priority;
|
|
+ (NSDictionary *)propertiesForSource:(id<CogSource>)source;
|
|
@end
|
|
|
|
@protocol CogPluginController <NSObject>
|
|
+ (id<CogPluginController>)sharedPluginController;
|
|
|
|
- (NSDictionary *)sources;
|
|
- (NSDictionary *)containers;
|
|
- (NSDictionary *)metadataReaders;
|
|
|
|
- (NSDictionary *)propertiesReadersByExtension;
|
|
- (NSDictionary *)propertiesReadersByMimeType;
|
|
|
|
- (NSDictionary *)decodersByExtension;
|
|
- (NSDictionary *)decodersByMimeType;
|
|
|
|
- (id<CogSource>)audioSourceForURL:(NSURL *)url;
|
|
- (NSArray *)urlsForContainerURL:(NSURL *)url;
|
|
- (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url;
|
|
- (NSDictionary *)metadataForURL:(NSURL *)url skipCue:(BOOL)skip;
|
|
- (NSDictionary *)propertiesForURL:(NSURL *)url skipCue:(BOOL)skip;
|
|
- (id<CogDecoder>)audioDecoderForSource:(id<CogSource>)source skipCue:(BOOL)skip;
|
|
|
|
- (int)putMetadataInURL:(NSURL *)url;
|
|
@end
|
|
|
|
static NSString *guess_encoding_of_string(const char *input) {
|
|
NSString *ret = @"";
|
|
NSData *stringData = [NSData dataWithBytes:input length:strlen(input)];
|
|
[NSString stringEncodingForData:stringData encodingOptions:nil convertedString:&ret usedLossyConversion:nil];
|
|
return ret;
|
|
}
|