diff --git a/.gitignore b/.gitignore index 8b65422..0e3a75f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,10 @@ build *.xcodeproj/project.xcworkspace/xcuserdata *.xcworkspace/xcuserdata SIP/opt* -SIP/pjproject* +SIP/pjproject +SIP/pjproject-* +FFmpeg/opt* +FFmpeg/ffmpeg +FFmpeg/ffmpeg-* VoiceMac/* Screenshots/* \ No newline at end of file diff --git a/About.rtf b/About.rtf index bb0ee1b..1aaccb6 100644 --- a/About.rtf +++ b/About.rtf @@ -1,17 +1,23 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf320 +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural -\f0\fs32 \cf0 Special Thanks To\ +\f0\b\fs36 \cf0 By Mr. Gecko +\b0\fs32 \ -\fs24 MegaEduX ({\field{\*\fldinst{HYPERLINK "http://megaedux.com"}}{\fldrslt megaedux.com}})\ +\fs34 At {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com/"}}{\fldrslt mrgeckosmedia.com}} +\fs32 \ +Special Thanks To\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural + +\fs24 \cf0 MegaEduX ({\field{\*\fldinst{HYPERLINK "http://megaedux.com"}}{\fldrslt megaedux.com}})\ RockStar ({\field{\*\fldinst{HYPERLINK "http://rocknthesweater.com"}}{\fldrslt rocknthesweater.com}})\ PowerOfCheese ({\field{\*\fldinst{HYPERLINK "http://xtrememachinez.com"}}{\fldrslt xtrememachinez.com}})\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural -\cf0 VoiceMac Uses {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com"}}{\fldrslt MGMSIP}} as a wrapper for {\field{\*\fldinst{HYPERLINK "http://www.pjsip.org/"}}{\fldrslt PJSIP}} which is a VOIP library, {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}} for software update, and {\field{\*\fldinst{HYPERLINK "http://growl.info/"}}{\fldrslt Growl}} for notifications.\ +\cf0 VoiceMac Uses {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com"}}{\fldrslt MGMSIP}} as a wrapper for {\field{\*\fldinst{HYPERLINK "http://www.pjsip.org/"}}{\fldrslt PJSIP}} which is a VOIP library, {\field{\*\fldinst{HYPERLINK "http://ffmpeg.org/"}}{\fldrslt FFmpeg}} for audio conversion, {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}} for software update, and {\field{\*\fldinst{HYPERLINK "http://growl.info/"}}{\fldrslt Growl}} for notifications.\ \ VoiceMac is the first Google Voice client for the Mac. Send multiple SMS Messages, send SMS Messages, receive SMS Messages, place calls, look at your call history, receive voicemail, reverse lookup a phone number, and search your contact list in one easy interface. When you receive a SMS Message or Voicemail, you get notifications view Growl and hear sounds that is customizable.\ \ diff --git a/Classes/FFmpeg/MGMConverter.h b/Classes/FFmpeg/MGMConverter.h new file mode 100644 index 0000000..8e253ab --- /dev/null +++ b/Classes/FFmpeg/MGMConverter.h @@ -0,0 +1,35 @@ +// +// MGMConverter.h +// VoiceBase +// +// Created by Mr. Gecko on 3/1/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// + +#if MGMSIPENABLED +#import + +@class MGMFFmpeg; + +@interface MGMConverter : NSObject { + MGMFFmpeg *FFmpeg; + NSString *sound; + NSString *file; + NSString *tmpPath; + NSString *completePath; + BOOL canceled; +} +- (id)initWithSound:(NSString *)theSound file:(NSString *)theFile; +@end +#endif \ No newline at end of file diff --git a/Classes/FFmpeg/MGMConverter.m b/Classes/FFmpeg/MGMConverter.m new file mode 100644 index 0000000..c94b50d --- /dev/null +++ b/Classes/FFmpeg/MGMConverter.m @@ -0,0 +1,78 @@ +// +// MGMConverter.m +// VoiceBase +// +// Created by Mr. Gecko on 3/1/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// + +#if MGMSIPENABLED +#import "MGMConverter.h" +#import "MGMFFmpeg.h" +#import +#import + +@implementation MGMConverter +- (id)initWithSound:(NSString *)theSound file:(NSString *)theFile { + if ((self = [super init])) { + sound = [theSound retain]; + file = [theFile retain]; + canceled = NO; + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self selector:@selector(soundChanged:) name:MGMTSoundChangedNotification object:sound]; + + NSString *finalPath = [[MGMUser applicationSupportPath] stringByAppendingPathComponent:MGMTCallSoundsFolder]; + NSFileManager *manager = [NSFileManager defaultManager]; + if (![manager fileExistsAtPath:finalPath]) + [manager createDirectoryAtPath:finalPath withAttributes:nil]; + finalPath = [finalPath stringByAppendingPathComponent:sound]; + tmpPath = [[[finalPath stringByAppendingPathExtension:@"tmp"] stringByAppendingPathExtension:MGMWavExt] retain]; + completePath = [[finalPath stringByAppendingPathExtension:MGMWavExt] retain]; + + NSLog(@"File: %@\nTMP: %@\nComplete: %@", file, tmpPath, completePath); + + FFmpeg = [[MGMFFmpeg FFmpegWithDelegate:self] retain]; + [FFmpeg setInputFile:file]; + [FFmpeg setOptions:[NSArray arrayWithObjects:@"-ab", @"16000", @"-ac", @"1", nil]]; + [FFmpeg setOutputFile:tmpPath]; + [FFmpeg startConverting]; + } + return self; +} +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [FFmpeg release]; + [sound release]; + [file release]; + [tmpPath release]; + [completePath release]; + [super dealloc]; +} + +- (void)soundChanged:(NSNotification *)theNotification { + canceled = YES; + [FFmpeg stopConverting]; +} + +- (void)conversionFinished { + NSLog(@"Done"); + NSFileManager *manager = [NSFileManager defaultManager]; + if (!canceled) { + [manager removeItemAtPath:completePath]; + [manager moveItemAtPath:tmpPath toPath:completePath]; + } + [self release]; +} +@end +#endif \ No newline at end of file diff --git a/Classes/FFmpeg/MGMFFmpeg.h b/Classes/FFmpeg/MGMFFmpeg.h new file mode 100644 index 0000000..03503da --- /dev/null +++ b/Classes/FFmpeg/MGMFFmpeg.h @@ -0,0 +1,365 @@ +// +// MGMFFmpeg.h +// VoiceBase +// +// Created by Mr. Gecko on 2/25/11. +// MGMFFmpeg is a port of ffmpeg.c to Objective-C by Mr. Gecko's Media +// (James Coleman) FFmpeg can be found at http://ffmpeg.org/ +// FFmpeg Copyright (c) 2000-2003 Fabrice Bellard +// +// MGMFFmpeg 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. +// +// MGMFFmpeg 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 MGMFFmpeg; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// + +#if MGMSIPENABLED +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#if HAVE_TERMIOS_H +#include +#include +#include +#include +#elif HAVE_CONIO_H +#include +#endif +#include + +@protocol MGMFFmpegDelegate +- (void)receivedError:(NSError *)theError; +- (void)updateStatus:(double)thePercentDone estimatedTime:(double)theEstimatedTime currentFrame:(int)theFrame fps:(int)theFPS quality:(double)theQuality size:(int64_t)theSize bitrate:(double)theBitrate time:(double)theTime video:(BOOL)isVideo; +- (void)conversionFinished; +@end + +typedef struct { + const char *name; + int flags; +#define HAS_ARG 0x0001 +#define OPT_BOOL 0x0002 +#define OPT_EXPERT 0x0004 +#define OPT_STRING 0x0008 +#define OPT_VIDEO 0x0010 +#define OPT_AUDIO 0x0020 +#define OPT_GRAB 0x0040 +#define OPT_INT 0x0080 +#define OPT_FLOAT 0x0100 +#define OPT_SUBTITLE 0x0200 +#define OPT_FUNC2 0x0400 +#define OPT_INT64 0x0800 +#define OPT_EXIT 0x1000 + union { + SEL func_arg; + int *int_arg; + char **str_arg; + float *float_arg; + int64_t *int64_arg; + } u; + const char *help; + const char *argname; +} OptionDef; + +typedef struct AVStreamMap { + int file_index; + int stream_index; + int sync_file_index; + int sync_stream_index; +} AVStreamMap; + +typedef struct AVMetaDataMap { + int out_file; + int in_file; +} AVMetaDataMap; + +#define MAX_FILES 100 + +#define QSCALE_NONE -99999 + +#define DEFAULT_PASS_LOGFILENAME_PREFIX "ffmpeg2pass" + +struct AVInputStream; + +typedef struct AVOutputStream { + int file_index; /* file index */ + int index; /* stream index in the output file */ + int source_index; /* AVInputStream index */ + AVStream *st; /* stream in the output file */ + int encoding_needed; /* true if encoding needed for this stream */ + int frame_number; + /* input pts and corresponding output pts + for A/V sync */ + //double sync_ipts; /* dts from the AVPacket of the demuxer in second units */ + struct AVInputStream *sync_ist; /* input stream to sync against */ + int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ //FIXME look at frame_number + /* video only */ + int video_resample; + AVFrame pict_tmp; /* temporary image for resampling */ + struct SwsContext *img_resample_ctx; /* for image resampling */ + int resample_height; + int resample_width; + int resample_pix_fmt; + + /* full frame size of first frame */ + int original_height; + int original_width; + + /* cropping area sizes */ + int video_crop; + int topBand; + int bottomBand; + int leftBand; + int rightBand; + + /* cropping area of first frame */ + int original_topBand; + int original_bottomBand; + int original_leftBand; + int original_rightBand; + + /* padding area sizes */ + int video_pad; + int padtop; + int padbottom; + int padleft; + int padright; + + /* audio only */ + int audio_resample; + ReSampleContext *resample; /* for audio resampling */ + int reformat_pair; + AVAudioConvert *reformat_ctx; + AVFifoBuffer *fifo; /* for compression: one audio fifo per codec */ + FILE *logfile; +} AVOutputStream; + +typedef struct AVInputStream { + int file_index; + int index; + AVStream *st; + int discard; /* true if stream data should be discarded */ + int decoding_needed; /* true if the packets must be decoded in 'raw_fifo' */ + int64_t sample_index; /* current sample */ + + int64_t start; /* time when read started */ + int64_t next_pts; /* synthetic pts for cases where pkt.pts + is not defined */ + int64_t pts; /* current pts */ + int is_start; /* is 1 at the start and after a discontinuity */ + int showed_multi_packet_warning; + int is_past_recording_time; +} AVInputStream; + +typedef struct AVInputFile { + int eof_reached; /* true if eof reached */ + int ist_index; /* index of first stream in ist_table */ + int buffer_size; /* current total buffer size */ + int nb_streams; /* nb streams we are aware of */ +} AVInputFile; + +@interface MGMFFmpeg : NSObject { + id delegate; + + char **opt_names; + int opt_name_count; + AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB]; + AVFormatContext *avformat_opts; + struct SwsContext *sws_opts; + + char *last_asked_format; + AVFormatContext *input_files[MAX_FILES]; + int64_t input_files_ts_offset[MAX_FILES]; + double input_files_ts_scale[MAX_FILES][MAX_STREAMS]; + AVCodec *input_codecs[MAX_FILES*MAX_STREAMS]; + int nb_input_files; + int nb_icodecs; + + AVFormatContext *output_files[MAX_FILES]; + AVCodec *output_codecs[MAX_FILES*MAX_STREAMS]; + int nb_output_files; + int nb_ocodecs; + + AVStreamMap stream_maps[MAX_FILES*MAX_STREAMS]; + int nb_stream_maps; + + AVMetaDataMap meta_data_maps[MAX_FILES]; + int nb_meta_data_maps; + + int frame_width; + int frame_height; + float frame_aspect_ratio; + enum PixelFormat frame_pix_fmt; + enum SampleFormat audio_sample_fmt; + int frame_padtop; + int frame_padbottom; + int frame_padleft; + int frame_padright; + int padcolor[3]; /* default to black */ + int frame_topBand; + int frame_bottomBand; + int frame_leftBand; + int frame_rightBand; + int max_frames[4]; + AVRational frame_rate; + float video_qscale; + uint16_t *intra_matrix; + uint16_t *inter_matrix; + char *video_rc_override_string; + int video_disable; + int video_discard; + char *video_codec_name; + int video_codec_tag; + char *video_language; + int same_quality; + int do_deinterlace; + int top_field_first; + int me_threshold; + int intra_dc_precision; + int loop_input; + int loop_output; + int qp_hist; + + int intra_only; + int audio_sample_rate; + int64_t channel_layout; + + float audio_qscale; + int audio_disable; + int audio_channels; + char *audio_codec_name; + int audio_codec_tag; + char *audio_language; + + int subtitle_disable; + char *subtitle_codec_name; + char *subtitle_language; + int subtitle_codec_tag; + + float mux_preload; + float mux_max_delay; + + int64_t recording_time; + int64_t start_time; + int64_t rec_timestamp; + int64_t input_ts_offset; + int metadata_count; + AVMetadataTag *metadata; + int do_benchmark; + int do_hex_dump; + int do_pkt_dump; + int do_psnr; + int do_pass; + char *pass_logfilename_prefix; + int audio_stream_copy; + int video_stream_copy; + int subtitle_stream_copy; + int video_sync_method; + int audio_sync_method; + float audio_drift_threshold; + int copy_ts; + int opt_shortest; + int video_global_header; + char *vstats_filename; + FILE *vstats_file; + int opt_programid; + int copy_initial_nonkeyframes; + + int rate_emu; + + int video_channel; + char *video_standard; + + int audio_volume; + + int exit_on_error; + int verbose; + int thread_count; + int64_t video_size; + int64_t audio_size; + int64_t extra_size; + int nb_frames_dup; + int nb_frames_drop; + int input_sync; + uint64_t limit_filesize; + int force_fps; + + int pgmyuv_compatibility_hack; + float dts_delta_threshold; + + unsigned int sws_flags; + + int64_t timer_start; + + uint8_t *audio_buf; + uint8_t *audio_out; + int allocated_audio_out_size, allocated_audio_buf_size; + + short *samples; + unsigned int samples_size; + + AVBitStreamFilterContext *video_bitstream_filters; + AVBitStreamFilterContext *audio_bitstream_filters; + AVBitStreamFilterContext *subtitle_bitstream_filters; + AVBitStreamFilterContext *bitstream_filters[MAX_FILES][MAX_STREAMS]; + +#if HAVE_TERMIOS_H + /* init terminal so that we can grab keys */ + struct termios oldtty; +#endif + + int bit_buffer_size; + uint8_t *bit_buffer; + + int64_t last_time; + + int qp_histogram[52]; + + uint8_t *subtitle_out; + + uint8_t *input_tmp; + + double previousTime; + + BOOL stopConverting; + BOOL stoppedByQuit; + BOOL isConverting; + + OptionDef options[102]; +} ++ (id)FFmpeg; ++ (id)FFmpegWithDelegate:(id)theDelegate; +- (id)initWithDelegate:(id)theDelegate; + +- (void)setDelegate:(id)theDelegate; +- (id)delegate; + +- (BOOL)isConverting; +- (void)stopConverting; + +- (void)setOptions:(NSArray *)theOptions; +- (void)setOutputFile:(NSString *)theFile; +- (void)setOutputHandle:(NSFileHandle *)theHandle; +- (void)setInputFile:(NSString *)theFile; +- (void)setInputHandle:(NSFileHandle *)theHandle; +- (void)startConverting; +@end +#endif \ No newline at end of file diff --git a/Classes/FFmpeg/MGMFFmpeg.m b/Classes/FFmpeg/MGMFFmpeg.m new file mode 100644 index 0000000..478c5e7 --- /dev/null +++ b/Classes/FFmpeg/MGMFFmpeg.m @@ -0,0 +1,4017 @@ +// +// MGMFFmpeg.m +// VoiceBase +// +// Created by Mr. Gecko on 2/25/11. +// MGMFFmpeg is a port of ffmpeg.c to Objective-C by Mr. Gecko's Media +// (James Coleman) FFmpeg can be found at http://ffmpeg.org/ +// FFmpeg Copyright (c) 2000-2003 Fabrice Bellard +// +// MGMFFmpeg 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. +// +// MGMFFmpeg 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 MGMFFmpeg; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// + +#if MGMSIPENABLED +#import "MGMFFmpeg.h" + +NSString * const MGMFFmpegErrorDomain = @"com.MrGeckosMedia.FFmpeg"; + +static BOOL FFmpegRegistered = NO; + +@interface MGMFFmpeg (MGMPrivate) +- (void)parse_options:(int)argc argv:(char **)argv parseSelector:(SEL)parseArgument; +- (void)opt_output_file:(const char *)filename; +- (void)opt_input_file:(const char *)filename; +- (int)read_ffserver_streams:(AVFormatContext *)s file:(const char *)filename; +- (void)choose_sample_fmt:(AVStream *)st codec:(AVCodec *)codec; +- (void)choose_pixel_fmt:(AVStream *)st codec:(AVCodec *)codec; +- (void)new_video_stream:(AVFormatContext *)oc; +- (void)new_audio_stream:(AVFormatContext *)oc; +- (void)new_subtitle_stream:(AVFormatContext *)oc; +- (void)opt_video_codec:(const char *)arg; +- (void)opt_audio_codec:(const char *)arg; +- (void)opt_format:(const char *)arg; +- (void)opt_frame_size:(const char *)arg; +- (int)opt_frame_rate:(const char *)opt arg:(const char *)arg; +- (int)opt_default:(const char *)opt arg:(const char *)arg; +- (void)opt_frame_pix_fmt:(const char *)arg; +- (void)set_context_opts:(void *)ctx options:(void *)opts_ctx flags:(int)flags; +- (void)check_audio_video_sub_inputs:(int *)has_video_ptr audio:(int *)has_audio_ptr subs:(int *)has_subtitle_ptr; +- (enum CodecID)find_codec_or_die:(const char *)name type:(int)type encoder:(int)encoder strict:(int)strict; +- (int64_t)parse_time_or_die:(const char *)context time:(const char *)timestr duration:(int)is_duration; +- (double)parse_number_or_die:(const char *)context number:(const char *)numstr type:(int)type min:(double)min max:(double)max; +- (void)parse_matrix_coeffs:(uint16_t *)dest matrix:(const char *)str; +- (void)opt_codec:(int *)pstream_copy name:(char **)pcodec_name type:(int)codec_type arg:(const char *)arg; +@end + +@implementation MGMFFmpeg ++ (id)FFmpeg { + return [[[self alloc] init] autorelease]; +} +- (id)init { + if ((self = [super init])) { + last_asked_format = NULL; + nb_input_files = 0; + nb_output_files = 0; + + frame_width = 0; + frame_height = 0; + frame_aspect_ratio = 0; + frame_pix_fmt = PIX_FMT_NONE; + audio_sample_fmt = SAMPLE_FMT_NONE; + frame_padtop = 0; + frame_padbottom = 0; + frame_padleft = 0; + frame_padright = 0; + padcolor[0] = 16; + padcolor[1] = 128; + padcolor[2] = 128; + frame_topBand = 0; + frame_bottomBand = 0; + frame_leftBand = 0; + frame_rightBand = 0; + max_frames[0] = INT_MAX; + max_frames[1] = INT_MAX; + max_frames[2] = INT_MAX; + max_frames[3] = INT_MAX; + video_qscale = 0; + intra_matrix = NULL; + inter_matrix = NULL; + video_rc_override_string = NULL; + video_disable = 0; + video_discard = 0; + video_codec_name = NULL; + video_codec_tag = 0; + video_language = NULL; + same_quality = 0; + do_deinterlace = 0; + top_field_first = -1; + me_threshold = 0; + intra_dc_precision = 8; + loop_input = 0; + loop_output = AVFMT_NOOUTPUTLOOP; + qp_hist = 0; + + intra_only = 0; + audio_sample_rate = 44100; + channel_layout = 0; + + audio_qscale = QSCALE_NONE; + audio_disable = 0; + audio_channels = 1; + audio_codec_name = NULL; + audio_codec_tag = 0; + audio_language = NULL; + + subtitle_disable = 0; + subtitle_codec_name = NULL; + subtitle_language = NULL; + subtitle_codec_tag = 0; + + mux_preload = 0.5; + mux_max_delay = 0.7; + + recording_time = INT64_MAX; + start_time = 0; + rec_timestamp = 0; + input_ts_offset = 0; + do_benchmark = 0; + do_hex_dump = 0; + do_pkt_dump = 0; + do_psnr = 0; + do_pass = 0; + pass_logfilename_prefix = NULL; + audio_stream_copy = 0; + video_stream_copy = 0; + subtitle_stream_copy = 0; + video_sync_method = -1; + audio_sync_method = 0; + audio_drift_threshold = 0.1; + copy_ts = 0; + opt_shortest = 0; + video_global_header = 0; + opt_programid = 0; + copy_initial_nonkeyframes = 0; + + rate_emu = 0; + + video_channel = 0; + + audio_volume = 256; + + exit_on_error = 0; + verbose = 1; + thread_count = 1; + video_size = 0; + audio_size = 0; + extra_size = 0; + nb_frames_dup = 0; + nb_frames_drop = 0; + limit_filesize = 0; + force_fps = 0; + + pgmyuv_compatibility_hack = 0; + dts_delta_threshold = 10; + sws_flags = SWS_BICUBIC; + + samples_size = 0; + + video_bitstream_filters = NULL; + audio_bitstream_filters = NULL; + subtitle_bitstream_filters = NULL; + + bit_buffer_size = 1024*256; + bit_buffer = NULL; + + last_time = -1; + + subtitle_out = NULL; + + input_tmp = NULL; + + stopConverting = NO; + stoppedByQuit = NO; + isConverting = NO; + + options[0] = (OptionDef){ "f", HAS_ARG, {@selector(opt_format:)}, "force format", "fmt" }; + options[1] = (OptionDef){ "i", HAS_ARG, {@selector(opt_input_file:)}, "input file name", "filename" }; + options[2] = (OptionDef){ "map", HAS_ARG | OPT_EXPERT, {@selector(opt_map:)}, "set input stream mapping", "file:stream[:syncfile:syncstream]" }; + options[3] = (OptionDef){ "map_meta_data", HAS_ARG | OPT_EXPERT, {@selector(opt_map_meta_data:)}, "set meta data information of outfile from infile", "outfile:infile" }; + options[4] = (OptionDef){ "t", OPT_FUNC2 | HAS_ARG, {@selector(opt_recording_time:arg:)}, "record or transcode \"duration\" seconds of audio/video", "duration" }; + options[5] = (OptionDef){ "fs", HAS_ARG | OPT_INT64, {(void*)&limit_filesize}, "set the limit file size in bytes", "limit_size" }; + options[6] = (OptionDef){ "ss", OPT_FUNC2 | HAS_ARG, {@selector(opt_start_time:arg:)}, "set the start time offset", "time_off" }; + options[7] = (OptionDef){ "itsoffset", OPT_FUNC2 | HAS_ARG, {@selector(opt_input_ts_offset:arg:)}, "set the input ts offset", "time_off" }; + options[8] = (OptionDef){ "itsscale", HAS_ARG, {@selector(opt_input_ts_scale:)}, "set the input ts scale", "stream:scale" }; + options[9] = (OptionDef){ "timestamp", OPT_FUNC2 | HAS_ARG, {@selector(opt_rec_timestamp:arg:)}, "set the timestamp ('now' to set the current time)", "time" }; + options[10] = (OptionDef){ "metadata", OPT_FUNC2 | HAS_ARG, {@selector(opt_metadata:arg:)}, "add metadata", "string=string" }; + options[11] = (OptionDef){ "dframes", OPT_INT | HAS_ARG, {(void*)&max_frames[AVMEDIA_TYPE_DATA]}, "set the number of data frames to record", "number" }; + options[12] = (OptionDef){ "benchmark", OPT_BOOL | OPT_EXPERT, {(void*)&do_benchmark}, "add timings for benchmarking" }; + options[13] = (OptionDef){ "timelimit", OPT_FUNC2 | HAS_ARG, {@selector(opt_timelimit:arg:)}, "set max runtime in seconds", "limit" }; + options[14] = (OptionDef){ "dump", OPT_BOOL | OPT_EXPERT, {(void*)&do_pkt_dump}, "dump each input packet" }; + options[15] = (OptionDef){ "hex", OPT_BOOL | OPT_EXPERT, {(void*)&do_hex_dump}, "when dumping packets, also dump the payload" }; + options[16] = (OptionDef){ "re", OPT_BOOL | OPT_EXPERT, {(void*)&rate_emu}, "read input at native frame rate", "" }; + options[17] = (OptionDef){ "loop_input", OPT_BOOL | OPT_EXPERT, {(void*)&loop_input}, "loop (current only works with images)" }; + options[18] = (OptionDef){ "loop_output", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&loop_output}, "number of times to loop output in formats that support looping (0 loops forever)", "" }; + options[19] = (OptionDef){ "v", HAS_ARG | OPT_FUNC2, {@selector(opt_verbose:arg:)}, "set ffmpeg verbosity level", "number" }; + options[20] = (OptionDef){ "target", HAS_ARG, {@selector(opt_target:)}, "specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\", \"dv50\", \"pal-vcd\", \"ntsc-svcd\", ...)", "type" }; + options[21] = (OptionDef){ "threads", OPT_FUNC2 | HAS_ARG | OPT_EXPERT, {@selector(opt_thread_count:arg:)}, "thread count", "count" }; + options[22] = (OptionDef){ "vsync", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&video_sync_method}, "video sync method", "" }; + options[23] = (OptionDef){ "async", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&audio_sync_method}, "audio sync method", "" }; + options[24] = (OptionDef){ "adrift_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, {(void*)&audio_drift_threshold}, "audio drift threshold", "threshold" }; + options[25] = (OptionDef){ "vglobal", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&video_global_header}, "video global header storage type", "" }; + options[26] = (OptionDef){ "copyts", OPT_BOOL | OPT_EXPERT, {(void*)©_ts}, "copy timestamps" }; + options[27] = (OptionDef){ "shortest", OPT_BOOL | OPT_EXPERT, {(void*)&opt_shortest}, "finish encoding within shortest input" }; + options[28] = (OptionDef){ "dts_delta_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, {(void*)&dts_delta_threshold}, "timestamp discontinuity delta threshold", "threshold" }; + options[29] = (OptionDef){ "programid", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&opt_programid}, "desired program number", "" }; + options[30] = (OptionDef){ "xerror", OPT_BOOL, {(void*)&exit_on_error}, "exit on error", "error" }; + options[31] = (OptionDef){ "copyinkf", OPT_BOOL | OPT_EXPERT, {(void*)©_initial_nonkeyframes}, "copy initial non-keyframes" }; + + /* video options */ + options[32] = (OptionDef){ "b", OPT_FUNC2 | HAS_ARG | OPT_VIDEO, {@selector(opt_bitrate:arg:)}, "set bitrate (in bits/s)", "bitrate" }; + options[33] = (OptionDef){ "vb", OPT_FUNC2 | HAS_ARG | OPT_VIDEO, {@selector(opt_bitrate:arg:)}, "set bitrate (in bits/s)", "bitrate" }; + options[34] = (OptionDef){ "vframes", OPT_INT | HAS_ARG | OPT_VIDEO, {(void*)&max_frames[AVMEDIA_TYPE_VIDEO]}, "set the number of video frames to record", "number" }; + options[35] = (OptionDef){ "r", OPT_FUNC2 | HAS_ARG | OPT_VIDEO, {@selector(opt_frame_rate:arg:)}, "set frame rate (Hz value, fraction or abbreviation)", "rate" }; + options[36] = (OptionDef){ "s", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_size:)}, "set frame size (WxH or abbreviation)", "size" }; + options[37] = (OptionDef){ "aspect", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_aspect_ratio:)}, "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" }; + options[38] = (OptionDef){ "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_frame_pix_fmt:)}, "set pixel format, 'list' as argument shows all the pixel formats supported", "format" }; + options[39] = (OptionDef){ "croptop", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_crop_top:)}, "set top crop band size (in pixels)", "size" }; + options[40] = (OptionDef){ "cropbottom", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_crop_bottom:)}, "set bottom crop band size (in pixels)", "size" }; + options[41] = (OptionDef){ "cropleft", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_crop_left:)}, "set left crop band size (in pixels)", "size" }; + options[42] = (OptionDef){ "cropright", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_crop_right:)}, "set right crop band size (in pixels)", "size" }; + options[43] = (OptionDef){ "padtop", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_pad_top:)}, "set top pad band size (in pixels)", "size" }; + options[44] = (OptionDef){ "padbottom", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_pad_bottom:)}, "set bottom pad band size (in pixels)", "size" }; + options[45] = (OptionDef){ "padleft", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_pad_left:)}, "set left pad band size (in pixels)", "size" }; + options[46] = (OptionDef){ "padright", HAS_ARG | OPT_VIDEO, {@selector(opt_frame_pad_right:)}, "set right pad band size (in pixels)", "size" }; + options[47] = (OptionDef){ "padcolor", HAS_ARG | OPT_VIDEO, {@selector(opt_pad_color:)}, "set color of pad bands (Hex 000000 thru FFFFFF)", "color" }; + options[48] = (OptionDef){ "intra", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&intra_only}, "use only intra frames"}; + options[49] = (OptionDef){ "vn", OPT_BOOL | OPT_VIDEO, {(void*)&video_disable}, "disable video" }; + options[50] = (OptionDef){ "vdt", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)&video_discard}, "discard threshold", "n" }; + options[51] = (OptionDef){ "qscale", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_qscale:)}, "use fixed video quantizer scale (VBR)", "q" }; + options[52] = (OptionDef){ "rc_override", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_video_rc_override_string:)}, "rate control override for specific intervals", "override" }; + options[53] = (OptionDef){ "vcodec", HAS_ARG | OPT_VIDEO, {@selector(opt_video_codec:)}, "force video codec ('copy' to copy stream)", "codec" }; + options[54] = (OptionDef){ "me_threshold", HAS_ARG | OPT_FUNC2 | OPT_EXPERT | OPT_VIDEO, {@selector(opt_me_threshold:arg:)}, "motion estimaton threshold", "threshold" }; + options[55] = (OptionDef){ "sameq", OPT_BOOL | OPT_VIDEO, {(void*)&same_quality}, "use same video quality as source (implies VBR)" }; + options[56] = (OptionDef){ "pass", HAS_ARG | OPT_VIDEO, {@selector(opt_pass:)}, "select the pass number (1 or 2)", "n" }; + options[57] = (OptionDef){ "passlogfile", HAS_ARG | OPT_STRING | OPT_VIDEO, {(void*)&pass_logfilename_prefix}, "select two pass log file name prefix", "prefix" }; + options[58] = (OptionDef){ "deinterlace", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_deinterlace}, "deinterlace pictures" }; + options[59] = (OptionDef){ "psnr", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_psnr}, "calculate PSNR of compressed frames" }; + options[60] = (OptionDef){ "vstats", OPT_EXPERT | OPT_VIDEO, {@selector(opt_vstats)}, "dump video coding statistics to file" }; + options[61] = (OptionDef){ "vstats_file", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_vstats_file:)}, "dump video coding statistics to file", "file" }; + options[62] = (OptionDef){ "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_intra_matrix:)}, "specify intra matrix coeffs", "matrix" }; + options[63] = (OptionDef){ "inter_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_inter_matrix:)}, "specify inter matrix coeffs", "matrix" }; + options[64] = (OptionDef){ "top", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_top_field_first:)}, "top=1/bottom=0/auto=-1 field first", "" }; + options[65] = (OptionDef){ "dc", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)&intra_dc_precision}, "intra_dc_precision", "precision" }; + options[66] = (OptionDef){ "vtag", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {@selector(opt_video_tag:)}, "force video tag/fourcc", "fourcc/tag" }; + options[67] = (OptionDef){ "newvideo", OPT_VIDEO, {@selector(opt_new_video_stream)}, "add a new video stream to the current output stream" }; + options[68] = (OptionDef){ "vlang", HAS_ARG | OPT_STRING | OPT_VIDEO, {(void *)&video_language}, "set the ISO 639 language code (3 letters) of the current video stream" , "code" }; + options[69] = (OptionDef){ "qphist", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, { (void *)&qp_hist }, "show QP histogram" }; + options[70] = (OptionDef){ "force_fps", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&force_fps}, "force the selected framerate, disable the best supported framerate selection" }; + + /* audio options */ + options[71] = (OptionDef){ "ab", OPT_FUNC2 | HAS_ARG | OPT_AUDIO, {@selector(opt_bitrate:arg:)}, "set bitrate (in bits/s)", "bitrate" }; + options[72] = (OptionDef){ "aframes", OPT_INT | HAS_ARG | OPT_AUDIO, {(void*)&max_frames[AVMEDIA_TYPE_AUDIO]}, "set the number of audio frames to record", "number" }; + options[73] = (OptionDef){ "aq", OPT_FLOAT | HAS_ARG | OPT_AUDIO, {(void*)&audio_qscale}, "set audio quality (codec-specific)", "quality", }; + options[74] = (OptionDef){ "ar", HAS_ARG | OPT_FUNC2 | OPT_AUDIO, {@selector(opt_audio_rate:arg:)}, "set audio sampling rate (in Hz)", "rate" }; + options[75] = (OptionDef){ "ac", HAS_ARG | OPT_FUNC2 | OPT_AUDIO, {@selector(opt_audio_channels:arg:)}, "set number of audio channels", "channels" }; + options[76] = (OptionDef){ "an", OPT_BOOL | OPT_AUDIO, {(void*)&audio_disable}, "disable audio" }; + options[77] = (OptionDef){ "acodec", HAS_ARG | OPT_AUDIO, {@selector(opt_audio_codec:)}, "force audio codec ('copy' to copy stream)", "codec" }; + options[78] = (OptionDef){ "atag", HAS_ARG | OPT_EXPERT | OPT_AUDIO, {@selector(opt_audio_tag:)}, "force audio tag/fourcc", "fourcc/tag" }; + options[79] = (OptionDef){ "vol", OPT_INT | HAS_ARG | OPT_AUDIO, {(void*)&audio_volume}, "change audio volume (256=normal)" , "volume" }; + options[80] = (OptionDef){ "newaudio", OPT_AUDIO, {@selector(opt_new_audio_stream)}, "add a new audio stream to the current output stream" }; + options[81] = (OptionDef){ "alang", HAS_ARG | OPT_STRING | OPT_AUDIO, {(void *)&audio_language}, "set the ISO 639 language code (3 letters) of the current audio stream" , "code" }; + options[82] = (OptionDef){ "sample_fmt", HAS_ARG | OPT_EXPERT | OPT_AUDIO, {@selector(opt_audio_sample_fmt:)}, "set sample format, 'list' as argument shows all the sample formats supported", "format" }; + + /* subtitle options */ + options[83] = (OptionDef){ "sn", OPT_BOOL | OPT_SUBTITLE, {(void*)&subtitle_disable}, "disable subtitle" }; + options[84] = (OptionDef){ "scodec", HAS_ARG | OPT_SUBTITLE, {@selector(opt_subtitle_codec:)}, "force subtitle codec ('copy' to copy stream)", "codec" }; + options[85] = (OptionDef){ "newsubtitle", OPT_SUBTITLE, {@selector(opt_new_subtitle_stream)}, "add a new subtitle stream to the current output stream" }; + options[86] = (OptionDef){ "slang", HAS_ARG | OPT_STRING | OPT_SUBTITLE, {(void *)&subtitle_language}, "set the ISO 639 language code (3 letters) of the current subtitle stream" , "code" }; + options[87] = (OptionDef){ "stag", HAS_ARG | OPT_EXPERT | OPT_SUBTITLE, {@selector(opt_subtitle_tag:)}, "force subtitle tag/fourcc", "fourcc/tag" }; + + /* grab options */ + options[88] = (OptionDef){ "vc", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_GRAB, {@selector(opt_video_channel:)}, "set video grab channel (DV1394 only)", "channel" }; + options[89] = (OptionDef){ "tvstd", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_GRAB, {@selector(opt_video_standard:)}, "set television standard (NTSC, PAL (SECAM))", "standard" }; + options[90] = (OptionDef){ "isync", OPT_BOOL | OPT_EXPERT | OPT_GRAB, {(void*)&input_sync}, "sync read on input", "" }; + + /* muxer options */ + options[91] = (OptionDef){ "muxdelay", OPT_FLOAT | HAS_ARG | OPT_EXPERT, {(void*)&mux_max_delay}, "set the maximum demux-decode delay", "seconds" }; + options[92] = (OptionDef){ "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT, {(void*)&mux_preload}, "set the initial demux-decode delay", "seconds" }; + + options[93] = (OptionDef){ "absf", OPT_FUNC2 | HAS_ARG | OPT_AUDIO | OPT_EXPERT, {@selector(opt_bsf:arg:)}, "", "bitstream_filter" }; + options[94] = (OptionDef){ "vbsf", OPT_FUNC2 | HAS_ARG | OPT_VIDEO | OPT_EXPERT, {@selector(opt_bsf:arg:)}, "", "bitstream_filter" }; + options[95] = (OptionDef){ "sbsf", OPT_FUNC2 | HAS_ARG | OPT_SUBTITLE | OPT_EXPERT, {@selector(opt_bsf:arg:)}, "", "bitstream_filter" }; + + options[96] = (OptionDef){ "apre", OPT_FUNC2 | HAS_ARG | OPT_AUDIO | OPT_EXPERT, {@selector(opt_preset:arg:)}, "set the audio options to the indicated preset", "preset" }; + options[97] = (OptionDef){ "vpre", OPT_FUNC2 | HAS_ARG | OPT_VIDEO | OPT_EXPERT, {@selector(opt_preset:arg:)}, "set the video options to the indicated preset", "preset" }; + options[98] = (OptionDef){ "spre", OPT_FUNC2 | HAS_ARG | OPT_SUBTITLE | OPT_EXPERT, {@selector(opt_preset:arg:)}, "set the subtitle options to the indicated preset", "preset" }; + options[99] = (OptionDef){ "fpre", OPT_FUNC2 | HAS_ARG | OPT_EXPERT, {@selector(opt_preset:arg:)}, "set options from indicated preset file", "filename" }; + + options[100] = (OptionDef){ "default", OPT_FUNC2 | HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {@selector(opt_default:arg:)}, "generic catch all option", "" }; + options[101] = (OptionDef){ NULL, }; + + if (!FFmpegRegistered) { + FFmpegRegistered = YES; + NSLog(@"Registered"); + avcodec_register_all(); + av_register_all(); + } + + for(int i=0; ioformat->flags & AVFMT_NOFILE) && s->pb) + url_fclose(s->pb); + for(j=0;jnb_streams;j++) { + av_metadata_free(&s->streams[j]->metadata); + av_free(s->streams[j]->codec); + av_free(s->streams[j]); + } + for(j=0;jnb_programs;j++) { + av_metadata_free(&s->programs[j]->metadata); + } + for(j=0;jnb_chapters;j++) { + av_metadata_free(&s->chapters[j]->metadata); + } + av_metadata_free(&s->metadata); + av_free(s); + } + for(int i=0;i)delegate { + return delegate; +} + +- (BOOL)isConverting { + return isConverting; +} +- (void)stopConverting { + if (isConverting) + stopConverting = YES; +} + +- (void)sendErrorCode:(int)theCode message:(NSString *)format, ... { + va_list ap; + va_start(ap, format); + NSString *message = [[[NSString alloc] initWithFormat:format arguments:ap] autorelease]; + va_end(ap); + NSError *error = [NSError errorWithDomain:MGMFFmpegErrorDomain code:theCode userInfo:[NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey]]; + if ([delegate respondsToSelector:@selector(receivedError:)]) + [delegate receivedError:error]; + else + NSLog(@"%@", error); +} +- (void)sendErrorCode:(int)theCode reference:(const char *)theReference message:(int)theError { + char errbuf[128]; + const char *errbuf_ptr = errbuf; + + if (av_strerror(theError, errbuf, sizeof(errbuf)) < 0) + errbuf_ptr = strerror(AVUNERROR(theError)); + [self sendErrorCode:theCode message:@"%s: %s", theReference, errbuf_ptr]; +} + +- (void)setOptions:(NSArray *)theOptions { + if (isConverting) + return; + char **array = malloc(sizeof(char *)*([theOptions count]+1)); + array[0] = "ffmpeg"; + for (int i=0; i<[theOptions count]; i++) { + array[i+1] = (char *)[[theOptions objectAtIndex:i] UTF8String]; + } + [self parse_options:(int)[theOptions count]+1 argv:array parseSelector:@selector(opt_output_file:)]; + free(array); +} +- (void)setOutputFile:(NSString *)theFile { + if (isConverting) + return; + [self opt_output_file:[theFile UTF8String]]; +} +- (void)setOutputHandle:(NSFileHandle *)theHandle { + NSString *file = [NSString stringWithFormat:@"pipe:%d", [theHandle fileDescriptor]]; + [self setOutputFile:file]; +} +- (void)setInputFile:(NSString *)theFile { + if (isConverting) + return; + [self opt_input_file:[theFile UTF8String]]; +} +- (void)setInputHandle:(NSFileHandle *)theHandle { + NSString *file = [NSString stringWithFormat:@"pipe:%d", [theHandle fileDescriptor]]; + [self setInputFile:file]; +} + +- (OptionDef *)find_option:(const OptionDef *)po name:(const char *)name { + while (po->name != NULL) { + if (!strcmp(name, po->name)) + break; + po++; + } + return (OptionDef *)po; +} +- (void)parse_options:(int)argc argv:(char **)argv parseSelector:(SEL)parseArgument { + const char *opt, *arg; + int optindex, handleoptions=1; + const OptionDef *po; + + /* parse options */ + optindex = 1; + while (optindex < argc) { + opt = argv[optindex++]; + if (handleoptions && opt[0] == '-' && opt[1] != '\0') { + int bool_val = 1; + if (opt[1] == '-' && opt[2] == '\0') { + handleoptions = 0; + continue; + } + opt++; + po = [self find_option:(const OptionDef *)&options name:opt]; + if (!po->name && opt[0] == 'n' && opt[1] == 'o') { + /* handle 'no' bool option */ + po = [self find_option:(const OptionDef *)&options name:opt + 2]; + if (!(po->name && (po->flags & OPT_BOOL))) + goto unknown_opt; + bool_val = 0; + } + if (!po->name) + po = [self find_option:(const OptionDef *)&options name:"default"]; + if (!po->name) { + unknown_opt: + [self sendErrorCode:86 message:@"%s: unrecognized option '%s'", argv[0], opt]; + return; + } + arg = NULL; + if (po->flags & HAS_ARG) { + arg = argv[optindex++]; + if (!arg) { + [self sendErrorCode:87 message:@"%s: missing argument for option '%s'", argv[0], opt]; + return; + } + } + if (po->flags & OPT_STRING) { + char *str; + str = av_strdup(arg); + *po->u.str_arg = str; + } else if (po->flags & OPT_BOOL) { + *po->u.int_arg = bool_val; + } else if (po->flags & OPT_INT) { + *po->u.int_arg = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:INT_MIN max:INT_MAX]; + } else if (po->flags & OPT_INT64) { + *po->u.int64_arg = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:INT64_MIN max:INT64_MAX]; + } else if (po->flags & OPT_FLOAT) { + *po->u.float_arg = [self parse_number_or_die:opt number:arg type:OPT_FLOAT min:-1.0/0.0 max:1.0/0.0]; + } else if (po->flags & OPT_FUNC2) { + if (po->u.func_arg!=NULL) { + NSMethodSignature *signature = [self methodSignatureForSelector:po->u.func_arg]; + if (signature!=nil) { + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:po->u.func_arg]; + [invocation setArgument:&opt atIndex:2]; + [invocation setArgument:&arg atIndex:3]; + [invocation invokeWithTarget:self]; + int returnValue = 0; + [invocation getReturnValue:&returnValue]; + if (returnValue<0) { + [self sendErrorCode:88 message:@"%s: failed to set value '%s' for option '%s'", argv[0], arg, opt]; + return; + } + } + } + } else { + if (po->u.func_arg!=NULL) { + NSMethodSignature *signature = [self methodSignatureForSelector:po->u.func_arg]; + if (signature!=nil) { + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:po->u.func_arg]; + [invocation setArgument:&arg atIndex:2]; + [invocation invokeWithTarget:self]; + } + } + } + if(po->flags & OPT_EXIT) + return; + } else { + if (parseArgument!=NULL) { + NSMethodSignature *signature = [self methodSignatureForSelector:parseArgument]; + if (signature!=nil) { + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:parseArgument]; + [invocation setArgument:&opt atIndex:2]; + [invocation invokeWithTarget:self]; + } + } + } + } +} +- (void)opt_format:(const char *)arg { + /* compatibility stuff for pgmyuv */ + if (!strcmp(arg, "pgmyuv")) { + pgmyuv_compatibility_hack=1; + // opt_image_format(arg); + arg = "image2"; + fprintf(stderr, "pgmyuv format is deprecated, use image2\n"); + } + + if (last_asked_format!=NULL) + free(last_asked_format); + last_asked_format = malloc(strlen(arg)+1); + strcpy(last_asked_format, arg); +} +- (void)opt_output_file:(const char *)filename { + AVFormatContext *oc; + int err, use_video, use_audio, use_subtitle; + int input_has_video, input_has_audio, input_has_subtitle; + AVFormatParameters params, *ap = ¶ms; + AVOutputFormat *file_oformat; + + if (!strcmp(filename, "-")) + filename = "pipe:"; + + oc = avformat_alloc_context(); + if (!oc) { + [self sendErrorCode:1 reference:filename message:AVERROR(ENOMEM)]; + return; + } + + if (last_asked_format) { + file_oformat = av_guess_format(last_asked_format, NULL, NULL); + if (!file_oformat) { + [self sendErrorCode:2 message:@"Requested output format '%s' is not a suitable output format", last_asked_format]; + return; + } + free(last_asked_format); + last_asked_format = NULL; + } else { + file_oformat = av_guess_format(NULL, filename, NULL); + if (!file_oformat) { + [self sendErrorCode:3 message:@"Unable to find a suitable output format for '%s'", filename]; + return; + } + } + + oc->oformat = file_oformat; + av_strlcpy(oc->filename, filename, sizeof(oc->filename)); + + if (!strcmp(file_oformat->name, "ffm") && + av_strstart(filename, "http:", NULL)) { + /* special case for files sent to ffserver: we get the stream + parameters from ffserver */ + int err = [self read_ffserver_streams:oc file:filename]; + if (err < 0) { + [self sendErrorCode:4 reference:filename message:err]; + return; + } + } else { + use_video = file_oformat->video_codec != CODEC_ID_NONE || video_stream_copy || video_codec_name; + use_audio = file_oformat->audio_codec != CODEC_ID_NONE || audio_stream_copy || audio_codec_name; + use_subtitle = file_oformat->subtitle_codec != CODEC_ID_NONE || subtitle_stream_copy || subtitle_codec_name; + + /* disable if no corresponding type found and at least one + input file */ + if (nb_input_files > 0) { + [self check_audio_video_sub_inputs:&input_has_video audio:&input_has_audio subs:&input_has_subtitle]; + if (!input_has_video) + use_video = 0; + if (!input_has_audio) + use_audio = 0; + if (!input_has_subtitle) + use_subtitle = 0; + } + + /* manual disable */ + if (audio_disable) { + use_audio = 0; + } + if (video_disable) { + use_video = 0; + } + if (subtitle_disable) { + use_subtitle = 0; + } + + if (use_video) { + [self new_video_stream:oc]; + } + + if (use_audio) { + [self new_audio_stream:oc]; + } + + if (use_subtitle) { + [self new_subtitle_stream:oc]; + } + + oc->timestamp = rec_timestamp; + + for(; metadata_count>0; metadata_count--){ + av_metadata_set2(&oc->metadata, metadata[metadata_count-1].key, + metadata[metadata_count-1].value, 0); + } + av_metadata_conv(oc, oc->oformat->metadata_conv, NULL); + } + + output_files[nb_output_files++] = oc; + + /* check filename in case of an image number is expected */ + if (oc->oformat->flags & AVFMT_NEEDNUMBER) { + if (!av_filename_number_test(oc->filename)) { + [self sendErrorCode:5 reference:oc->filename message:AVERROR_NUMEXPECTED]; + return; + } + } + + if (!(oc->oformat->flags & AVFMT_NOFILE)) { + /* open the file */ + if ((err = url_fopen(&oc->pb, filename, URL_WRONLY)) < 0) { + [self sendErrorCode:6 reference:filename message:err]; + return; + } + } + + memset(ap, 0, sizeof(*ap)); + if (av_set_parameters(oc, ap) < 0) { + [self sendErrorCode:7 message:@"%s: Invalid encoding parameters", oc->filename]; + return; + } + + oc->preload= (int)(mux_preload*AV_TIME_BASE); + oc->max_delay= (int)(mux_max_delay*AV_TIME_BASE); + oc->loop_output = loop_output; + oc->flags |= AVFMT_FLAG_NONBLOCK; + + [self set_context_opts:oc options:avformat_opts flags:AV_OPT_FLAG_ENCODING_PARAM]; +} +- (void)opt_input_file:(const char *)filename { + AVFormatContext *ic; + AVFormatParameters params, *ap = ¶ms; + AVInputFormat *file_iformat = NULL; + int err, i, ret, rfps, rfps_base; + int64_t timestamp; + + if (last_asked_format) { + if (!(file_iformat = av_find_input_format(last_asked_format))) { + [self sendErrorCode:8 message:@"Unknown input format: '%s'", last_asked_format]; + return; + } + free(last_asked_format); + last_asked_format = NULL; + } + + /* get default parameters from command line */ + ic = avformat_alloc_context(); + if (!ic) { + [self sendErrorCode:9 reference:filename message:AVERROR(ENOMEM)]; + return; + } + + memset(ap, 0, sizeof(*ap)); + ap->prealloced_context = 1; + ap->sample_rate = audio_sample_rate; + ap->channels = audio_channels; + ap->time_base.den = frame_rate.num; + ap->time_base.num = frame_rate.den; + ap->width = frame_width + frame_padleft + frame_padright; + ap->height = frame_height + frame_padtop + frame_padbottom; + ap->pix_fmt = frame_pix_fmt; + // ap->sample_fmt = audio_sample_fmt; //FIXME:not implemented in libavformat + ap->channel = video_channel; + ap->standard = video_standard; + + [self set_context_opts:ic options:avformat_opts flags:AV_OPT_FLAG_DECODING_PARAM]; + + ic->video_codec_id = [self find_codec_or_die:video_codec_name type:AVMEDIA_TYPE_VIDEO encoder:0 strict:avcodec_opts[AVMEDIA_TYPE_VIDEO]->strict_std_compliance]; + ic->audio_codec_id = [self find_codec_or_die:audio_codec_name type:AVMEDIA_TYPE_AUDIO encoder:0 strict:avcodec_opts[AVMEDIA_TYPE_AUDIO]->strict_std_compliance]; + ic->subtitle_codec_id = [self find_codec_or_die:subtitle_codec_name type:AVMEDIA_TYPE_SUBTITLE encoder:0 strict:avcodec_opts[AVMEDIA_TYPE_SUBTITLE]->strict_std_compliance]; + ic->flags |= AVFMT_FLAG_NONBLOCK; + + if(pgmyuv_compatibility_hack) + ic->video_codec_id= CODEC_ID_PGMYUV; + + /* open the input file with generic libav function */ + err = av_open_input_file(&ic, filename, file_iformat, 0, ap); + if (err < 0) { + [self sendErrorCode:10 reference:filename message:err]; + return; + } + if(opt_programid) { + int i, j; + int found=0; + for(i=0; inb_streams; i++){ + ic->streams[i]->discard= AVDISCARD_ALL; + } + for(i=0; inb_programs; i++){ + AVProgram *p= ic->programs[i]; + if(p->id != opt_programid){ + p->discard = AVDISCARD_ALL; + }else{ + found=1; + for(j=0; jnb_stream_indexes; j++){ + ic->streams[p->stream_index[j]]->discard= AVDISCARD_DEFAULT; + } + } + } + if(!found){ + [self sendErrorCode:11 message:@"Specified program id not found"]; + return; + } + opt_programid=0; + } + + ic->loop_input = loop_input; + + /* If not enough info to get the stream parameters, we decode the + first frames to get it. (used in mpeg case for example) */ + ret = av_find_stream_info(ic); + if (ret < 0 && verbose >= 0) { + [self sendErrorCode:12 message:@"%s: could not find codec parameters", filename]; + return; + } + + timestamp = start_time; + /* add the stream start time */ + if (ic->start_time != AV_NOPTS_VALUE) + timestamp += ic->start_time; + + /* if seeking requested, we execute it */ + if (start_time != 0) { + ret = av_seek_frame(ic, -1, timestamp, AVSEEK_FLAG_BACKWARD); + if (ret < 0) { + fprintf(stderr, "%s: could not seek to position %0.3f\n", + filename, (double)timestamp / AV_TIME_BASE); + } + /* reset seek info */ + start_time = 0; + } + + /* update the current parameters so that they match the one of the input stream */ + for(i=0;inb_streams;i++) { + AVStream *st = ic->streams[i]; + AVCodecContext *enc = st->codec; + avcodec_thread_init(enc, thread_count); + switch(enc->codec_type) { + case AVMEDIA_TYPE_AUDIO: + [self set_context_opts:enc options:avcodec_opts[AVMEDIA_TYPE_AUDIO] flags:AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM]; + //fprintf(stderr, "\nInput Audio channels: %d", enc->channels); + channel_layout = enc->channel_layout; + audio_channels = enc->channels; + audio_sample_rate = enc->sample_rate; + audio_sample_fmt = enc->sample_fmt; + input_codecs[nb_icodecs++] = avcodec_find_decoder_by_name(audio_codec_name); + if(audio_disable) + st->discard= AVDISCARD_ALL; + break; + case AVMEDIA_TYPE_VIDEO: + [self set_context_opts:enc options:avcodec_opts[AVMEDIA_TYPE_VIDEO] flags:AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM]; + frame_height = enc->height; + frame_width = enc->width; + if(ic->streams[i]->sample_aspect_ratio.num) + frame_aspect_ratio=av_q2d(ic->streams[i]->sample_aspect_ratio); + else + frame_aspect_ratio=av_q2d(enc->sample_aspect_ratio); + frame_aspect_ratio *= (float) enc->width / enc->height; + frame_pix_fmt = enc->pix_fmt; + rfps = ic->streams[i]->r_frame_rate.num; + rfps_base = ic->streams[i]->r_frame_rate.den; + if(enc->lowres) { + enc->flags |= CODEC_FLAG_EMU_EDGE; + frame_height >>= enc->lowres; + frame_width >>= enc->lowres; + } + if(me_threshold) + enc->debug |= FF_DEBUG_MV; + + if (enc->time_base.den != rfps*enc->ticks_per_frame || enc->time_base.num != rfps_base) { + + if (verbose >= 0) + fprintf(stderr,"\nSeems stream %d codec frame rate differs from container frame rate: %2.2f (%d/%d) -> %2.2f (%d/%d)\n", + i, (float)enc->time_base.den / enc->time_base.num, enc->time_base.den, enc->time_base.num, + + (float)rfps / rfps_base, rfps, rfps_base); + } + /* update the current frame rate to match the stream frame rate */ + frame_rate.num = rfps; + frame_rate.den = rfps_base; + + input_codecs[nb_icodecs++] = avcodec_find_decoder_by_name(video_codec_name); + if(video_disable) + st->discard= AVDISCARD_ALL; + else if(video_discard) + st->discard= video_discard; + break; + case AVMEDIA_TYPE_DATA: + break; + case AVMEDIA_TYPE_SUBTITLE: + input_codecs[nb_icodecs++] = avcodec_find_decoder_by_name(subtitle_codec_name); + if(subtitle_disable) + st->discard = AVDISCARD_ALL; + break; + case AVMEDIA_TYPE_ATTACHMENT: + case AVMEDIA_TYPE_UNKNOWN: + nb_icodecs++; + break; + default: + abort(); + } + } + + input_files[nb_input_files] = ic; + input_files_ts_offset[nb_input_files] = input_ts_offset - (copy_ts ? 0 : timestamp); + /* dump the file content */ + if (verbose >= 0) + dump_format(ic, nb_input_files, filename, 0); + + nb_input_files++; + + video_channel = 0; + + av_freep(&video_codec_name); + av_freep(&audio_codec_name); + av_freep(&subtitle_codec_name); +} +- (int)read_ffserver_streams:(AVFormatContext *)s file:(const char *)filename { + int i, err; + AVFormatContext *ic; + int nopts = 0; + + err = av_open_input_file(&ic, filename, NULL, FFM_PACKET_SIZE, NULL); + if (err < 0) + return err; + /* copy stream format */ + s->nb_streams = ic->nb_streams; + for(i=0;inb_streams;i++) { + AVStream *st; + AVCodec *codec; + + // FIXME: a more elegant solution is needed + st = av_mallocz(sizeof(AVStream)); + memcpy(st, ic->streams[i], sizeof(AVStream)); + st->codec = avcodec_alloc_context(); + if (!st->codec) { + [self sendErrorCode:13 reference:filename message:AVERROR(ENOMEM)]; + return 1; + } + avcodec_copy_context(st->codec, ic->streams[i]->codec); + s->streams[i] = st; + + codec = avcodec_find_encoder(st->codec->codec_id); + if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { + if (audio_stream_copy) { + st->stream_copy = 1; + } else + [self choose_sample_fmt:st codec:codec]; + } else if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + if (video_stream_copy) { + st->stream_copy = 1; + } else + [self choose_pixel_fmt:st codec:codec]; + } + + if(!st->codec->thread_count) + st->codec->thread_count = 1; + if(st->codec->thread_count>1) + avcodec_thread_init(st->codec, st->codec->thread_count); + + if(st->codec->flags & CODEC_FLAG_BITEXACT) + nopts = 1; + } + + if (!nopts) + s->timestamp = av_gettime(); + + av_close_input_file(ic); + return 0; +} +- (void)opt_map:(const char *)arg { + AVStreamMap *m; + char *p; + + m = &stream_maps[nb_stream_maps++]; + + m->file_index = (int)strtol(arg, &p, 0); + if (*p) + p++; + + m->stream_index = (int)strtol(p, &p, 0); + if (*p) { + p++; + m->sync_file_index = (int)strtol(p, &p, 0); + if (*p) + p++; + m->sync_stream_index = (int)strtol(p, &p, 0); + } else { + m->sync_file_index = m->file_index; + m->sync_stream_index = m->stream_index; + } +} +- (void)opt_map_meta_data:(const char *)arg { + AVMetaDataMap *m; + char *p; + + m = &meta_data_maps[nb_meta_data_maps++]; + + m->out_file = (int)strtol(arg, &p, 0); + if (*p) + p++; + + m->in_file = (int)strtol(p, &p, 0); +} +- (int)opt_recording_time:(const char *)opt arg:(const char *)arg { + recording_time = [self parse_time_or_die:opt time:arg duration:1]; + return 0; +} +- (int)opt_start_time:(const char *)opt arg:(const char *)arg { + start_time = [self parse_time_or_die:opt time:arg duration:1]; + return 0; +} +- (int)opt_input_ts_offset:(const char *)opt arg:(const char *)arg { + input_ts_offset = [self parse_time_or_die:opt time:arg duration:1]; + return 0; +} +- (void)opt_input_ts_scale:(const char *)arg { + unsigned int stream; + double scale; + char *p; + + stream = (int)strtol(arg, &p, 0); + if (*p) + p++; + scale= strtod(p, &p); + + if(stream >= MAX_STREAMS) + return; + + input_files_ts_scale[nb_input_files][stream]= scale; +} +- (int)opt_rec_timestamp:(const char *)opt arg:(const char *)arg { + rec_timestamp = [self parse_time_or_die:opt time:arg duration:0] / 1000000; + return 0; +} +- (int)opt_metadata:(const char *)opt arg:(const char *)arg { + char *mid= strchr(arg, '='); + + if(!mid){ + [self sendErrorCode:14 message:@"Missing ="]; + return 1; + } + *mid++= 0; + + metadata_count++; + metadata= av_realloc(metadata, sizeof(*metadata)*metadata_count); + metadata[metadata_count-1].key = av_strdup(arg); + metadata[metadata_count-1].value= av_strdup(mid); + + return 0; +} +- (int)opt_timelimit:(const char *)opt arg:(const char *)arg { +#if HAVE_SETRLIMIT + int lim = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:0 max:INT_MAX]; + struct rlimit rl = { lim, lim + 1 }; + if (setrlimit(RLIMIT_CPU, &rl)) + perror("setrlimit"); +#else + fprintf(stderr, "Warning: -%s not implemented on this OS\n", opt); +#endif + return 0; +} +- (int)opt_verbose:(const char *)opt arg:(const char *)arg { + verbose = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:-10 max:10]; + return 0; +} +- (void)opt_target:(const char *)arg { + enum { PAL, NTSC, FILM, UNKNOWN } norm = UNKNOWN; + static const char *const frame_rates[] = {"25", "30000/1001", "24000/1001"}; + + if(!strncmp(arg, "pal-", 4)) { + norm = PAL; + arg += 4; + } else if(!strncmp(arg, "ntsc-", 5)) { + norm = NTSC; + arg += 5; + } else if(!strncmp(arg, "film-", 5)) { + norm = FILM; + arg += 5; + } else { + int fr; + /* Calculate FR via float to avoid int overflow */ + fr = (int)(frame_rate.num * 1000.0 / frame_rate.den); + if(fr == 25000) { + norm = PAL; + } else if((fr == 29970) || (fr == 23976)) { + norm = NTSC; + } else { + /* Try to determine PAL/NTSC by peeking in the input files */ + if(nb_input_files) { + int i, j; + for(j = 0; j < nb_input_files; j++) { + for(i = 0; i < input_files[j]->nb_streams; i++) { + AVCodecContext *c = input_files[j]->streams[i]->codec; + if(c->codec_type != AVMEDIA_TYPE_VIDEO) + continue; + fr = c->time_base.den * 1000 / c->time_base.num; + if(fr == 25000) { + norm = PAL; + break; + } else if((fr == 29970) || (fr == 23976)) { + norm = NTSC; + break; + } + } + if(norm != UNKNOWN) + break; + } + } + } + if(verbose && norm != UNKNOWN) + fprintf(stderr, "Assuming %s for target.\n", norm == PAL ? "PAL" : "NTSC"); + } + + if(norm == UNKNOWN) { + [self sendErrorCode:15 message:@"Could not determine norm (PAL/NTSC/NTSC-Film) for target.\n" + "Please prefix target with \"pal-\", \"ntsc-\" or \"film-\",\n" + "or set a framerate with \"-r xxx\"."]; + return; + } + + if(!strcmp(arg, "vcd")) { + + [self opt_video_codec:"mpeg1video"]; + [self opt_audio_codec:"mp2"]; + [self opt_format:"vcd"]; + + [self opt_frame_size:(norm == PAL ? "352x288" : "352x240")]; + [self opt_frame_rate:NULL arg:frame_rates[norm]]; + [self opt_default:"g" arg:(norm == PAL ? "15" : "18")]; + + [self opt_default:"b" arg:"1150000"]; + [self opt_default:"maxrate" arg:"1150000"]; + [self opt_default:"minrate" arg:"1150000"]; + [self opt_default:"bufsize" arg:"327680"]; // 40*1024*8; + + [self opt_default:"ab" arg:"224000"]; + audio_sample_rate = 44100; + audio_channels = 2; + + [self opt_default:"packetsize" arg:"2324"]; + [self opt_default:"muxrate" arg:"1411200"]; // 2352 * 75 * 8; + + /* We have to offset the PTS, so that it is consistent with the SCR. + SCR starts at 36000, but the first two packs contain only padding + and the first pack from the other stream, respectively, may also have + been written before. + So the real data starts at SCR 36000+3*1200. */ + mux_preload= (36000+3*1200) / 90000.0; //0.44 + } else if(!strcmp(arg, "svcd")) { + + [self opt_video_codec:"mpeg2video"]; + [self opt_audio_codec:"mp2"]; + [self opt_format:"svcd"]; + + [self opt_frame_size:(norm == PAL ? "480x576" : "480x480")]; + [self opt_frame_rate:NULL arg:frame_rates[norm]]; + [self opt_default:"g" arg:(norm == PAL ? "15" : "18")]; + + [self opt_default:"b" arg:"2040000"]; + [self opt_default:"maxrate" arg:"2516000"]; + [self opt_default:"minrate" arg:"0"]; //1145000; + [self opt_default:"bufsize" arg:"1835008"]; //224*1024*8; + [self opt_default:"flags" arg:"+scan_offset"]; + + + [self opt_default:"ab" arg:"224000"]; + audio_sample_rate = 44100; + + [self opt_default:"packetsize" arg:"2324"]; + + } else if(!strcmp(arg, "dvd")) { + + [self opt_video_codec:"mpeg2video"]; + [self opt_audio_codec:"ac3"]; + [self opt_format:"dvd"]; + + [self opt_frame_size:(norm == PAL ? "720x576" : "720x480")]; + [self opt_frame_rate:NULL arg:frame_rates[norm]]; + [self opt_default:"g" arg:(norm == PAL ? "15" : "18")]; + + [self opt_default:"b" arg:"6000000"]; + [self opt_default:"maxrate" arg:"9000000"]; + [self opt_default:"minrate" arg:"0"]; //1500000; + [self opt_default:"bufsize" arg:"1835008"]; //224*1024*8; + + [self opt_default:"packetsize" arg:"2048"]; // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack. + [self opt_default:"muxrate" arg:"10080000"]; // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8 + + [self opt_default:"ab" arg:"448000"]; + audio_sample_rate = 48000; + + } else if(!strncmp(arg, "dv", 2)) { + + [self opt_format:"dv"]; + + [self opt_frame_size:(norm == PAL ? "720x576" : "720x480")]; + [self opt_frame_pix_fmt:(!strncmp(arg, "dv50", 4) ? "yuv422p" : (norm == PAL ? "yuv420p" : "yuv411p"))]; + [self opt_frame_rate:NULL arg:frame_rates[norm]]; + + audio_sample_rate = 48000; + audio_channels = 2; + + } else { + [self sendErrorCode:16 message:@"Unknown target: %s", arg]; + return; + } +} +- (int)opt_thread_count:(const char *)opt arg:(const char *)arg { + thread_count = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:0 max:INT_MAX]; +#if !HAVE_THREADS + if (verbose >= 0) + fprintf(stderr, "Warning: not compiled with thread support, using thread emulation\n"); +#endif + return 0; +} + +- (int)opt_bitrate:(const char *)opt arg:(const char *)arg { + int codec_type = opt[0]=='a' ? AVMEDIA_TYPE_AUDIO : AVMEDIA_TYPE_VIDEO; + + [self opt_default:opt arg:arg]; + + if (av_get_int(avcodec_opts[codec_type], "b", NULL) < 1000) + fprintf(stderr, "WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s\n"); + + return 0; +} +- (int)opt_frame_rate:(const char *)opt arg:(const char *)arg { + if (av_parse_video_frame_rate(&frame_rate, arg) < 0) { + [self sendErrorCode:17 message:@"Incorrect value for %s: %s", opt, arg]; + return 1; + } + return 0; +} +- (void)opt_frame_size:(const char *)arg { + if (av_parse_video_frame_size(&frame_width, &frame_height, arg) < 0) { + [self sendErrorCode:18 message:@"Incorrect frame size"]; + return; + } +} +- (void)opt_frame_aspect_ratio:(const char *)arg { + int x = 0, y = 0; + double ar = 0; + const char *p; + char *end; + + p = strchr(arg, ':'); + if (p) { + x = (int)strtol(arg, &end, 10); + if (end == p) + y = (int)strtol(end+1, &end, 10); + if (x > 0 && y > 0) + ar = (double)x / (double)y; + } else + ar = strtod(arg, NULL); + + if (!ar) { + [self sendErrorCode:19 message:@"Incorrect aspect ratio specification."]; + return; + } + frame_aspect_ratio = ar; +} +- (void)show_pix_fmts { + enum PixelFormat pix_fmt; + + printf( + "Pixel formats:\n" + "I.... = Supported Input format for conversion\n" + ".O... = Supported Output format for conversion\n" + "..H.. = Hardware accelerated format\n" + "...P. = Paletted format\n" + "....B = Bitstream format\n" + "FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL\n" + "-----\n"); + +#if !CONFIG_SWSCALE +# define sws_isSupportedInput(x) 0 +# define sws_isSupportedOutput(x) 0 +#endif + + for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++) { + const AVPixFmtDescriptor *pix_desc = &av_pix_fmt_descriptors[pix_fmt]; + printf("%c%c%c%c%c %-16s %d %2d\n", + sws_isSupportedInput (pix_fmt) ? 'I' : '.', + sws_isSupportedOutput(pix_fmt) ? 'O' : '.', + pix_desc->flags & PIX_FMT_HWACCEL ? 'H' : '.', + pix_desc->flags & PIX_FMT_PAL ? 'P' : '.', + pix_desc->flags & PIX_FMT_BITSTREAM ? 'B' : '.', + pix_desc->name, + pix_desc->nb_components, + av_get_bits_per_pixel(pix_desc)); + } +} +- (void)opt_frame_pix_fmt:(const char *)arg { + if (strcmp(arg, "list")) { + frame_pix_fmt = av_get_pix_fmt(arg); + if (frame_pix_fmt == PIX_FMT_NONE) { + [self sendErrorCode:20 message:@"Unknown pixel format requested: %s", arg]; + return; + } + } else { + [self show_pix_fmts]; + } +} +- (void)opt_frame_crop_top:(const char *)arg { + frame_topBand = atoi(arg); + if (frame_topBand < 0) { + [self sendErrorCode:21 message:@"Incorrect top crop size"]; + return; + } + if ((frame_topBand) >= frame_height){ + [self sendErrorCode:22 message:@"Vertical crop dimensions are outside the range of the original image.\nRemember to crop first and scale second."]; + return; + } + frame_height -= frame_topBand; +} +- (void)opt_frame_crop_bottom:(const char *)arg { + frame_bottomBand = atoi(arg); + if (frame_bottomBand < 0) { + [self sendErrorCode:23 message:@"Incorrect bottom crop size"]; + return; + } + if ((frame_bottomBand) >= frame_height){ + [self sendErrorCode:24 message:@"Vertical crop dimensions are outside the range of the original image.\nRemember to crop first and scale second."]; + return; + } + frame_height -= frame_bottomBand; +} +- (void)opt_frame_crop_left:(const char *)arg { + frame_leftBand = atoi(arg); + if (frame_leftBand < 0) { + [self sendErrorCode:25 message:@"Incorrect left crop size"]; + return; + } + if ((frame_leftBand) >= frame_width){ + [self sendErrorCode:26 message:@"Horizontal crop dimensions are outside the range of the original image.\nRemember to crop first and scale second."]; + return; + } + frame_width -= frame_leftBand; +} +- (void)opt_frame_crop_right:(const char *)arg { + frame_rightBand = atoi(arg); + if (frame_rightBand < 0) { + [self sendErrorCode:27 message:@"Incorrect right crop size"]; + return; + } + if ((frame_rightBand) >= frame_width){ + [self sendErrorCode:28 message:@"Horizontal crop dimensions are outside the range of the original image.\nRemember to crop first and scale second."]; + return; + } + frame_width -= frame_rightBand; +} +- (void)opt_frame_pad_top:(const char *)arg { + frame_padtop = atoi(arg); + if (frame_padtop < 0) { + [self sendErrorCode:29 message:@"Incorrect top pad size"]; + return; + } +} +- (void)opt_frame_pad_bottom:(const char *)arg { + frame_padbottom = atoi(arg); + if (frame_padbottom < 0) { + [self sendErrorCode:30 message:@"Incorrect bottom pad size"]; + return; + } +} +- (void)opt_frame_pad_left:(const char *)arg { + frame_padleft = atoi(arg); + if (frame_padleft < 0) { + [self sendErrorCode:31 message:@"Incorrect left pad size"]; + return; + } +} +- (void)opt_frame_pad_right:(const char *)arg { + frame_padright = atoi(arg); + if (frame_padright < 0) { + [self sendErrorCode:32 message:@"Incorrect right pad size"]; + return; + } +} +- (void)opt_pad_color:(const char *)arg { + /* Input is expected to be six hex digits similar to + how colors are expressed in html tags (but without the #) */ + int rgb = (int)strtol(arg, NULL, 16); + int r,g,b; + + r = (rgb >> 16); + g = ((rgb >> 8) & 255); + b = (rgb & 255); + + padcolor[0] = RGB_TO_Y(r,g,b); + padcolor[1] = RGB_TO_U(r,g,b,0); + padcolor[2] = RGB_TO_V(r,g,b,0); +} +- (void)opt_qscale:(const char *)arg { + video_qscale = atof(arg); + if (video_qscale <= 0 || + video_qscale > 255) { + [self sendErrorCode:33 message:@"qscale must be > 0.0 and <= 255"]; + return; + } +} +- (void)opt_video_rc_override_string:(const char *)arg { + if (video_rc_override_string!=NULL) + free(video_rc_override_string); + video_rc_override_string = malloc(strlen(arg)+1); + strcpy(video_rc_override_string, arg); +} +- (void)opt_video_codec:(const char *)arg { + [self opt_codec:&video_stream_copy name:&video_codec_name type:AVMEDIA_TYPE_VIDEO arg:arg]; +} +- (int)opt_me_threshold:(const char *)opt arg:(const char *)arg { + me_threshold = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:INT_MIN max:INT_MAX]; + return 0; +} +- (void)opt_pass:(const char *)pass_str { + int pass; + pass = atoi(pass_str); + if (pass != 1 && pass != 2) { + [self sendErrorCode:34 message:@"pass number can be only 1 or 2"]; + return; + } + do_pass = pass; +} +- (void)opt_vstats_file:(const char *)arg { + av_free (vstats_filename); + vstats_filename=av_strdup (arg); +} +- (void)opt_vstats { + char filename[40]; + time_t today2 = time(NULL); + struct tm *today = localtime(&today2); + + snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min, + today->tm_sec); + [self opt_vstats_file:filename]; +} +- (void)opt_intra_matrix:(const char *)arg { + intra_matrix = av_mallocz(sizeof(uint16_t) * 64); + [self parse_matrix_coeffs:intra_matrix matrix:arg]; +} +- (void)opt_inter_matrix:(const char *)arg { + inter_matrix = av_mallocz(sizeof(uint16_t) * 64); + [self parse_matrix_coeffs:inter_matrix matrix:arg]; +} +- (void)opt_top_field_first:(const char *)arg { + top_field_first= atoi(arg); +} +- (void)opt_video_tag:(const char *)arg { + char *tail; + video_codec_tag= (int)strtol(arg, &tail, 0); + + if(!tail || *tail) + video_codec_tag= arg[0] + (arg[1]<<8) + (arg[2]<<16) + (arg[3]<<24); +} +- (void)choose_pixel_fmt:(AVStream *)st codec:(AVCodec *)codec { + if(codec && codec->pix_fmts){ + const enum PixelFormat *p= codec->pix_fmts; + for(; *p!=-1; p++){ + if(*p == st->codec->pix_fmt) + break; + } + if(*p == -1 + && !( st->codec->codec_id==CODEC_ID_MJPEG + && st->codec->strict_std_compliance <= FF_COMPLIANCE_INOFFICIAL + && ( st->codec->pix_fmt == PIX_FMT_YUV420P + || st->codec->pix_fmt == PIX_FMT_YUV422P))) + st->codec->pix_fmt = codec->pix_fmts[0]; + } +} +- (void)new_video_stream:(AVFormatContext *)oc { + AVStream *st; + AVCodecContext *video_enc; + enum CodecID codec_id; + + st = av_new_stream(oc, oc->nb_streams); + if (!st) { + [self sendErrorCode:35 message:@"Could not alloc stream"]; + return; + } + avcodec_get_context_defaults2(st->codec, AVMEDIA_TYPE_VIDEO); + bitstream_filters[nb_output_files][oc->nb_streams - 1]= video_bitstream_filters; + video_bitstream_filters= NULL; + + avcodec_thread_init(st->codec, thread_count); + + video_enc = st->codec; + + if(video_codec_tag) + video_enc->codec_tag= video_codec_tag; + + if( (video_global_header&1) + || (video_global_header==0 && (oc->oformat->flags & AVFMT_GLOBALHEADER))){ + video_enc->flags |= CODEC_FLAG_GLOBAL_HEADER; + avcodec_opts[AVMEDIA_TYPE_VIDEO]->flags|= CODEC_FLAG_GLOBAL_HEADER; + } + if(video_global_header&2){ + video_enc->flags2 |= CODEC_FLAG2_LOCAL_HEADER; + avcodec_opts[AVMEDIA_TYPE_VIDEO]->flags2|= CODEC_FLAG2_LOCAL_HEADER; + } + + if (video_stream_copy) { + st->stream_copy = 1; + video_enc->codec_type = AVMEDIA_TYPE_VIDEO; + video_enc->sample_aspect_ratio = + st->sample_aspect_ratio = av_d2q(frame_aspect_ratio*frame_height/frame_width, 255); + } else { + const char *p; + int i; + AVCodec *codec; + AVRational fps= frame_rate.num ? frame_rate : (AVRational){25,1}; + + if (video_codec_name) { + codec_id = [self find_codec_or_die:video_codec_name type:AVMEDIA_TYPE_VIDEO encoder:1 strict:video_enc->strict_std_compliance]; + codec = avcodec_find_encoder_by_name(video_codec_name); + output_codecs[nb_ocodecs] = codec; + } else { + codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, AVMEDIA_TYPE_VIDEO); + codec = avcodec_find_encoder(codec_id); + } + + video_enc->codec_id = codec_id; + + [self set_context_opts:video_enc options:avcodec_opts[AVMEDIA_TYPE_VIDEO] flags:AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM]; + + if (codec && codec->supported_framerates && !force_fps) + fps = codec->supported_framerates[av_find_nearest_q_idx(fps, codec->supported_framerates)]; + video_enc->time_base.den = fps.num; + video_enc->time_base.num = fps.den; + + video_enc->width = frame_width + frame_padright + frame_padleft; + video_enc->height = frame_height + frame_padtop + frame_padbottom; + video_enc->sample_aspect_ratio = av_d2q(frame_aspect_ratio*video_enc->height/video_enc->width, 255); + video_enc->pix_fmt = frame_pix_fmt; + st->sample_aspect_ratio = video_enc->sample_aspect_ratio; + + [self choose_pixel_fmt:st codec:codec]; + + if (intra_only) + video_enc->gop_size = 0; + if (video_qscale || same_quality) { + video_enc->flags |= CODEC_FLAG_QSCALE; + video_enc->global_quality= + st->quality = FF_QP2LAMBDA * video_qscale; + } + + if(intra_matrix) + video_enc->intra_matrix = intra_matrix; + if(inter_matrix) + video_enc->inter_matrix = inter_matrix; + + p= video_rc_override_string; + for(i=0; p; i++){ + int start, end, q; + int e=sscanf(p, "%d,%d,%d", &start, &end, &q); + if(e!=3){ + [self sendErrorCode:36 message:@"error parsing rc_override\n"]; + return; + } + video_enc->rc_override= + av_realloc(video_enc->rc_override, + sizeof(RcOverride)*(i+1)); + video_enc->rc_override[i].start_frame= start; + video_enc->rc_override[i].end_frame = end; + if(q>0){ + video_enc->rc_override[i].qscale= q; + video_enc->rc_override[i].quality_factor= 1.0; + } + else{ + video_enc->rc_override[i].qscale= 0; + video_enc->rc_override[i].quality_factor= -q/100.0; + } + p= strchr(p, '/'); + if(p) p++; + } + video_enc->rc_override_count=i; + if (!video_enc->rc_initial_buffer_occupancy) + video_enc->rc_initial_buffer_occupancy = video_enc->rc_buffer_size*3/4; + video_enc->me_threshold= me_threshold; + video_enc->intra_dc_precision= intra_dc_precision - 8; + + if (do_psnr) + video_enc->flags|= CODEC_FLAG_PSNR; + + /* two pass mode */ + if (do_pass) { + if (do_pass == 1) { + video_enc->flags |= CODEC_FLAG_PASS1; + } else { + video_enc->flags |= CODEC_FLAG_PASS2; + } + } + } + nb_ocodecs++; + if (video_language) { + av_metadata_set2(&st->metadata, "language", video_language, 0); + av_freep(&video_language); + } + + /* reset some key parameters */ + video_disable = 0; + av_freep(&video_codec_name); + video_stream_copy = 0; + frame_pix_fmt = PIX_FMT_NONE; +} +- (void)opt_new_video_stream { + AVFormatContext *oc; + if (nb_output_files <= 0) { + [self sendErrorCode:37 message:@"At least one output file must be specified"]; + return; + } + oc = output_files[nb_output_files - 1]; + [self new_video_stream:oc]; +} + +- (int)opt_audio_rate:(const char *)opt arg:(const char *)arg { + audio_sample_rate = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:0 max:INT_MAX]; + return 0; +} +- (int)opt_audio_channels:(const char *)opt arg:(const char *)arg { + audio_channels = [self parse_number_or_die:opt number:arg type:OPT_INT64 min:0 max:INT_MAX]; + return 0; +} +- (void)opt_audio_codec:(const char *)arg { + [self opt_codec:&audio_stream_copy name:&audio_codec_name type:AVMEDIA_TYPE_AUDIO arg:arg]; +} +- (void)opt_audio_tag:(const char *)arg { + char *tail; + audio_codec_tag= (int)strtol(arg, &tail, 0); + + if(!tail || *tail) + audio_codec_tag= arg[0] + (arg[1]<<8) + (arg[2]<<16) + (arg[3]<<24); +} +- (void)choose_sample_fmt:(AVStream *)st codec:(AVCodec *)codec { + if(codec && codec->sample_fmts){ + const enum SampleFormat *p= codec->sample_fmts; + for(; *p!=-1; p++){ + if(*p == st->codec->sample_fmt) + break; + } + if(*p == -1) + st->codec->sample_fmt = codec->sample_fmts[0]; + } +} +- (void)choose_sample_rate:(AVStream *)st codec:(AVCodec *)codec { + if(codec && codec->supported_samplerates){ + const int *p= codec->supported_samplerates; + int best = 0; + int best_dist=INT_MAX; + for(; *p; p++){ + int dist= abs(st->codec->sample_rate - *p); + if(dist < best_dist){ + best_dist= dist; + best= *p; + } + } + if(best_dist){ + av_log(st->codec, AV_LOG_WARNING, "Requested sampling rate unsupported using closest supported (%d)\n", best); + } + st->codec->sample_rate= best; + } +} +- (void)new_audio_stream:(AVFormatContext *)oc { + AVStream *st; + AVCodecContext *audio_enc; + enum CodecID codec_id; + + st = av_new_stream(oc, oc->nb_streams); + if (!st) { + [self sendErrorCode:38 message:@"Could not alloc stream"]; + return; + } + avcodec_get_context_defaults2(st->codec, AVMEDIA_TYPE_AUDIO); + + bitstream_filters[nb_output_files][oc->nb_streams - 1]= audio_bitstream_filters; + audio_bitstream_filters= NULL; + + avcodec_thread_init(st->codec, thread_count); + + audio_enc = st->codec; + audio_enc->codec_type = AVMEDIA_TYPE_AUDIO; + + if(audio_codec_tag) + audio_enc->codec_tag= audio_codec_tag; + + if (oc->oformat->flags & AVFMT_GLOBALHEADER) { + audio_enc->flags |= CODEC_FLAG_GLOBAL_HEADER; + avcodec_opts[AVMEDIA_TYPE_AUDIO]->flags|= CODEC_FLAG_GLOBAL_HEADER; + } + if (audio_stream_copy) { + st->stream_copy = 1; + audio_enc->channels = audio_channels; + audio_enc->sample_rate = audio_sample_rate; + } else { + AVCodec *codec; + + [self set_context_opts:audio_enc options:avcodec_opts[AVMEDIA_TYPE_AUDIO] flags:AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM]; + + if (audio_codec_name) { + codec_id = [self find_codec_or_die:audio_codec_name type:AVMEDIA_TYPE_AUDIO encoder:1 strict:audio_enc->strict_std_compliance]; + codec = avcodec_find_encoder_by_name(audio_codec_name); + output_codecs[nb_ocodecs] = codec; + } else { + codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, AVMEDIA_TYPE_AUDIO); + codec = avcodec_find_encoder(codec_id); + } + audio_enc->codec_id = codec_id; + + if (audio_qscale > QSCALE_NONE) { + audio_enc->flags |= CODEC_FLAG_QSCALE; + audio_enc->global_quality = st->quality = FF_QP2LAMBDA * audio_qscale; + } + audio_enc->channels = audio_channels; + audio_enc->sample_fmt = audio_sample_fmt; + audio_enc->sample_rate = audio_sample_rate; + audio_enc->channel_layout = channel_layout; + if (avcodec_channel_layout_num_channels(channel_layout) != audio_channels) + audio_enc->channel_layout = 0; + [self choose_sample_fmt:st codec:codec]; + [self choose_sample_rate:st codec:codec]; + } + nb_ocodecs++; + audio_enc->time_base= (AVRational){1, audio_sample_rate}; + if (audio_language) { + av_metadata_set2(&st->metadata, "language", audio_language, 0); + av_freep(&audio_language); + } + + /* reset some key parameters */ + audio_disable = 0; + av_freep(&audio_codec_name); + audio_stream_copy = 0; +} +- (void)opt_new_audio_stream { + AVFormatContext *oc; + if (nb_output_files <= 0) { + [self sendErrorCode:39 message:@"At least one output file must be specified"]; + return; + } + oc = output_files[nb_output_files - 1]; + [self new_audio_stream:oc]; +} +- (void)list_fmts:(void (*)(char *buf, int buf_size, int fmt))get_fmt_string format:(int)nb_fmts { + int i; + char fmt_str[128]; + for (i=-1; i < nb_fmts; i++) { + get_fmt_string (fmt_str, sizeof(fmt_str), i); + fprintf(stdout, "%s\n", fmt_str); + } +} +- (void)opt_audio_sample_fmt:(const char *)arg { + if (strcmp(arg, "list")) + audio_sample_fmt = avcodec_get_sample_fmt(arg); + else { + [self list_fmts:avcodec_sample_fmt_string format:SAMPLE_FMT_NB]; + } +} + +- (void)opt_subtitle_codec:(const char *)arg { + [self opt_codec:&subtitle_stream_copy name:&subtitle_codec_name type:AVMEDIA_TYPE_SUBTITLE arg:arg]; +} +- (void)new_subtitle_stream:(AVFormatContext *)oc { + AVStream *st; + AVCodecContext *subtitle_enc; + + st = av_new_stream(oc, oc->nb_streams); + if (!st) { + [self sendErrorCode:40 message:@"Could not alloc stream"]; + return; + } + avcodec_get_context_defaults2(st->codec, AVMEDIA_TYPE_SUBTITLE); + + bitstream_filters[nb_output_files][oc->nb_streams - 1]= subtitle_bitstream_filters; + subtitle_bitstream_filters= NULL; + + subtitle_enc = st->codec; + subtitle_enc->codec_type = AVMEDIA_TYPE_SUBTITLE; + + if(subtitle_codec_tag) + subtitle_enc->codec_tag= subtitle_codec_tag; + + if (subtitle_stream_copy) { + st->stream_copy = 1; + } else { + [self set_context_opts:avcodec_opts[AVMEDIA_TYPE_SUBTITLE] options:subtitle_enc flags:AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_ENCODING_PARAM]; + subtitle_enc->codec_id = [self find_codec_or_die:subtitle_codec_name type:AVMEDIA_TYPE_SUBTITLE encoder:1 strict:subtitle_enc->strict_std_compliance]; + output_codecs[nb_ocodecs] = avcodec_find_encoder_by_name(subtitle_codec_name); + } + nb_ocodecs++; + + if (subtitle_language) { + av_metadata_set2(&st->metadata, "language", subtitle_language, 0); + av_freep(&subtitle_language); + } + + subtitle_disable = 0; + av_freep(&subtitle_codec_name); + subtitle_stream_copy = 0; +} +- (void)opt_new_subtitle_stream { + AVFormatContext *oc; + if (nb_output_files <= 0) { + [self sendErrorCode:41 message:@"At least one output file must be specified"]; + return; + } + oc = output_files[nb_output_files - 1]; + [self new_subtitle_stream:oc]; +} +- (void)opt_subtitle_tag:(const char *)arg { + char *tail; + subtitle_codec_tag= (int)strtol(arg, &tail, 0); + + if(!tail || *tail) + subtitle_codec_tag= arg[0] + (arg[1]<<8) + (arg[2]<<16) + (arg[3]<<24); +} + +- (void)opt_video_channel:(const char *)arg { + video_channel = (int)strtol(arg, NULL, 0); +} +- (void)opt_video_standard:(const char *)arg { + video_standard = av_strdup(arg); +} + +- (int)opt_bsf:(const char *)opt arg:(const char *)arg { + AVBitStreamFilterContext *bsfc= av_bitstream_filter_init(arg); //FIXME split name and args for filter at '=' + AVBitStreamFilterContext **bsfp; + + if(!bsfc){ + [self sendErrorCode:42 message:@"Unknown bitstream filter %s", arg]; + return 1; + } + + bsfp= *opt == 'v' ? &video_bitstream_filters : + *opt == 'a' ? &audio_bitstream_filters : + &subtitle_bitstream_filters; + while(*bsfp) + bsfp= &(*bsfp)->next; + + *bsfp= bsfc; + + return 0; +} + +- (int)opt_preset:(const char *)opt arg:(const char *)arg { + FILE *f=NULL; + char filename[1000], tmp[1000], tmp2[1000], line[1000]; + int i; + const char *base[3]= { getenv("FFMPEG_DATADIR"), + getenv("HOME"), + FFMPEG_DATADIR, + }; + + if (*opt != 'f') { + for(i=0; i<3 && !f; i++){ + if(!base[i]) + continue; + snprintf(filename, sizeof(filename), "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", arg); + f= fopen(filename, "r"); + if(!f){ + char *codec_name= *opt == 'v' ? video_codec_name : + *opt == 'a' ? audio_codec_name : + subtitle_codec_name; + snprintf(filename, sizeof(filename), "%s%s/%s-%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", codec_name, arg); + f= fopen(filename, "r"); + } + } + } else { + av_strlcpy(filename, arg, sizeof(filename)); + f= fopen(filename, "r"); + } + + if(!f){ + [self sendErrorCode:43 message:@"File for preset '%s' not found", arg]; + return 1; + } + + while(!feof(f)){ + int e= fscanf(f, "%999[^\n]\n", line) - 1; + if(line[0] == '#' && !e) + continue; + e|= sscanf(line, "%999[^=]=%999[^\n]\n", tmp, tmp2) - 2; + if(e){ + [self sendErrorCode:44 message:@"%s: Invalid syntax: '%s'", filename, line]; + return 1; + } + if(!strcmp(tmp, "acodec")){ + [self opt_audio_codec:tmp2]; + }else if(!strcmp(tmp, "vcodec")){ + [self opt_video_codec:tmp2]; + }else if(!strcmp(tmp, "scodec")){ + [self opt_subtitle_codec:tmp2]; + }else if([self opt_default:tmp arg:tmp2] < 0){ + [self sendErrorCode:45 message:@"%s: Invalid option or argument: '%s', parsed as '%s' = '%s'", filename, line, tmp, tmp2]; + return 1; + } + } + + fclose(f); + + return 0; +} + +- (int)opt_default:(const char *)opt arg:(const char *)arg { + int type; + int ret= 0; + const AVOption *o= NULL; + int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0}; + + for(type=0; type= 0; type++){ + const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]); + if(o2) + ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o); + } + if(!o) + ret = av_set_string3(avformat_opts, opt, arg, 1, &o); + if(!o && sws_opts) + ret = av_set_string3(sws_opts, opt, arg, 1, &o); + if(!o){ + if(opt[0] == 'a') + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o); + else if(opt[0] == 'v') + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o); + else if(opt[0] == 's') + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o); + } + if (o && ret < 0) { + [self sendErrorCode:89 message:@"Invalid value '%s' for option '%s'", arg, opt]; + return 1; + } + if (!o) { + [self sendErrorCode:90 message:@"Unrecognized option '%s'", opt]; + return 1; + } + + // av_log(NULL, AV_LOG_ERROR, "%s:%s: %f 0x%0X\n", opt, arg, av_get_double(avcodec_opts, opt, NULL), (int)av_get_int(avcodec_opts, opt, NULL)); + + //FIXME we should always use avcodec_opts, ... for storing options so there will not be any need to keep track of what i set over this + opt_names= av_realloc(opt_names, sizeof(void*)*(opt_name_count+1)); + opt_names[opt_name_count++] = (char *)o->name; + + if(avcodec_opts[0]->debug || avformat_opts->debug) + av_log_set_level(AV_LOG_DEBUG); + return 0; +} + +- (void)set_context_opts:(void *)ctx options:(void *)opts_ctx flags:(int)flags { + int i; + for(i=0; iflags & flags) == flags)) + av_set_string3(ctx, opt_names[i], str, 1, NULL); + } +} +- (void)check_audio_video_sub_inputs:(int *)has_video_ptr audio:(int *)has_audio_ptr subs:(int *)has_subtitle_ptr { + int has_video, has_audio, has_subtitle, i, j; + AVFormatContext *ic; + + has_video = 0; + has_audio = 0; + has_subtitle = 0; + for(j=0;jnb_streams;i++) { + AVCodecContext *enc = ic->streams[i]->codec; + switch(enc->codec_type) { + case AVMEDIA_TYPE_AUDIO: + has_audio = 1; + break; + case AVMEDIA_TYPE_VIDEO: + has_video = 1; + break; + case AVMEDIA_TYPE_SUBTITLE: + has_subtitle = 1; + break; + case AVMEDIA_TYPE_DATA: + case AVMEDIA_TYPE_ATTACHMENT: + case AVMEDIA_TYPE_UNKNOWN: + break; + default: + abort(); + } + } + } + *has_video_ptr = has_video; + *has_audio_ptr = has_audio; + *has_subtitle_ptr = has_subtitle; +} +- (enum CodecID)find_codec_or_die:(const char *)name type:(int)type encoder:(int)encoder strict:(int)strict { + const char *codec_string = encoder ? "encoder" : "decoder"; + AVCodec *codec; + + if(!name) + return CODEC_ID_NONE; + codec = encoder ? + avcodec_find_encoder_by_name(name) : + avcodec_find_decoder_by_name(name); + if(!codec) { + [self sendErrorCode:46 message:@"Unknown %s '%s'", codec_string, name]; + return 0; + } + if(codec->type != type) { + [self sendErrorCode:47 message:@"Invalid %s type '%s'", codec_string, name]; + return 0; + } + if(codec->capabilities & CODEC_CAP_EXPERIMENTAL && + strict > FF_COMPLIANCE_EXPERIMENTAL) { + NSString *message = [NSString stringWithFormat:@"%s '%s' is experimental and might produce bad " + "results.\nAdd '-strict experimental' if you want to use it.\n", codec_string, codec->name]; + codec = encoder ? + avcodec_find_encoder(codec->id) : + avcodec_find_decoder(codec->id); + if (!(codec->capabilities & CODEC_CAP_EXPERIMENTAL)) + message = [message stringByAppendingFormat:@"Or use the non experimental %s '%s'.\n", codec_string, codec->name]; + [self sendErrorCode:48 message:message]; + return 0; + } + return codec->id; +} +- (int64_t)parse_time_or_die:(const char *)context time:(const char *)timestr duration:(int)is_duration { + int64_t us = parse_date(timestr, is_duration); + if (us == INT64_MIN) { + [self sendErrorCode:91 message:@"Invalid %s specification for %s: %s", (is_duration ? "duration" : "date"), context, timestr]; + return -1; + } + return us; +} +- (double)parse_number_or_die:(const char *)context number:(const char *)numstr type:(int)type min:(double)min max:(double)max { + char *tail; + const char *error; + double d = strtod(numstr, &tail); + if (*tail) + error= "Expected number for %s but found: %s\n"; + else if (d < min || d > max) + error= "The value for %s was %s which is not within %f - %f\n"; + else if(type == OPT_INT64 && (int64_t)d != d) + error= "Expected int64 for %s but found %s\n"; + else + return d; + [self sendErrorCode:92 message:[NSString stringWithUTF8String:error], context, numstr, min, max]; + return -1; +} +- (void)parse_matrix_coeffs:(uint16_t *)dest matrix:(const char *)str { + int i; + const char *p = str; + for(i = 0;; i++) { + dest[i] = atoi(p); + if(i == 63) + break; + p = strchr(p, ','); + if(!p) { + [self sendErrorCode:49 message:@"Syntax error in matrix \"%s\" at coeff %d", str, i]; + return; + } + p++; + } +} +- (int)read_yesno { + int c = getchar(); + int yesno = (toupper(c) == 'Y'); + + while (c != '\n' && c != EOF) + c = getchar(); + + return yesno; +} +- (void)opt_codec:(int *)pstream_copy name:(char **)pcodec_name type:(int)codec_type arg:(const char *)arg { + av_freep(pcodec_name); + if (!strcmp(arg, "copy")) { + *pstream_copy = 1; + } else { + *pcodec_name = av_strdup(arg); + } +} +- (int64_t)getutime { +#if HAVE_GETRUSAGE + struct rusage rusage; + + getrusage(RUSAGE_SELF, &rusage); + return (rusage.ru_utime.tv_sec * 1000000LL) + rusage.ru_utime.tv_usec; +#elif HAVE_GETPROCESSTIMES + HANDLE proc; + FILETIME c, e, k, u; + proc = GetCurrentProcess(); + GetProcessTimes(proc, &c, &e, &k, &u); + return ((int64_t) u.dwHighDateTime << 32 | u.dwLowDateTime) / 10; +#else + return av_gettime(); +#endif +} + +- (int64_t)getmaxrss { +#if HAVE_GETRUSAGE && HAVE_STRUCT_RUSAGE_RU_MAXRSS + struct rusage rusage; + getrusage(RUSAGE_SELF, &rusage); + return (int64_t)rusage.ru_maxrss * 1024; +#elif HAVE_GETPROCESSMEMORYINFO + HANDLE proc; + PROCESS_MEMORY_COUNTERS memcounters; + proc = GetCurrentProcess(); + memcounters.cb = sizeof(memcounters); + GetProcessMemoryInfo(proc, &memcounters, sizeof(memcounters)); + return memcounters.PeakPagefileUsage; +#else + return 0; +#endif +} + +- (double)psnr:(double)d { + return -10.0*log(d)/log(10.0); +} +- (void)do_video_stats:(AVFormatContext *)os output:(AVOutputStream *)ost size:(int)frame_size { + AVCodecContext *enc; + int frame_number; + double ti1, bitrate, avg_bitrate; + + /* this is executed just the first time do_video_stats is called */ + if (!vstats_file) { + vstats_file = fopen(vstats_filename, "w"); + if (!vstats_file) { + [self sendErrorCode:50 message:@"Error opening %s", vstats_filename]; + stopConverting = YES; + return; + } + } + + enc = ost->st->codec; + if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { + frame_number = ost->frame_number; + fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality/(float)FF_QP2LAMBDA); + if (enc->flags&CODEC_FLAG_PSNR) + fprintf(vstats_file, "PSNR= %6.2f ", [self psnr:(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0))]); + + fprintf(vstats_file,"f_size= %6d ", frame_size); + /* compute pts value */ + ti1 = ost->sync_opts * av_q2d(enc->time_base); + if (ti1 < 0.01) + ti1 = 0.01; + + bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0; + avg_bitrate = (double)(video_size * 8) / ti1 / 1000.0; + fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", + (double)video_size / 1024, ti1, bitrate, avg_bitrate); + fprintf(vstats_file,"type= %c\n", av_get_pict_type_char(enc->coded_frame->pict_type)); + } +} +- (void)print_sdp:(AVFormatContext **)avc number:(int)n { + char sdp[2048]; + + avf_sdp_create(avc, n, sdp, sizeof(sdp)); + printf("SDP:\n%s\n", sdp); + fflush(stdout); +} +- (double)get_sync_ipts:(const AVOutputStream *)ost { + const AVInputStream *ist = ost->sync_ist; + return (double)(ist->pts - start_time)/AV_TIME_BASE; +} +- (void)write_frame:(AVFormatContext *)s packet:(AVPacket *)pkt codec:(AVCodecContext *)avctx filter:(AVBitStreamFilterContext *)bsfc { + int ret; + + while(bsfc){ + AVPacket new_pkt= *pkt; + int a= av_bitstream_filter_filter(bsfc, avctx, NULL, + &new_pkt.data, &new_pkt.size, + pkt->data, pkt->size, + pkt->flags & AV_PKT_FLAG_KEY); + if(a>0){ + av_free_packet(pkt); + new_pkt.destruct= av_destruct_packet; + } else if(a<0){ + [self sendErrorCode:51 message:@"%s failed for stream %d, codec %s", bsfc->filter->name, pkt->stream_index, (avctx->codec ? avctx->codec->name : "copy")]; + [self sendErrorCode:51 reference:"" message:a]; + if (exit_on_error) { + stopConverting = YES; + return; + } + } + *pkt= new_pkt; + + bsfc= bsfc->next; + } + + ret= av_interleaved_write_frame(s, pkt); + if(ret < 0){ + [self sendErrorCode:52 reference:"av_interleaved_write_frame()" message:ret]; + stopConverting = YES; + return; + } +} +- (void)do_subtitle_out:(AVFormatContext *)s output:(AVOutputStream *)ost stream:(AVInputStream *)ist subs:(AVSubtitle *)sub pts:(int64_t)pts { + int subtitle_out_max_size = 1024 * 1024; + int subtitle_out_size, nb, i; + AVCodecContext *enc; + AVPacket pkt; + + if (pts == AV_NOPTS_VALUE) { + [self sendErrorCode:53 message:@"Subtitle packets must have a pts"]; + if (exit_on_error) + stopConverting = YES; + return; + } + + enc = ost->st->codec; + + if (!subtitle_out) { + subtitle_out = av_malloc(subtitle_out_max_size); + } + + /* Note: DVB subtitle need one packet to draw them and one other + packet to clear them */ + /* XXX: signal it in the codec context ? */ + if (enc->codec_id == CODEC_ID_DVB_SUBTITLE) + nb = 2; + else + nb = 1; + + for(i = 0; i < nb; i++) { + sub->pts = av_rescale_q(pts, ist->st->time_base, AV_TIME_BASE_Q); + // start_display_time is required to be 0 + sub->pts += av_rescale_q(sub->start_display_time, (AVRational){1, 1000}, AV_TIME_BASE_Q); + sub->end_display_time -= sub->start_display_time; + sub->start_display_time = 0; + subtitle_out_size = avcodec_encode_subtitle(enc, subtitle_out, + subtitle_out_max_size, sub); + if (subtitle_out_size < 0) { + [self sendErrorCode:54 message:@"Subtitle encoding failed"]; + stopConverting = YES; + return; + } + + av_init_packet(&pkt); + pkt.stream_index = ost->index; + pkt.data = subtitle_out; + pkt.size = subtitle_out_size; + pkt.pts = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ost->st->time_base); + if (enc->codec_id == CODEC_ID_DVB_SUBTITLE) { + /* XXX: the pts correction is handled here. Maybe handling + it in the codec would be better */ + if (i == 0) + pkt.pts += 90 * sub->start_display_time; + else + pkt.pts += 90 * sub->end_display_time; + } + [self write_frame:s packet:&pkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][pkt.stream_index]]; + } +} +- (void)do_video_out:(AVFormatContext *)s output:(AVOutputStream *)ost stream:(AVInputStream *)ist picture:(AVFrame *)in_picture size:(int *)frame_size { + int nb_frames, i, ret; + int64_t topBand, bottomBand, leftBand, rightBand; + AVFrame *final_picture, *formatted_picture, *resampling_dst, *padding_src; + AVFrame picture_crop_temp, picture_pad_temp; + AVCodecContext *enc, *dec; + double sync_ipts; + + avcodec_get_frame_defaults(&picture_crop_temp); + avcodec_get_frame_defaults(&picture_pad_temp); + + enc = ost->st->codec; + dec = ist->st->codec; + + sync_ipts = [self get_sync_ipts:ost] / av_q2d(enc->time_base); + + /* by default, we output a single frame */ + nb_frames = 1; + + *frame_size = 0; + + if(video_sync_method){ + double vdelta = sync_ipts - ost->sync_opts; + //FIXME set to 0.5 after we fix some dts/pts bugs like in avidec.c + if (vdelta < -1.1) + nb_frames = 0; + else if (video_sync_method == 2 || (video_sync_method<0 && (s->oformat->flags & AVFMT_VARIABLE_FPS))){ + if(vdelta<=-0.6){ + nb_frames=0; + }else if(vdelta>0.6) + ost->sync_opts= lrintf(sync_ipts); + }else if (vdelta > 1.1) + nb_frames = (int)lrintf(vdelta); + //fprintf(stderr, "vdelta:%f, ost->sync_opts:%"PRId64", ost->sync_ipts:%f nb_frames:%d\n", vdelta, ost->sync_opts, [self get_sync_ipts:ost], nb_frames); + if (nb_frames == 0){ + ++nb_frames_drop; + if (verbose>2) + fprintf(stderr, "*** drop!\n"); + }else if (nb_frames > 1) { + nb_frames_dup += nb_frames - 1; + if (verbose>2) + fprintf(stderr, "*** %d dup!\n", nb_frames-1); + } + }else + ost->sync_opts= lrintf(sync_ipts); + + nb_frames= FFMIN(nb_frames, max_frames[AVMEDIA_TYPE_VIDEO] - ost->frame_number); + if (nb_frames <= 0) + return; + + if (ost->video_crop) { + if (av_picture_crop((AVPicture *)&picture_crop_temp, (AVPicture *)in_picture, dec->pix_fmt, ost->topBand, ost->leftBand) < 0) { + [self sendErrorCode:55 message:@"error cropping picture"]; + if (exit_on_error) + stopConverting = YES; + return; + } + formatted_picture = &picture_crop_temp; + } else { + formatted_picture = in_picture; + } + + final_picture = formatted_picture; + padding_src = formatted_picture; + resampling_dst = &ost->pict_tmp; + if (ost->video_pad) { + final_picture = &ost->pict_tmp; + if (ost->video_resample) { + if (av_picture_crop((AVPicture *)&picture_pad_temp, (AVPicture *)final_picture, enc->pix_fmt, ost->padtop, ost->padleft) < 0) { + [self sendErrorCode:56 message:@"error padding picture"]; + if (exit_on_error) + stopConverting = YES; + return; + } + resampling_dst = &picture_pad_temp; + } + } + + if( (ost->resample_height != (ist->st->codec->height - (ost->topBand + ost->bottomBand))) + || (ost->resample_width != (ist->st->codec->width - (ost->leftBand + ost->rightBand))) + || (ost->resample_pix_fmt!= ist->st->codec->pix_fmt) ) { + + fprintf(stderr,"Input Stream #%d.%d frame size changed to %dx%d, %s\n", ist->file_index, ist->index, ist->st->codec->width, ist->st->codec->height,avcodec_get_pix_fmt_name(ist->st->codec->pix_fmt)); + if(!ost->video_resample) { + stopConverting = YES; + return; + } + } + + if (ost->video_resample) { + padding_src = NULL; + final_picture = &ost->pict_tmp; + if( (ost->resample_height != (ist->st->codec->height - (ost->topBand + ost->bottomBand))) + || (ost->resample_width != (ist->st->codec->width - (ost->leftBand + ost->rightBand))) + || (ost->resample_pix_fmt!= ist->st->codec->pix_fmt) ) { + + /* keep bands proportional to the frame size */ + topBand = ((int64_t)ist->st->codec->height * ost->original_topBand / ost->original_height) & ~1; + bottomBand = ((int64_t)ist->st->codec->height * ost->original_bottomBand / ost->original_height) & ~1; + leftBand = ((int64_t)ist->st->codec->width * ost->original_leftBand / ost->original_width) & ~1; + rightBand = ((int64_t)ist->st->codec->width * ost->original_rightBand / ost->original_width) & ~1; + + /* sanity check to ensure no bad band sizes sneak in */ + assert(topBand <= INT_MAX && topBand >= 0); + assert(bottomBand <= INT_MAX && bottomBand >= 0); + assert(leftBand <= INT_MAX && leftBand >= 0); + assert(rightBand <= INT_MAX && rightBand >= 0); + + ost->topBand = (int)topBand; + ost->bottomBand = (int)bottomBand; + ost->leftBand = (int)leftBand; + ost->rightBand = (int)rightBand; + + ost->resample_height = ist->st->codec->height - (ost->topBand + ost->bottomBand); + ost->resample_width = ist->st->codec->width - (ost->leftBand + ost->rightBand); + ost->resample_pix_fmt= ist->st->codec->pix_fmt; + + /* initialize a new scaler context */ + sws_freeContext(ost->img_resample_ctx); + sws_flags = (unsigned int)av_get_int(sws_opts, "sws_flags", NULL); + ost->img_resample_ctx = sws_getContext( + ist->st->codec->width - (ost->leftBand + ost->rightBand), + ist->st->codec->height - (ost->topBand + ost->bottomBand), + ist->st->codec->pix_fmt, + ost->st->codec->width - (ost->padleft + ost->padright), + ost->st->codec->height - (ost->padtop + ost->padbottom), + ost->st->codec->pix_fmt, + sws_flags, NULL, NULL, NULL); + if (ost->img_resample_ctx == NULL) { + [self sendErrorCode:57 message:@"Cannot get resampling context"]; + stopConverting = YES; + return; + } + } + sws_scale(ost->img_resample_ctx, (const uint8_t *const *)formatted_picture->data, formatted_picture->linesize, + 0, ost->resample_height, resampling_dst->data, resampling_dst->linesize); + } + + if (ost->video_pad) { + av_picture_pad((AVPicture*)final_picture, (AVPicture *)padding_src, + enc->height, enc->width, enc->pix_fmt, + ost->padtop, ost->padbottom, ost->padleft, ost->padright, padcolor); + } + + /* duplicates frame if needed */ + for(i=0;iindex; + + if (s->oformat->flags & AVFMT_RAWPICTURE) { + /* raw pictures are written as AVPicture structure to + avoid any copies. We support temorarily the older + method. */ + AVFrame* old_frame = enc->coded_frame; + enc->coded_frame = dec->coded_frame; //FIXME/XXX remove this hack + pkt.data= (uint8_t *)final_picture; + pkt.size= sizeof(AVPicture); + pkt.pts= av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); + pkt.flags |= AV_PKT_FLAG_KEY; + + [self write_frame:s packet:&pkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][pkt.stream_index]]; + enc->coded_frame = old_frame; + } else { + AVFrame big_picture; + + big_picture= *final_picture; + /* better than nothing: use input picture interlaced + settings */ + big_picture.interlaced_frame = in_picture->interlaced_frame; + if(avcodec_opts[AVMEDIA_TYPE_VIDEO]->flags & (CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_INTERLACED_ME)){ + if(top_field_first == -1) + big_picture.top_field_first = in_picture->top_field_first; + else + big_picture.top_field_first = top_field_first; + } + + /* handles sameq here. This is not correct because it may + not be a global option */ + if (same_quality) { + big_picture.quality = ist->st->quality; + }else + big_picture.quality = ost->st->quality; + if(!me_threshold) + big_picture.pict_type = 0; + // big_picture.pts = AV_NOPTS_VALUE; + big_picture.pts= ost->sync_opts; + // big_picture.pts= av_rescale(ost->sync_opts, AV_TIME_BASE*(int64_t)enc->time_base.num, enc->time_base.den); + //av_log(NULL, AV_LOG_DEBUG, "%"PRId64" -> encoder\n", ost->sync_opts); + ret = avcodec_encode_video(enc, + bit_buffer, bit_buffer_size, + &big_picture); + if (ret < 0) { + [self sendErrorCode:58 message:@"Video encoding failed"]; + stopConverting = YES; + return; + } + + if(ret>0){ + pkt.data= bit_buffer; + pkt.size= ret; + if(enc->coded_frame->pts != AV_NOPTS_VALUE) + pkt.pts= av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); + /*av_log(NULL, AV_LOG_DEBUG, "encoder -> %"PRId64"/%"PRId64"\n", + pkt.pts != AV_NOPTS_VALUE ? av_rescale(pkt.pts, enc->time_base.den, AV_TIME_BASE*(int64_t)enc->time_base.num) : -1, + pkt.dts != AV_NOPTS_VALUE ? av_rescale(pkt.dts, enc->time_base.den, AV_TIME_BASE*(int64_t)enc->time_base.num) : -1);*/ + + if(enc->coded_frame->key_frame) + pkt.flags |= AV_PKT_FLAG_KEY; + [self write_frame:s packet:&pkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][pkt.stream_index]]; + *frame_size = ret; + video_size += ret; + //fprintf(stderr,"\nFrame: %3d size: %5d type: %d", + // enc->frame_number-1, ret, enc->pict_type); + /* if two pass, output log */ + if (ost->logfile && enc->stats_out) { + fprintf(ost->logfile, "%s", enc->stats_out); + } + } + } + ost->sync_opts++; + ost->frame_number++; + } +} +- (void)do_audio_out:(AVFormatContext *)s output:(AVOutputStream *)ost stream:(AVInputStream *)ist buffer:(unsigned char *)buf size:(int)size { + uint8_t *buftmp; + int64_t audio_out_size, audio_buf_size; + int64_t allocated_for_size= size; + + int size_out, frame_bytes, ret; + AVCodecContext *enc= ost->st->codec; + AVCodecContext *dec= ist->st->codec; + int osize= av_get_bits_per_sample_format(enc->sample_fmt)/8; + int isize= av_get_bits_per_sample_format(dec->sample_fmt)/8; + const int coded_bps = av_get_bits_per_sample(enc->codec->id); + +need_realloc: + audio_buf_size= (allocated_for_size + isize*dec->channels - 1) / (isize*dec->channels); + audio_buf_size= (audio_buf_size*enc->sample_rate + dec->sample_rate) / dec->sample_rate; + audio_buf_size= audio_buf_size*2 + 10000; //safety factors for the deprecated resampling API + audio_buf_size*= osize*enc->channels; + + audio_out_size= FFMAX(audio_buf_size, enc->frame_size * osize * enc->channels); + if(coded_bps > 8*osize) + audio_out_size= audio_out_size * coded_bps / (8*osize); + audio_out_size += FF_MIN_BUFFER_SIZE; + + if(audio_out_size > INT_MAX || audio_buf_size > INT_MAX){ + [self sendErrorCode:59 message:@"Buffer sizes too large"]; + stopConverting = YES; + return; + } + + av_fast_malloc(&audio_buf, (unsigned int *)&allocated_audio_buf_size, (unsigned int)audio_buf_size); + av_fast_malloc(&audio_out, (unsigned int *)&allocated_audio_out_size, (unsigned int)audio_out_size); + if (!audio_buf || !audio_out){ + [self sendErrorCode:60 message:@"Out of memory in do_audio_out"]; + stopConverting = YES; + return; + } + + if (enc->channels != dec->channels) + ost->audio_resample = 1; + + if (ost->audio_resample && !ost->resample) { + if (dec->sample_fmt != SAMPLE_FMT_S16) + fprintf(stderr, "Warning, using s16 intermediate sample format for resampling\n"); + ost->resample = av_audio_resample_init(enc->channels, dec->channels, + enc->sample_rate, dec->sample_rate, + enc->sample_fmt, dec->sample_fmt, + 16, 10, 0, 0.8); + if (!ost->resample) { + [self sendErrorCode:61 message:@"Can not resample %d channels @ %d Hz to %d channels @ %d Hz", dec->channels, dec->sample_rate, enc->channels, enc->sample_rate]; + stopConverting = YES; + return; + } + } + +#define MAKE_SFMT_PAIR(a,b) ((a)+SAMPLE_FMT_NB*(b)) + if (!ost->audio_resample && dec->sample_fmt!=enc->sample_fmt && + MAKE_SFMT_PAIR(enc->sample_fmt,dec->sample_fmt)!=ost->reformat_pair) { + if (ost->reformat_ctx) + av_audio_convert_free(ost->reformat_ctx); + ost->reformat_ctx = av_audio_convert_alloc(enc->sample_fmt, 1, + dec->sample_fmt, 1, NULL, 0); + if (!ost->reformat_ctx) { + [self sendErrorCode:62 message:@"Cannot convert %s sample format to %s sample format", avcodec_get_sample_fmt_name(dec->sample_fmt), avcodec_get_sample_fmt_name(enc->sample_fmt)]; + stopConverting = YES; + return; + + } + ost->reformat_pair=MAKE_SFMT_PAIR(enc->sample_fmt,dec->sample_fmt); + } + + if(audio_sync_method){ + double delta = [self get_sync_ipts:ost] * enc->sample_rate - ost->sync_opts + - av_fifo_size(ost->fifo)/(ost->st->codec->channels * 2); + double idelta= delta*ist->st->codec->sample_rate / enc->sample_rate; + int byte_delta= ((int)idelta)*2*ist->st->codec->channels; + + //FIXME resample delay + if(fabs(delta) > 50){ + if(ist->is_start || fabs(delta) > audio_drift_threshold*enc->sample_rate){ + if(byte_delta < 0){ + byte_delta= FFMAX(byte_delta, -size); + size += byte_delta; + buf -= byte_delta; + if(verbose > 2) + fprintf(stderr, "discarding %d audio samples\n", (int)-delta); + if(!size) + return; + ist->is_start=0; + }else{ + input_tmp= av_realloc(input_tmp, byte_delta + size); + + if(byte_delta > allocated_for_size - size){ + allocated_for_size= byte_delta + (int64_t)size; + goto need_realloc; + } + ist->is_start=0; + + memset(input_tmp, 0, byte_delta); + memcpy(input_tmp + byte_delta, buf, size); + buf= input_tmp; + size += byte_delta; + if(verbose > 2) + fprintf(stderr, "adding %d audio samples of silence\n", (int)delta); + } + }else if(audio_sync_method>1){ + int comp= av_clip(delta, -audio_sync_method, audio_sync_method); + assert(ost->audio_resample); + if(verbose > 2) + fprintf(stderr, "compensating audio timestamp drift:%f compensation:%d in:%d\n", delta, comp, enc->sample_rate); + // fprintf(stderr, "drift:%f len:%d opts:%"PRId64" ipts:%"PRId64" fifo:%d\n", delta, -1, ost->sync_opts, (int64_t)([self get_sync_ipts:ost] * enc->sample_rate), av_fifo_size(ost->fifo)/(ost->st->codec->channels * 2)); + av_resample_compensate(*(struct AVResampleContext**)ost->resample, comp, enc->sample_rate); + } + } + }else + ost->sync_opts= lrintf([self get_sync_ipts:ost] * enc->sample_rate) + - av_fifo_size(ost->fifo)/(ost->st->codec->channels * 2); //FIXME wrong + + if (ost->audio_resample) { + buftmp = audio_buf; + size_out = audio_resample(ost->resample, + (short *)buftmp, (short *)buf, + size / (ist->st->codec->channels * isize)); + size_out = size_out * enc->channels * osize; + } else { + buftmp = buf; + size_out = size; + } + + if (!ost->audio_resample && dec->sample_fmt!=enc->sample_fmt) { + const void *ibuf[6]= {buftmp}; + void *obuf[6]= {audio_buf}; + int istride[6]= {isize}; + int ostride[6]= {osize}; + int len= size_out/istride[0]; + if (av_audio_convert(ost->reformat_ctx, obuf, ostride, ibuf, istride, len)<0) { + [self sendErrorCode:63 message:@"av_audio_convert() failed"]; + if (exit_on_error) + stopConverting = YES; + return; + } + buftmp = audio_buf; + size_out = len*osize; + } + + /* now encode as many frames as possible */ + if (enc->frame_size > 1) { + /* output resampled raw samples */ + if (av_fifo_realloc2(ost->fifo, av_fifo_size(ost->fifo) + size_out) < 0) { + [self sendErrorCode:64 message:@"av_fifo_realloc2() failed"]; + stopConverting = YES; + return; + } + av_fifo_generic_write(ost->fifo, buftmp, size_out, NULL); + + frame_bytes = enc->frame_size * osize * enc->channels; + + while (av_fifo_size(ost->fifo) >= frame_bytes) { + AVPacket pkt; + av_init_packet(&pkt); + + av_fifo_generic_read(ost->fifo, audio_buf, frame_bytes, NULL); + + //FIXME pass ost->sync_opts as AVFrame.pts in avcodec_encode_audio() + + ret = avcodec_encode_audio(enc, audio_out, (int)audio_out_size, + (short *)audio_buf); + if (ret < 0) { + [self sendErrorCode:65 message:@"Audio encoding failed"]; + stopConverting = YES; + return; + } + audio_size += ret; + pkt.stream_index= ost->index; + pkt.data= audio_out; + pkt.size= ret; + if(enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) + pkt.pts= av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); + pkt.flags |= AV_PKT_FLAG_KEY; + [self write_frame:s packet:&pkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][pkt.stream_index]]; + + ost->sync_opts += enc->frame_size; + } + } else { + AVPacket pkt; + av_init_packet(&pkt); + + ost->sync_opts += size_out / (osize * enc->channels); + + /* output a pcm frame */ + /* determine the size of the coded buffer */ + size_out /= osize; + if (coded_bps) + size_out = size_out*coded_bps/8; + + if(size_out > audio_out_size){ + [self sendErrorCode:66 message:@"Internal error, buffer size too small"]; + stopConverting = YES; + return; + } + + //FIXME pass ost->sync_opts as AVFrame.pts in avcodec_encode_audio() + ret = avcodec_encode_audio(enc, audio_out, size_out, + (short *)buftmp); + if (ret < 0) { + [self sendErrorCode:67 message:@"Audio encoding failed"]; + stopConverting = YES; + return; + } + audio_size += ret; + pkt.stream_index= ost->index; + pkt.data= audio_out; + pkt.size= ret; + if(enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) + pkt.pts= av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); + pkt.flags |= AV_PKT_FLAG_KEY; + [self write_frame:s packet:&pkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][pkt.stream_index]]; + } +} +- (void)pre_process_video_frame:(AVInputStream *)ist picture:(AVPicture *)picture buffer:(void **)bufp { + AVCodecContext *dec; + AVPicture *picture2; + AVPicture picture_tmp; + uint8_t *buf = 0; + + dec = ist->st->codec; + + /* deinterlace : must be done before any resize */ + if (do_deinterlace) { + int size; + + /* create temporary picture */ + size = avpicture_get_size(dec->pix_fmt, dec->width, dec->height); + buf = av_malloc(size); + if (!buf) + return; + + picture2 = &picture_tmp; + avpicture_fill(picture2, buf, dec->pix_fmt, dec->width, dec->height); + + if(avpicture_deinterlace(picture2, picture, + dec->pix_fmt, dec->width, dec->height) < 0) { + /* if error, do not deinterlace */ + fprintf(stderr, "Deinterlacing failed\n"); + av_free(buf); + buf = NULL; + picture2 = picture; + } + } else { + picture2 = picture; + } + + if (picture != picture2) + *picture = *picture2; + *bufp = buf; +} +- (int)output_packet:(AVInputStream *)ist index:(int)ist_index table:(AVOutputStream **)ost_table streams:(int)nb_ostreams packet:(const AVPacket *)pkt { + AVFormatContext *os; + AVOutputStream *ost; + int ret, i; + int got_picture; + AVFrame picture; + void *buffer_to_free; + AVSubtitle subtitle, *subtitle_to_free; + int got_subtitle; + AVPacket avpkt; + int bps = av_get_bits_per_sample_format(ist->st->codec->sample_fmt)>>3; + + if(ist->next_pts == AV_NOPTS_VALUE) + ist->next_pts= ist->pts; + + if (pkt == NULL) { + /* EOF handling */ + av_init_packet(&avpkt); + avpkt.data = NULL; + avpkt.size = 0; + goto handle_eof; + } else { + avpkt = *pkt; + } + + if(pkt->dts != AV_NOPTS_VALUE) + ist->next_pts = ist->pts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); + + //while we have more to decode or while the decoder did output something on EOF + while (avpkt.size > 0 || (!pkt && ist->next_pts != ist->pts)) { + uint8_t *data_buf, *decoded_data_buf; + int data_size, decoded_data_size; + handle_eof: + ist->pts= ist->next_pts; + + if(avpkt.size && avpkt.size != pkt->size && + ((!ist->showed_multi_packet_warning && verbose>0) || verbose>1)){ + fprintf(stderr, "Multiple frames in a packet from stream %d\n", pkt->stream_index); + ist->showed_multi_packet_warning=1; + } + + /* decode the packet if needed */ + decoded_data_buf = NULL; /* fail safe */ + decoded_data_size= 0; + data_buf = avpkt.data; + data_size = avpkt.size; + subtitle_to_free = NULL; + if (ist->decoding_needed) { + switch(ist->st->codec->codec_type) { + case AVMEDIA_TYPE_AUDIO:{ + if(pkt && samples_size < FFMAX(pkt->size*sizeof(*samples), AVCODEC_MAX_AUDIO_FRAME_SIZE)) { + samples_size = FFMAX(pkt->size*sizeof(*samples), AVCODEC_MAX_AUDIO_FRAME_SIZE); + av_free(samples); + samples= av_malloc(samples_size); + } + decoded_data_size= samples_size; + /* XXX: could avoid copy if PCM 16 bits with same + endianness as CPU */ + ret = avcodec_decode_audio3(ist->st->codec, samples, &decoded_data_size, + &avpkt); + if (ret < 0) + goto fail_decode; + avpkt.data += ret; + avpkt.size -= ret; + data_size = ret; + /* Some bug in mpeg audio decoder gives */ + /* decoded_data_size < 0, it seems they are overflows */ + if (decoded_data_size <= 0) { + /* no audio frame */ + continue; + } + decoded_data_buf = (uint8_t *)samples; + ist->next_pts += ((int64_t)AV_TIME_BASE/bps * decoded_data_size) / + (ist->st->codec->sample_rate * ist->st->codec->channels); + break;} + case AVMEDIA_TYPE_VIDEO: + decoded_data_size = (ist->st->codec->width * ist->st->codec->height * 3) / 2; + /* XXX: allocate picture correctly */ + avcodec_get_frame_defaults(&picture); + + ret = avcodec_decode_video2(ist->st->codec, + &picture, &got_picture, &avpkt); + ist->st->quality= picture.quality; + if (ret < 0) + goto fail_decode; + if (!got_picture) { + /* no picture yet */ + goto discard_packet; + } + if (ist->st->codec->time_base.num != 0) { + int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame; + ist->next_pts += ((int64_t)AV_TIME_BASE * + ist->st->codec->time_base.num * ticks) / + ist->st->codec->time_base.den; + } + avpkt.size = 0; + break; + case AVMEDIA_TYPE_SUBTITLE: + ret = avcodec_decode_subtitle2(ist->st->codec, + &subtitle, &got_subtitle, &avpkt); + if (ret < 0) + goto fail_decode; + if (!got_subtitle) { + goto discard_packet; + } + subtitle_to_free = &subtitle; + avpkt.size = 0; + break; + default: + goto fail_decode; + } + } else { + switch(ist->st->codec->codec_type) { + case AVMEDIA_TYPE_AUDIO: + ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) / + ist->st->codec->sample_rate; + break; + case AVMEDIA_TYPE_VIDEO: + if (ist->st->codec->time_base.num != 0) { + int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame; + ist->next_pts += ((int64_t)AV_TIME_BASE * + ist->st->codec->time_base.num * ticks) / + ist->st->codec->time_base.den; + } + break; + default: + break; + } + ret = avpkt.size; + avpkt.size = 0; + } + + buffer_to_free = NULL; + if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + [self pre_process_video_frame:ist picture:(AVPicture *)&picture buffer:&buffer_to_free]; + } + + // preprocess audio (volume) + if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { + if (audio_volume != 256) { + short *volp; + volp = samples; + for(i=0;i<(decoded_data_size / sizeof(short));i++) { + int v = ((*volp) * audio_volume + 128) >> 8; + if (v < -32768) v = -32768; + if (v > 32767) v = 32767; + *volp++ = v; + } + } + } + + /* frame rate emulation */ + if (rate_emu) { + int64_t pts = av_rescale(ist->pts, 1000000, AV_TIME_BASE); + int64_t now = av_gettime() - ist->start; + if (pts > now) + usleep((unsigned int)(pts - now)); + } + + /* if output time reached then transcode raw format, + encode packets and output them */ + if (start_time == 0 || ist->pts >= start_time) + for(i=0;isource_index == ist_index) { + os = output_files[ost->file_index]; + + /* set the input output pts pairs */ + //ost->sync_ipts = (double)(ist->pts + input_files_ts_offset[ist->file_index] - start_time)/ AV_TIME_BASE; + + if (ost->encoding_needed) { + assert(ist->decoding_needed); + switch(ost->st->codec->codec_type) { + case AVMEDIA_TYPE_AUDIO: + [self do_audio_out:os output:ost stream:ist buffer:decoded_data_buf size:decoded_data_size]; + break; + case AVMEDIA_TYPE_VIDEO: + [self do_video_out:os output:ost stream:ist picture:&picture size:&frame_size]; + if (vstats_filename && frame_size) + [self do_video_stats:os output:ost size:frame_size]; + break; + case AVMEDIA_TYPE_SUBTITLE: + [self do_subtitle_out:os output:ost stream:ist subs:&subtitle pts:pkt->pts]; + break; + default: + abort(); + } + } else { + AVFrame avframe; //FIXME/XXX remove this + AVPacket opkt; + int64_t ost_tb_start_time= av_rescale_q(start_time, AV_TIME_BASE_Q, ost->st->time_base); + + av_init_packet(&opkt); + + if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) && !copy_initial_nonkeyframes) + continue; + + /* no reencoding needed : output the packet directly */ + /* force the input stream PTS */ + + avcodec_get_frame_defaults(&avframe); + ost->st->codec->coded_frame= &avframe; + avframe.key_frame = pkt->flags & AV_PKT_FLAG_KEY; + + if(ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) + audio_size += data_size; + else if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + video_size += data_size; + ost->sync_opts++; + } + + opkt.stream_index= ost->index; + if(pkt->pts != AV_NOPTS_VALUE) + opkt.pts= av_rescale_q(pkt->pts, ist->st->time_base, ost->st->time_base) - ost_tb_start_time; + else + opkt.pts= AV_NOPTS_VALUE; + + if (pkt->dts == AV_NOPTS_VALUE) + opkt.dts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->st->time_base); + else + opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->st->time_base); + opkt.dts -= ost_tb_start_time; + + opkt.duration = (int)av_rescale_q(pkt->duration, ist->st->time_base, ost->st->time_base); + opkt.flags= pkt->flags; + + //FIXME remove the following 2 lines they shall be replaced by the bitstream filters + if( ost->st->codec->codec_id != CODEC_ID_H264 + && ost->st->codec->codec_id != CODEC_ID_MPEG1VIDEO + && ost->st->codec->codec_id != CODEC_ID_MPEG2VIDEO + ) { + if(av_parser_change(ist->st->parser, ost->st->codec, &opkt.data, &opkt.size, data_buf, data_size, pkt->flags & AV_PKT_FLAG_KEY)) + opkt.destruct= av_destruct_packet; + } else { + opkt.data = data_buf; + opkt.size = data_size; + } + + [self write_frame:os packet:&opkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][opkt.stream_index]]; + ost->st->codec->frame_number++; + ost->frame_number++; + av_free_packet(&opkt); + } + } + } + av_free(buffer_to_free); + /* XXX: allocate the subtitles in the codec ? */ + if (subtitle_to_free) { + if (subtitle_to_free->rects != NULL) { + for (i = 0; i < subtitle_to_free->num_rects; i++) { + av_freep(&subtitle_to_free->rects[i]->pict.data[0]); + av_freep(&subtitle_to_free->rects[i]->pict.data[1]); + av_freep(&subtitle_to_free->rects[i]); + } + av_freep(&subtitle_to_free->rects); + } + subtitle_to_free->num_rects = 0; + subtitle_to_free = NULL; + } + } +discard_packet: + if (pkt == NULL) { + /* EOF handling */ + + for(i=0;isource_index == ist_index) { + AVCodecContext *enc= ost->st->codec; + os = output_files[ost->file_index]; + + if(ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO && enc->frame_size <=1) + continue; + if(ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && (os->oformat->flags & AVFMT_RAWPICTURE)) + continue; + + if (ost->encoding_needed) { + for(;;) { + AVPacket pkt; + int fifo_bytes; + av_init_packet(&pkt); + pkt.stream_index= ost->index; + + switch(ost->st->codec->codec_type) { + case AVMEDIA_TYPE_AUDIO: + fifo_bytes = av_fifo_size(ost->fifo); + ret = 0; + /* encode any samples remaining in fifo */ + if (fifo_bytes > 0) { + int osize = av_get_bits_per_sample_format(enc->sample_fmt) >> 3; + int fs_tmp = enc->frame_size; + + av_fifo_generic_read(ost->fifo, samples, fifo_bytes, NULL); + if (enc->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) { + enc->frame_size = fifo_bytes / (osize * enc->channels); + } else { /* pad */ + int frame_bytes = enc->frame_size*osize*enc->channels; + if (samples_size < frame_bytes) { + stopConverting = YES; + goto fail_decode; + } + memset((uint8_t*)samples+fifo_bytes, 0, frame_bytes - fifo_bytes); + } + + ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, samples); + pkt.duration = (int)av_rescale((int64_t)enc->frame_size*ost->st->time_base.den, + ost->st->time_base.num, enc->sample_rate); + enc->frame_size = fs_tmp; + } + if(ret <= 0) { + ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, NULL); + } + if (ret < 0) { + [self sendErrorCode:68 message:@"Audio encoding failed"]; + stopConverting = YES; + goto fail_decode; + } + audio_size += ret; + pkt.flags |= AV_PKT_FLAG_KEY; + break; + case AVMEDIA_TYPE_VIDEO: + ret = avcodec_encode_video(enc, bit_buffer, bit_buffer_size, NULL); + if (ret < 0) { + [self sendErrorCode:69 message:@"Video encoding failed"]; + stopConverting = YES; + goto fail_decode; + } + video_size += ret; + if(enc->coded_frame && enc->coded_frame->key_frame) + pkt.flags |= AV_PKT_FLAG_KEY; + if (ost->logfile && enc->stats_out) { + fprintf(ost->logfile, "%s", enc->stats_out); + } + break; + default: + ret=-1; + } + + if(ret<=0) + break; + pkt.data= bit_buffer; + pkt.size= ret; + if(enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) + pkt.pts= av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); + [self write_frame:os packet:&pkt codec:ost->st->codec filter:bitstream_filters[ost->file_index][pkt.stream_index]]; + } + } + } + } + } + + return 0; +fail_decode: + return -1; +} +- (int)copy_chapters:(int)infile output:(int)outfile { + AVFormatContext *is = input_files[infile]; + AVFormatContext *os = output_files[outfile]; + int i; + + for (i = 0; i < is->nb_chapters; i++) { + AVChapter *in_ch = is->chapters[i], *out_ch; + AVMetadataTag *t = NULL; + int64_t ts_off = av_rescale_q(start_time - input_files_ts_offset[infile], + AV_TIME_BASE_Q, in_ch->time_base); + int64_t rt = (recording_time == INT64_MAX) ? INT64_MAX : + av_rescale_q(recording_time, AV_TIME_BASE_Q, in_ch->time_base); + + + if (in_ch->end < ts_off) + continue; + if (rt != INT64_MAX && in_ch->start > rt + ts_off) + break; + + out_ch = av_mallocz(sizeof(AVChapter)); + if (!out_ch) + return AVERROR(ENOMEM); + + out_ch->id = in_ch->id; + out_ch->time_base = in_ch->time_base; + out_ch->start = FFMAX(0, in_ch->start - ts_off); + out_ch->end = FFMIN(rt, in_ch->end - ts_off); + + while ((t = av_metadata_get(in_ch->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) + av_metadata_set2(&out_ch->metadata, t->key, t->value, 0); + + os->nb_chapters++; + os->chapters = av_realloc(os->chapters, sizeof(AVChapter)*os->nb_chapters); + if (!os->chapters) + return AVERROR(ENOMEM); + os->chapters[os->nb_chapters - 1] = out_ch; + } + return 0; +} +- (int)read_file:(const char *)filename buffer:(char **)bufptr size:(size_t *)size { + FILE *f = fopen(filename, "rb"); + + if (!f) { + fprintf(stderr, "Cannot read file '%s': %s\n", filename, strerror(errno)); + return AVERROR(errno); + } + fseek(f, 0, SEEK_END); + *size = ftell(f); + fseek(f, 0, SEEK_SET); + *bufptr = av_malloc((unsigned int)*size + 1); + if (!*bufptr) { + fprintf(stderr, "Could not allocate file buffer\n"); + fclose(f); + return AVERROR(ENOMEM); + } + fread(*bufptr, 1, *size, f); + (*bufptr)[*size++] = '\0'; + + fclose(f); + return 0; +} +- (void)send_report:(AVFormatContext **)theOutput_files inputFiles:(AVFormatContext **)theInput_files table:(AVOutputStream **)ost_table streams:(int)nb_ostreams lastReport:(int)is_last_report { + char buf[1024]; + AVOutputStream *ost; + AVFormatContext *oc = theOutput_files[0], *input = theInput_files[0]; + int64_t total_size; + AVCodecContext *enc; + int frame_number = 0, fps = 0, vid = 0; + double quality = 0, bitrate = 0, time = 0, pts = 0; + + if (!is_last_report) { + int64_t cur_time; + /* display the report every 0.5 seconds */ + cur_time = av_gettime(); + if (last_time == -1) { + last_time = cur_time; + return; + } + if ((cur_time - last_time) < 500000) + return; + last_time = cur_time; + } + + total_size = url_fsize(oc->pb); + if(total_size<0) // FIXME improve url_fsize() so it works with non seekable output too + total_size= url_ftell(oc->pb); + + buf[0] = '\0'; + time = 1e10; + + for (int i=0; ist->codec; + if (vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) + quality = (!ost->st->stream_copy ? enc->coded_frame->quality/(float)FF_QP2LAMBDA : -1); + if (!vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) { + float t = (av_gettime()-timer_start) / 1000000.0; + + frame_number = ost->frame_number; + fps = ((t>1)?(int)(frame_number/t+0.5) : 0); + quality = (!ost->st->stream_copy ? enc->coded_frame->quality/(float)FF_QP2LAMBDA : -1); + if(qp_hist){ + int j; + int qp= (int)lrintf(enc->coded_frame->quality/(float)FF_QP2LAMBDA); + if(qp>=0 && qpflags&CODEC_FLAG_PSNR){ + int j; + double error, error_sum=0; + double scale, scale_sum=0; + char type[3]= {'Y','U','V'}; + snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " PSNR="); + for(j=0; j<3; j++){ + if(is_last_report){ + error= enc->error[j]; + scale= enc->width*enc->height*255.0*255.0*frame_number; + }else{ + error= enc->coded_frame->error[j]; + scale= enc->width*enc->height*255.0*255.0; + } + if(j) scale/=4; + error_sum += error; + scale_sum += scale; + snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%c:%2.2f ", type[j], [self psnr:(error/scale)]); + } + snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "*:%2.2f ", [self psnr:(error_sum/scale_sum)]); + } + vid = 1; + } + /* compute min output value */ + pts = (double)ost->st->pts.val * av_q2d(ost->st->time_base); + if ((pts < time) && (pts > 0)) + time = pts; + } + if (time < 0.01) + time = 0.01; + + bitrate = (double)(total_size * 8) / time / 1000.0; + + if (verbose || is_last_report) { + if (verbose >= 0 && buf[0]!='\0') + fprintf(stderr, "%s \r", buf); + + fflush(stderr); + } + + if (is_last_report && verbose >= 0){ + int64_t raw= audio_size + video_size + extra_size; + fprintf(stderr, "\n"); + fprintf(stderr, "video:%1.0fkB audio:%1.0fkB global headers:%1.0fkB muxing overhead %f%%\n", + video_size/1024.0, + audio_size/1024.0, + extra_size/1024.0, + 100.0*(total_size - raw)/raw + ); + } + if ([delegate respondsToSelector:@selector(updateStatus:estimatedTime:currentFrame:fps:quality:size:bitrate:time:video:)]) { + double percentDone, estimatedTime, durration = input->duration/1000000; + percentDone = time/durration; + estimatedTime = (durration-time)/(time-previousTime); + [delegate updateStatus:percentDone estimatedTime:estimatedTime currentFrame:frame_number fps:fps quality:quality size:total_size bitrate:bitrate time:time video:vid]; + } + previousTime = time; +} +- (int)av_transcode:(AVFormatContext **)theOutput_files ouputCount:(int)theNB_output_files inputFiles:(AVFormatContext **)theInput_files inputCount:(int)theNB_input_files maps:(AVStreamMap *)theStream_maps mapsCount:(int)theNB_stream_maps { + int ret = 0, i, j, k, n, nb_istreams = 0, nb_ostreams = 0; + AVFormatContext *is, *os; + AVCodecContext *codec, *icodec; + AVOutputStream *ost, **ost_table = NULL; + AVInputStream *ist, **ist_table = NULL; + AVInputFile *file_table; + char error[1024]; + int want_sdp = 1; + uint8_t no_packet[MAX_FILES]={0}; + int no_packet_count=0; + + file_table= av_mallocz(theNB_input_files * sizeof(AVInputFile)); + if (!file_table) + goto fail; + + /* input stream init */ + j = 0; + for(i=0;inb_streams; + j += is->nb_streams; + } + nb_istreams = j; + + ist_table = av_mallocz(nb_istreams * sizeof(AVInputStream *)); + if (!ist_table) + goto fail; + + for(i=0;inb_streams;k++) { + ist = ist_table[j++]; + ist->st = is->streams[k]; + ist->file_index = i; + ist->index = k; + ist->discard = 1; /* the stream is discarded by default + (changed later) */ + + if (rate_emu) { + ist->start = av_gettime(); + } + } + } + + /* output stream init */ + nb_ostreams = 0; + for(i=0;inb_streams) { + dump_format(theOutput_files[i], i, theOutput_files[i]->filename, 1); + [self sendErrorCode:70 message:@"Output file #%d does not contain any stream", i]; + stopConverting = YES; + return -1; + } + nb_ostreams += os->nb_streams; + } + if (theNB_stream_maps > 0 && theNB_stream_maps != nb_ostreams) { + [self sendErrorCode:71 message:@"Number of stream maps must match number of output streams"]; + stopConverting = YES; + return -1; + } + + /* Sanity check the mapping args -- do the input files & streams exist? */ + for(i=0;i theNB_input_files - 1 || + si < 0 || si > file_table[fi].nb_streams - 1) { + [self sendErrorCode:72 message:@"Could not find input stream #%d.%d", fi, si]; + stopConverting = YES; + return -1; + } + fi = theStream_maps[i].sync_file_index; + si = theStream_maps[i].sync_stream_index; + if (fi < 0 || fi > theNB_input_files - 1 || + si < 0 || si > file_table[fi].nb_streams - 1) { + [self sendErrorCode:73 message:@"Could not find sync stream #%d.%d", fi, si]; + stopConverting = YES; + return -1; + } + } + + ost_table = av_mallocz(sizeof(AVOutputStream *) * nb_ostreams); + if (!ost_table) + goto fail; + for(i=0;inb_streams;i++,n++) { + int found; + ost = ost_table[n]; + ost->file_index = k; + ost->index = i; + ost->st = os->streams[i]; + if (theNB_stream_maps > 0) { + ost->source_index = file_table[stream_maps[n].file_index].ist_index + + theStream_maps[n].stream_index; + + /* Sanity check that the stream types match */ + if (ist_table[ost->source_index]->st->codec->codec_type != ost->st->codec->codec_type) { + int i= ost->file_index; + dump_format(theOutput_files[i], i, theOutput_files[i]->filename, 1); + [self sendErrorCode:74 message:@"Codec type mismatch for mapping #%d.%d -> #%d.%d", theStream_maps[n].file_index, theStream_maps[n].stream_index, ost->file_index, ost->index]; + stopConverting = YES; + return -1; + } + + } else { + int best_nb_frames=-1; + /* get corresponding input stream index : we select the first one with the right type */ + found = 0; + for(j=0;jfile_index ]; + skip=1; + for(pi=0; pinb_programs; pi++){ + AVProgram *p= f->programs[pi]; + if(p->id == opt_programid) + for(si=0; sinb_stream_indexes; si++){ + if(f->streams[ p->stream_index[si] ] == ist->st) + skip=0; + } + } + } + if (ist->discard && ist->st->discard != AVDISCARD_ALL && !skip && + ist->st->codec->codec_type == ost->st->codec->codec_type) { + if(best_nb_frames < ist->st->codec_info_nb_frames){ + best_nb_frames= ist->st->codec_info_nb_frames; + ost->source_index = j; + found = 1; + } + } + } + + if (!found) { + if(! opt_programid) { + /* try again and reuse existing stream */ + for(j=0;jst->codec->codec_type == ost->st->codec->codec_type + && ist->st->discard != AVDISCARD_ALL) { + ost->source_index = j; + found = 1; + } + } + } + if (!found) { + int i= ost->file_index; + dump_format(theOutput_files[i], i, theOutput_files[i]->filename, 1); + [self sendErrorCode:75 message:@"Could not find input stream matching output stream #%d.%d", ost->file_index, ost->index]; + stopConverting = YES; + return -1; + } + } + } + ist = ist_table[ost->source_index]; + ist->discard = 0; + ost->sync_ist = (theNB_stream_maps > 0) ? + ist_table[file_table[theStream_maps[n].sync_file_index].ist_index + + theStream_maps[n].sync_stream_index] : ist; + } + } + + /* for each output stream, we compute the right encoding parameters */ + for(i=0;ifile_index]; + ist = ist_table[ost->source_index]; + + codec = ost->st->codec; + icodec = ist->st->codec; + + while ((t = av_metadata_get(ist->st->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) { + av_metadata_set2(&ost->st->metadata, t->key, t->value, AV_METADATA_DONT_OVERWRITE); + } + + ost->st->disposition = ist->st->disposition; + codec->bits_per_raw_sample= icodec->bits_per_raw_sample; + codec->chroma_sample_location = icodec->chroma_sample_location; + + if (ost->st->stream_copy) { + /* if stream_copy is selected, no need to decode or encode */ + codec->codec_id = icodec->codec_id; + codec->codec_type = icodec->codec_type; + + if(!codec->codec_tag){ + if( !os->oformat->codec_tag + || av_codec_get_id (os->oformat->codec_tag, icodec->codec_tag) == codec->codec_id + || av_codec_get_tag(os->oformat->codec_tag, icodec->codec_id) <= 0) + codec->codec_tag = icodec->codec_tag; + } + + codec->bit_rate = icodec->bit_rate; + codec->extradata= icodec->extradata; + codec->extradata_size= icodec->extradata_size; + if(av_q2d(icodec->time_base)*icodec->ticks_per_frame > av_q2d(ist->st->time_base) && av_q2d(ist->st->time_base) < 1.0/1000){ + codec->time_base = icodec->time_base; + codec->time_base.num *= icodec->ticks_per_frame; + }else + codec->time_base = ist->st->time_base; + switch(codec->codec_type) { + case AVMEDIA_TYPE_AUDIO: + if(audio_volume != 256) { + [self sendErrorCode:76 message:@"-acodec copy and -vol are incompatible (frames are not decoded)"]; + stopConverting = YES; + return -1; + } + codec->channel_layout = icodec->channel_layout; + codec->sample_rate = icodec->sample_rate; + codec->channels = icodec->channels; + codec->frame_size = icodec->frame_size; + codec->block_align= icodec->block_align; + if(codec->block_align == 1 && codec->codec_id == CODEC_ID_MP3) + codec->block_align= 0; + if(codec->codec_id == CODEC_ID_AC3) + codec->block_align= 0; + break; + case AVMEDIA_TYPE_VIDEO: + codec->pix_fmt = icodec->pix_fmt; + codec->width = icodec->width; + codec->height = icodec->height; + codec->has_b_frames = icodec->has_b_frames; + break; + case AVMEDIA_TYPE_SUBTITLE: + codec->width = icodec->width; + codec->height = icodec->height; + break; + default: + abort(); + } + } else { + switch(codec->codec_type) { + case AVMEDIA_TYPE_AUDIO: + ost->fifo= av_fifo_alloc(1024); + if(!ost->fifo) + goto fail; + ost->reformat_pair = MAKE_SFMT_PAIR(SAMPLE_FMT_NONE,SAMPLE_FMT_NONE); + ost->audio_resample = codec->sample_rate != icodec->sample_rate || audio_sync_method > 1; + icodec->request_channels = codec->channels; + ist->decoding_needed = 1; + ost->encoding_needed = 1; + break; + case AVMEDIA_TYPE_VIDEO: + if (ost->st->codec->pix_fmt == PIX_FMT_NONE) { + [self sendErrorCode:77 message:@"Video pixel format is unknown, stream cannot be encoded"]; + stopConverting = YES; + return -1; + } + ost->video_crop = ((frame_leftBand + frame_rightBand + frame_topBand + frame_bottomBand) != 0); + ost->video_pad = ((frame_padleft + frame_padright + frame_padtop + frame_padbottom) != 0); + ost->video_resample = ((codec->width != icodec->width - + (frame_leftBand + frame_rightBand) + + (frame_padleft + frame_padright)) || + (codec->height != icodec->height - + (frame_topBand + frame_bottomBand) + + (frame_padtop + frame_padbottom)) || + (codec->pix_fmt != icodec->pix_fmt)); + if (ost->video_crop) { + ost->topBand = ost->original_topBand = frame_topBand; + ost->bottomBand = ost->original_bottomBand = frame_bottomBand; + ost->leftBand = ost->original_leftBand = frame_leftBand; + ost->rightBand = ost->original_rightBand = frame_rightBand; + } + if (ost->video_pad) { + ost->padtop = frame_padtop; + ost->padleft = frame_padleft; + ost->padbottom = frame_padbottom; + ost->padright = frame_padright; + if (!ost->video_resample) { + avcodec_get_frame_defaults(&ost->pict_tmp); + if(avpicture_alloc((AVPicture*)&ost->pict_tmp, codec->pix_fmt, + codec->width, codec->height)) + goto fail; + } + } + if (ost->video_resample) { + avcodec_get_frame_defaults(&ost->pict_tmp); + if(avpicture_alloc((AVPicture*)&ost->pict_tmp, codec->pix_fmt, + codec->width, codec->height)) { + [self sendErrorCode:78 message:@"Cannot allocate temp picture, check pix fmt"]; + stopConverting = YES; + return -1; + } + sws_flags = (unsigned int)av_get_int(sws_opts, "sws_flags", NULL); + ost->img_resample_ctx = sws_getContext( + icodec->width - (frame_leftBand + frame_rightBand), + icodec->height - (frame_topBand + frame_bottomBand), + icodec->pix_fmt, + codec->width - (frame_padleft + frame_padright), + codec->height - (frame_padtop + frame_padbottom), + codec->pix_fmt, + sws_flags, NULL, NULL, NULL); + if (ost->img_resample_ctx == NULL) { + [self sendErrorCode:79 message:@"Cannot get resampling context"]; + stopConverting = YES; + return -1; + } + + ost->original_height = icodec->height; + ost->original_width = icodec->width; + + codec->bits_per_raw_sample= 0; + } + ost->resample_height = icodec->height - (frame_topBand + frame_bottomBand); + ost->resample_width = icodec->width - (frame_leftBand + frame_rightBand); + ost->resample_pix_fmt= icodec->pix_fmt; + ost->encoding_needed = 1; + ist->decoding_needed = 1; + break; + case AVMEDIA_TYPE_SUBTITLE: + ost->encoding_needed = 1; + ist->decoding_needed = 1; + break; + default: + abort(); + break; + } + /* two pass mode */ + if (ost->encoding_needed && + (codec->flags & (CODEC_FLAG_PASS1 | CODEC_FLAG_PASS2))) { + char logfilename[1024]; + FILE *f; + + snprintf(logfilename, sizeof(logfilename), "%s-%d.log", + pass_logfilename_prefix ? pass_logfilename_prefix : DEFAULT_PASS_LOGFILENAME_PREFIX, + i); + if (codec->flags & CODEC_FLAG_PASS1) { + f = fopen(logfilename, "wb"); + if (!f) { + [self sendErrorCode:80 message:@"Cannot write log file '%s' for pass-1 encoding: %s", logfilename, strerror(errno)]; + stopConverting = YES; + return -1; + } + ost->logfile = f; + } else { + char *logbuffer; + size_t logbuffer_size; + if ([self read_file:logfilename buffer:&logbuffer size:&logbuffer_size] < 0) { + [self sendErrorCode:81 message:@"Error reading log file '%s' for pass-2 encoding", logfilename]; + stopConverting = YES; + return -1; + } + codec->stats_in = logbuffer; + } + } + } + if(codec->codec_type == AVMEDIA_TYPE_VIDEO){ + int size= codec->width * codec->height; + bit_buffer_size= FFMAX(bit_buffer_size, 6*size + 200); + } + } + + if (!bit_buffer) + bit_buffer = av_malloc(bit_buffer_size); + if (!bit_buffer) { + fprintf(stderr, "Cannot allocate %d bytes output buffer\n", + bit_buffer_size); + ret = AVERROR(ENOMEM); + goto fail; + } + + /* open each encoder */ + for(i=0;iencoding_needed) { + AVCodec *codec = output_codecs[i]; + if (!codec) + codec = avcodec_find_encoder(ost->st->codec->codec_id); + if (!codec) { + snprintf(error, sizeof(error), "Encoder (codec id %d) not found for output stream #%d.%d", + ost->st->codec->codec_id, ost->file_index, ost->index); + ret = AVERROR(EINVAL); + goto dump_format; + } + if (avcodec_open(ost->st->codec, codec) < 0) { + snprintf(error, sizeof(error), "Error while opening encoder for output stream #%d.%d - maybe incorrect parameters such as bit_rate, rate, width or height", + ost->file_index, ost->index); + ret = AVERROR(EINVAL); + goto dump_format; + } + extra_size += ost->st->codec->extradata_size; + } + } + + /* open each decoder */ + for(i=0;idecoding_needed) { + AVCodec *codec = input_codecs[i]; + if (!codec) + codec = avcodec_find_decoder(ist->st->codec->codec_id); + if (!codec) { + snprintf(error, sizeof(error), "Decoder (codec id %d) not found for input stream #%d.%d", + ist->st->codec->codec_id, ist->file_index, ist->index); + ret = AVERROR(EINVAL); + goto dump_format; + } + if (avcodec_open(ist->st->codec, codec) < 0) { + snprintf(error, sizeof(error), "Error while opening decoder for input stream #%d.%d", + ist->file_index, ist->index); + ret = AVERROR(EINVAL); + goto dump_format; + } + //if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) + // ist->st->codec->flags |= CODEC_FLAG_REPEAT_FIELD; + } + } + + /* init pts */ + for(i=0;ist; + ist->pts = st->avg_frame_rate.num ? - st->codec->has_b_frames*AV_TIME_BASE / av_q2d(st->avg_frame_rate) : 0; + ist->next_pts = AV_NOPTS_VALUE; + ist->is_start = 1; + } + + /* set meta data information from input file if required */ + for (i=0;i= theNB_output_files) { + snprintf(error, sizeof(error), "Invalid output file index %d map_meta_data(%d,%d)", + out_file_index, out_file_index, in_file_index); + ret = AVERROR(EINVAL); + goto dump_format; + } + if (in_file_index < 0 || in_file_index >= theNB_input_files) { + snprintf(error, sizeof(error), "Invalid input file index %d map_meta_data(%d,%d)", + in_file_index, out_file_index, in_file_index); + ret = AVERROR(EINVAL); + goto dump_format; + } + + out_file = theOutput_files[out_file_index]; + in_file = theInput_files[in_file_index]; + + + mtag=NULL; + while((mtag=av_metadata_get(in_file->metadata, "", mtag, AV_METADATA_IGNORE_SUFFIX))) + av_metadata_set2(&out_file->metadata, mtag->key, mtag->value, AV_METADATA_DONT_OVERWRITE); + av_metadata_conv(out_file, out_file->oformat->metadata_conv, + in_file->iformat->metadata_conv); + } + + /* copy chapters from the first input file that has them*/ + for (i = 0; i < theNB_input_files; i++) { + if (!theInput_files[i]->nb_chapters) + continue; + + for (j = 0; j < theNB_output_files; j++) + if ((ret = [self copy_chapters:i output:j]) < 0) + goto dump_format; + } + + /* open files and write file headers */ + for(i=0;ioformat->name, "rtp")) { + want_sdp = 0; + } + } + +dump_format: + /* dump the file output parameters - cannot be done before in case + of stream copy */ + for(i=0;ifilename, 1); + } + + /* dump the stream mapping */ + if (verbose >= 0) { + fprintf(stderr, "Stream mapping:\n"); + for(i=0;i #%d.%d", + ist_table[ost->source_index]->file_index, + ist_table[ost->source_index]->index, + ost->file_index, + ost->index); + if (ost->sync_ist != ist_table[ost->source_index]) + fprintf(stderr, " [sync #%d.%d]", + ost->sync_ist->file_index, + ost->sync_ist->index); + fprintf(stderr, "\n"); + } + } + + if (ret) { + fprintf(stderr, "%s\n", error); + goto fail; + } + + if (want_sdp) { + [self print_sdp:theOutput_files number:theNB_output_files]; + } + + timer_start = av_gettime(); + + while(!stopConverting) { + int file_index, ist_index; + AVPacket pkt; + double ipts_min; + double opts_min; + + redo: + ipts_min= 1e100; + opts_min= 1e100; + + /* select the stream that we must read now by looking at the + smallest output pts */ + file_index = -1; + for(i=0;ifile_index]; + ist = ist_table[ost->source_index]; + if(ist->is_past_recording_time || no_packet[ist->file_index]) + continue; + opts = ost->st->pts.val * av_q2d(ost->st->time_base); + ipts = (double)ist->pts; + if (!file_table[ist->file_index].eof_reached){ + if(ipts < ipts_min) { + ipts_min = ipts; + if(input_sync ) file_index = ist->file_index; + } + if(opts < opts_min) { + opts_min = opts; + if(!input_sync) file_index = ist->file_index; + } + } + if(ost->frame_number >= max_frames[ost->st->codec->codec_type]){ + file_index= -1; + break; + } + } + /* if none, if is finished */ + if (file_index < 0) { + if(no_packet_count){ + no_packet_count=0; + memset(no_packet, 0, sizeof(no_packet)); + usleep(10000); + continue; + } + break; + } + + /* finish if limit size exhausted */ + if (limit_filesize != 0 && limit_filesize < url_ftell(theOutput_files[0]->pb)) + break; + + /* read a frame from it and output it in the fifo */ + is = theInput_files[file_index]; + ret= av_read_frame(is, &pkt); + if(ret == AVERROR(EAGAIN)){ + no_packet[file_index]=1; + no_packet_count++; + continue; + } + if (ret < 0) { + file_table[file_index].eof_reached = 1; + if (opt_shortest) + break; + else + continue; + } + + no_packet_count=0; + memset(no_packet, 0, sizeof(no_packet)); + + if (do_pkt_dump) { + av_pkt_dump_log(NULL, AV_LOG_DEBUG, &pkt, do_hex_dump); + } + /* the following test is needed in case new streams appear + dynamically in stream : we ignore them */ + if (pkt.stream_index >= file_table[file_index].nb_streams) + goto discard_packet; + ist_index = file_table[file_index].ist_index + pkt.stream_index; + ist = ist_table[ist_index]; + if (ist->discard) + goto discard_packet; + + if (pkt.dts != AV_NOPTS_VALUE) + pkt.dts += av_rescale_q(input_files_ts_offset[ist->file_index], AV_TIME_BASE_Q, ist->st->time_base); + if (pkt.pts != AV_NOPTS_VALUE) + pkt.pts += av_rescale_q(input_files_ts_offset[ist->file_index], AV_TIME_BASE_Q, ist->st->time_base); + + if(input_files_ts_scale[file_index][pkt.stream_index]){ + if(pkt.pts != AV_NOPTS_VALUE) + pkt.pts *= input_files_ts_scale[file_index][pkt.stream_index]; + if(pkt.dts != AV_NOPTS_VALUE) + pkt.dts *= input_files_ts_scale[file_index][pkt.stream_index]; + } + + // fprintf(stderr, "next:%"PRId64" dts:%"PRId64" off:%"PRId64" %d\n", ist->next_pts, pkt.dts, input_files_ts_offset[ist->file_index], ist->st->codec->codec_type); + if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE + && (is->iformat->flags & AVFMT_TS_DISCONT)) { + int64_t pkt_dts= av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q); + int64_t delta= pkt_dts - ist->next_pts; + if((FFABS(delta) > 1LL*dts_delta_threshold*AV_TIME_BASE || pkt_dts+1pts)&& !copy_ts){ + input_files_ts_offset[ist->file_index]-= delta; + if (verbose > 2) + fprintf(stderr, "timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", delta, input_files_ts_offset[ist->file_index]); + pkt.dts-= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); + if(pkt.pts != AV_NOPTS_VALUE) + pkt.pts-= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); + } + } + + /* finish if recording time exhausted */ + if (recording_time != INT64_MAX && + av_compare_ts(pkt.pts, ist->st->time_base, recording_time + start_time, (AVRational){1, 1000000}) >= 0) { + ist->is_past_recording_time = 1; + goto discard_packet; + } + + //fprintf(stderr,"read #%d.%d size=%d\n", ist->file_index, ist->index, pkt.size); + if ([self output_packet:ist index:ist_index table:ost_table streams:nb_ostreams packet:&pkt] < 0) { + + if (verbose >= 0) + [self sendErrorCode:82 message:@"Error while decoding stream #%d.%d", + ist->file_index, ist->index]; + + if (exit_on_error) + stopConverting = YES; + av_free_packet(&pkt); + goto redo; + } + + discard_packet: + av_free_packet(&pkt); + + /* dump report by using the output first video and audio streams */ + [self send_report:theOutput_files inputFiles:(AVFormatContext **)theInput_files table:ost_table streams:nb_ostreams lastReport:0]; + } + + /* at the end of stream, we must flush the decoder buffers */ + for(i=0;idecoding_needed) { + [self output_packet:ist index:i table:ost_table streams:nb_ostreams packet:NULL]; + } + } + + /* write the trailer if needed and close file */ + for(i=0;iencoding_needed) { + av_freep(&ost->st->codec->stats_in); + avcodec_close(ost->st->codec); + } + } + + /* close each decoder */ + for(i=0;idecoding_needed) { + avcodec_close(ist->st->codec); + } + } + + /* finished ! */ + ret = 0; + +fail: + av_freep(&bit_buffer); + av_free(file_table); + + if (ist_table) { + for(i=0;ilogfile) { + fclose(ost->logfile); + ost->logfile = NULL; + } + av_fifo_free(ost->fifo); /* works even if fifo is not + initialized but set to zero */ + av_free(ost->pict_tmp.data[0]); + if (ost->video_resample) + sws_freeContext(ost->img_resample_ctx); + if (ost->resample) + audio_resample_close(ost->resample); + if (ost->reformat_ctx) + av_audio_convert_free(ost->reformat_ctx); + av_free(ost); + } + } + av_free(ost_table); + } + return ret; +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + if (isConverting) { + stopConverting = YES; + stoppedByQuit = YES; + return NSTerminateLater; + } + return NSTerminateNow; +} + +- (void)startConverting { + [NSThread detachNewThreadSelector:@selector(startConvertingBackground) toTarget:self withObject:nil]; +} +- (void)startConvertingBackground { + NSAutoreleasePool *pool = [NSAutoreleasePool new]; + int64_t ti; + if(nb_output_files <= 0 && nb_input_files == 0) { + [self sendErrorCode:83 message:@"No input or output specified"]; + goto cleanup; + } + + /* file converter / grab */ + if (nb_output_files <= 0) { + [self sendErrorCode:84 message:@"At least one output file must be specified"]; + [pool drain]; + return; + } + + if (nb_input_files == 0) { + [self sendErrorCode:85 message:@"At least one input file must be specified"]; + goto cleanup; + } + + isConverting = YES; + ti = [self getutime]; + if ([self av_transcode:output_files ouputCount:nb_output_files inputFiles:input_files inputCount:nb_input_files maps:stream_maps mapsCount:nb_stream_maps] < 0) + goto cleanup; + ti = [self getutime] - ti; + if (do_benchmark) { + int maxrss = (int)([self getmaxrss] / 1024); + printf("bench: utime=%0.3fs maxrss=%ikB\n", ti / 1000000.0, maxrss); + } +cleanup: + isConverting = NO; + stopConverting = NO; + if (stoppedByQuit) + [[NSApplication sharedApplication] replyToApplicationShouldTerminate:YES]; + if ([delegate respondsToSelector:@selector(conversionFinished)]) + [delegate conversionFinished]; + [pool drain]; +} +@end +#endif \ No newline at end of file diff --git a/Classes/Theme Tester/MGMThemeTesterController.h b/Classes/Theme Tester/MGMThemeTesterController.h index 70dddda..e8e3454 100644 --- a/Classes/Theme Tester/MGMThemeTesterController.h +++ b/Classes/Theme Tester/MGMThemeTesterController.h @@ -3,7 +3,18 @@ // Voice Mac // // Created by Mr. Gecko on 8/24/10. -// Copyright 2010 Mr. Gecko's Media. All rights reserved. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/Theme Tester/MGMThemeTesterController.m b/Classes/Theme Tester/MGMThemeTesterController.m index 2b703bc..ad87772 100644 --- a/Classes/Theme Tester/MGMThemeTesterController.m +++ b/Classes/Theme Tester/MGMThemeTesterController.m @@ -3,7 +3,18 @@ // Voice Mac // // Created by Mr. Gecko on 8/24/10. -// Copyright 2010 Mr. Gecko's Media. All rights reserved. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMThemeTesterController.h" diff --git a/Classes/Theme Tester/main.m b/Classes/Theme Tester/main.m index 46db27b..766abad 100644 --- a/Classes/Theme Tester/main.m +++ b/Classes/Theme Tester/main.m @@ -3,7 +3,18 @@ // Voice Mac // // Created by Mr. Gecko on 7/24/09. -// Copyright Mr. Gecko's Media 2009. All rights reserved. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceBase/AddressBook/MGMAddressBook.h b/Classes/VoiceBase/AddressBook/MGMAddressBook.h index fca33fc..94b2546 100644 --- a/Classes/VoiceBase/AddressBook/MGMAddressBook.h +++ b/Classes/VoiceBase/AddressBook/MGMAddressBook.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/17/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/AddressBook/MGMAddressBook.m b/Classes/VoiceBase/AddressBook/MGMAddressBook.m index 96fdaa4..b6d4ad1 100644 --- a/Classes/VoiceBase/AddressBook/MGMAddressBook.m +++ b/Classes/VoiceBase/AddressBook/MGMAddressBook.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/17/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMAddressBook.h" diff --git a/Classes/VoiceBase/AddressBook/MGMContacts.h b/Classes/VoiceBase/AddressBook/MGMContacts.h index b070fc5..064ba7f 100644 --- a/Classes/VoiceBase/AddressBook/MGMContacts.h +++ b/Classes/VoiceBase/AddressBook/MGMContacts.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/18/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/AddressBook/MGMContacts.m b/Classes/VoiceBase/AddressBook/MGMContacts.m index 4ac5ceb..73b18d1 100644 --- a/Classes/VoiceBase/AddressBook/MGMContacts.m +++ b/Classes/VoiceBase/AddressBook/MGMContacts.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/18/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMContacts.h" diff --git a/Classes/VoiceBase/AddressBook/MGMContactsProtocol.h b/Classes/VoiceBase/AddressBook/MGMContactsProtocol.h index 73cb295..bd9b36a 100644 --- a/Classes/VoiceBase/AddressBook/MGMContactsProtocol.h +++ b/Classes/VoiceBase/AddressBook/MGMContactsProtocol.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/17/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/AddressBook/MGMContactsProtocol.m b/Classes/VoiceBase/AddressBook/MGMContactsProtocol.m index 65c0359..e783f9a 100644 --- a/Classes/VoiceBase/AddressBook/MGMContactsProtocol.m +++ b/Classes/VoiceBase/AddressBook/MGMContactsProtocol.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/17/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMContactsProtocol.h" diff --git a/Classes/VoiceBase/AddressBook/MGMGoogleContacts.h b/Classes/VoiceBase/AddressBook/MGMGoogleContacts.h index fa1df99..6220cdc 100644 --- a/Classes/VoiceBase/AddressBook/MGMGoogleContacts.h +++ b/Classes/VoiceBase/AddressBook/MGMGoogleContacts.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/17/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/AddressBook/MGMGoogleContacts.m b/Classes/VoiceBase/AddressBook/MGMGoogleContacts.m index bf74558..a4f0fe0 100644 --- a/Classes/VoiceBase/AddressBook/MGMGoogleContacts.m +++ b/Classes/VoiceBase/AddressBook/MGMGoogleContacts.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/17/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMGoogleContacts.h" diff --git a/Classes/VoiceBase/MGMAddons.h b/Classes/VoiceBase/MGMAddons.h index 26b4678..888da84 100644 --- a/Classes/VoiceBase/MGMAddons.h +++ b/Classes/VoiceBase/MGMAddons.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 3/4/09. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/MGMAddons.m b/Classes/VoiceBase/MGMAddons.m index 3bd7a8e..3dcfb91 100644 --- a/Classes/VoiceBase/MGMAddons.m +++ b/Classes/VoiceBase/MGMAddons.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 3/4/09. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMAddons.h" diff --git a/Classes/VoiceBase/MGMDelegateInfo.h b/Classes/VoiceBase/MGMDelegateInfo.h index b70cc83..e7d5639 100644 --- a/Classes/VoiceBase/MGMDelegateInfo.h +++ b/Classes/VoiceBase/MGMDelegateInfo.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 2/23/11. -// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceBase/MGMDelegateInfo.m b/Classes/VoiceBase/MGMDelegateInfo.m index aadca7a..04cff92 100644 --- a/Classes/VoiceBase/MGMDelegateInfo.m +++ b/Classes/VoiceBase/MGMDelegateInfo.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 2/23/11. -// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMDelegateInfo.h" diff --git a/Classes/VoiceBase/MGMInbox.h b/Classes/VoiceBase/MGMInbox.h index 84331e1..5b8f1d1 100644 --- a/Classes/VoiceBase/MGMInbox.h +++ b/Classes/VoiceBase/MGMInbox.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/MGMInbox.m b/Classes/VoiceBase/MGMInbox.m index 068615a..e2db51d 100644 --- a/Classes/VoiceBase/MGMInbox.m +++ b/Classes/VoiceBase/MGMInbox.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMInbox.h" diff --git a/Classes/VoiceBase/MGMInstance.h b/Classes/VoiceBase/MGMInstance.h index 7233681..dbc410d 100644 --- a/Classes/VoiceBase/MGMInstance.h +++ b/Classes/VoiceBase/MGMInstance.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/MGMInstance.m b/Classes/VoiceBase/MGMInstance.m index df88dc8..ba1e1b9 100644 --- a/Classes/VoiceBase/MGMInstance.m +++ b/Classes/VoiceBase/MGMInstance.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMInstance.h" @@ -14,7 +25,7 @@ #import "MGMAddons.h" #import -NSString * const MGMVoiceBaseCopyright = @"Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/"; +NSString * const MGMVoiceBaseCopyright = @"Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/"; NSString * const MGMVoiceIndexURL = @"https://www.google.com/voice/#inbox"; NSString * const MGMLoginURL = @"https://www.google.com/accounts/ServiceLoginAuth"; diff --git a/Classes/VoiceBase/MGMSound.h b/Classes/VoiceBase/MGMSound.h index b6ba108..432ea3b 100644 --- a/Classes/VoiceBase/MGMSound.h +++ b/Classes/VoiceBase/MGMSound.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/23/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/MGMSound.m b/Classes/VoiceBase/MGMSound.m index 1d32971..9dc4515 100644 --- a/Classes/VoiceBase/MGMSound.m +++ b/Classes/VoiceBase/MGMSound.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/23/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSound.h" diff --git a/Classes/VoiceBase/MGMThemeManager.h b/Classes/VoiceBase/MGMThemeManager.h index 0c8c333..ce67c22 100644 --- a/Classes/VoiceBase/MGMThemeManager.h +++ b/Classes/VoiceBase/MGMThemeManager.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/23/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/MGMThemeManager.m b/Classes/VoiceBase/MGMThemeManager.m index cef1feb..13732fb 100644 --- a/Classes/VoiceBase/MGMThemeManager.m +++ b/Classes/VoiceBase/MGMThemeManager.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 8/23/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMThemeManager.h" diff --git a/Classes/VoiceBase/SIP/MGMSIP.h b/Classes/VoiceBase/SIP/MGMSIP.h index cb8dac2..3011986 100644 --- a/Classes/VoiceBase/SIP/MGMSIP.h +++ b/Classes/VoiceBase/SIP/MGMSIP.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/10/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/SIP/MGMSIP.m b/Classes/VoiceBase/SIP/MGMSIP.m index dabc739..9504cbe 100644 --- a/Classes/VoiceBase/SIP/MGMSIP.m +++ b/Classes/VoiceBase/SIP/MGMSIP.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/10/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED @@ -18,7 +29,7 @@ #import #endif -NSString * const MGMSIPCopyright = @"Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/"; +NSString * const MGMSIPCopyright = @"Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/"; const int MGMSIPMaxCalls = 8; const int MGMSIPDefaultOutboundProxyPort = 5060; diff --git a/Classes/VoiceBase/SIP/MGMSIPAccount.h b/Classes/VoiceBase/SIP/MGMSIPAccount.h index 3d7c176..8b6808b 100644 --- a/Classes/VoiceBase/SIP/MGMSIPAccount.h +++ b/Classes/VoiceBase/SIP/MGMSIPAccount.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/10/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/SIP/MGMSIPAccount.m b/Classes/VoiceBase/SIP/MGMSIPAccount.m index a2c5018..e41413e 100644 --- a/Classes/VoiceBase/SIP/MGMSIPAccount.m +++ b/Classes/VoiceBase/SIP/MGMSIPAccount.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/10/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/SIP/MGMSIPCall.h b/Classes/VoiceBase/SIP/MGMSIPCall.h index c38f592..f05b406 100644 --- a/Classes/VoiceBase/SIP/MGMSIPCall.h +++ b/Classes/VoiceBase/SIP/MGMSIPCall.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/10/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/SIP/MGMSIPCall.m b/Classes/VoiceBase/SIP/MGMSIPCall.m index 4a49842..4fda6e7 100644 --- a/Classes/VoiceBase/SIP/MGMSIPCall.m +++ b/Classes/VoiceBase/SIP/MGMSIPCall.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/10/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/SIP/MGMSIPURL.h b/Classes/VoiceBase/SIP/MGMSIPURL.h index 3ccfade..da1f09f 100644 --- a/Classes/VoiceBase/SIP/MGMSIPURL.h +++ b/Classes/VoiceBase/SIP/MGMSIPURL.h @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/11/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/SIP/MGMSIPURL.m b/Classes/VoiceBase/SIP/MGMSIPURL.m index 080d9c2..7c263c3 100644 --- a/Classes/VoiceBase/SIP/MGMSIPURL.m +++ b/Classes/VoiceBase/SIP/MGMSIPURL.m @@ -3,7 +3,18 @@ // VoiceBase // // Created by Mr. Gecko on 9/11/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceBase/VoiceBase.h b/Classes/VoiceBase/VoiceBase.h index 8bb9c33..dc93ffa 100644 --- a/Classes/VoiceBase/VoiceBase.h +++ b/Classes/VoiceBase/VoiceBase.h @@ -1,11 +1,21 @@ -/* - * VoiceBase.h - * VoiceBase - * - * Created by Mr. Gecko on 8/15/10. - * Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ - * - */ +// +// VoiceBase.h +// VoiceBase +// +// Created by Mr. Gecko on 8/15/10. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// #import #import diff --git a/Classes/VoiceBase/XML/MGMXML.h b/Classes/VoiceBase/XML/MGMXML.h index 5fe203f..22ed430 100644 --- a/Classes/VoiceBase/XML/MGMXML.h +++ b/Classes/VoiceBase/XML/MGMXML.h @@ -1,11 +1,21 @@ -/* - * MGMXML.h - * MGMXML - * - * Created by Mr. Gecko on 9/22/10. - * Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ - * - */ +// +// MGMXML.h +// MGMXML +// +// Created by Mr. Gecko on 9/22/10. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// #import #import diff --git a/Classes/VoiceBase/XML/MGMXMLAddons.h b/Classes/VoiceBase/XML/MGMXMLAddons.h index 3a24a3a..c18c5ac 100644 --- a/Classes/VoiceBase/XML/MGMXMLAddons.h +++ b/Classes/VoiceBase/XML/MGMXMLAddons.h @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/XML/MGMXMLAddons.m b/Classes/VoiceBase/XML/MGMXMLAddons.m index 367ab6a..afc4b07 100644 --- a/Classes/VoiceBase/XML/MGMXMLAddons.m +++ b/Classes/VoiceBase/XML/MGMXMLAddons.m @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMXMLAddons.h" diff --git a/Classes/VoiceBase/XML/MGMXMLDTD.h b/Classes/VoiceBase/XML/MGMXMLDTD.h index 5f887ac..ce0df1f 100644 --- a/Classes/VoiceBase/XML/MGMXMLDTD.h +++ b/Classes/VoiceBase/XML/MGMXMLDTD.h @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/XML/MGMXMLDTD.m b/Classes/VoiceBase/XML/MGMXMLDTD.m index 6035a8e..e15ce43 100644 --- a/Classes/VoiceBase/XML/MGMXMLDTD.m +++ b/Classes/VoiceBase/XML/MGMXMLDTD.m @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMXMLDTD.h" diff --git a/Classes/VoiceBase/XML/MGMXMLDTDNode.h b/Classes/VoiceBase/XML/MGMXMLDTDNode.h index bb2919a..a0cc950 100644 --- a/Classes/VoiceBase/XML/MGMXMLDTDNode.h +++ b/Classes/VoiceBase/XML/MGMXMLDTDNode.h @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/XML/MGMXMLDTDNode.m b/Classes/VoiceBase/XML/MGMXMLDTDNode.m index 0f4a6c8..d0411db 100644 --- a/Classes/VoiceBase/XML/MGMXMLDTDNode.m +++ b/Classes/VoiceBase/XML/MGMXMLDTDNode.m @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMXMLDTDNode.h" diff --git a/Classes/VoiceBase/XML/MGMXMLDocument.h b/Classes/VoiceBase/XML/MGMXMLDocument.h index 55ae918..70f7cfa 100644 --- a/Classes/VoiceBase/XML/MGMXMLDocument.h +++ b/Classes/VoiceBase/XML/MGMXMLDocument.h @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/XML/MGMXMLDocument.m b/Classes/VoiceBase/XML/MGMXMLDocument.m index 4635d60..8b1ce19 100644 --- a/Classes/VoiceBase/XML/MGMXMLDocument.m +++ b/Classes/VoiceBase/XML/MGMXMLDocument.m @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMXMLDocument.h" diff --git a/Classes/VoiceBase/XML/MGMXMLElement.h b/Classes/VoiceBase/XML/MGMXMLElement.h index 702bc59..f8e7221 100644 --- a/Classes/VoiceBase/XML/MGMXMLElement.h +++ b/Classes/VoiceBase/XML/MGMXMLElement.h @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/XML/MGMXMLElement.m b/Classes/VoiceBase/XML/MGMXMLElement.m index be2bd57..dab43eb 100644 --- a/Classes/VoiceBase/XML/MGMXMLElement.m +++ b/Classes/VoiceBase/XML/MGMXMLElement.m @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMXMLElement.h" diff --git a/Classes/VoiceBase/XML/MGMXMLNode.h b/Classes/VoiceBase/XML/MGMXMLNode.h index 5338448..7e66714 100644 --- a/Classes/VoiceBase/XML/MGMXMLNode.h +++ b/Classes/VoiceBase/XML/MGMXMLNode.h @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if TARGET_OS_IPHONE diff --git a/Classes/VoiceBase/XML/MGMXMLNode.m b/Classes/VoiceBase/XML/MGMXMLNode.m index 3fb30a7..c856a53 100644 --- a/Classes/VoiceBase/XML/MGMXMLNode.m +++ b/Classes/VoiceBase/XML/MGMXMLNode.m @@ -3,7 +3,18 @@ // MGMXML // // Created by Mr. Gecko on 9/22/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMXMLNode.h" diff --git a/Classes/VoiceBase/XML/MGMXMLNodeOptions.h b/Classes/VoiceBase/XML/MGMXMLNodeOptions.h index e12910a..6fec80e 100644 --- a/Classes/VoiceBase/XML/MGMXMLNodeOptions.h +++ b/Classes/VoiceBase/XML/MGMXMLNodeOptions.h @@ -1,11 +1,21 @@ -/* - * MGMXMLNodeOptions.h - * MGMXML - * - * Created by Mr. Gecko on 9/22/10. - * Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ - * - */ +// +// MGMXMLNodeOptions.m +// MGMXML +// +// Created by Mr. Gecko on 9/22/10. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// enum { MGMXMLNodeOptionsNone = 0, diff --git a/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.h b/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.h index a6c0154..6d7116e 100644 --- a/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.h +++ b/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/4/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.m b/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.m index b139ba1..7279b94 100644 --- a/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.m +++ b/Classes/VoiceMac/Inbox/MGMInboxPlayWindow.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/4/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMInboxPlayWindow.h" diff --git a/Classes/VoiceMac/Inbox/MGMInboxWindow.h b/Classes/VoiceMac/Inbox/MGMInboxWindow.h index fb11cb7..d344e76 100644 --- a/Classes/VoiceMac/Inbox/MGMInboxWindow.h +++ b/Classes/VoiceMac/Inbox/MGMInboxWindow.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/3/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Inbox/MGMInboxWindow.m b/Classes/VoiceMac/Inbox/MGMInboxWindow.m index b7f0c0e..01d03e8 100644 --- a/Classes/VoiceMac/Inbox/MGMInboxWindow.m +++ b/Classes/VoiceMac/Inbox/MGMInboxWindow.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/3/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMInboxWindow.h" diff --git a/Classes/VoiceMac/MGMAccountSetup.h b/Classes/VoiceMac/MGMAccountSetup.h index e51d07f..682cb65 100644 --- a/Classes/VoiceMac/MGMAccountSetup.h +++ b/Classes/VoiceMac/MGMAccountSetup.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/13/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/MGMAccountSetup.m b/Classes/VoiceMac/MGMAccountSetup.m index 901ecd0..919c499 100644 --- a/Classes/VoiceMac/MGMAccountSetup.m +++ b/Classes/VoiceMac/MGMAccountSetup.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/13/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMAccountSetup.h" diff --git a/Classes/VoiceMac/MGMBadge.h b/Classes/VoiceMac/MGMBadge.h index 4f4c757..c957c07 100644 --- a/Classes/VoiceMac/MGMBadge.h +++ b/Classes/VoiceMac/MGMBadge.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/8/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/MGMBadge.m b/Classes/VoiceMac/MGMBadge.m index bd18819..8e96411 100644 --- a/Classes/VoiceMac/MGMBadge.m +++ b/Classes/VoiceMac/MGMBadge.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/8/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMBadge.h" diff --git a/Classes/VoiceMac/MGMContactsController.h b/Classes/VoiceMac/MGMContactsController.h index 9224024..3c8562d 100644 --- a/Classes/VoiceMac/MGMContactsController.h +++ b/Classes/VoiceMac/MGMContactsController.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/12/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/MGMContactsController.m b/Classes/VoiceMac/MGMContactsController.m index 2f11eb4..0609de5 100644 --- a/Classes/VoiceMac/MGMContactsController.m +++ b/Classes/VoiceMac/MGMContactsController.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/12/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMContactsController.h" diff --git a/Classes/VoiceMac/MGMController.h b/Classes/VoiceMac/MGMController.h index 1d72089..a278385 100644 --- a/Classes/VoiceMac/MGMController.h +++ b/Classes/VoiceMac/MGMController.h @@ -3,12 +3,23 @@ // VoiceMac // // Created by Mr. Gecko on 8/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import -@class MGMContactsController, MGMPreferences, MGMTaskManager, MGMURLConnectionManager, MGMThemeManager, MGMSMSManager, MGMBadge, MGMMultiSMS, MGMInstance, WebView; +@class MGMContactsController, MGMPreferences, MGMAbout, MGMTaskManager, MGMURLConnectionManager, MGMThemeManager, MGMSMSManager, MGMBadge, MGMMultiSMS, MGMInstance, WebView; extern NSString * const MGMContactsControllersChangedNotification; @@ -17,6 +28,7 @@ extern NSString * const MGMContactsControllersChangedNotification; int currentContactsController; NSMutableArray *multipleSMS; MGMPreferences *preferences; + MGMAbout *about; MGMTaskManager *taskManager; MGMURLConnectionManager *connectionManager; BOOL quitting; @@ -26,9 +38,6 @@ extern NSString * const MGMContactsControllersChangedNotification; MGMBadge *badge; NSMutableDictionary *badgeValues; - IBOutlet NSWindow *aboutWindow; - IBOutlet NSTextField *aboutNameField; - IBOutlet NSWindow *RLWindow; IBOutlet NSTextField *RLName; IBOutlet NSTextField *RLAddress; diff --git a/Classes/VoiceMac/MGMController.m b/Classes/VoiceMac/MGMController.m index 2404b65..984badb 100644 --- a/Classes/VoiceMac/MGMController.m +++ b/Classes/VoiceMac/MGMController.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMController.h" @@ -23,7 +34,7 @@ #import #import -NSString * const MGMCopyright = @"Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/"; +NSString * const MGMCopyright = @"Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/"; NSString * const MGMVersion = @"MGMVersion"; NSString * const MGMLaunchCount = @"MGMLaunchCount"; @@ -103,6 +114,7 @@ NSString * const MGMLoading = @"Loading..."; [[MGMSIP sharedSIP] setDelegate:self]; #endif + about = [MGMAbout new]; taskManager = [[MGMTaskManager managerWithDelegate:self] retain]; connectionManager = [MGMURLConnectionManager new]; @@ -163,7 +175,7 @@ NSString * const MGMLoading = @"Loading..."; [SMSManager release]; [badge release]; [badgeValues release]; - [aboutWindow release]; + [about release]; [RLWindow release]; [super dealloc]; } @@ -342,9 +354,7 @@ NSString * const MGMLoading = @"Loading..."; } - (IBAction)about:(id)sender { - MGMSystemInfo *sysInfo = [MGMSystemInfo info]; - [aboutNameField setStringValue:[NSString stringWithFormat:@"%@ %@", [sysInfo applicationName], [sysInfo applicationVersion]]]; - [aboutWindow makeKeyAndOrderFront:self]; + [about show]; } - (IBAction)showTaskManager:(id)sender { [taskManager showTaskManager:sender]; diff --git a/Classes/VoiceMac/MGMNumberOptions.h b/Classes/VoiceMac/MGMNumberOptions.h index 4c1b13a..4d34d82 100644 --- a/Classes/VoiceMac/MGMNumberOptions.h +++ b/Classes/VoiceMac/MGMNumberOptions.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/6/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/MGMNumberOptions.m b/Classes/VoiceMac/MGMNumberOptions.m index 5ebfdfa..d780576 100644 --- a/Classes/VoiceMac/MGMNumberOptions.m +++ b/Classes/VoiceMac/MGMNumberOptions.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/6/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMNumberOptions.h" diff --git a/Classes/VoiceMac/MGMVMAddons.h b/Classes/VoiceMac/MGMVMAddons.h index e4dd046..f22e9bb 100644 --- a/Classes/VoiceMac/MGMVMAddons.h +++ b/Classes/VoiceMac/MGMVMAddons.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/27/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/MGMVMAddons.m b/Classes/VoiceMac/MGMVMAddons.m index eabd5b9..cb10485 100644 --- a/Classes/VoiceMac/MGMVMAddons.m +++ b/Classes/VoiceMac/MGMVMAddons.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/27/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMVMAddons.h" diff --git a/Classes/VoiceMac/MGMVoiceUser.h b/Classes/VoiceMac/MGMVoiceUser.h index cce494e..98623d2 100644 --- a/Classes/VoiceMac/MGMVoiceUser.h +++ b/Classes/VoiceMac/MGMVoiceUser.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/19/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/MGMVoiceUser.m b/Classes/VoiceMac/MGMVoiceUser.m index b4a475f..2a6d072 100644 --- a/Classes/VoiceMac/MGMVoiceUser.m +++ b/Classes/VoiceMac/MGMVoiceUser.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/19/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMVoiceUser.h" diff --git a/Classes/VoiceMac/Preferences/MGMAccountsPane.h b/Classes/VoiceMac/Preferences/MGMAccountsPane.h index 8ae0e16..39f8727 100644 --- a/Classes/VoiceMac/Preferences/MGMAccountsPane.h +++ b/Classes/VoiceMac/Preferences/MGMAccountsPane.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/21/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Preferences/MGMAccountsPane.m b/Classes/VoiceMac/Preferences/MGMAccountsPane.m index 37b9d15..3f54f8b 100644 --- a/Classes/VoiceMac/Preferences/MGMAccountsPane.m +++ b/Classes/VoiceMac/Preferences/MGMAccountsPane.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/21/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMAccountsPane.h" diff --git a/Classes/VoiceMac/Preferences/MGMSIPPane.h b/Classes/VoiceMac/Preferences/MGMSIPPane.h index 04d7919..fae8e17 100644 --- a/Classes/VoiceMac/Preferences/MGMSIPPane.h +++ b/Classes/VoiceMac/Preferences/MGMSIPPane.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/16/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceMac/Preferences/MGMSIPPane.m b/Classes/VoiceMac/Preferences/MGMSIPPane.m index f565fcd..dd65b1e 100644 --- a/Classes/VoiceMac/Preferences/MGMSIPPane.m +++ b/Classes/VoiceMac/Preferences/MGMSIPPane.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/16/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceMac/Preferences/MGMSMSThemesPane.h b/Classes/VoiceMac/Preferences/MGMSMSThemesPane.h index f2d6aa2..d03e175 100644 --- a/Classes/VoiceMac/Preferences/MGMSMSThemesPane.h +++ b/Classes/VoiceMac/Preferences/MGMSMSThemesPane.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/6/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Preferences/MGMSMSThemesPane.m b/Classes/VoiceMac/Preferences/MGMSMSThemesPane.m index 14fb4fe..8863bfe 100644 --- a/Classes/VoiceMac/Preferences/MGMSMSThemesPane.m +++ b/Classes/VoiceMac/Preferences/MGMSMSThemesPane.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/6/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSMSThemesPane.h" diff --git a/Classes/VoiceMac/Preferences/MGMSoundsPane.h b/Classes/VoiceMac/Preferences/MGMSoundsPane.h index 927363a..bdfee7d 100644 --- a/Classes/VoiceMac/Preferences/MGMSoundsPane.h +++ b/Classes/VoiceMac/Preferences/MGMSoundsPane.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/7/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Preferences/MGMSoundsPane.m b/Classes/VoiceMac/Preferences/MGMSoundsPane.m index 3b2fb2b..d47c6ad 100644 --- a/Classes/VoiceMac/Preferences/MGMSoundsPane.m +++ b/Classes/VoiceMac/Preferences/MGMSoundsPane.m @@ -3,11 +3,22 @@ // VoiceMac // // Created by Mr. Gecko on 9/7/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSoundsPane.h" -#import "MGMSIPWavConverter.h" +#import "MGMConverter.h" #import #import @@ -188,8 +199,10 @@ NSString * const MGMNoAuthor = @"No Author Found"; soundPlayer = [themeManager playSound:soundName]; [soundPlayer setDelegate:self]; } +#if MGMSIPENABLED if ([soundName isEqual:MGMTSSIPHoldMusic] || [soundName isEqual:MGMTSSIPSound1] || [soundName isEqual:MGMTSSIPSound2] || [soundName isEqual:MGMTSSIPSound3] || [soundName isEqual:MGMTSSIPSound4] || [soundName isEqual:MGMTSSIPSound5]) - [[MGMSIPWavConverter alloc] initWithSoundName:soundName fileConverting:[sound objectForKey:MGMTSPath]]; + [[MGMConverter alloc] initWithSound:soundName file:[sound objectForKey:MGMTSPath]]; +#endif } } [self reload:soundName]; diff --git a/Classes/VoiceMac/SIP/MGMSIPCallWindow.h b/Classes/VoiceMac/SIP/MGMSIPCallWindow.h index 9a4b3ef..63d59f3 100644 --- a/Classes/VoiceMac/SIP/MGMSIPCallWindow.h +++ b/Classes/VoiceMac/SIP/MGMSIPCallWindow.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/14/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceMac/SIP/MGMSIPCallWindow.m b/Classes/VoiceMac/SIP/MGMSIPCallWindow.m index 58c08fd..f72c5a5 100644 --- a/Classes/VoiceMac/SIP/MGMSIPCallWindow.m +++ b/Classes/VoiceMac/SIP/MGMSIPCallWindow.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/14/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceMac/SIP/MGMSIPUser.h b/Classes/VoiceMac/SIP/MGMSIPUser.h index a28bd27..740814b 100644 --- a/Classes/VoiceMac/SIP/MGMSIPUser.h +++ b/Classes/VoiceMac/SIP/MGMSIPUser.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/13/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceMac/SIP/MGMSIPUser.m b/Classes/VoiceMac/SIP/MGMSIPUser.m index f885cc6..9e40259 100644 --- a/Classes/VoiceMac/SIP/MGMSIPUser.m +++ b/Classes/VoiceMac/SIP/MGMSIPUser.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/13/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #if MGMSIPENABLED diff --git a/Classes/VoiceMac/SIP/MGMSIPWavConverter.h b/Classes/VoiceMac/SIP/MGMSIPWavConverter.h deleted file mode 100644 index 7618052..0000000 --- a/Classes/VoiceMac/SIP/MGMSIPWavConverter.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MGMSIPWavConverter.h -// VoiceMac -// -// Created by Mr. Gecko on 9/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ -// - -#import - -@class QTMovie; - -@interface MGMSIPWavConverter : NSObject { - NSString *fileConverting; - NSString *soundName; - QTMovie *movie; - NSThread *backgroundThread; - BOOL cancel; -} -- (id)initWithSoundName:(NSString *)theSoundname fileConverting:(NSString *)theFile; -@end \ No newline at end of file diff --git a/Classes/VoiceMac/SIP/MGMSIPWavConverter.m b/Classes/VoiceMac/SIP/MGMSIPWavConverter.m deleted file mode 100644 index 26576a5..0000000 --- a/Classes/VoiceMac/SIP/MGMSIPWavConverter.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// MGMSIPWavConverter.m -// VoiceMac -// -// Created by Mr. Gecko on 9/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ -// - -#import "MGMSIPWavConverter.h" -#import -#import -#import - -@implementation MGMSIPWavConverter -- (id)initWithSoundName:(NSString *)theSoundname fileConverting:(NSString *)theFile { - if ((self = [super init])) { - fileConverting = [theFile copy]; - soundName = [theSoundname copy]; - cancel = NO; - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self selector:@selector(soundChanged:) name:MGMTSoundChangedNotification object:nil]; - movie = [[QTMovie movieWithFile:fileConverting error:NULL] retain]; - if (movie==nil) { - NSLog(@"Unable to open audio %@", fileConverting); - [self release]; - self = nil; - } else if ([[movie attributeForKey:QTMovieLoadStateAttribute] longValue]==2000 || [[movie attributeForKey:QTMovieLoadStateAttribute] longValue]==100000L) { - [NSThread detachNewThreadSelector:@selector(convertBackground) toTarget:self withObject:nil]; - } else { - [notificationCenter addObserver:self selector:@selector(movieLoadStateChanged:) name:QTMovieLoadStateDidChangeNotification object:movie]; - } - } - return self; -} -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [fileConverting release]; - [soundName release]; - [movie release]; - if (backgroundThread!=nil) - while (backgroundThread!=nil) [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.2]]; - [super dealloc]; -} - -- (void)soundChanged:(NSNotification *)theNotification { - if ([[theNotification object] isEqual:soundName]) { - cancel = YES; - [self release]; - } -} -- (void)movieLoadStateChanged:(NSNotification *)theNotification { - if ([[movie attributeForKey:QTMovieLoadStateAttribute] longValue]==2000 || [[movie attributeForKey:QTMovieLoadStateAttribute] longValue]==100000L) - [NSThread detachNewThreadSelector:@selector(convertBackground) toTarget:self withObject:nil]; -} -- (void)convertBackground { - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - backgroundThread = [[NSThread currentThread] retain]; - [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]]; - NSFileManager *manager = [NSFileManager defaultManager]; - NSString *finalPath = [[MGMUser applicationSupportPath] stringByAppendingPathComponent:MGMTCallSoundsFolder]; - if (![manager fileExistsAtPath:finalPath]) - [manager createDirectoryAtPath:finalPath withAttributes:nil]; - finalPath = [finalPath stringByAppendingPathComponent:soundName]; - NSString *convertFinalPath = [[finalPath stringByAppendingPathExtension:@".tmp"] stringByAppendingPathExtension:MGMWavExt]; - finalPath = [finalPath stringByAppendingPathExtension:MGMWavExt]; - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], QTMovieExport, [NSNumber numberWithLong:kQTFileTypeWave], QTMovieExportType, [NSNumber numberWithLong:'soun'], QTMovieExportManufacturer, nil]; - if (!cancel) { - if (![movie writeToFile:convertFinalPath withAttributes:dictionary]) - NSLog(@"Could not convert audio %@", fileConverting); - } - if ([manager fileExistsAtPath:finalPath]) - [manager removeItemAtPath:finalPath]; - if (!cancel) - [manager moveItemAtPath:convertFinalPath toPath:finalPath]; - [pool drain]; - [backgroundThread release]; - backgroundThread = nil; - if (!cancel) - [self release]; -} -@end \ No newline at end of file diff --git a/Classes/VoiceMac/SMS/MGMMultiSMS.h b/Classes/VoiceMac/SMS/MGMMultiSMS.h index dde30a7..b86b6f7 100644 --- a/Classes/VoiceMac/SMS/MGMMultiSMS.h +++ b/Classes/VoiceMac/SMS/MGMMultiSMS.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/30/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/SMS/MGMMultiSMS.m b/Classes/VoiceMac/SMS/MGMMultiSMS.m index 29788b6..9ef45eb 100644 --- a/Classes/VoiceMac/SMS/MGMMultiSMS.m +++ b/Classes/VoiceMac/SMS/MGMMultiSMS.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/30/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMMultiSMS.h" diff --git a/Classes/VoiceMac/SMS/MGMSMSManager.h b/Classes/VoiceMac/SMS/MGMSMSManager.h index 3896663..cdd92c3 100644 --- a/Classes/VoiceMac/SMS/MGMSMSManager.h +++ b/Classes/VoiceMac/SMS/MGMSMSManager.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/SMS/MGMSMSManager.m b/Classes/VoiceMac/SMS/MGMSMSManager.m index d7470e4..92af479 100644 --- a/Classes/VoiceMac/SMS/MGMSMSManager.m +++ b/Classes/VoiceMac/SMS/MGMSMSManager.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSMSManager.h" diff --git a/Classes/VoiceMac/SMS/MGMSMSMessageView.h b/Classes/VoiceMac/SMS/MGMSMSMessageView.h index 64f4a0f..4980fc3 100644 --- a/Classes/VoiceMac/SMS/MGMSMSMessageView.h +++ b/Classes/VoiceMac/SMS/MGMSMSMessageView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/SMS/MGMSMSMessageView.m b/Classes/VoiceMac/SMS/MGMSMSMessageView.m index 6e59194..a49d1a1 100644 --- a/Classes/VoiceMac/SMS/MGMSMSMessageView.m +++ b/Classes/VoiceMac/SMS/MGMSMSMessageView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSMSMessageView.h" diff --git a/Classes/VoiceMac/SMS/MGMSMSTextView.h b/Classes/VoiceMac/SMS/MGMSMSTextView.h index 04573fc..989e102 100644 --- a/Classes/VoiceMac/SMS/MGMSMSTextView.h +++ b/Classes/VoiceMac/SMS/MGMSMSTextView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/SMS/MGMSMSTextView.m b/Classes/VoiceMac/SMS/MGMSMSTextView.m index 23bdbbc..410d437 100644 --- a/Classes/VoiceMac/SMS/MGMSMSTextView.m +++ b/Classes/VoiceMac/SMS/MGMSMSTextView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSMSTextView.h" diff --git a/Classes/VoiceMac/SMS/MGMSMSView.h b/Classes/VoiceMac/SMS/MGMSMSView.h index b79f2f7..78849a6 100644 --- a/Classes/VoiceMac/SMS/MGMSMSView.h +++ b/Classes/VoiceMac/SMS/MGMSMSView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/27/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/SMS/MGMSMSView.m b/Classes/VoiceMac/SMS/MGMSMSView.m index c583dec..135412a 100644 --- a/Classes/VoiceMac/SMS/MGMSMSView.m +++ b/Classes/VoiceMac/SMS/MGMSMSView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/27/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSMSView.h" diff --git a/Classes/VoiceMac/Views/MGMBlackWindow.h b/Classes/VoiceMac/Views/MGMBlackWindow.h index 9e4a493..98605cb 100644 --- a/Classes/VoiceMac/Views/MGMBlackWindow.h +++ b/Classes/VoiceMac/Views/MGMBlackWindow.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/6/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMBlackWindow.m b/Classes/VoiceMac/Views/MGMBlackWindow.m index bd56af9..7336b8f 100644 --- a/Classes/VoiceMac/Views/MGMBlackWindow.m +++ b/Classes/VoiceMac/Views/MGMBlackWindow.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/6/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMBlackWindow.h" diff --git a/Classes/VoiceMac/Views/MGMBottomView.h b/Classes/VoiceMac/Views/MGMBottomView.h index 009a6e7..9126758 100644 --- a/Classes/VoiceMac/Views/MGMBottomView.h +++ b/Classes/VoiceMac/Views/MGMBottomView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/19/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMBottomView.m b/Classes/VoiceMac/Views/MGMBottomView.m index e5cb91c..7a65128 100644 --- a/Classes/VoiceMac/Views/MGMBottomView.m +++ b/Classes/VoiceMac/Views/MGMBottomView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/19/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMBottomView.h" diff --git a/Classes/VoiceMac/Views/MGMContactView.h b/Classes/VoiceMac/Views/MGMContactView.h index 3f129dc..24dd3fa 100644 --- a/Classes/VoiceMac/Views/MGMContactView.h +++ b/Classes/VoiceMac/Views/MGMContactView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/20/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMContactView.m b/Classes/VoiceMac/Views/MGMContactView.m index 5b57beb..d4d85b7 100644 --- a/Classes/VoiceMac/Views/MGMContactView.m +++ b/Classes/VoiceMac/Views/MGMContactView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/20/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMContactView.h" diff --git a/Classes/VoiceMac/Views/MGMGradiantView.h b/Classes/VoiceMac/Views/MGMGradiantView.h index be80415..bdb388f 100644 --- a/Classes/VoiceMac/Views/MGMGradiantView.h +++ b/Classes/VoiceMac/Views/MGMGradiantView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/27/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMGradiantView.m b/Classes/VoiceMac/Views/MGMGradiantView.m index f39afb1..89a54bd 100644 --- a/Classes/VoiceMac/Views/MGMGradiantView.m +++ b/Classes/VoiceMac/Views/MGMGradiantView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/27/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMGradiantView.h" diff --git a/Classes/VoiceMac/Views/MGMPhoneFeild.h b/Classes/VoiceMac/Views/MGMPhoneFeild.h index 335e69c..c3faa24 100644 --- a/Classes/VoiceMac/Views/MGMPhoneFeild.h +++ b/Classes/VoiceMac/Views/MGMPhoneFeild.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 7/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMPhoneFeild.m b/Classes/VoiceMac/Views/MGMPhoneFeild.m index 55820ad..8f00f27 100644 --- a/Classes/VoiceMac/Views/MGMPhoneFeild.m +++ b/Classes/VoiceMac/Views/MGMPhoneFeild.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 7/15/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMPhoneFeild.h" diff --git a/Classes/VoiceMac/Views/MGMProgressView.h b/Classes/VoiceMac/Views/MGMProgressView.h index 07fe03d..dbfa319 100644 --- a/Classes/VoiceMac/Views/MGMProgressView.h +++ b/Classes/VoiceMac/Views/MGMProgressView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/19/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMProgressView.m b/Classes/VoiceMac/Views/MGMProgressView.m index 6289d05..cc8f480 100644 --- a/Classes/VoiceMac/Views/MGMProgressView.m +++ b/Classes/VoiceMac/Views/MGMProgressView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/19/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMProgressView.h" diff --git a/Classes/VoiceMac/Views/MGMSplitView.h b/Classes/VoiceMac/Views/MGMSplitView.h index 00722b3..ff45a1a 100644 --- a/Classes/VoiceMac/Views/MGMSplitView.h +++ b/Classes/VoiceMac/Views/MGMSplitView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMSplitView.m b/Classes/VoiceMac/Views/MGMSplitView.m index 10067c1..1a8cd4c 100644 --- a/Classes/VoiceMac/Views/MGMSplitView.m +++ b/Classes/VoiceMac/Views/MGMSplitView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/25/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMSplitView.h" diff --git a/Classes/VoiceMac/Views/MGMTranslucentTabView.h b/Classes/VoiceMac/Views/MGMTranslucentTabView.h index 3d56bcf..7367490 100644 --- a/Classes/VoiceMac/Views/MGMTranslucentTabView.h +++ b/Classes/VoiceMac/Views/MGMTranslucentTabView.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/13/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMTranslucentTabView.m b/Classes/VoiceMac/Views/MGMTranslucentTabView.m index 9b752c5..db10edd 100644 --- a/Classes/VoiceMac/Views/MGMTranslucentTabView.m +++ b/Classes/VoiceMac/Views/MGMTranslucentTabView.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 9/13/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMTranslucentTabView.h" diff --git a/Classes/VoiceMac/Views/MGMViewCell.h b/Classes/VoiceMac/Views/MGMViewCell.h index 4211511..8212615 100644 --- a/Classes/VoiceMac/Views/MGMViewCell.h +++ b/Classes/VoiceMac/Views/MGMViewCell.h @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/20/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/Classes/VoiceMac/Views/MGMViewCell.m b/Classes/VoiceMac/Views/MGMViewCell.m index 7385d09..655cef3 100644 --- a/Classes/VoiceMac/Views/MGMViewCell.m +++ b/Classes/VoiceMac/Views/MGMViewCell.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 8/20/10. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import "MGMViewCell.h" diff --git a/Classes/VoiceMac/main.m b/Classes/VoiceMac/main.m index eaf6c18..bf5b817 100644 --- a/Classes/VoiceMac/main.m +++ b/Classes/VoiceMac/main.m @@ -3,7 +3,18 @@ // VoiceMac // // Created by Mr. Gecko on 7/24/09. -// Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // #import diff --git a/FFmpeg/ffmpeg.tar.gz b/FFmpeg/ffmpeg.tar.gz new file mode 100644 index 0000000..f05b6d2 Binary files /dev/null and b/FFmpeg/ffmpeg.tar.gz differ diff --git a/FFmpeg/install b/FFmpeg/install new file mode 100755 index 0000000..7758979 --- /dev/null +++ b/FFmpeg/install @@ -0,0 +1,485 @@ +#!/bin/bash + +#PPCFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch ppc" +PPCFLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -arch ppc" +PPCCC="/usr/bin/gcc-4.0" +PPCCXX="/usr/bin/g++-4.0" +PPCHOST="ppc-apple-darwin8" +PPCPATH="${PWD}/opt-ppc" +PPCLDFLAGS="-arch ppc" + +#I386FLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386" +I386FLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -arch i386" +I386CC="/usr/bin/gcc-4.0" +I386CXX="/usr/bin/g++-4.0" +I386HOST="i386-apple-darwin8" +I386PATH="${PWD}/opt-i386" +I386LDFLAGS="-arch i386" + +#X86_64FLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.5 -arch x86_64" +X86_64FLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 -arch x86_64" +X86_64CC="/usr/bin/gcc-4.0" +X86_64CXX="/usr/bin/g++-4.0" +X86_64HOST="x86_64-apple-darwin9" +X86_64PATH="${PWD}/opt-x86_64" +X86_64LDFLAGS="-arch x86_64" + +FFMPEGNAME="ffmpeg" + +if [ "$1" = "clean" ]; then + echo "Cleaning FFmpeg" + rm -fR ${FFMPEGNAME}-i386 ${FFMPEGNAME}-x86_64 ${FFMPEGNAME}-ppc + + echo "Cleaning Builds" + rm -fR opt-i386 opt-x86_64 opt-ppc + rm -fR opt +fi +if [ "$1" = "" ]; then + echo "Copying FFmpeg" + cp -R ${FFMPEGNAME} ${FFMPEGNAME}-ppc + cp -R ${FFMPEGNAME}-ppc ${FFMPEGNAME}-i386 + cp -R ${FFMPEGNAME}-ppc ${FFMPEGNAME}-x86_64 + + echo "Configuring FFmpeg" + cd ${FFMPEGNAME}-ppc + LDFLAGS="${PPCLDFLAGS} -L${PPCPATH}/lib" CFLAGS="${PPCFLAGS} -I${PPCPATH}/include -mdynamic-no-pic" CXXFLAGS="${PPCFLAGS} -I${PPCPATH}/include -mdynamic-no-pic" CC="${PPCCC}" CXX="${PPCCXX}" ./configure --prefix="${PPCPATH}" --arch=ppc --disable-bzlib --enable-pthreads --disable-network --enable-small --disable-ffprobe --disable-ffplay --disable-ffserver --disable-decoder=atrac3 --disable-shared --enable-static \ + --disable-decoders \ + --enable-decoder=aac \ + --enable-decoder=theora \ + --enable-decoder=vorbis \ + --enable-decoder=wmavoice \ + --enable-decoder=wmav2 \ + --enable-decoder=wmav1 \ + --enable-decoder=wmapro \ + --enable-decoder=wavpack \ + --enable-decoder=mp3on4 \ + --enable-decoder=mp3adu \ + --enable-decoder=mp3 \ + --enable-decoder=mp2 \ + --enable-decoder=mp1 \ + --enable-decoder=pcm_zork \ + --enable-decoder=pcm_u8 \ + --enable-decoder=pcm_u32le \ + --enable-decoder=pcm_u32be \ + --enable-decoder=pcm_u24le \ + --enable-decoder=pcm_u24be \ + --enable-decoder=pcm_u16le \ + --enable-decoder=pcm_u16be \ + --enable-decoder=pcm_s8 \ + --enable-decoder=pcm_s32le \ + --enable-decoder=pcm_s32be \ + --enable-decoder=pcm_s24le \ + --enable-decoder=pcm_s24daud \ + --enable-decoder=pcm_s24be \ + --enable-decoder=pcm_s16le_planar \ + --enable-decoder=pcm_s16le \ + --enable-decoder=pcm_s16be \ + --enable-decoder=pcm_mulaw \ + --enable-decoder=pcm_f64le \ + --enable-decoder=pcm_f64be \ + --enable-decoder=pcm_f32le \ + --enable-decoder=pcm_f32be \ + --enable-decoder=pcm_dvd \ + --enable-decoder=pcm_bluray \ + --enable-decoder=pcm_alaw \ + --enable-decoder=flac \ + --disable-encoders \ + --enable-encoder=aac \ + --enable-encoder=flac \ + --enable-encoder=pcm_alaw \ + --enable-encoder=pcm_f32be \ + --enable-encoder=pcm_f32le \ + --enable-encoder=pcm_f64be \ + --enable-encoder=pcm_f64le \ + --enable-encoder=pcm_mulaw \ + --enable-encoder=pcm_s16be \ + --enable-encoder=pcm_s16le \ + --enable-encoder=pcm_s24be \ + --enable-encoder=pcm_s24daud \ + --enable-encoder=pcm_s24le \ + --enable-encoder=pcm_s32be \ + --enable-encoder=pcm_s32le \ + --enable-encoder=pcm_s8 \ + --enable-encoder=pcm_u16be \ + --enable-encoder=pcm_u16le \ + --enable-encoder=pcm_u24be \ + --enable-encoder=pcm_u24le \ + --enable-encoder=pcm_u32be \ + --enable-encoder=pcm_u32le \ + --enable-encoder=pcm_u8 \ + --enable-encoder=pcm_zork \ + --enable-encoder=wmav1 \ + --enable-encoder=wmav2 \ + --disable-demuxers \ + --enable-demuxer=aac \ + --enable-demuxer=ac3 \ + --enable-demuxer=aiff \ + --enable-demuxer=au \ + --enable-demuxer=caf \ + --enable-demuxer=flac \ + --enable-demuxer=mp3 \ + --enable-demuxer=ogg \ + --enable-demuxer=pcm_alaw \ + --enable-demuxer=pcm_f32be \ + --enable-demuxer=pcm_f32le \ + --enable-demuxer=pcm_f64be \ + --enable-demuxer=pcm_f64le \ + --enable-demuxer=pcm_mulaw \ + --enable-demuxer=pcm_s16be \ + --enable-demuxer=pcm_s16le \ + --enable-demuxer=pcm_s24be \ + --enable-demuxer=pcm_s24le \ + --enable-demuxer=pcm_s32be \ + --enable-demuxer=pcm_s32le \ + --enable-demuxer=pcm_s8 \ + --enable-demuxer=pcm_u16be \ + --enable-demuxer=pcm_u16le \ + --enable-demuxer=pcm_u24be \ + --enable-demuxer=pcm_u24le \ + --enable-demuxer=pcm_u32be \ + --enable-demuxer=pcm_u32le \ + --enable-demuxer=pcm_u8 \ + --enable-demuxer=wav \ + --disable-muxers \ + --enable-muxer=ac3 \ + --enable-muxer=aiff \ + --enable-muxer=au \ + --enable-muxer=flac \ + --enable-muxer=matroska_audio \ + --enable-muxer=mp3 \ + --enable-muxer=ogg \ + --enable-muxer=pcm_alaw \ + --enable-muxer=pcm_f32be \ + --enable-muxer=pcm_f32le \ + --enable-muxer=pcm_f64be \ + --enable-muxer=pcm_f64le \ + --enable-muxer=pcm_mulaw \ + --enable-muxer=pcm_s16be \ + --enable-muxer=pcm_s16le \ + --enable-muxer=pcm_s24be \ + --enable-muxer=pcm_s24le \ + --enable-muxer=pcm_s32be \ + --enable-muxer=pcm_s32le \ + --enable-muxer=pcm_s8 \ + --enable-muxer=pcm_u16be \ + --enable-muxer=pcm_u16le \ + --enable-muxer=pcm_u24be \ + --enable-muxer=pcm_u24le \ + --enable-muxer=pcm_u32be \ + --enable-muxer=pcm_u32le \ + --enable-muxer=pcm_u8 \ + --enable-muxer=voc \ + --enable-muxer=wav \ + --disable-filters \ + --enable-filter=format \ + --enable-filter=noformat \ + --enable-filter=null \ + --enable-filter=nullsink \ + --enable-filter=nullsrc \ + --enable-filter=slicify + cd ../${FFMPEGNAME}-i386 + LDFLAGS="${I386LDFLAGS} -L${I386PATH}/lib" CFLAGS="${I386FLAGS} -I${I386PATH}/include -mdynamic-no-pic" CXXFLAGS="${I386FLAGS} -I${I386PATH}/include -mdynamic-no-pic" CC="${I386CC}" CXX="${I386CXX}" ./configure --prefix="${I386PATH}" --arch=i386 --disable-bzlib --enable-pthreads --disable-network --enable-small --disable-yasm --disable-ffprobe --disable-ffplay --disable-ffserver --disable-decoder=atrac3 --disable-shared --enable-static \ + --disable-decoders \ + --enable-decoder=aac \ + --enable-decoder=theora \ + --enable-decoder=vorbis \ + --enable-decoder=wmavoice \ + --enable-decoder=wmav2 \ + --enable-decoder=wmav1 \ + --enable-decoder=wmapro \ + --enable-decoder=wavpack \ + --enable-decoder=mp3on4 \ + --enable-decoder=mp3adu \ + --enable-decoder=mp3 \ + --enable-decoder=mp2 \ + --enable-decoder=mp1 \ + --enable-decoder=pcm_zork \ + --enable-decoder=pcm_u8 \ + --enable-decoder=pcm_u32le \ + --enable-decoder=pcm_u32be \ + --enable-decoder=pcm_u24le \ + --enable-decoder=pcm_u24be \ + --enable-decoder=pcm_u16le \ + --enable-decoder=pcm_u16be \ + --enable-decoder=pcm_s8 \ + --enable-decoder=pcm_s32le \ + --enable-decoder=pcm_s32be \ + --enable-decoder=pcm_s24le \ + --enable-decoder=pcm_s24daud \ + --enable-decoder=pcm_s24be \ + --enable-decoder=pcm_s16le_planar \ + --enable-decoder=pcm_s16le \ + --enable-decoder=pcm_s16be \ + --enable-decoder=pcm_mulaw \ + --enable-decoder=pcm_f64le \ + --enable-decoder=pcm_f64be \ + --enable-decoder=pcm_f32le \ + --enable-decoder=pcm_f32be \ + --enable-decoder=pcm_dvd \ + --enable-decoder=pcm_bluray \ + --enable-decoder=pcm_alaw \ + --enable-decoder=flac \ + --disable-encoders \ + --enable-encoder=aac \ + --enable-encoder=flac \ + --enable-encoder=pcm_alaw \ + --enable-encoder=pcm_f32be \ + --enable-encoder=pcm_f32le \ + --enable-encoder=pcm_f64be \ + --enable-encoder=pcm_f64le \ + --enable-encoder=pcm_mulaw \ + --enable-encoder=pcm_s16be \ + --enable-encoder=pcm_s16le \ + --enable-encoder=pcm_s24be \ + --enable-encoder=pcm_s24daud \ + --enable-encoder=pcm_s24le \ + --enable-encoder=pcm_s32be \ + --enable-encoder=pcm_s32le \ + --enable-encoder=pcm_s8 \ + --enable-encoder=pcm_u16be \ + --enable-encoder=pcm_u16le \ + --enable-encoder=pcm_u24be \ + --enable-encoder=pcm_u24le \ + --enable-encoder=pcm_u32be \ + --enable-encoder=pcm_u32le \ + --enable-encoder=pcm_u8 \ + --enable-encoder=pcm_zork \ + --enable-encoder=wmav1 \ + --enable-encoder=wmav2 \ + --disable-demuxers \ + --enable-demuxer=aac \ + --enable-demuxer=ac3 \ + --enable-demuxer=aiff \ + --enable-demuxer=au \ + --enable-demuxer=caf \ + --enable-demuxer=flac \ + --enable-demuxer=mp3 \ + --enable-demuxer=ogg \ + --enable-demuxer=pcm_alaw \ + --enable-demuxer=pcm_f32be \ + --enable-demuxer=pcm_f32le \ + --enable-demuxer=pcm_f64be \ + --enable-demuxer=pcm_f64le \ + --enable-demuxer=pcm_mulaw \ + --enable-demuxer=pcm_s16be \ + --enable-demuxer=pcm_s16le \ + --enable-demuxer=pcm_s24be \ + --enable-demuxer=pcm_s24le \ + --enable-demuxer=pcm_s32be \ + --enable-demuxer=pcm_s32le \ + --enable-demuxer=pcm_s8 \ + --enable-demuxer=pcm_u16be \ + --enable-demuxer=pcm_u16le \ + --enable-demuxer=pcm_u24be \ + --enable-demuxer=pcm_u24le \ + --enable-demuxer=pcm_u32be \ + --enable-demuxer=pcm_u32le \ + --enable-demuxer=pcm_u8 \ + --enable-demuxer=wav \ + --disable-muxers \ + --enable-muxer=ac3 \ + --enable-muxer=aiff \ + --enable-muxer=au \ + --enable-muxer=flac \ + --enable-muxer=matroska_audio \ + --enable-muxer=mp3 \ + --enable-muxer=ogg \ + --enable-muxer=pcm_alaw \ + --enable-muxer=pcm_f32be \ + --enable-muxer=pcm_f32le \ + --enable-muxer=pcm_f64be \ + --enable-muxer=pcm_f64le \ + --enable-muxer=pcm_mulaw \ + --enable-muxer=pcm_s16be \ + --enable-muxer=pcm_s16le \ + --enable-muxer=pcm_s24be \ + --enable-muxer=pcm_s24le \ + --enable-muxer=pcm_s32be \ + --enable-muxer=pcm_s32le \ + --enable-muxer=pcm_s8 \ + --enable-muxer=pcm_u16be \ + --enable-muxer=pcm_u16le \ + --enable-muxer=pcm_u24be \ + --enable-muxer=pcm_u24le \ + --enable-muxer=pcm_u32be \ + --enable-muxer=pcm_u32le \ + --enable-muxer=pcm_u8 \ + --enable-muxer=voc \ + --enable-muxer=wav \ + --disable-filters \ + --enable-filter=format \ + --enable-filter=noformat \ + --enable-filter=null \ + --enable-filter=nullsink \ + --enable-filter=nullsrc \ + --enable-filter=slicify + cd ../${FFMPEGNAME}-x86_64 + LDFLAGS="${X86_64LDFLAGS} -L${X86_64PATH}/lib" CFLAGS="${X86_64FLAGS} -I${X86_64PATH}/include -mdynamic-no-pic" CXXFLAGS="${X86_64FLAGS} -I${X86_64PATH}/include -mdynamic-no-pic" CC="${X86_64CC}" CXX="${X86_64CXX}" ./configure --prefix="${X86_64PATH}" --target-os=darwin --arch=x86_64 --disable-bzlib --enable-pthreads --disable-network --enable-small --disable-yasm --disable-ffprobe --disable-ffplay --disable-ffserver --disable-decoder=atrac3 --disable-shared --enable-static --enable-cross-compile \ + --disable-decoders \ + --enable-decoder=aac \ + --enable-decoder=theora \ + --enable-decoder=vorbis \ + --enable-decoder=wmavoice \ + --enable-decoder=wmav2 \ + --enable-decoder=wmav1 \ + --enable-decoder=wmapro \ + --enable-decoder=wavpack \ + --enable-decoder=mp3on4 \ + --enable-decoder=mp3adu \ + --enable-decoder=mp3 \ + --enable-decoder=mp2 \ + --enable-decoder=mp1 \ + --enable-decoder=pcm_zork \ + --enable-decoder=pcm_u8 \ + --enable-decoder=pcm_u32le \ + --enable-decoder=pcm_u32be \ + --enable-decoder=pcm_u24le \ + --enable-decoder=pcm_u24be \ + --enable-decoder=pcm_u16le \ + --enable-decoder=pcm_u16be \ + --enable-decoder=pcm_s8 \ + --enable-decoder=pcm_s32le \ + --enable-decoder=pcm_s32be \ + --enable-decoder=pcm_s24le \ + --enable-decoder=pcm_s24daud \ + --enable-decoder=pcm_s24be \ + --enable-decoder=pcm_s16le_planar \ + --enable-decoder=pcm_s16le \ + --enable-decoder=pcm_s16be \ + --enable-decoder=pcm_mulaw \ + --enable-decoder=pcm_f64le \ + --enable-decoder=pcm_f64be \ + --enable-decoder=pcm_f32le \ + --enable-decoder=pcm_f32be \ + --enable-decoder=pcm_dvd \ + --enable-decoder=pcm_bluray \ + --enable-decoder=pcm_alaw \ + --enable-decoder=flac \ + --disable-encoders \ + --enable-encoder=aac \ + --enable-encoder=flac \ + --enable-encoder=pcm_alaw \ + --enable-encoder=pcm_f32be \ + --enable-encoder=pcm_f32le \ + --enable-encoder=pcm_f64be \ + --enable-encoder=pcm_f64le \ + --enable-encoder=pcm_mulaw \ + --enable-encoder=pcm_s16be \ + --enable-encoder=pcm_s16le \ + --enable-encoder=pcm_s24be \ + --enable-encoder=pcm_s24daud \ + --enable-encoder=pcm_s24le \ + --enable-encoder=pcm_s32be \ + --enable-encoder=pcm_s32le \ + --enable-encoder=pcm_s8 \ + --enable-encoder=pcm_u16be \ + --enable-encoder=pcm_u16le \ + --enable-encoder=pcm_u24be \ + --enable-encoder=pcm_u24le \ + --enable-encoder=pcm_u32be \ + --enable-encoder=pcm_u32le \ + --enable-encoder=pcm_u8 \ + --enable-encoder=pcm_zork \ + --enable-encoder=wmav1 \ + --enable-encoder=wmav2 \ + --disable-demuxers \ + --enable-demuxer=aac \ + --enable-demuxer=ac3 \ + --enable-demuxer=aiff \ + --enable-demuxer=au \ + --enable-demuxer=caf \ + --enable-demuxer=flac \ + --enable-demuxer=mp3 \ + --enable-demuxer=ogg \ + --enable-demuxer=pcm_alaw \ + --enable-demuxer=pcm_f32be \ + --enable-demuxer=pcm_f32le \ + --enable-demuxer=pcm_f64be \ + --enable-demuxer=pcm_f64le \ + --enable-demuxer=pcm_mulaw \ + --enable-demuxer=pcm_s16be \ + --enable-demuxer=pcm_s16le \ + --enable-demuxer=pcm_s24be \ + --enable-demuxer=pcm_s24le \ + --enable-demuxer=pcm_s32be \ + --enable-demuxer=pcm_s32le \ + --enable-demuxer=pcm_s8 \ + --enable-demuxer=pcm_u16be \ + --enable-demuxer=pcm_u16le \ + --enable-demuxer=pcm_u24be \ + --enable-demuxer=pcm_u24le \ + --enable-demuxer=pcm_u32be \ + --enable-demuxer=pcm_u32le \ + --enable-demuxer=pcm_u8 \ + --enable-demuxer=wav \ + --disable-muxers \ + --enable-muxer=ac3 \ + --enable-muxer=aiff \ + --enable-muxer=au \ + --enable-muxer=flac \ + --enable-muxer=matroska_audio \ + --enable-muxer=mp3 \ + --enable-muxer=ogg \ + --enable-muxer=pcm_alaw \ + --enable-muxer=pcm_f32be \ + --enable-muxer=pcm_f32le \ + --enable-muxer=pcm_f64be \ + --enable-muxer=pcm_f64le \ + --enable-muxer=pcm_mulaw \ + --enable-muxer=pcm_s16be \ + --enable-muxer=pcm_s16le \ + --enable-muxer=pcm_s24be \ + --enable-muxer=pcm_s24le \ + --enable-muxer=pcm_s32be \ + --enable-muxer=pcm_s32le \ + --enable-muxer=pcm_s8 \ + --enable-muxer=pcm_u16be \ + --enable-muxer=pcm_u16le \ + --enable-muxer=pcm_u24be \ + --enable-muxer=pcm_u24le \ + --enable-muxer=pcm_u32be \ + --enable-muxer=pcm_u32le \ + --enable-muxer=pcm_u8 \ + --enable-muxer=voc \ + --enable-muxer=wav \ + --disable-filters \ + --enable-filter=format \ + --enable-filter=noformat \ + --enable-filter=null \ + --enable-filter=nullsink \ + --enable-filter=nullsrc \ + --enable-filter=slicify + + echo "Compiling FFmpeg" + cd ../${FFMPEGNAME}-ppc + make + cd ../${FFMPEGNAME}-i386 + make + cd ../${FFMPEGNAME}-x86_64 + make + + echo "Installing FFmpeg" + cd ../${FFMPEGNAME}-ppc + make install + cd ../${FFMPEGNAME}-i386 + make install + cd ../${FFMPEGNAME}-x86_64 + make install + + echo "Making FFmpeg Universal" + cd ../ + + mkdir -p ./opt/bin + mkdir -p ./opt/lib + + cp -R "${PPCPATH}/include" ./opt/include + cp ./${FFMPEGNAME}-ppc/libavcodec/audioconvert.h ./opt/include/libavcodec/audioconvert.h + cp ./${FFMPEGNAME}-ppc/libavcodec/colorspace.h ./opt/include/libavcodec/colorspace.h + cp ./${FFMPEGNAME}-ppc/config.h ./opt/include/ffconfig.h + lipo -create "${PPCPATH}/lib/libavcodec.a" "${I386PATH}/lib/libavcodec.a" "${X86_64PATH}/lib/libavcodec.a" -output ./opt/lib/libavcodec.a + lipo -create "${PPCPATH}/lib/libavdevice.a" "${I386PATH}/lib/libavdevice.a" "${X86_64PATH}/lib/libavdevice.a" -output ./opt/lib/libavdevice.a + lipo -create "${PPCPATH}/lib/libavformat.a" "${I386PATH}/lib/libavformat.a" "${X86_64PATH}/lib/libavformat.a" -output ./opt/lib/libavformat.a + lipo -create "${PPCPATH}/lib/libavutil.a" "${I386PATH}/lib/libavutil.a" "${X86_64PATH}/lib/libavutil.a" -output ./opt/lib/libavutil.a + lipo -create "${PPCPATH}/lib/libswscale.a" "${I386PATH}/lib/libswscale.a" "${X86_64PATH}/lib/libswscale.a" -output ./opt/lib/libswscale.a + lipo -create "${PPCPATH}/bin/ffmpeg" "${I386PATH}/bin/ffmpeg" "${X86_64PATH}/bin/ffmpeg" -output ./opt/bin/ffmpeg +fi \ No newline at end of file diff --git a/FFmpeg/notes.txt b/FFmpeg/notes.txt new file mode 100755 index 0000000..176bf54 --- /dev/null +++ b/FFmpeg/notes.txt @@ -0,0 +1,15 @@ +Getting the source code to PJProject. +To get the latest source to PJProject, run the command below. +git clone git://git.ffmpeg.org/ffmpeg.git ffmpeg + +To get the tag that I am using in VoiceMac and VoiceMob, run the commands below. +git clone git://git.ffmpeg.org/ffmpeg.git ffmpeg +cd ffmpeg +git checkout v0.6.1 + +Building. +To build for VoiceMac, run the command below. +./install + +To build for VoiceMob, run the command below. +./install ios \ No newline at end of file diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h new file mode 100644 index 0000000..272798e --- /dev/null +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h @@ -0,0 +1,19 @@ +// +// MGMAbout.h +// MGMUsers +// +// Created by Mr. Gecko on 1/29/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@interface MGMAbout : NSObject { + IBOutlet NSWindow *window; + IBOutlet NSImageView *iconView; + IBOutlet NSTextField *applicationField; + IBOutlet NSTextView *aboutView; +} +- (NSWindow *)window; +- (void)show; +@end \ No newline at end of file diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMFileManager.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMFileManager.h new file mode 100644 index 0000000..630d8bf --- /dev/null +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMFileManager.h @@ -0,0 +1,23 @@ +// +// MGMFileManager.h +// SoundNote +// +// Created by Mr. Gecko on 1/22/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@interface NSFileManager (MGMFileManager) +- (BOOL)moveItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination; +- (BOOL)copyItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination; +- (BOOL)removeItemAtPath:(NSString *)thePath; +- (BOOL)linkItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination; +- (BOOL)createDirectoryAtPath:(NSString *)thePath withAttributes:(NSDictionary *)theAttributes; +- (BOOL)createSymbolicLinkAtPath:(NSString *)thePath withDestinationPath:(NSString *)theDestination; +- (NSString *)destinationOfSymbolicLinkAtPath:(NSString *)thePath; +- (NSArray *)contentsOfDirectoryAtPath:(NSString *)thePath; +- (NSDictionary *)attributesOfFileSystemForPath:(NSString *)thePath; +- (void)setAttributes:(NSDictionary *)theAttributes ofItemAtPath:(NSString *)thePath; +- (NSDictionary *)attributesOfItemAtPath:(NSString *)thePath; +@end \ No newline at end of file diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMHTTPCookieStorage.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMHTTPCookieStorage.h index 38b3f73..08872e2 100644 --- a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMHTTPCookieStorage.h +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMHTTPCookieStorage.h @@ -6,11 +6,7 @@ // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import @interface MGMHTTPCookieStorage : NSObject { @private diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h index 84a8102..5d9d075 100644 --- a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h @@ -6,11 +6,7 @@ // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import @interface NSString (MGMJSON) - (id)parseJSON; diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychain.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychain.h index 3e691ce..1f7a57c 100644 --- a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychain.h +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychain.h @@ -6,11 +6,7 @@ // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import #import @class MGMKeychainItem; diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychainItem.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychainItem.h index 10e508d..ba2e7bc 100644 --- a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychainItem.h +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMKeychainItem.h @@ -6,11 +6,7 @@ // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import #import #import diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMTaskView.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMTaskView.h new file mode 100644 index 0000000..17eb2f6 --- /dev/null +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMTaskView.h @@ -0,0 +1,50 @@ +// +// MGMTaskView.h +// YouView +// +// Created by Mr. Gecko on 4/16/09. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@class MGMURLConnectionManager, MGMTaskManager; + +@interface MGMTaskView : NSObject { + MGMTaskManager *manager; + IBOutlet NSView *mainView; + IBOutlet NSImageView *icon; + IBOutlet NSTextField *name; + IBOutlet NSProgressIndicator *progress; + IBOutlet NSTextField *info; + IBOutlet NSButton *stop; + IBOutlet NSButton *restart; + NSMutableDictionary *taskInfo; + NSHTTPCookieStorage *cookieStorage; + + MGMURLConnectionManager *connectionManager; + + int startTime; + int bytesReceivedSec; + int bytesReceived; + NSTimer *secCheckTimer; + NSString *receivedSec; + int receivedContentLength; + int expectedContentLength; + + BOOL working; + BOOL stopped; +} ++ (id)taskViewWithTask:(NSDictionary *)theTask manager:(MGMTaskManager *)theManager cookieStorage:(NSHTTPCookieStorage *)theCookieStorage; +- (id)initWithTask:(NSDictionary *)theTask manager:(MGMTaskManager *)theManager cookieStorage:(NSHTTPCookieStorage *)theCookieStorage; +- (void)setName; +- (NSString *)VMTaskPath; +- (BOOL)working; +- (NSView *)view; +- (NSString *)bytesToString:(double)bytes; +- (NSString *)secsToString:(int)secs; +- (IBAction)stop:(id)sender; +- (IBAction)reveal:(id)sender; +- (IBAction)restart:(id)sender; +- (void)saveInfo; +@end \ No newline at end of file diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLBasicHandler.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLBasicHandler.h new file mode 100644 index 0000000..870448e --- /dev/null +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLBasicHandler.h @@ -0,0 +1,101 @@ +// +// MGMURLBasicHandler.h +// MGMUsers +// +// Created by Mr. Gecko on 2/21/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@class MGMURLConnectionManager; + +@interface MGMURLBasicHandler : NSObject { + MGMURLConnectionManager *manager; + NSURLConnection *connection; + NSMutableURLRequest *request; + NSHTTPURLResponse *response; + + NSString *file; + NSFileHandle *fileHandle; + NSMutableData *dataBuffer; + + unsigned long totalExpected; + unsigned long totalDownloaded; + + id delegate; + SEL receiveResponse; + SEL sendRequest; + SEL bytesUploaded; + SEL bytesReceived; + SEL failWithError; + SEL finish; + BOOL invisible; + id object; + BOOL synchronous; +} ++ (id)handler; ++ (id)handlerWithRequest:(NSURLRequest *)theRequest delegate:(id)theDelegate; +- (id)initWithRequest:(NSURLRequest *)theRequest delegate:(id)theDelegate; + +- (void)setDelegate:(id)theDelegate; +- (id)delegate; +// Arguments +// MGMURLBasicHandler *theHandler +// NSHTTPURLResponse *theResponse +// Default +// handler:didReceiveResponse: +- (void)setReceiveResponse:(SEL)didReceiveResponse; +- (SEL)receiveResponse; +// Arguments +// MGMURLBasicHandler *theHandler +// NSURLRequest *theRequest +// NSHTTPURLResponse *theResponse +// Return +// NSURLRequest *newRequest (nil for continue loading). +// Default +// handler:willSendRequest:redirectResponse: +- (void)setSendRequest:(SEL)willSendRequest; +- (SEL)sendRequest; +// Arguments +// MGMURLBasicHandler *theHandler +// unsigned long theBytes +// unsigned long theTotalBytes +// unsigned long theExpectedBytes +- (void)setBytesUploaded:(SEL)theBytesUploaded; +- (SEL)bytesUploaded; +// Arguments +// MGMURLBasicHandler *theHandler +// unsigned long theBytes +// unsigned long theTotalBytes +// unsigned long theExpectedBytes +- (void)setBytesReceived:(SEL)theBytesReceived; +- (SEL)bytesReceived; +// Arguments +// MGMURLBasicHandler *theHandler +// NSError *theError +// Default +// handler:didFailWithError: +- (void)setFailWithError:(SEL)didFailWithError; +- (SEL)failWithError; +// Arguments +// MGMURLBasicHandler *theHandler +// Default +// handlerDidFinish: +- (void)setFinish:(SEL)didFinish; +- (SEL)finish; +- (void)setInvisible:(BOOL)isInvisible; +- (BOOL)invisible; +- (void)setObject:(id)theObject; +- (id)object; +- (void)setSynchronous:(BOOL)isSynchronous; +- (BOOL)synchronous; +- (void)setFile:(NSString *)theFile; +- (NSString *)file; + +- (void)setRequest:(NSURLRequest *)theRequest; +- (NSMutableURLRequest *)request; +- (NSURLResponse *)response; +- (NSData *)data; +- (NSString *)string; +@end \ No newline at end of file diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUser.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUser.h index 23dc163..b3de8ad 100644 --- a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUser.h +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUser.h @@ -6,11 +6,7 @@ // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import extern NSString * const MGMUserStartNotification; extern NSString * const MGMUserDoneNotification; diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMWhitePagesHandler.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMWhitePagesHandler.h new file mode 100644 index 0000000..62bccef --- /dev/null +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMWhitePagesHandler.h @@ -0,0 +1,47 @@ +// +// MGMWhitePages.h +// MGMUsers +// +// Created by Mr. Gecko on 9/2/09. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@class MGMURLConnectionManager; + +@interface MGMWhitePagesHandler : NSObject { + MGMURLConnectionManager *manager; + NSURLConnection *connection; + NSMutableURLRequest *request; + NSMutableData *dataBuffer; + + id delegate; + SEL findInfo; + SEL failWithError; + NSString *phoneNumber; + NSString *name; + NSString *address; + NSString *location; + NSString *zip; + NSString *latitude; + NSString *longitude; +} ++ (id)reverseLookup:(NSString *)thePhoneNumber delegate:(id)theDelegate; +- (id)initWithPhoneNumber:(NSString *)thePhoneNumber delegate:(id)theDelegate; + +- (void)setDelegate:(id)theDelegate; +- (id)delegate; +- (void)setFindInfo:(SEL)didFindInfo; +- (SEL)findInfo; +- (void)setFailWithError:(SEL)didFailWithError; +- (SEL)failWithError; +- (void)setPhoneNumber:(NSString *)thePhoneNumber; +- (NSString *)phoneNumber; +- (NSString *)name; +- (NSString *)address; +- (NSString *)location; +- (NSString *)zip; +- (NSString *)latitude; +- (NSString *)longitude; +@end \ No newline at end of file diff --git a/Frameworks/MGMUsers.framework/Versions/A/MGMUsers b/Frameworks/MGMUsers.framework/Versions/A/MGMUsers index d83a78f..7a8176f 100755 Binary files a/Frameworks/MGMUsers.framework/Versions/A/MGMUsers and b/Frameworks/MGMUsers.framework/Versions/A/MGMUsers differ diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib b/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib index 505181d..76dbbe6 100644 Binary files a/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib and b/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib differ diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib b/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib index d8d3509..d4088e3 100644 Binary files a/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib and b/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib differ diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib b/Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib new file mode 100644 index 0000000..7b64d5f Binary files /dev/null and b/Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib differ diff --git a/License.txt b/License.txt index ae95961..7efc0ee 100644 --- a/License.txt +++ b/License.txt @@ -1,4 +1,8 @@ -Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ Licenses for VoiceMac. Permission is granted, to any person obtaining a copy of this application, to use, copy, modify, merge, or redistribute this application under the following terms: 1. This file must be included in all copies of this application unmodified in the resource of the application. 2. THIS APPLICATION IS PROVIDED "AS IS" BY JAMES COLEMAN, WITHOUT WARRANTY OF ANY KIND. IF YOUR SOFTWARE/COMPUTER CRASHES OR FAILS TO WORK IN ANY WAY SHAPE OR FORM BECAUSE OF THIS APPLICATION, I (JAMES COLEMAN) AM NOT IN ANYWAY RESPONSIBLE FOR YOUR PROBLEM. 3. Redistributions of source code must retain the copyright notice above this license file without modifications. 4. Redistributions of binary must contain the copyright above this license file without modifications. 5. You may not change the about panel, as it is giving credit to everyone who helped write this application and they deserve the credit for their fine work. 6. You may not use the binary redistributed in this application, MGMUsers, for anything except VoiceMac. 7. You may not change the bundle identifier or the name of VoiceMac. If you are to use MGMUsers in anything that is not named VoiceMac or does not have the same bundle identifier as VoiceMac, MGMUsers will notify me and crash the application. 8. Mr. Gecko's Media (James Coleman) is allowed to modify these terms without notice to you or anyone else. Licenses for MGMSIP. Permission is granted, to any person obtaining a copy of this application, to use, copy, modify, merge, or redistribute this application under the following terms: 1. You may use MGMSIP, the PJSIP wrapper, in your own application, if you include a link to PJSIP in your about box, and you include a link to Mr. Gecko’s Media. 2. THIS WRAPPER IS PROVIDED "AS IS" BY JAMES COLEMAN, WITHOUT WARRANTY OF ANY KIND. IF YOUR SOFTWARE/COMPUTER CRASHES OR FAILS TO WORK IN ANY WAY SHAPE OR FORM BECAUSE OF THIS WRAPPER, I (JAMES COLEMAN) AM NOT IN ANYWAY RESPONSIBLE FOR YOUR PROBLEM. 3. The above copyright must be retained in the binary where MGMSIP is included. 4. Redistributions of source code must retain the copyright notice above this license file without modifications. -5. Mr. Gecko's Media (James Coleman) is allowed to modify these terms without notice to you or anyone else. - Licenses for MGMXML. Permission is granted, to any person obtaining a copy of this application, to use, copy, modify, merge, or redistribute this application under the following terms: 1. You may use MGMXML in your own application, if you include a link to PJSIP in your about box, and you include a link to Mr. Gecko’s Media. 2. THIS WRAPPER IS PROVIDED "AS IS" BY JAMES COLEMAN, WITHOUT WARRANTY OF ANY KIND. IF YOUR SOFTWARE/COMPUTER CRASHES OR FAILS TO WORK IN ANY WAY SHAPE OR FORM BECAUSE OF THIS WRAPPER, I (JAMES COLEMAN) AM NOT IN ANYWAY RESPONSIBLE FOR YOUR PROBLEM. 3. The above copyright must be retained in the binary where MGMXML is included. 4. Redistributions of source code must retain the copyright notice above this license file without modifications. -5. Mr. Gecko's Media (James Coleman) is allowed to modify these terms without notice to you or anyone else. \ No newline at end of file +ISC License (ISCL) + +Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + License for MGMFFmpeg. MGMFFmpeg is under LGPL license, read MGMFFmpeg License.txt for more information. \ No newline at end of file diff --git a/MGMFFmpeg License.txt b/MGMFFmpeg License.txt new file mode 100644 index 0000000..9d57397 --- /dev/null +++ b/MGMFFmpeg License.txt @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library 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 library 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 library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! \ No newline at end of file diff --git a/Resources/VoiceMac/English.lproj/MainMenu.xib b/Resources/VoiceMac/English.lproj/MainMenu.xib index e6a54c7..7857c07 100644 --- a/Resources/VoiceMac/English.lproj/MainMenu.xib +++ b/Resources/VoiceMac/English.lproj/MainMenu.xib @@ -2,10 +2,10 @@ 1050 - 10F569 - 788 - 1038.29 - 461.00 + 10J567 + 1294 + 1038.35 + 462.00 YES @@ -15,13 +15,20 @@ YES - 788 - 788 + 1294 + 30 - + YES - + NSTextFieldCell + WebView + NSMenuItem + NSView + NSCustomObject + NSWindowTemplate + NSTextField + NSMenu YES @@ -33,9 +40,7 @@ YES - - YES - + YES @@ -808,543 +813,6 @@ MGMFeedback - - 23 - 2 - {{399, 260}, {482, 257}} - -461897728 - About VoiceMac - NSPanel - - {3.40282e+38, 3.40282e+38} - - - 256 - - YES - - - 268 - {{245, 181}, {220, 17}} - - YES - - 68288064 - 138413056 - At mrgeckosmedia.com - - LucidaGrande-Bold - 13 - 16 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2ODY1AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - - 256 - - YES - - YES - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - - {{20, 17}, {220, 220}} - - YES - - 130560 - 33554432 - - NSImage - VoiceMac Icon - - 0 - 0 - 0 - YES - - YES - - - - 268 - {{245, 195}, {220, 22}} - - YES - - 68288064 - 138413056 - By Mr. Gecko - - LucidaGrande-Bold - 18 - 16 - - - - - - - - - 268 - {{245, 215}, {220, 22}} - - YES - - 68288064 - 138413056 - VoiceMac - - - - - - - - - 268 - {{44, 6}, {394, 14}} - - YES - - 68288064 - 272761856 - I can do all things because Christ gives me the strength, Philippians 4:13 - - LucidaGrande - 11 - 3100 - - - - - - - - - 256 - - YES - - - 2304 - - YES - - - 2322 - {225, 453} - - - - - - U3BlY2lhbCBUaGFua3MgVG8KTWVnYUVkdVggKG1lZ2FlZHV4LmNvbSkKUm9ja1N0YXIgKHJvY2tudGhl -c3dlYXRlci5jb20pClBvd2VyT2ZDaGVlc2UgKHh0cmVtZW1hY2hpbmV6LmNvbSkKClZvaWNlTWFjIFVz -ZXMgTUdNU0lQIGFzIGEgd3JhcHBlciBmb3IgUEpTSVAgd2hpY2ggaXMgYSBWT0lQIGxpYnJhcnksIFNw -YXJrbGUgZm9yIHNvZnR3YXJlIHVwZGF0ZSwgYW5kIEdyb3dsIGZvciBub3RpZmljYXRpb25zLgoKVm9p -Y2VNYWMgaXMgdGhlIGZpcnN0IEdvb2dsZSBWb2ljZSBjbGllbnQgZm9yIHRoZSBNYWMuIFNlbmQgbXVs -dGlwbGUgU01TIE1lc3NhZ2VzLCBzZW5kIFNNUyBNZXNzYWdlcywgcmVjZWl2ZSBTTVMgTWVzc2FnZXMs -IHBsYWNlIGNhbGxzLCBsb29rIGF0IHlvdXIgY2FsbCBoaXN0b3J5LCByZWNlaXZlIHZvaWNlbWFpbCwg -cmV2ZXJzZSBsb29rdXAgYSBwaG9uZSBudW1iZXIsIGFuZCBzZWFyY2ggeW91ciBjb250YWN0IGxpc3Qg -aW4gb25lIGVhc3kgaW50ZXJmYWNlLiBXaGVuIHlvdSByZWNlaXZlIGEgU01TIE1lc3NhZ2Ugb3IgVm9p -Y2VtYWlsLCB5b3UgZ2V0IG5vdGlmaWNhdGlvbnMgdmlldyBHcm93bCBhbmQgaGVhciBzb3VuZHMgdGhh -dCBpcyBjdXN0b21pemFibGUuCgpXaXRoIFNJUCBzdXBwb3J0IHlvdSBjYW4gcGxhY2UgY2FsbHMgZnJv -bSB5b3VyIGNvbXB1dGVyIHVzaW5nIHlvdXIgZmF2b3JpdGUgU0lQIHNlcnZpY2UgYW5kIGlmIHlvdSBs -aW5rIHlvdXIgR29vZ2xlIFZvaWNlIE51bWJlciB3aXRoIHRoZSBTSVAgc2VydmljZSwgeW91IGNhbiBw -bGFjZSBjYWxscyB3aXRoIHlvdXIgR29vZ2xlIFZvaWNlIE51bWJlciBmcm9tIHlvdXIgY29tcHV0ZXIu -IFdpdGggdGhlIHJldmVyc2UgbG9va3VwIGRhdGEsIHlvdSBjYW4gc2VlIHdobyBpcyBjYWxsaW5nIHlv -dSwgZXZlbiBpZiB0aGVpciBudW1iZXIgaXNuJ3QgaW4geW91ciBjb250YWN0cyBsaXN0LgoKV2l0aCB0 -aGVtZXMsIHlvdSBjYW4gY3VzdG9taXplIHlvdXIgU01TIE1lc3NhZ2VzIGxvb2sgYW55d2F5IHlvdSBs -aWtlIHdpdGggc2ltcGxlIEhUTUwgb3IgYnkgZG93bmxvYWRpbmcgYSB0aGVtZS4KClZvaWNlTWFjJ3Mg -Y29udGFjdHMgc3lzdGVtIGlzIG9uZSBvZiB0aGUgYmVzdCBjb250YWN0cyBzeXN0ZW0gYXJvdW5kLCB3 -aXRoIHN1cHBvcnQgZm9yIEFkZHJlc3MgQm9vayBhbmQgR29vZ2xlIENvbnRhY3RzLiBZb3UgY2FuIHNl -YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 - - - YES - - YES - - YES - NSFont - NSParagraphStyle - - - YES - - Helvetica - 16 - 16 - - - 2 - - YES - - 36 - - - 72 - - - 108 - - - 144 - - - 180 - - - 216 - - - 252 - - - 288 - - - 324 - - - 360 - - - 396 - - - 432 - - - - - - - YES - - YES - NSFont - NSParagraphStyle - - - YES - - Helvetica - 12 - 16 - - - - - - YES - - YES - NSFont - NSLink - NSParagraphStyle - - - YES - - - - http://megaedux.com - - - - - - YES - - YES - NSFont - NSLink - NSParagraphStyle - - - YES - - - - http://rocknthesweater.com - - - - - - YES - - YES - NSFont - NSLink - NSParagraphStyle - - - YES - - - - http://xtrememachinez.com - - - - - - YES - - YES - NSFont - NSParagraphStyle - - - YES - - - 4 - - YES - - - - - - - - - - - - - - - - - - YES - - YES - NSFont - NSLink - NSParagraphStyle - - - YES - - - - http://mrgeckosmedia.com - - - 4 - - YES - - - - - - - - - - - - - - - - - - YES - - YES - NSFont - NSLink - NSParagraphStyle - - - YES - - - - http://www.pjsip.org/ - - - - - - YES - - YES - NSFont - NSLink - NSParagraphStyle - - - YES - - - - http://sparkle.andymatuschak.org - - - - - - - EgAKAQwCDAETAxEBEgQDAQ4FBgYSBQUHGgUHCK8IBQ - - - - - YES - - - 134 - - - - 225 - 1 - - - 12261 - 0 - - - 3 - MQA - - - YES - - YES - NSBackgroundColor - NSColor - - - YES - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - YES - - YES - NSColor - NSCursor - NSUnderline - - - YES - - 1 - MCAwIDEAA - - - {8, -8} - 13 - - - - - - - 6 - {463, 1e+07} - {209, 133} - - - - {{1, 1}, {225, 143}} - - - - - - {4, -5} - 1 - - 4 - - - - 256 - {{226, 1}, {15, 143}} - - YES - - _doScroller: - 0.31567329168319702 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - 1 - - _doScroller: - 1 - 0.94565218687057495 - - - {{241, 28}, {242, 145}} - - - 82 - - - - - - {482, 257} - - - {{0, 0}, {1280, 778}} - {3.40282e+38, 3.40282e+38} - 31 2 @@ -1353,7 +821,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4Reverse Lookup NSPanel - {3.40282e+38, 3.40282e+38} {293, 328} @@ -1376,8 +843,24 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC41044 - - + + 6 + System + controlColor + + 3 + MC42NjY2NjY2ODY1AA + + + + 6 + System + controlTextColor + + 3 + MAA + + @@ -1579,7 +1062,7 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 {{0, 0}, {1280, 778}} {293, 344} - {3.40282e+38, 3.40282e+38} + {1e+13, 1e+13} reverselookup @@ -1978,22 +1461,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 1390 - - - aboutNameField - - - - 1392 - - - - aboutWindow - - - - 1393 - about: @@ -2460,86 +1927,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 - - 721 - - - YES - - - - About - - - 722 - - - YES - - - - - - - - - - - 723 - - - YES - - - - - - 724 - - - YES - - - - - - 727 - - - YES - - - - - - 730 - - - YES - - - - - - 731 - - - - - 734 - - - - - 737 - - - - - 738 - - - 817 @@ -2903,20 +2290,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 - - 1395 - - - YES - - - - - - 1396 - - - 1399 @@ -2937,38 +2310,14 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 - - 1411 - - - YES - - - - - - - - 1412 - - - - - 1413 - - - - - 1414 - - - YES YES + -1.IBPluginDependency + -2.IBPluginDependency -3.IBPluginDependency 103.IBPluginDependency 103.ImportedFromIB2 @@ -2982,8 +2331,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC41292.IBPluginDependency 1292.IBWindowTemplateEditedContentRect 1292.NSWindowTemplate.visibleAtLaunch - 1292.windowTemplate.hasMinSize - 1292.windowTemplate.minSize 1293.IBPluginDependency 1297.IBPluginDependency 1299.IBPluginDependency @@ -3015,6 +2362,7 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC41319.IBPluginDependency 134.IBPluginDependency 134.ImportedFromIB2 + 1341.IBPluginDependency 1342.IBPluginDependency 1343.IBPluginDependency 1353.IBPluginDependency @@ -3032,16 +2380,10 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC41364.IBPluginDependency 1366.IBPluginDependency 1367.IBPluginDependency - 1395.IBPluginDependency - 1396.IBPluginDependency 1399.IBPluginDependency 1402.IBPluginDependency 1406.IBPluginDependency 1408.IBPluginDependency - 1411.IBPluginDependency - 1412.IBPluginDependency - 1413.IBPluginDependency - 1414.IBPluginDependency 143.IBPluginDependency 143.ImportedFromIB2 144.IBPluginDependency @@ -3121,6 +2463,8 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4296.editorWindowContentRectSynchronizationRect 346.IBPluginDependency 346.ImportedFromIB2 + 420.IBPluginDependency + 450.IBPluginDependency 5.IBPluginDependency 5.ImportedFromIB2 56.IBPluginDependency @@ -3133,23 +2477,9 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC458.ImportedFromIB2 603.IBPluginDependency 603.ImportedFromIB2 + 703.IBPluginDependency 704.IBPluginDependency 706.IBPluginDependency - 721.IBEditorWindowLastContentRect - 721.IBPluginDependency - 721.IBWindowTemplateEditedContentRect - 721.NSWindowTemplate.visibleAtLaunch - 721.windowTemplate.maxSize - 722.IBPluginDependency - 722.IBUserGuides - 723.IBPluginDependency - 724.IBPluginDependency - 727.IBPluginDependency - 730.IBPluginDependency - 731.IBPluginDependency - 734.IBPluginDependency - 737.IBPluginDependency - 738.IBPluginDependency 817.IBPluginDependency 820.IBPluginDependency 821.IBPluginDependency @@ -3173,6 +2503,8 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin {{608, 348}, {178, 43}} com.apple.InterfaceBuilder.CocoaPlugin @@ -3184,8 +2516,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4com.apple.InterfaceBuilder.CocoaPlugin {{152, 21}, {293, 328}} - - {293, 328} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3221,6 +2551,7 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin {{430, 158}, {203, 233}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3239,12 +2570,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3324,6 +2649,8 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3337,20 +2664,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{382, 345}, {482, 257}} - com.apple.InterfaceBuilder.CocoaPlugin - {{382, 345}, {482, 257}} - - {3.40282e+38, 3.40282e+38} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3375,17 +2688,13 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 YES - - YES - + YES - - YES - + 1414 @@ -3630,7 +2939,47 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 IBProjectSource - Classes/VoiceMac/MGMController.h + ./Classes/MGMController.h + + + + MGMFeedback + NSObject + + YES + + YES + openBugReport: + openContact: + + + YES + id + id + + + + YES + + YES + openBugReport: + openContact: + + + YES + + openBugReport: + id + + + openContact: + id + + + + + IBProjectSource + ./Classes/MGMFeedback.h @@ -3779,7 +3128,7 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 IBProjectSource - Classes/VoiceMac/Inbox/MGMInboxWindow.h + ./Classes/MGMInboxWindow.h @@ -3787,138 +3136,11 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4NSSplitView IBProjectSource - Classes/VoiceMac/Views/MGMSplitView.h - - - - - YES - - MGMFeedback - NSObject - - YES - - YES - openBugReport: - openContact: - - - YES - id - id - - - - YES - - YES - openBugReport: - openContact: - - - YES - - openBugReport: - id - - - openContact: - id - - - - - IBFrameworkSource - GeckoReporter.framework/Headers/MGMFeedback.h - - - - NSActionCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h - - - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSUserInterfaceItemSearching.h - - - - NSBrowser - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSBrowser.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h + ./Classes/MGMSplitView.h NSDocument - NSObject YES @@ -3980,816 +3202,10 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 - IBFrameworkSource - AppKit.framework/Headers/NSDocument.h + IBProjectSource + ./Classes/NSDocument.h - - NSDocument - - IBFrameworkSource - AppKit.framework/Headers/NSDocumentScripting.h - - - - NSFontManager - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSImageCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSImageCell.h - - - - NSImageView - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSImageView.h - - - - NSMatrix - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSMatrix.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMovieView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSMovieView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDictionaryController.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObjectScripting.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPortCoder.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptObjectSpecifiers.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptWhoseTests.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLDownload.h - - - - NSObject - - IBFrameworkSource - Growl.framework/Headers/GrowlApplicationBridge.h - - - - NSObject - - IBFrameworkSource - QTKit.framework/Headers/QTCaptureDecompressedVideoOutput.h - - - - NSObject - - IBFrameworkSource - QTKit.framework/Headers/QTCaptureFileOutput.h - - - - NSObject - - IBFrameworkSource - QTKit.framework/Headers/QTCaptureVideoPreviewOutput.h - - - - NSObject - - IBFrameworkSource - QTKit.framework/Headers/QTCaptureView.h - - - - NSObject - - IBFrameworkSource - QTKit.framework/Headers/QTMovie.h - - - - NSObject - - IBFrameworkSource - QTKit.framework/Headers/QTMovieView.h - - - - NSObject - - IBFrameworkSource - QuartzCore.framework/Headers/CAAnimation.h - - - - NSObject - - IBFrameworkSource - QuartzCore.framework/Headers/CALayer.h - - - - NSObject - - IBFrameworkSource - QuartzCore.framework/Headers/CIImageProvider.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUAppcast.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUAutomaticUpdateAlert.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUInstaller.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUnarchiver.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUpdateAlert.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUpdatePermissionPrompt.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUpdater.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebDownload.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebEditingDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebFrameLoadDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebJavaPlugIn.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPlugin.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPluginContainer.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPolicyDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebResourceLoadDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebScriptObject.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebUIDelegate.h - - - - NSOutlineView - NSTableView - - - - NSPanel - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSPanel.h - - - - NSProgressIndicator - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSProgressIndicator.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSScrollView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSScrollView.h - - - - NSScroller - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSScroller.h - - - - NSSplitView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSSplitView.h - - - - NSTableView - NSControl - - - - NSText - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSText.h - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSTextView - NSText - - IBFrameworkSource - AppKit.framework/Headers/NSTextView.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - NSWindow - - IBFrameworkSource - MGMUsers.framework/Headers/MGMPreferences.h - - - - QTMovieView - NSView - - YES - - YES - add: - addScaled: - copy: - cut: - delete: - gotoBeginning: - gotoEnd: - gotoNextSelectionPoint: - gotoPosterFrame: - gotoPreviousSelectionPoint: - paste: - pause: - play: - replace: - selectAll: - selectNone: - stepBackward: - stepForward: - trim: - - - YES - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - YES - - YES - add: - addScaled: - copy: - cut: - delete: - gotoBeginning: - gotoEnd: - gotoNextSelectionPoint: - gotoPosterFrame: - gotoPreviousSelectionPoint: - paste: - pause: - play: - replace: - selectAll: - selectNone: - stepBackward: - stepForward: - trim: - - - YES - - add: - id - - - addScaled: - id - - - copy: - id - - - cut: - id - - - delete: - id - - - gotoBeginning: - id - - - gotoEnd: - id - - - gotoNextSelectionPoint: - id - - - gotoPosterFrame: - id - - - gotoPreviousSelectionPoint: - id - - - paste: - id - - - pause: - id - - - play: - id - - - replace: - id - - - selectAll: - id - - - selectNone: - id - - - stepBackward: - id - - - stepForward: - id - - - trim: - id - - - - - SUUpdater NSObject @@ -4815,102 +3231,27 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4id - + + IBProjectSource + ./Classes/SUUpdater.h + WebView - NSView - YES - - YES - goBack: - goForward: - makeTextLarger: - makeTextSmaller: - makeTextStandardSize: - reload: - stopLoading: - takeStringURLFrom: - toggleContinuousSpellChecking: - toggleSmartInsertDelete: - - - YES - id - id - id - id - id - id - id - id - id - id - + reloadFromOrigin: + id - YES - - YES - goBack: - goForward: - makeTextLarger: - makeTextSmaller: - makeTextStandardSize: - reload: - stopLoading: - takeStringURLFrom: - toggleContinuousSpellChecking: - toggleSmartInsertDelete: - - - YES - - goBack: - id - - - goForward: - id - - - makeTextLarger: - id - - - makeTextSmaller: - id - - - makeTextStandardSize: - id - - - reload: - id - - - stopLoading: - id - - - takeStringURLFrom: - id - - - toggleContinuousSpellChecking: - id - - - toggleSmartInsertDelete: - id - + reloadFromOrigin: + + reloadFromOrigin: + id - IBFrameworkSource - WebKit.framework/Headers/WebView.h + IBProjectSource + ./Classes/WebView.h @@ -4930,7 +3271,6 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4 YES - ../../../VoiceMac.xcodeproj 3 YES @@ -4938,13 +3278,11 @@ YXJjaCB5b3VyIGNvbnRhY3RzIGp1c3QgbGlrZSBhIFNlYXJjaCBFbmdpbmUgd2l0aCBzcGVlZC4YES NSMenuCheckmark NSMenuMixedState - VoiceMac Icon YES {9, 8} {7, 2} - {220, 220} diff --git a/Resources/VoiceMac/Info.plist b/Resources/VoiceMac/Info.plist index 328679d..9243d9e 100644 --- a/Resources/VoiceMac/Info.plist +++ b/Resources/VoiceMac/Info.plist @@ -119,7 +119,7 @@ MGMGRTimeZone CST NSHumanReadableCopyright - Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ + Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ NSMainNibFile MainMenu NSPrincipalClass diff --git a/Resources/VoiceMac/VoiceMac Icon.png b/Resources/VoiceMac/VoiceMacIcon.png similarity index 100% rename from Resources/VoiceMac/VoiceMac Icon.png rename to Resources/VoiceMac/VoiceMacIcon.png diff --git a/SIP/install b/SIP/install index 19e1637..e7d540a 100755 --- a/SIP/install +++ b/SIP/install @@ -79,23 +79,23 @@ if [ "$1" = "ios" ]; then echo "Making PJProject Universal" mkdir -p "${FINALPATH}/lib/pkgconfig" cp -R "${PPCPATH}/include" "${FINALPATH}/include" - lipo -create "${IOS6PATH}/lib/libg7221codec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libg7221codec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libg7221codec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libg7221codec-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libgsmcodec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libgsmcodec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libgsmcodec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libgsmcodec-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libilbccodec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libilbccodec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libilbccodec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libilbccodec-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libmilenage-arm-apple-darwin9.a" "${IOS7PATH}/lib/libmilenage-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libmilenage-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libmilenage-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpj-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpj-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpj-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpj-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjlib-util-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjlib-util-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjlib-util-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjlib-util-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjmedia-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjmedia-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjmedia-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjmedia-audiodev-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjmedia-audiodev-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjmedia-audiodev-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-audiodev-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjmedia-codec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjmedia-codec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjmedia-codec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-codec-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjnath-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjnath-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjnath-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjnath-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjsip-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsip-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsip-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjsip-simple-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsip-simple-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsip-simple-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-simple-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjsip-ua-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsip-ua-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsip-ua-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-ua-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libpjsua-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsua-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsua-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsua-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libresample-arm-apple-darwin9.a" "${IOS7PATH}/lib/libresample-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libresample-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libresample-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libspeex-arm-apple-darwin9.a" "${IOS7PATH}/lib/libspeex-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libspeex-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libspeex-ios-universal.a" - lipo -create "${IOS6PATH}/lib/libsrtp-arm-apple-darwin9.a" "${IOS7PATH}/lib/libsrtp-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libsrtp-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libsrtp-ios-universal.a" + lipo -create "${IOS6PATH}/lib/libg7221codec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libg7221codec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libg7221codec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libg7221codec-ios.a" + lipo -create "${IOS6PATH}/lib/libgsmcodec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libgsmcodec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libgsmcodec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libgsmcodec-ios.a" + lipo -create "${IOS6PATH}/lib/libilbccodec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libilbccodec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libilbccodec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libilbccodec-ios.a" + lipo -create "${IOS6PATH}/lib/libmilenage-arm-apple-darwin9.a" "${IOS7PATH}/lib/libmilenage-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libmilenage-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libmilenage-ios.a" + lipo -create "${IOS6PATH}/lib/libpj-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpj-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpj-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpj-ios.a" + lipo -create "${IOS6PATH}/lib/libpjlib-util-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjlib-util-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjlib-util-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjlib-util-ios.a" + lipo -create "${IOS6PATH}/lib/libpjmedia-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjmedia-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjmedia-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-ios.a" + lipo -create "${IOS6PATH}/lib/libpjmedia-audiodev-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjmedia-audiodev-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjmedia-audiodev-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-audiodev-ios.a" + lipo -create "${IOS6PATH}/lib/libpjmedia-codec-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjmedia-codec-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjmedia-codec-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-codec-ios.a" + lipo -create "${IOS6PATH}/lib/libpjnath-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjnath-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjnath-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjnath-ios.a" + lipo -create "${IOS6PATH}/lib/libpjsip-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsip-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsip-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-ios.a" + lipo -create "${IOS6PATH}/lib/libpjsip-simple-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsip-simple-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsip-simple-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-simple-ios.a" + lipo -create "${IOS6PATH}/lib/libpjsip-ua-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsip-ua-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsip-ua-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-ua-ios.a" + lipo -create "${IOS6PATH}/lib/libpjsua-arm-apple-darwin9.a" "${IOS7PATH}/lib/libpjsua-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libpjsua-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsua-ios.a" + lipo -create "${IOS6PATH}/lib/libresample-arm-apple-darwin9.a" "${IOS7PATH}/lib/libresample-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libresample-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libresample-ios.a" + lipo -create "${IOS6PATH}/lib/libspeex-arm-apple-darwin9.a" "${IOS7PATH}/lib/libspeex-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libspeex-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libspeex-ios.a" + lipo -create "${IOS6PATH}/lib/libsrtp-arm-apple-darwin9.a" "${IOS7PATH}/lib/libsrtp-arm-apple-darwin9.a" "${SIMULATORPATH}/lib/libsrtp-arm-apple-darwin9.a" -output "${FINALPATH}/lib/libsrtp-ios.a" fi if [ "$1" = "" ]; then echo "Copying PJProject" @@ -139,22 +139,22 @@ if [ "$1" = "" ]; then echo "Making PJProject Universal" mkdir -p "${FINALPATH}/lib/pkgconfig" cp -R "${PPCPATH}/include" "${FINALPATH}/include" - lipo -create "${PPCPATH}/lib/libg7221codec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libg7221codec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libg7221codec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libg7221codec-universal.a" - lipo -create "${PPCPATH}/lib/libgsmcodec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libgsmcodec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libgsmcodec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libgsmcodec-universal.a" - lipo -create "${PPCPATH}/lib/libilbccodec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libilbccodec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libilbccodec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libilbccodec-universal.a" - lipo -create "${PPCPATH}/lib/libmilenage-powerpc-apple-darwin8.a" "${I386PATH}/lib/libmilenage-i386-apple-darwin8.a" "${X86_64PATH}/lib/libmilenage-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libmilenage-universal.a" - lipo -create "${PPCPATH}/lib/libpj-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpj-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpj-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpj-universal.a" - lipo -create "${PPCPATH}/lib/libpjlib-util-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjlib-util-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjlib-util-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjlib-util-universal.a" - lipo -create "${PPCPATH}/lib/libpjmedia-audiodev-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjmedia-audiodev-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjmedia-audiodev-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-audiodev-universal.a" - lipo -create "${PPCPATH}/lib/libpjmedia-codec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjmedia-codec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjmedia-codec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-codec-universal.a" - lipo -create "${PPCPATH}/lib/libpjmedia-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjmedia-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjmedia-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-universal.a" - lipo -create "${PPCPATH}/lib/libpjnath-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjnath-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjnath-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjnath-universal.a" - lipo -create "${PPCPATH}/lib/libpjsip-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsip-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsip-simple-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-simple-universal.a" - lipo -create "${PPCPATH}/lib/libpjsip-simple-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsip-simple-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsip-ua-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-ua-universal.a" - lipo -create "${PPCPATH}/lib/libpjsip-ua-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsip-ua-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsip-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-universal.a" - lipo -create "${PPCPATH}/lib/libpjsua-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsua-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsua-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsua-universal.a" - lipo -create "${PPCPATH}/lib/libportaudio-powerpc-apple-darwin8.a" "${I386PATH}/lib/libportaudio-i386-apple-darwin8.a" "${X86_64PATH}/lib/libportaudio-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libportaudio-universal.a" - lipo -create "${PPCPATH}/lib/libresample-powerpc-apple-darwin8.a" "${I386PATH}/lib/libresample-i386-apple-darwin8.a" "${X86_64PATH}/lib/libresample-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libresample-universal.a" - lipo -create "${PPCPATH}/lib/libspeex-powerpc-apple-darwin8.a" "${I386PATH}/lib/libspeex-i386-apple-darwin8.a" "${X86_64PATH}/lib/libspeex-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libspeex-universal.a" - lipo -create "${PPCPATH}/lib/libsrtp-powerpc-apple-darwin8.a" "${I386PATH}/lib/libsrtp-i386-apple-darwin8.a" "${X86_64PATH}/lib/libsrtp-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libsrtp-universal.a" + lipo -create "${PPCPATH}/lib/libg7221codec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libg7221codec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libg7221codec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libg7221codec.a" + lipo -create "${PPCPATH}/lib/libgsmcodec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libgsmcodec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libgsmcodec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libgsmcodec.a" + lipo -create "${PPCPATH}/lib/libilbccodec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libilbccodec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libilbccodec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libilbccodec.a" + lipo -create "${PPCPATH}/lib/libmilenage-powerpc-apple-darwin8.a" "${I386PATH}/lib/libmilenage-i386-apple-darwin8.a" "${X86_64PATH}/lib/libmilenage-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libmilenage.a" + lipo -create "${PPCPATH}/lib/libpj-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpj-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpj-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpj.a" + lipo -create "${PPCPATH}/lib/libpjlib-util-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjlib-util-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjlib-util-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjlib-util.a" + lipo -create "${PPCPATH}/lib/libpjmedia-audiodev-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjmedia-audiodev-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjmedia-audiodev-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-audiodev.a" + lipo -create "${PPCPATH}/lib/libpjmedia-codec-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjmedia-codec-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjmedia-codec-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia-codec.a" + lipo -create "${PPCPATH}/lib/libpjmedia-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjmedia-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjmedia-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjmedia.a" + lipo -create "${PPCPATH}/lib/libpjnath-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjnath-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjnath-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjnath.a" + lipo -create "${PPCPATH}/lib/libpjsip-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsip-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsip-simple-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-simple.a" + lipo -create "${PPCPATH}/lib/libpjsip-simple-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsip-simple-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsip-ua-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip-ua.a" + lipo -create "${PPCPATH}/lib/libpjsip-ua-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsip-ua-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsip-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsip.a" + lipo -create "${PPCPATH}/lib/libpjsua-powerpc-apple-darwin8.a" "${I386PATH}/lib/libpjsua-i386-apple-darwin8.a" "${X86_64PATH}/lib/libpjsua-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libpjsua.a" + lipo -create "${PPCPATH}/lib/libportaudio-powerpc-apple-darwin8.a" "${I386PATH}/lib/libportaudio-i386-apple-darwin8.a" "${X86_64PATH}/lib/libportaudio-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libportaudio.a" + lipo -create "${PPCPATH}/lib/libresample-powerpc-apple-darwin8.a" "${I386PATH}/lib/libresample-i386-apple-darwin8.a" "${X86_64PATH}/lib/libresample-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libresample.a" + lipo -create "${PPCPATH}/lib/libspeex-powerpc-apple-darwin8.a" "${I386PATH}/lib/libspeex-i386-apple-darwin8.a" "${X86_64PATH}/lib/libspeex-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libspeex.a" + lipo -create "${PPCPATH}/lib/libsrtp-powerpc-apple-darwin8.a" "${I386PATH}/lib/libsrtp-i386-apple-darwin8.a" "${X86_64PATH}/lib/libsrtp-x86_64-apple-darwin9.a" -output "${FINALPATH}/lib/libsrtp.a" fi \ No newline at end of file diff --git a/SIP/notes.txt b/SIP/notes.txt index ccc27c6..c44bb0b 100755 --- a/SIP/notes.txt +++ b/SIP/notes.txt @@ -3,7 +3,7 @@ To get the latest source to PJProject, run the command below. svn checkout http://svn.pjsip.org/repos/pjproject/trunk pjproject To get the revision that I am using in VoiceMac and VoiceMob, run the command below. -svn checkout -r 3412 http://svn.pjsip.org/repos/pjproject/trunk pjproject +svn checkout -r 3436 http://svn.pjsip.org/repos/pjproject/trunk pjproject Building. To build for VoiceMac, run the command below. diff --git a/VoiceBase.xcodeproj/project.pbxproj b/VoiceBase.xcodeproj/project.pbxproj index a05625f..3524fec 100644 --- a/VoiceBase.xcodeproj/project.pbxproj +++ b/VoiceBase.xcodeproj/project.pbxproj @@ -81,7 +81,6 @@ 2A487CD3124BE22E00E8EE4E /* MGMXMLNode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 2A487C9D124BE0AB00E8EE4E /* MGMXMLNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2A487CD4124BE22E00E8EE4E /* MGMXMLNodeOptions.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 2A487C9F124BE0AB00E8EE4E /* MGMXMLNodeOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2A487CD5124BE22E00E8EE4E /* VoiceBase.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 2A1171BE1245676A00D119B5 /* VoiceBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A487D0F124BE41B00E8EE4E /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A487D0E124BE41B00E8EE4E /* libxml2.dylib */; }; 2A50699C1315726E003CACD5 /* MGMDelegateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A50699A1315726C003CACD5 /* MGMDelegateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2A50699D1315726E003CACD5 /* MGMDelegateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A50699B1315726D003CACD5 /* MGMDelegateInfo.m */; }; 2A50699E1315726E003CACD5 /* MGMDelegateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A50699B1315726D003CACD5 /* MGMDelegateInfo.m */; }; @@ -205,7 +204,6 @@ 2A487C9E124BE0AB00E8EE4E /* MGMXMLNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMXMLNode.m; sourceTree = ""; }; 2A487C9F124BE0AB00E8EE4E /* MGMXMLNodeOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMXMLNodeOptions.h; sourceTree = ""; }; 2A487CAE124BE0C400E8EE4E /* MGMXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMXML.h; sourceTree = ""; }; - 2A487D0E124BE41B00E8EE4E /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; }; 2A50699A1315726C003CACD5 /* MGMDelegateInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMDelegateInfo.h; sourceTree = ""; }; 2A50699B1315726D003CACD5 /* MGMDelegateInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMDelegateInfo.m; sourceTree = ""; }; 2A77133A124C4CE200D68042 /* MGMSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSound.h; sourceTree = ""; }; @@ -234,7 +232,6 @@ 2AE6EE701249DA870006B5AC /* libMGMUsers.a in Frameworks */, 2AE6EE761249DB2F0006B5AC /* CoreGraphics.framework in Frameworks */, 2AE6EE7A1249DB2F0006B5AC /* UIKit.framework in Frameworks */, - 2A487D0F124BE41B00E8EE4E /* libxml2.dylib in Frameworks */, 2A771340124C4D2800D68042 /* AudioToolbox.framework in Frameworks */, 2A771344124C4F9A00D68042 /* AVFoundation.framework in Frameworks */, 2A1E9723124D174200D3BEAE /* CoreAudio.framework in Frameworks */, @@ -422,7 +419,6 @@ isa = PBXGroup; children = ( 2AE6EE0F1249D70F0006B5AC /* libMGMUsers.a */, - 2A487D0E124BE41B00E8EE4E /* libxml2.dylib */, ); name = "Linked Libraries Touch"; sourceTree = ""; @@ -655,6 +651,7 @@ INFOPLIST_FILE = Resources/VoiceBase/Info.plist; INSTALL_PATH = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ""; PRODUCT_NAME = VoiceBase; WRAPPER_EXTENSION = framework; }; @@ -672,6 +669,7 @@ "\"$(SRCROOT)/Frameworks\"", ); FRAMEWORK_VERSION = A; + GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Classes/VoiceBase/VoiceBase_Prefix.pch; @@ -679,6 +677,7 @@ INFOPLIST_FILE = Resources/VoiceBase/Info.plist; INSTALL_PATH = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ""; PRODUCT_NAME = VoiceBase; WRAPPER_EXTENSION = framework; }; @@ -688,7 +687,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = ( - ppc7400, + ppc, i386, x86_64, ); @@ -698,12 +697,13 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = /usr/include/libxml2; + LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; ONLY_ACTIVE_ARCH = YES; PREBINDING = NO; SDKROOT = macosx10.6; - VALID_ARCHS = "ppc7400 i386 x86_64"; + VALID_ARCHS = "ppc i386 x86_64"; }; name = Debug; }; @@ -711,7 +711,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = ( - ppc7400, + ppc, i386, x86_64, ); @@ -720,11 +720,12 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = /usr/include/libxml2; + LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; PREBINDING = NO; SDKROOT = macosx10.6; - VALID_ARCHS = "ppc7400 i386 x86_64"; + VALID_ARCHS = "ppc i386 x86_64"; }; name = Release; }; @@ -732,7 +733,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = ( - ppc7400, + ppc, i386, x86_64, ); @@ -756,7 +757,7 @@ ); PREBINDING = NO; SDKROOT = macosx10.6; - VALID_ARCHS = "ppc7400 i386 x86_64"; + VALID_ARCHS = "ppc i386 x86_64"; }; name = "Debug SIP"; }; @@ -783,24 +784,24 @@ INSTALL_PATH = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; OTHER_LDFLAGS = ( - "-lg7221codec-universal", - "-lgsmcodec-universal", - "-lilbccodec-universal", - "-lmilenage-universal", - "-lpj-universal", - "-lpjlib-util-universal", - "-lpjmedia-audiodev-universal", - "-lpjmedia-codec-universal", - "-lpjmedia-universal", - "-lpjnath-universal", - "-lpjsip-simple-universal", - "-lpjsip-ua-universal", - "-lpjsip-universal", - "-lpjsua-universal", - "-lportaudio-universal", - "-lresample-universal", - "-lspeex-universal", - "-lsrtp-universal", + "-lg7221codec", + "-lgsmcodec", + "-lilbccodec", + "-lmilenage", + "-lpj", + "-lpjlib-util", + "-lpjmedia-audiodev", + "-lpjmedia-codec", + "-lpjmedia", + "-lpjnath", + "-lpjsip-simple", + "-lpjsip-ua", + "-lpjsip", + "-lpjsua", + "-lportaudio", + "-lresample", + "-lspeex", + "-lsrtp", ); PRODUCT_NAME = VoiceBase; WRAPPER_EXTENSION = framework; @@ -811,7 +812,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = ( - ppc7400, + ppc, i386, x86_64, ); @@ -833,7 +834,7 @@ ); PREBINDING = NO; SDKROOT = macosx10.6; - VALID_ARCHS = "ppc7400 i386 x86_64"; + VALID_ARCHS = "ppc i386 x86_64"; }; name = "Release SIP"; }; @@ -849,6 +850,7 @@ "\"$(SRCROOT)/Frameworks\"", ); FRAMEWORK_VERSION = A; + GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Classes/VoiceBase/VoiceBase_Prefix.pch; @@ -857,24 +859,24 @@ INSTALL_PATH = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; OTHER_LDFLAGS = ( - "-lg7221codec-universal", - "-lgsmcodec-universal", - "-lilbccodec-universal", - "-lmilenage-universal", - "-lpj-universal", - "-lpjlib-util-universal", - "-lpjmedia-audiodev-universal", - "-lpjmedia-codec-universal", - "-lpjmedia-universal", - "-lpjnath-universal", - "-lpjsip-simple-universal", - "-lpjsip-ua-universal", - "-lpjsip-universal", - "-lpjsua-universal", - "-lportaudio-universal", - "-lresample-universal", - "-lspeex-universal", - "-lsrtp-universal", + "-lg7221codec", + "-lgsmcodec", + "-lilbccodec", + "-lmilenage", + "-lpj", + "-lpjlib-util", + "-lpjmedia-audiodev", + "-lpjmedia-codec", + "-lpjmedia", + "-lpjnath", + "-lpjsip-simple", + "-lpjsip-ua", + "-lpjsip", + "-lpjsua", + "-lportaudio", + "-lresample", + "-lspeex", + "-lsrtp", ); PRODUCT_NAME = VoiceBase; WRAPPER_EXTENSION = framework; @@ -935,23 +937,29 @@ "-DMGMSIPENABLED=1", ); OTHER_LDFLAGS = ( - "-lg7221codec-ios-universal", - "-lgsmcodec-ios-universal", - "-lilbccodec-ios-universal", - "-lmilenage-ios-universal", - "-lpj-ios-universal", - "-lpjlib-util-ios-universal", - "-lpjmedia-audiodev-ios-universal", - "-lpjmedia-codec-ios-universal", - "-lpjmedia-ios-universal", - "-lpjnath-ios-universal", - "-lpjsip-ios-universal", - "-lpjsip-simple-ios-universal", - "-lpjsip-ua-ios-universal", - "-lpjsua-ios-universal", - "-lresample-ios-universal", - "-lspeex-ios-universal", - "-lsrtp-ios-universal", + "-lg7221codec-ios", + "-lgsmcodec-ios", + "-lilbccodec-ios", + "-lmilenage-ios", + "-lpj-ios", + "-lpjlib-util-ios", + "-lpjmedia-audiodev-ios", + "-lpjmedia-codec-ios", + "-lpjmedia-ios", + "-lpjnath-ios", + "-lpjsip-ios", + "-lpjsip-simple-ios", + "-lpjsip-ua-ios", + "-lpjsua-ios", + "-lresample-ios", + "-lspeex-ios", + "-lsrtp-ios", + "-lz", + "-lavcodec", + "-lavdevice", + "-lavformat", + "-lavutil", + "-lswscale", "-ObjC", "-all_load", ); @@ -1017,23 +1025,29 @@ "-DMGMSIPENABLED=1", ); OTHER_LDFLAGS = ( - "-lg7221codec-ios-universal", - "-lgsmcodec-ios-universal", - "-lilbccodec-ios-universal", - "-lmilenage-ios-universal", - "-lpj-ios-universal", - "-lpjlib-util-ios-universal", - "-lpjmedia-audiodev-ios-universal", - "-lpjmedia-codec-ios-universal", - "-lpjmedia-ios-universal", - "-lpjnath-ios-universal", - "-lpjsip-ios-universal", - "-lpjsip-simple-ios-universal", - "-lpjsip-ua-ios-universal", - "-lpjsua-ios-universal", - "-lresample-ios-universal", - "-lspeex-ios-universal", - "-lsrtp-ios-universal", + "-lg7221codec-ios", + "-lgsmcodec-ios", + "-lilbccodec-ios", + "-lmilenage-ios", + "-lpj-ios", + "-lpjlib-util-ios", + "-lpjmedia-audiodev-ios", + "-lpjmedia-codec-ios", + "-lpjmedia-ios", + "-lpjnath-ios", + "-lpjsip-ios", + "-lpjsip-simple-ios", + "-lpjsip-ua-ios", + "-lpjsua-ios", + "-lresample-ios", + "-lspeex-ios", + "-lsrtp-ios", + "-lz", + "-lavcodec", + "-lavdevice", + "-lavformat", + "-lavutil", + "-lswscale", "-ObjC", "-all_load", ); diff --git a/VoiceMac.xcodeproj/project.pbxproj b/VoiceMac.xcodeproj/project.pbxproj index 5871088..62031dc 100644 --- a/VoiceMac.xcodeproj/project.pbxproj +++ b/VoiceMac.xcodeproj/project.pbxproj @@ -36,6 +36,9 @@ 2A03CCA21247D75700730F0C /* SMSThemesPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A03CCA11247D75700730F0C /* SMSThemesPane.xib */; }; 2A03CCA41247D75C00730F0C /* SoundsPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A03CCA31247D75C00730F0C /* SoundsPane.xib */; }; 2A0C3698127F40EF00334471 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 2A0C3697127F40EF00334471 /* dsa_pub.pem */; }; + 2A0F564813228C3E00046E86 /* MGMConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0F564513228C3E00046E86 /* MGMConverter.m */; }; + 2A0F564913228C3E00046E86 /* MGMFFmpeg.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0F564713228C3E00046E86 /* MGMFFmpeg.m */; }; + 2A0F564B132292EE00046E86 /* About.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A0F564A132292EE00046E86 /* About.rtf */; }; 2A11738212456E4300D119B5 /* MGMInboxPlayWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11734112456E4300D119B5 /* MGMInboxPlayWindow.m */; }; 2A11738312456E4300D119B5 /* MGMInboxWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11734312456E4300D119B5 /* MGMInboxWindow.m */; }; 2A11738412456E4300D119B5 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11734412456E4300D119B5 /* main.m */; }; @@ -52,7 +55,6 @@ 2A11738F12456E4300D119B5 /* MGMSoundsPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11735B12456E4300D119B5 /* MGMSoundsPane.m */; }; 2A11739012456E4300D119B5 /* MGMSIPCallWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11735E12456E4300D119B5 /* MGMSIPCallWindow.m */; }; 2A11739112456E4300D119B5 /* MGMSIPUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11736012456E4300D119B5 /* MGMSIPUser.m */; }; - 2A11739212456E4300D119B5 /* MGMSIPWavConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11736212456E4300D119B5 /* MGMSIPWavConverter.m */; }; 2A11739312456E4300D119B5 /* MGMMultiSMS.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11736512456E4300D119B5 /* MGMMultiSMS.m */; }; 2A11739412456E4300D119B5 /* MGMSMSManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11736712456E4300D119B5 /* MGMSMSManager.m */; }; 2A11739512456E4300D119B5 /* MGMSMSMessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11736912456E4300D119B5 /* MGMSMSMessageView.m */; }; @@ -106,7 +108,7 @@ 2A1174D812456F2700D119B5 /* SIP.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11742812456F2600D119B5 /* SIP.png */; }; 2A1174DB12456F2700D119B5 /* SMSThemes.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11742B12456F2600D119B5 /* SMSThemes.png */; }; 2A1174DF12456F2700D119B5 /* Sounds.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11742F12456F2600D119B5 /* Sounds.png */; }; - 2A11750B12456F2700D119B5 /* VoiceMac Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11746312456F2700D119B5 /* VoiceMac Icon.png */; }; + 2A11750B12456F2700D119B5 /* VoiceMacIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11746312456F2700D119B5 /* VoiceMacIcon.png */; }; 2A11750D12456F2700D119B5 /* VoiceMac Setup.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11746512456F2700D119B5 /* VoiceMac Setup.png */; }; 2A11751112456F2700D119B5 /* volume.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A11746912456F2700D119B5 /* volume.png */; }; 2A11753D12456FA600D119B5 /* SMS Themes in Resources */ = {isa = PBXBuildFile; fileRef = 2A11751212456FA600D119B5 /* SMS Themes */; }; @@ -187,6 +189,11 @@ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 2A03CC891247D5B100730F0C /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.txt; sourceTree = SOURCE_ROOT; }; 2A0C3697127F40EF00334471 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; + 2A0F564413228C3E00046E86 /* MGMConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMConverter.h; sourceTree = ""; }; + 2A0F564513228C3E00046E86 /* MGMConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMConverter.m; sourceTree = ""; }; + 2A0F564613228C3E00046E86 /* MGMFFmpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMFFmpeg.h; sourceTree = ""; }; + 2A0F564713228C3E00046E86 /* MGMFFmpeg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMFFmpeg.m; sourceTree = ""; }; + 2A0F564A132292EE00046E86 /* About.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = About.rtf; sourceTree = SOURCE_ROOT; }; 2A11734012456E4300D119B5 /* MGMInboxPlayWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMInboxPlayWindow.h; sourceTree = ""; }; 2A11734112456E4300D119B5 /* MGMInboxPlayWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMInboxPlayWindow.m; sourceTree = ""; }; 2A11734212456E4300D119B5 /* MGMInboxWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMInboxWindow.h; sourceTree = ""; }; @@ -218,8 +225,6 @@ 2A11735E12456E4300D119B5 /* MGMSIPCallWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMSIPCallWindow.m; sourceTree = ""; }; 2A11735F12456E4300D119B5 /* MGMSIPUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSIPUser.h; sourceTree = ""; }; 2A11736012456E4300D119B5 /* MGMSIPUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMSIPUser.m; sourceTree = ""; }; - 2A11736112456E4300D119B5 /* MGMSIPWavConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSIPWavConverter.h; sourceTree = ""; }; - 2A11736212456E4300D119B5 /* MGMSIPWavConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMSIPWavConverter.m; sourceTree = ""; }; 2A11736412456E4300D119B5 /* MGMMultiSMS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMMultiSMS.h; sourceTree = ""; }; 2A11736512456E4300D119B5 /* MGMMultiSMS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMMultiSMS.m; sourceTree = ""; }; 2A11736612456E4300D119B5 /* MGMSMSManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSMSManager.h; sourceTree = ""; }; @@ -301,7 +306,7 @@ 2A11743312456F2600D119B5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/SIPUser.xib; sourceTree = ""; }; 2A11745912456F2700D119B5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/SMSMessageView.xib; sourceTree = ""; }; 2A11745A12456F2700D119B5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/SMSWindow.xib; sourceTree = ""; }; - 2A11746312456F2700D119B5 /* VoiceMac Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceMac Icon.png"; sourceTree = ""; }; + 2A11746312456F2700D119B5 /* VoiceMacIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = VoiceMacIcon.png; sourceTree = ""; }; 2A11746512456F2700D119B5 /* VoiceMac Setup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceMac Setup.png"; sourceTree = ""; }; 2A11746612456F2700D119B5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/VoicemailView.xib; sourceTree = ""; }; 2A11746712456F2700D119B5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/VoiceUser.xib; sourceTree = ""; }; @@ -406,6 +411,18 @@ name = Frameworks; sourceTree = ""; }; + 2A0F564313228C3E00046E86 /* FFmpeg */ = { + isa = PBXGroup; + children = ( + 2A0F564413228C3E00046E86 /* MGMConverter.h */, + 2A0F564513228C3E00046E86 /* MGMConverter.m */, + 2A0F564613228C3E00046E86 /* MGMFFmpeg.h */, + 2A0F564713228C3E00046E86 /* MGMFFmpeg.m */, + ); + name = FFmpeg; + path = Classes/FFmpeg; + sourceTree = SOURCE_ROOT; + }; 2A11733E12456E4300D119B5 /* Classes */ = { isa = PBXGroup; children = ( @@ -425,6 +442,7 @@ 2A11735112456E4300D119B5 /* MGMVoiceUser.h */, 2A11735212456E4300D119B5 /* MGMVoiceUser.m */, 2A11735312456E4300D119B5 /* Preferences */, + 2A0F564313228C3E00046E86 /* FFmpeg */, 2A11735C12456E4300D119B5 /* SIP */, 2A11736312456E4300D119B5 /* SMS */, 2A11736E12456E4300D119B5 /* Views */, @@ -466,8 +484,6 @@ 2A11736012456E4300D119B5 /* MGMSIPUser.m */, 2A11735D12456E4300D119B5 /* MGMSIPCallWindow.h */, 2A11735E12456E4300D119B5 /* MGMSIPCallWindow.m */, - 2A11736112456E4300D119B5 /* MGMSIPWavConverter.h */, - 2A11736212456E4300D119B5 /* MGMSIPWavConverter.m */, ); path = SIP; sourceTree = ""; @@ -518,6 +534,7 @@ isa = PBXGroup; children = ( 2A03CC891247D5B100730F0C /* License.txt */, + 2A0F564A132292EE00046E86 /* About.rtf */, 2A117684124573D600D119B5 /* VoiceMac.icns */, 2A11740412456F2600D119B5 /* Info.plist */, 2A0C3697127F40EF00334471 /* dsa_pub.pem */, @@ -544,7 +561,7 @@ 2A03CC811247D48800730F0C /* SMSMessageView.xib */, 2A03CC831247D48E00730F0C /* SMSWindow.xib */, 2A1175E312456FC100D119B5 /* Sounds */, - 2A11746312456F2700D119B5 /* VoiceMac Icon.png */, + 2A11746312456F2700D119B5 /* VoiceMacIcon.png */, 2A11746512456F2700D119B5 /* VoiceMac Setup.png */, 2A03CC851247D49300730F0C /* VoicemailView.xib */, 2A03CC871247D49800730F0C /* VoiceUser.xib */, @@ -753,7 +770,7 @@ 2A03CC801247D48100730F0C /* SIPUser.xib in Resources */, 2A03CC821247D48800730F0C /* SMSMessageView.xib in Resources */, 2A03CC841247D48E00730F0C /* SMSWindow.xib in Resources */, - 2A11750B12456F2700D119B5 /* VoiceMac Icon.png in Resources */, + 2A11750B12456F2700D119B5 /* VoiceMacIcon.png in Resources */, 2A11750D12456F2700D119B5 /* VoiceMac Setup.png in Resources */, 2A03CC861247D49300730F0C /* VoicemailView.xib in Resources */, 2A03CC881247D49800730F0C /* VoiceUser.xib in Resources */, @@ -764,6 +781,7 @@ 2A11770412458C8A00D119B5 /* blankicon.png in Resources */, 2A03CC8A1247D5B100730F0C /* License.txt in Resources */, 2A0C3698127F40EF00334471 /* dsa_pub.pem in Resources */, + 2A0F564B132292EE00046E86 /* About.rtf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -806,7 +824,6 @@ 2A11738F12456E4300D119B5 /* MGMSoundsPane.m in Sources */, 2A11739012456E4300D119B5 /* MGMSIPCallWindow.m in Sources */, 2A11739112456E4300D119B5 /* MGMSIPUser.m in Sources */, - 2A11739212456E4300D119B5 /* MGMSIPWavConverter.m in Sources */, 2A11739312456E4300D119B5 /* MGMMultiSMS.m in Sources */, 2A11739412456E4300D119B5 /* MGMSMSManager.m in Sources */, 2A11739512456E4300D119B5 /* MGMSMSMessageView.m in Sources */, @@ -821,6 +838,8 @@ 2A11739E12456E4300D119B5 /* MGMSplitView.m in Sources */, 2A11739F12456E4300D119B5 /* MGMTranslucentTabView.m in Sources */, 2A1173A012456E4300D119B5 /* MGMViewCell.m in Sources */, + 2A0F564813228C3E00046E86 /* MGMConverter.m in Sources */, + 2A0F564913228C3E00046E86 /* MGMFFmpeg.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -992,8 +1011,15 @@ GCC_VERSION = 4.2; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/SIP/opt/include\""; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/SIP/opt/lib\""; + HEADER_SEARCH_PATHS = ( + /usr/include/libxml2, + "\"$(SRCROOT)/SIP/opt/include\"", + "\"$(SRCROOT)/FFmpeg/opt/include\"", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SRCROOT)/SIP/opt/lib\"", + "\"$(SRCROOT)/FFmpeg/opt/lib\"", + ); MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; ONLY_ACTIVE_ARCH = YES; @@ -1002,6 +1028,14 @@ "-DNDEBUG", "-DMGMSIPENABLED=1", ); + OTHER_LDFLAGS = ( + "-lz", + "-lavformat", + "-lavcodec", + "-lavdevice", + "-lavutil", + "-lswscale", + ); PREBINDING = NO; SDKROOT = macosx10.6; VALID_ARCHS = "ppc i386 x86_64"; @@ -1023,10 +1057,6 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Classes/VoiceMac/VoiceMac_Prefix.pch; - HEADER_SEARCH_PATHS = ( - /usr/include/libxml2, - "\"$(SRCROOT)/SIP/opt/include\"", - ); INFOPLIST_FILE = Resources/VoiceMac/Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = VoiceMac; @@ -1045,8 +1075,15 @@ GCC_VERSION = 4.2; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/SIP/opt/include\""; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/SIP/opt/lib\""; + HEADER_SEARCH_PATHS = ( + /usr/include/libxml2, + "\"$(SRCROOT)/SIP/opt/include\"", + "\"$(SRCROOT)/FFmpeg/opt/include\"", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SRCROOT)/SIP/opt/lib\"", + "\"$(SRCROOT)/FFmpeg/opt/lib\"", + ); MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; OTHER_CFLAGS = ( @@ -1054,6 +1091,14 @@ "-DNDEBUG", "-DMGMSIPENABLED=1", ); + OTHER_LDFLAGS = ( + "-lz", + "-lavformat", + "-lavcodec", + "-lavdevice", + "-lavutil", + "-lswscale", + ); PREBINDING = NO; SDKROOT = macosx10.6; VALID_ARCHS = "ppc i386 x86_64"; @@ -1072,10 +1117,6 @@ GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Classes/VoiceMac/VoiceMac_Prefix.pch; - HEADER_SEARCH_PATHS = ( - /usr/include/libxml2, - "\"$(SRCROOT)/SIP/opt/include\"", - ); INFOPLIST_FILE = Resources/VoiceMac/Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = VoiceMac; @@ -1125,7 +1166,6 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Classes/VoiceMac/VoiceMac_Prefix.pch; - HEADER_SEARCH_PATHS = /usr/include/libxml2; INFOPLIST_FILE = Resources/VoiceMac/Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = VoiceMac; @@ -1144,7 +1184,6 @@ GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Classes/VoiceMac/VoiceMac_Prefix.pch; - HEADER_SEARCH_PATHS = /usr/include/libxml2; INFOPLIST_FILE = Resources/VoiceMac/Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = VoiceMac; @@ -1164,9 +1203,18 @@ GCC_VERSION = 4.2; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = /usr/include/libxml2; MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-lz", + "-lavformat", + "-lavcodec", + "-lavdevice", + "-lavutil", + "-lswscale", + ); PREBINDING = NO; SDKROOT = macosx10.6; VALID_ARCHS = "ppc i386 x86_64"; @@ -1185,8 +1233,17 @@ GCC_VERSION = 4.2; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = /usr/include/libxml2; MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; + OTHER_LDFLAGS = ( + "-lz", + "-lavformat", + "-lavcodec", + "-lavdevice", + "-lavutil", + "-lswscale", + ); PREBINDING = NO; SDKROOT = macosx10.6; VALID_ARCHS = "ppc i386 x86_64";