├── OpusIPhoneTest ├── OpusIPhoneTest │ ├── en.lproj │ │ ├── InfoPlist.strings │ │ ├── MainStoryboard_iPhone.storyboard │ │ └── MainStoryboard_iPad.storyboard │ ├── Default.png │ ├── Default@2x.png │ ├── Default-568h@2x.png │ ├── OpusIPhoneTest-Prefix.pch │ ├── main.m │ ├── CSIAppDelegate.h │ ├── CSIOpusDecoder.h │ ├── CSIOpusEncoder.h │ ├── CSIViewController.h │ ├── CSIDataQueue.h │ ├── OpusIPhoneTest-Info.plist │ ├── CSIAppDelegate.m │ ├── CSIOpusDecoder.m │ ├── CSIOpusEncoder.m │ ├── CSIDataQueue.c │ └── CSIViewController.m ├── webrtc@57x57.png ├── webrtc@72x72.png ├── webrtc@114x114.png ├── webrtc@144x144.png └── OpusIPhoneTest.xcodeproj │ └── project.pbxproj ├── .gitignore ├── Rakefile ├── README.md └── opus.xcodeproj └── project.pbxproj /OpusIPhoneTest/OpusIPhoneTest/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /OpusIPhoneTest/webrtc@57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/webrtc@57x57.png -------------------------------------------------------------------------------- /OpusIPhoneTest/webrtc@72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/webrtc@72x72.png -------------------------------------------------------------------------------- /OpusIPhoneTest/webrtc@114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/webrtc@114x114.png -------------------------------------------------------------------------------- /OpusIPhoneTest/webrtc@144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/webrtc@144x144.png -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/OpusIPhoneTest/Default.png -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/OpusIPhoneTest/Default@2x.png -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oneam/OpusIPhoneTest/HEAD/OpusIPhoneTest/OpusIPhoneTest/Default-568h@2x.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | opus-1.0.1/* 2 | opus-1.1/* 3 | source 4 | 5 | opus-*.tar.gz 6 | 7 | *.svn 8 | 9 | *.DS_Store 10 | 11 | project.xcworkspace/ 12 | xcuserdata/ 13 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | 2 | 3 | desc "Setup Opus library" 4 | task :setup do 5 | if(!File.exists?("opus-1.1")) 6 | puts("\nDownloading Opus source...") 7 | sh("curl -O http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz") 8 | sh("tar -xzf opus-1.1.tar.gz") 9 | sh("rm source") if File.exists?("source") 10 | sh("ln -s opus-1.1 source") 11 | end 12 | 13 | puts("\nReady to go") 14 | end -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/OpusIPhoneTest-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'OpusIPhoneTest' target in the 'OpusIPhoneTest' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_5_0 8 | #warning "This project uses features only available in iOS SDK 5.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // OpusIPhoneTest 4 | // 5 | // Created by Sam Leitch on 2012-12-04. 6 | // Copyright (c) 2012 Calgary Scientific Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "CSIAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([CSIAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a study to see how well the Opus audio codec works on a iPhone. 2 | 3 | The opus code itself has purposely been left out. It can be downloaded from http://www.opus-codec.org/downloads/ 4 | 5 | Last tested on XCode 5.0.2 on OSX Mavericks using Opus 1.1. 6 | 7 | Build Instructions 8 | =========== 9 | 10 | 1. Download and extract the Opus source code using `rake setup` 11 | 2. Build the OpusIPhoneTest project using XCode 12 | 13 | The Opus library .xcodeproj was originally created using gyp and the opus.gyp file extracted from the WebRTC open source project (https://code.google.com/p/webrtc/). It has subsequently been updated to support Opus 1.1 and the original opus.gyp removed so that I don't wonder why it doesn't work in the future. 14 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CSIAppDelegate.h 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import 27 | 28 | @interface CSIAppDelegate : UIResponder 29 | 30 | @property (strong, nonatomic) UIWindow *window; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIOpusDecoder.h: -------------------------------------------------------------------------------- 1 | // 2 | // OpusDecoder.h 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import 27 | #import 28 | 29 | @interface CSIOpusDecoder : NSObject 30 | 31 | + (CSIOpusDecoder*)decoderWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration; 32 | 33 | - (id)initWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration; 34 | 35 | - (void)decode:(NSData *)packet; 36 | 37 | - (int)tryFillBuffer:(AudioBufferList *)audioBufferList; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIOpusEncoder.h: -------------------------------------------------------------------------------- 1 | // 2 | // CSIOpusAdapter.h 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import 27 | #import 28 | 29 | @interface CSIOpusEncoder : NSObject 30 | 31 | + (CSIOpusEncoder*)encoderWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration; 32 | 33 | - (id)initWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration; 34 | 35 | - (NSArray *)encodeSample:(CMSampleBufferRef)sampleBuffer; 36 | 37 | - (NSArray *)encodeBufferList:(AudioBufferList *)audioBufferList; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CSIViewController.h 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import 27 | #import 28 | 29 | @interface CSIViewController : UIViewController 30 | 31 | @property (weak, nonatomic) IBOutlet UILabel *statusLabel; 32 | @property (weak, nonatomic) IBOutlet UISegmentedControl *modeControl; 33 | 34 | -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection; 35 | 36 | - (void)encodeAudio:(AudioBufferList *)data timestamp:(const AudioTimeStamp *)timestamp; 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIDataQueue.h: -------------------------------------------------------------------------------- 1 | // 2 | // CSIDataQueue.h 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #ifndef OpusIPhoneTest_CSIDataQueue_h 27 | #define OpusIPhoneTest_CSIDataQueue_h 28 | #include 29 | 30 | typedef struct CSIDataQueueOpaque *CSIDataQueueRef; 31 | 32 | CSIDataQueueRef CSIDataQueueCreate(); 33 | void CSIDataQueueClear(CSIDataQueueRef queue); 34 | size_t CSIDataQueueEnqueue(CSIDataQueueRef queue, const void* data, size_t dataLength); 35 | size_t CSIDataQueueDequeue(CSIDataQueueRef queue, void* data, size_t dataLength); 36 | size_t CSIDataQueuePeek(CSIDataQueueRef queue, void* data, size_t dataLength); 37 | size_t CSIDataQueueGetLength(CSIDataQueueRef queue); 38 | void CSIDataQueueDestroy(CSIDataQueueRef queue); 39 | 40 | int CSIDataQueueRunTests(); 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/OpusIPhoneTest-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIcons 12 | 13 | CFBundlePrimaryIcon 14 | 15 | CFBundleIconFiles 16 | 17 | webrtc.png 18 | webrtc2x.png 19 | webrtc@57x57.png 20 | webrtc@114x114.png 21 | webrtc@72x72.png 22 | webrtc@144x144.png 23 | 24 | 25 | 26 | CFBundleIdentifier 27 | Calgary-Scientific-Inc..${PRODUCT_NAME:rfc1034identifier} 28 | CFBundleInfoDictionaryVersion 29 | 6.0 30 | CFBundleName 31 | ${PRODUCT_NAME} 32 | CFBundlePackageType 33 | APPL 34 | CFBundleShortVersionString 35 | 1.0 36 | CFBundleSignature 37 | ???? 38 | CFBundleVersion 39 | 1.0 40 | LSRequiresIPhoneOS 41 | 42 | UIMainStoryboardFile 43 | MainStoryboard_iPhone 44 | UIMainStoryboardFile~ipad 45 | MainStoryboard_iPad 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UISupportedInterfaceOrientations 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | UISupportedInterfaceOrientations~ipad 57 | 58 | UIInterfaceOrientationPortrait 59 | UIInterfaceOrientationPortraitUpsideDown 60 | UIInterfaceOrientationLandscapeLeft 61 | UIInterfaceOrientationLandscapeRight 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CSIAppDelegate.m 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import "CSIAppDelegate.h" 27 | 28 | @implementation CSIAppDelegate 29 | 30 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 31 | { 32 | // Override point for customization after application launch. 33 | [UIDevice currentDevice].proximityMonitoringEnabled = YES; 34 | return YES; 35 | } 36 | 37 | - (void)applicationWillResignActive:(UIApplication *)application 38 | { 39 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 40 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 41 | } 42 | 43 | - (void)applicationDidEnterBackground:(UIApplication *)application 44 | { 45 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 46 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 47 | } 48 | 49 | - (void)applicationWillEnterForeground:(UIApplication *)application 50 | { 51 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 52 | } 53 | 54 | - (void)applicationDidBecomeActive:(UIApplication *)application 55 | { 56 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 57 | } 58 | 59 | - (void)applicationWillTerminate:(UIApplication *)application 60 | { 61 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIOpusDecoder.m: -------------------------------------------------------------------------------- 1 | // 2 | // OpusDecoder.m 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import "CSIOpusDecoder.h" 27 | #include "CSIDataQueue.h" 28 | #include "opus.h" 29 | 30 | @interface CSIOpusDecoder () 31 | @property (assign) OpusDecoder *decoder; 32 | @property (assign) double sampleRate; 33 | @property (assign) double frameDuration; 34 | @property (assign) int samplesPerFrame; 35 | @property (assign) size_t bytesPerSample; 36 | @property (assign) CSIDataQueueRef outputBuffer; 37 | @property (assign) opus_int16 *decodeBuffer; 38 | @end 39 | 40 | 41 | @implementation CSIOpusDecoder 42 | 43 | + (CSIOpusDecoder*)decoderWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration 44 | { 45 | return [[CSIOpusDecoder alloc] initWithSampleRate:sampleRate channels:channels frameDuration:frameDuration]; 46 | } 47 | 48 | - (id)initWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration 49 | { 50 | self = [super init]; 51 | 52 | if(self) 53 | { 54 | 55 | NSLog(@"Creating an encoder using Opus version %s", opus_get_version_string()); 56 | 57 | int error; 58 | _decoder = opus_decoder_create(sampleRate, channels, &error); 59 | 60 | if(error != OPUS_OK) 61 | { 62 | NSLog(@"Opus encoder encountered an error %s", opus_strerror(error)); 63 | return nil; 64 | } 65 | 66 | _sampleRate = sampleRate; 67 | _frameDuration = frameDuration; 68 | _bytesPerSample = sizeof(opus_int16); 69 | _samplesPerFrame = (int)(sampleRate * frameDuration); 70 | 71 | _outputBuffer = CSIDataQueueCreate(); 72 | _decodeBuffer = malloc(_bytesPerSample * _samplesPerFrame); 73 | } 74 | 75 | return self; 76 | } 77 | 78 | - (void)dealloc 79 | { 80 | free(_decodeBuffer); 81 | CSIDataQueueDestroy(_outputBuffer); 82 | } 83 | 84 | - (void)decode:(NSData *)packet 85 | { 86 | int result = opus_decode(self.decoder, packet.bytes, packet.length, self.decodeBuffer, self.samplesPerFrame, 0); 87 | if(result < 0) 88 | { 89 | NSLog(@"Opus decoder encountered an error %s", opus_strerror(result)); 90 | return; 91 | } 92 | 93 | @synchronized(self) 94 | { 95 | size_t bytesAvailable = result * self.bytesPerSample; 96 | CSIDataQueueEnqueue(self.outputBuffer, self.decodeBuffer, bytesAvailable); 97 | 98 | double bufferDuration = CSIDataQueueGetLength(self.outputBuffer) / self.sampleRate; 99 | if(bufferDuration > 0.5) 100 | { 101 | NSLog(@"Output queue at %fs. Clearing.", bufferDuration); 102 | CSIDataQueueClear(self.outputBuffer); 103 | } 104 | } 105 | } 106 | 107 | - (int)tryFillBuffer:(AudioBufferList *)audioBufferList 108 | { 109 | uint totalBytesRequested = 0; 110 | for (int i=0; i < audioBufferList->mNumberBuffers; ++i) 111 | { 112 | AudioBuffer audioBuffer = audioBufferList->mBuffers[i]; 113 | if(audioBuffer.mNumberChannels > 1) return NO; 114 | totalBytesRequested += audioBuffer.mDataByteSize; 115 | } 116 | 117 | if(totalBytesRequested == 0) return 0; 118 | 119 | @synchronized(self) 120 | { 121 | int bytesAvailable = CSIDataQueueGetLength(self.outputBuffer); 122 | if(bytesAvailable < totalBytesRequested) 123 | { 124 | // NSLog(@"Couldnt fill buffer. Needed %d bytes but only have %d", totalBytesRequested, bytesAvailable); 125 | return 0; 126 | } 127 | 128 | for (int i=0; i < audioBufferList->mNumberBuffers; ++i) 129 | { 130 | AudioBuffer audioBuffer = audioBufferList->mBuffers[i]; 131 | CSIDataQueueDequeue(self.outputBuffer, audioBuffer.mData, audioBuffer.mDataByteSize); 132 | } 133 | 134 | return totalBytesRequested; 135 | } 136 | } 137 | 138 | 139 | @end 140 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/en.lproj/MainStoryboard_iPhone.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/en.lproj/MainStoryboard_iPad.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIOpusEncoder.m: -------------------------------------------------------------------------------- 1 | // 2 | // CSIOpusAdapter.m 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import "CSIOpusEncoder.h" 27 | #include "CSIDataQueue.h" 28 | #include "opus.h" 29 | #define BUFFER_LENGTH 4096 30 | 31 | @interface CSIOpusEncoder () 32 | @property (assign) OpusEncoder *encoder; 33 | @property (assign) double frameDuration; 34 | @property (assign) int bytesPerFrame; 35 | @property (assign) int samplesPerFrame; 36 | @property (assign) CSIDataQueueRef inputBuffer; 37 | @property (assign) opus_int16 *frameBuffer; 38 | @property (assign) void *encodeBuffer; 39 | @end 40 | 41 | @implementation CSIOpusEncoder 42 | 43 | - (id)initWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration 44 | { 45 | self = [super init]; 46 | 47 | if(self) 48 | { 49 | 50 | NSLog(@"Creating an encoder using Opus version %s", opus_get_version_string()); 51 | 52 | int error; 53 | self.encoder = opus_encoder_create(sampleRate, channels, OPUS_APPLICATION_VOIP, &error); 54 | 55 | if(error != OPUS_OK) 56 | { 57 | NSLog(@"Opus encoder encountered an error %s", opus_strerror(error)); 58 | } 59 | 60 | self.frameDuration = frameDuration; 61 | self.samplesPerFrame = (int)(sampleRate * frameDuration); 62 | int bytesPerSample = sizeof(opus_int16); 63 | self.bytesPerFrame = self.samplesPerFrame * bytesPerSample; 64 | 65 | self.inputBuffer = CSIDataQueueCreate(); 66 | self.encodeBuffer = malloc(BUFFER_LENGTH); 67 | self.frameBuffer = malloc(self.bytesPerFrame); 68 | } 69 | 70 | return self; 71 | } 72 | 73 | + (CSIOpusEncoder *)encoderWithSampleRate:(double)sampleRate channels:(int)channels frameDuration:(double)frameDuration 74 | { 75 | CSIOpusEncoder *encoder = [[CSIOpusEncoder alloc] initWithSampleRate:sampleRate channels:channels frameDuration:frameDuration]; 76 | return encoder; 77 | } 78 | 79 | - (NSArray *)encodeSample:(CMSampleBufferRef)sampleBuffer 80 | { 81 | // CMItemCount numSamplesInBuffer = CMSampleBufferGetNumSamples(sampleBuffer); 82 | // CMTime duration = CMSampleBufferGetDuration(sampleBuffer); 83 | // Float64 durationInSeconds = CMTimeGetSeconds(duration); 84 | // NSLog(@"The sample rate is %f", numSamplesInBuffer / durationInSeconds); 85 | 86 | CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer); 87 | AudioBufferList audioBufferList; 88 | 89 | CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, 90 | NULL, 91 | &audioBufferList, 92 | sizeof(audioBufferList), 93 | NULL, 94 | NULL, 95 | kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, 96 | &blockBuffer); 97 | 98 | 99 | return [self encodeBufferList:&audioBufferList]; 100 | } 101 | 102 | - (NSArray *)encodeBufferList:(AudioBufferList *)audioBufferList 103 | { 104 | NSMutableArray *output = [NSMutableArray array]; 105 | 106 | for (int i=0; i < audioBufferList->mNumberBuffers; ++i) { 107 | AudioBuffer audioBuffer = audioBufferList->mBuffers[i]; 108 | CSIDataQueueEnqueue(self.inputBuffer, audioBuffer.mData, audioBuffer.mDataByteSize); 109 | } 110 | 111 | while (CSIDataQueueGetLength(self.inputBuffer) > self.bytesPerFrame) { 112 | CSIDataQueueDequeue(self.inputBuffer, self.frameBuffer, self.bytesPerFrame); 113 | opus_int32 result = opus_encode(self.encoder, self.frameBuffer, self.samplesPerFrame, self.encodeBuffer, BUFFER_LENGTH); 114 | 115 | if(result < 0) { 116 | NSLog(@"Opus encoder encountered an error %s", opus_strerror(result)); 117 | return nil; 118 | } 119 | 120 | NSData *encodedData = [NSData dataWithBytes:self.encodeBuffer length:result]; 121 | [output addObject:encodedData]; 122 | } 123 | 124 | return output; 125 | } 126 | 127 | - (void)dealloc 128 | { 129 | free(self.encodeBuffer); 130 | free(self.frameBuffer); 131 | CSIDataQueueDestroy(self.inputBuffer); 132 | opus_encoder_destroy(self.encoder); 133 | } 134 | 135 | @end 136 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIDataQueue.c: -------------------------------------------------------------------------------- 1 | // 2 | // CSIDataQueue.c 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #include "CSIDataQueue.h" 27 | #include 28 | 29 | #define DEFAULT_CAPACITY 4096 30 | 31 | struct CSIDataQueueOpaque 32 | { 33 | void* dataStartPointer; 34 | void* dataEndPointer; 35 | void* activeStartPointer; 36 | void* activeEndPointer; 37 | 38 | size_t capacity; 39 | size_t activeLength; 40 | }; 41 | 42 | CSIDataQueueRef CSIDataQueueCreate() 43 | { 44 | 45 | CSIDataQueueRef queue = (CSIDataQueueRef)malloc(sizeof(struct CSIDataQueueOpaque)); 46 | size_t capacity = DEFAULT_CAPACITY; 47 | void* data = malloc(capacity); 48 | queue->dataStartPointer = data; 49 | queue->capacity = capacity; 50 | queue->dataEndPointer = data + capacity; 51 | queue->activeStartPointer = data; 52 | queue->activeEndPointer = data; 53 | queue->activeLength = 0; 54 | 55 | return queue; 56 | } 57 | 58 | void CSIDataQueueDestroy(CSIDataQueueRef queue) 59 | { 60 | free(queue->dataStartPointer); 61 | free(queue); 62 | } 63 | 64 | static void upgradeToLargerCapacity(CSIDataQueueRef queue) 65 | { 66 | size_t newCapacity = queue->capacity * 2; 67 | void* newData = malloc(newCapacity); 68 | CSIDataQueuePeek(queue, newData, queue->activeLength); 69 | void* oldData = queue->dataStartPointer; 70 | queue->dataStartPointer = newData; 71 | queue->capacity = newCapacity; 72 | queue->dataEndPointer = newData + newCapacity; 73 | queue->activeStartPointer = newData; 74 | queue->activeEndPointer = newData + queue->activeLength; 75 | 76 | free(oldData); 77 | } 78 | 79 | size_t CSIDataQueueEnqueue(CSIDataQueueRef queue, const void* data, size_t dataLength) 80 | { 81 | if(data == NULL) return -1; 82 | if(dataLength == 0) return 0; 83 | 84 | size_t newLength = queue->activeLength + dataLength; 85 | while(newLength > queue->capacity) 86 | { 87 | upgradeToLargerCapacity(queue); 88 | } 89 | 90 | void* newEndPointer = queue->activeEndPointer + dataLength; 91 | 92 | if(newEndPointer <= queue->dataEndPointer) 93 | { 94 | memcpy(queue->activeEndPointer, data, dataLength); 95 | queue->activeEndPointer += dataLength; 96 | } 97 | else 98 | { 99 | size_t sizeToEnd = queue->dataEndPointer - queue->activeEndPointer; 100 | memcpy(queue->activeEndPointer, data, sizeToEnd); 101 | const void* dataLeft = data + sizeToEnd; 102 | size_t dataLeftLength = dataLength - sizeToEnd; 103 | memcpy(queue->dataStartPointer, dataLeft, dataLeftLength); 104 | queue->activeEndPointer = queue->dataStartPointer + dataLeftLength; 105 | } 106 | 107 | queue->activeLength += dataLength; 108 | return dataLength; 109 | } 110 | 111 | size_t CSIDataQueuePeek(CSIDataQueueRef queue, void* data, size_t dataLength) 112 | { 113 | size_t readLength = queue->activeLength > dataLength ? dataLength : queue->activeLength; 114 | void* readEndPointer = queue->activeStartPointer + readLength; 115 | 116 | if(readEndPointer <= queue->dataEndPointer) 117 | { 118 | memcpy(data, queue->activeStartPointer, readLength); 119 | } 120 | else 121 | { 122 | size_t sizeToEnd = queue->dataEndPointer - queue->activeStartPointer; 123 | memcpy(data, queue->activeStartPointer, sizeToEnd); 124 | void* secondReadPointer = data + sizeToEnd; 125 | size_t dataLeft = readLength - sizeToEnd; 126 | memcpy(secondReadPointer, queue->dataStartPointer, dataLeft); 127 | } 128 | 129 | return readLength; 130 | } 131 | 132 | size_t CSIDataQueueDequeue(CSIDataQueueRef queue, void* data, size_t dataLength) 133 | { 134 | size_t readLength = CSIDataQueuePeek(queue, data, dataLength); 135 | 136 | void* newStartPointer = queue->activeStartPointer + readLength; 137 | 138 | if(newStartPointer <= queue->dataEndPointer) 139 | { 140 | queue->activeStartPointer = newStartPointer; 141 | } 142 | else 143 | { 144 | size_t sizeToEnd = queue->dataEndPointer - queue->activeStartPointer; 145 | size_t dataLeft = readLength - sizeToEnd; 146 | queue->activeStartPointer = queue->dataStartPointer + dataLeft; 147 | } 148 | 149 | queue->activeLength -= readLength; 150 | return readLength; 151 | } 152 | 153 | size_t CSIDataQueueGetLength(CSIDataQueueRef queue) 154 | { 155 | return queue->activeLength; 156 | } 157 | 158 | void CSIDataQueueClear(CSIDataQueueRef queue) 159 | { 160 | queue->activeStartPointer = queue->dataStartPointer; 161 | queue->activeEndPointer = queue->dataStartPointer; 162 | queue->activeLength = 0; 163 | } 164 | 165 | int CSIDataQueueRunTests() 166 | { 167 | char* testInput = "1234567890"; 168 | char* clearedInput = "0987654321"; 169 | size_t testInputLength = 10; 170 | char* testOutput = malloc(testInputLength); 171 | int testIterations = 4096; 172 | 173 | CSIDataQueueRef queue = CSIDataQueueCreate(); 174 | 175 | // Test Adding more than capacity 176 | size_t totalInput = 0; 177 | for(int i=0; i < testIterations; ++i) 178 | { 179 | size_t amountInput = CSIDataQueueEnqueue(queue, testInput, testInputLength); 180 | if(amountInput != testInputLength) 181 | { 182 | return -1; 183 | //NSLog(@"Input the wrong amount of data: %zd instead of %zd", amountInput, testInputLength); 184 | } 185 | 186 | totalInput += amountInput; 187 | size_t currentSize = CSIDataQueueGetLength(queue); 188 | if(currentSize != totalInput) 189 | { 190 | return -2; 191 | //NSLog(@"The active size is not being reported correctly: %zd instead of %zd", currentSize, totalInput); 192 | } 193 | } 194 | 195 | // Test removing all of it 196 | for(int i=0; i < testIterations; ++i) 197 | { 198 | size_t amountOutput = CSIDataQueueDequeue(queue, testOutput, testInputLength); 199 | if(amountOutput != testInputLength) 200 | { 201 | return -3; 202 | //NSLog(@"Output the wrong amount of data: %zd instead of %zd", amountOutput, testInputLength); 203 | } 204 | 205 | totalInput -= amountOutput; 206 | size_t currentSize = CSIDataQueueGetLength(queue); 207 | if(currentSize != totalInput) 208 | { 209 | return -4; 210 | //NSLog(@"The active size is not being reported correctly: %zd instead of %zd", currentSize, totalInput); 211 | } 212 | } 213 | 214 | // Test adding and removing 215 | CSIDataQueueDestroy(queue); 216 | queue = CSIDataQueueCreate(); 217 | for(int i=0; i < testIterations; ++i) 218 | { 219 | size_t amountInput = CSIDataQueueEnqueue(queue, testInput, testInputLength); 220 | if(amountInput != testInputLength) 221 | { 222 | return -5; 223 | //NSLog(@"Input the wrong amount of data: %zd instead of %zd", amountInput, testInputLength); 224 | } 225 | 226 | size_t amountPeeked = CSIDataQueuePeek(queue, testOutput, testInputLength); 227 | if(amountPeeked != testInputLength) 228 | { 229 | return -6; 230 | //NSLog(@"Peeked the wrong amount of data: %zd instead of 10", amountPeeked); 231 | } 232 | 233 | memcpy(testOutput, clearedInput, testInputLength); 234 | size_t amountOutput = CSIDataQueueDequeue(queue, testOutput, testInputLength); 235 | if(amountOutput != testInputLength) 236 | { 237 | return -7; 238 | //NSLog(@"Output the wrong amount of data: %zd instead of 10", amountOutput); 239 | } 240 | 241 | int result = memcmp(testInput, testOutput, testInputLength); 242 | if(result != 0) 243 | { 244 | return -8; 245 | //NSLog(@"The input and output don't match"); 246 | } 247 | } 248 | 249 | return 0; 250 | //NSLog(@"Queue tests complete"); 251 | } -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest/CSIViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CSIViewController.m 3 | // OpusIPhoneTest 4 | // 5 | // Copyright (c) 2012 Sam Leitch. All rights reserved. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to 9 | // deal in the Software without restriction, including without limitation the 10 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11 | // sell copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 | // IN THE SOFTWARE. 24 | // 25 | 26 | #import "CSIViewController.h" 27 | #import "CSIOpusEncoder.h" 28 | #import "CSIOpusDecoder.h" 29 | #include "CSIDataQueue.h" 30 | #import 31 | 32 | #include 33 | #include 34 | #include 35 | 36 | const AudioUnitElement kInputBusNumber = 1; 37 | const AudioUnitElement kOutputBusNumber = 0; 38 | #define RECV_BUFFER_SIZE 1024 39 | 40 | @interface CSIViewController () 41 | 42 | @property (strong) AVCaptureSession *captureSession; 43 | @property (strong) AVCaptureDevice *camera; 44 | @property (strong) AVCaptureVideoDataOutput *video; 45 | @property (strong) AVCaptureVideoPreviewLayer *preview; 46 | 47 | @property (strong) AVCaptureDevice *microphone; 48 | @property (strong) AVCaptureAudioDataOutput *audio; 49 | 50 | @property (assign) double sampleRate; 51 | @property (assign) double frameDuration; 52 | @property (assign) int samplesPerFrame; 53 | @property (assign) int bytesPerSample; 54 | @property (assign) int bytesPerFrame; 55 | 56 | @property (assign) AUGraph audioGraph; 57 | @property (assign) AudioComponentDescription ioUnitDesc; 58 | @property (assign) AUNode ioNode; 59 | @property (assign) AudioUnit ioUnit; 60 | @property (assign) AudioBufferList *ioData; 61 | 62 | @property (strong) CSIOpusEncoder *encoder; 63 | @property (strong) CSIOpusDecoder *decoder; 64 | @property (strong) dispatch_queue_t decodeQueue; 65 | 66 | @property (assign) int socketFd; 67 | @property (strong) dispatch_queue_t sendQueue; 68 | @property (strong) dispatch_queue_t receiveQueue; 69 | @property (strong) dispatch_source_t receiveSource; 70 | @property (assign) void* receiveBuffer; 71 | 72 | @end 73 | 74 | OSStatus inputCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) 75 | { 76 | CSIViewController *viewController = (__bridge CSIViewController *)inRefCon; 77 | AudioUnit ioUnit = viewController.ioUnit; 78 | ioData = viewController.ioData; 79 | OSStatus status = AudioUnitRender(ioUnit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData); 80 | if(status != noErr) { NSLog(@"Failed to retrieve data from mic"); return noErr; } 81 | 82 | if(viewController.modeControl.selectedSegmentIndex != 0) 83 | { 84 | [viewController encodeAudio:ioData timestamp:inTimeStamp]; 85 | } 86 | 87 | return noErr; 88 | } 89 | 90 | OSStatus renderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) 91 | { 92 | CSIViewController *viewController = (__bridge CSIViewController *)inRefCon; 93 | 94 | int modeIndex = viewController.modeControl.selectedSegmentIndex; 95 | if(modeIndex == 0) 96 | { 97 | AudioBufferList *outputData = viewController.ioData; 98 | memcpy(ioData->mBuffers[0].mData, outputData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize); 99 | } 100 | else 101 | { 102 | int bytesFilled = [viewController.decoder tryFillBuffer:ioData]; 103 | if(bytesFilled <= 0) 104 | { 105 | memset(ioData->mBuffers[0].mData, 0, ioData->mBuffers[0].mDataByteSize); 106 | } 107 | } 108 | 109 | return noErr; 110 | } 111 | 112 | @implementation CSIViewController 113 | 114 | - (void)viewDidLoad 115 | { 116 | [super viewDidLoad]; 117 | self.sampleRate = 48000; 118 | 119 | [self setupAudioSession]; 120 | [self setupCaptureSession]; 121 | [self setupVideoCapture]; 122 | [self setupVideoPreview]; 123 | // [self setupAudioCapture]; 124 | [self setupAudioIOGraph]; 125 | [self setupEncoder]; 126 | [self setupDecoder]; 127 | [self setupSocket]; 128 | [self start]; 129 | 130 | self.statusLabel.text = @"Running"; 131 | } 132 | 133 | - (void)didReceiveMemoryWarning 134 | { 135 | [super didReceiveMemoryWarning]; 136 | // Dispose of any resources that can be recreated. 137 | } 138 | 139 | - (void)setupAudioSession 140 | { 141 | NSError *error; 142 | AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 143 | [audioSession setPreferredSampleRate:48000 error:&error]; 144 | [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; 145 | [audioSession setPreferredIOBufferDuration:0.02 error:&error]; 146 | [audioSession setActive:YES error:&error]; 147 | 148 | double sampleRate = audioSession.sampleRate; 149 | double ioBufferDuration = audioSession.IOBufferDuration; 150 | int samplesPerFrame = (int)(ioBufferDuration * sampleRate) + 1; 151 | int bytesPerSample = sizeof(AudioSampleType); 152 | int bytesPerFrame = samplesPerFrame * bytesPerSample; 153 | 154 | self.sampleRate = sampleRate; 155 | self.frameDuration = ioBufferDuration; 156 | self.samplesPerFrame = samplesPerFrame; 157 | self.bytesPerSample = bytesPerSample; 158 | self.bytesPerFrame = bytesPerFrame; 159 | } 160 | 161 | - (void)setupCaptureSession 162 | { 163 | self.captureSession = [AVCaptureSession new]; 164 | self.captureSession.sessionPreset = AVCaptureSessionPreset352x288; 165 | } 166 | 167 | - (void)setupVideoCapture 168 | { 169 | NSError *error; 170 | 171 | self.camera = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 172 | 173 | if(!self.camera) 174 | { 175 | // TODO: Add error condition 176 | } 177 | 178 | AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:self.camera error:&error]; 179 | 180 | if(!videoInput) 181 | { 182 | // TODO: Add error condition 183 | } 184 | 185 | [self.captureSession addInput:videoInput]; 186 | 187 | self.video = [AVCaptureVideoDataOutput new]; 188 | 189 | dispatch_queue_t videoQueue = dispatch_queue_create("VideoQueue", NULL); 190 | 191 | [self.video setSampleBufferDelegate:self queue:videoQueue]; 192 | 193 | [self.captureSession addOutput:self.video]; 194 | } 195 | 196 | - (void)setupVideoPreview 197 | { 198 | self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; 199 | // TODO: Add preview to display 200 | } 201 | 202 | - (void)setupAudioCapture 203 | { 204 | NSError *error; 205 | 206 | self.microphone = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 207 | 208 | if(!self.microphone) 209 | { 210 | // TODO: Add error condition 211 | } 212 | 213 | AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:self.microphone error:&error]; 214 | 215 | if(!audioInput) 216 | { 217 | // TODO: Add error condition 218 | } 219 | 220 | [self.captureSession addInput:audioInput]; 221 | 222 | self.audio = [AVCaptureAudioDataOutput new]; 223 | 224 | dispatch_queue_t audioQueue = dispatch_queue_create("AudioQueue", NULL); 225 | 226 | [self.audio setSampleBufferDelegate:self queue:audioQueue]; 227 | 228 | [self.captureSession addOutput:self.audio]; 229 | } 230 | 231 | - (void)setupAudioIOGraph 232 | { 233 | OSStatus status = noErr; 234 | 235 | AUGraph audioGraph; 236 | status = NewAUGraph(&audioGraph); 237 | if(status != noErr) { NSLog(@"Failed to create audio graph"); return; } 238 | self.audioGraph = audioGraph; 239 | 240 | AudioComponentDescription ioUnitDesc; 241 | ioUnitDesc.componentType = kAudioUnitType_Output; 242 | ioUnitDesc.componentSubType = kAudioUnitSubType_VoiceProcessingIO; 243 | ioUnitDesc.componentManufacturer = kAudioUnitManufacturer_Apple; 244 | ioUnitDesc.componentFlags = 0; 245 | ioUnitDesc.componentFlagsMask = 0; 246 | self.ioUnitDesc = ioUnitDesc; 247 | 248 | AUNode ioNode; 249 | status = AUGraphAddNode(audioGraph, &ioUnitDesc, &ioNode); 250 | if(status != noErr) { NSLog(@"Failed to add mic to audio graph"); return; } 251 | status = AUGraphOpen(audioGraph); 252 | if(status != noErr) { NSLog(@"Failed to open audio graph"); return; } 253 | self.ioNode = ioNode; 254 | 255 | AudioUnit ioUnit; 256 | status = AUGraphNodeInfo(audioGraph, ioNode, &ioUnitDesc, &ioUnit); 257 | if(status != noErr) { NSLog(@"Failed to get mic handle from audio graph"); return; } 258 | self.ioUnit = ioUnit; 259 | 260 | UInt32 ioEnabled = 1; 261 | status = AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBusNumber, &ioEnabled, sizeof(ioEnabled)); 262 | if(status != noErr) { NSLog(@"Failed to set IO enabled on mic"); return; } 263 | 264 | size_t bytesPerSample = self.bytesPerSample; 265 | 266 | AudioStreamBasicDescription monoStreamFormat = {0}; 267 | monoStreamFormat.mFormatID = kAudioFormatLinearPCM; 268 | monoStreamFormat.mFormatFlags = kAudioFormatFlagsCanonical; 269 | monoStreamFormat.mBytesPerPacket = bytesPerSample; 270 | monoStreamFormat.mFramesPerPacket = 1; 271 | monoStreamFormat.mBytesPerFrame = bytesPerSample; 272 | monoStreamFormat.mChannelsPerFrame = 1; 273 | monoStreamFormat.mBitsPerChannel = 8 * bytesPerSample; 274 | monoStreamFormat.mSampleRate = self.sampleRate; 275 | 276 | status = AudioUnitSetProperty(ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, kInputBusNumber, &monoStreamFormat, sizeof(monoStreamFormat)); 277 | if(status != noErr) { NSLog(@"Failed to set stream format on mic"); return; } 278 | 279 | AURenderCallbackStruct inputCallbackStruct; 280 | inputCallbackStruct.inputProc = &inputCallback; 281 | inputCallbackStruct.inputProcRefCon = (__bridge void *)(self); 282 | status = AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, kInputBusNumber, &inputCallbackStruct, sizeof(inputCallbackStruct)); 283 | if(status != noErr) { NSLog(@"Failed to set input callback on mic"); return; } 284 | 285 | status = AudioUnitSetProperty(ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBusNumber, &monoStreamFormat, sizeof(monoStreamFormat)); 286 | if(status != noErr) { NSLog(@"Failed to set stream format on speaker"); return; } 287 | 288 | AURenderCallbackStruct outputCallbackStruct; 289 | outputCallbackStruct.inputProc = &renderCallback; 290 | outputCallbackStruct.inputProcRefCon = (__bridge void *)(self); 291 | status = AudioUnitSetProperty(ioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Output, kOutputBusNumber, &outputCallbackStruct, sizeof(outputCallbackStruct)); 292 | if(status != noErr) { NSLog(@"Failed to set render callback on speaker"); return; } 293 | 294 | AudioBufferList *ioData = (AudioBufferList *)malloc(offsetof(AudioBufferList, mBuffers) + sizeof(AudioBuffer *)); 295 | ioData->mNumberBuffers = 1; 296 | ioData->mBuffers[0].mNumberChannels = 1; 297 | ioData->mBuffers[0].mDataByteSize = self.bytesPerFrame; 298 | ioData->mBuffers[0].mData = malloc(self.bytesPerFrame); 299 | self.ioData = ioData; 300 | 301 | status = AUGraphInitialize(audioGraph); 302 | if(status != noErr) { NSLog(@"Failed to initialize audio graph"); return; } 303 | } 304 | 305 | - (void)setupEncoder 306 | { 307 | 308 | self.encoder = [CSIOpusEncoder encoderWithSampleRate:self.sampleRate channels:1 frameDuration:0.01]; 309 | } 310 | 311 | - (void)setupDecoder 312 | { 313 | self.decoder = [CSIOpusDecoder decoderWithSampleRate:self.sampleRate channels:1 frameDuration:0.01]; 314 | self.decodeQueue = dispatch_queue_create("Decode Queue", nil); 315 | } 316 | 317 | - (void)setupSocket 318 | { 319 | int socketFd; 320 | 321 | socketFd = socket(AF_INET, SOCK_DGRAM, 0); 322 | if(socketFd < 0) 323 | { 324 | NSLog(@"Unable to create socket"); 325 | return; 326 | } 327 | 328 | struct sockaddr_in addr; 329 | memset(&addr, 0, sizeof(addr)); 330 | addr.sin_family = AF_INET; 331 | addr.sin_addr.s_addr = htonl(INADDR_ANY); 332 | addr.sin_port = htons(31337); 333 | 334 | int bindResult = bind(socketFd,(struct sockaddr *) &addr,sizeof(addr)); 335 | if(bindResult < 0) 336 | { 337 | NSLog(@"Unable to bind socket to port 31337"); 338 | close(socketFd); 339 | return; 340 | } 341 | 342 | self.socketFd = socketFd; 343 | 344 | self.sendQueue = dispatch_queue_create("Send Queue", nil); 345 | 346 | self.receiveBuffer = malloc(RECV_BUFFER_SIZE); 347 | self.receiveQueue = dispatch_queue_create("Socket Queue", nil); 348 | self.receiveSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self.socketFd, 0, self.receiveQueue); 349 | dispatch_source_set_event_handler(self.receiveSource, ^{[self receivePacket];}); 350 | } 351 | 352 | - (void)start 353 | { 354 | [self.captureSession startRunning]; 355 | 356 | OSStatus status; 357 | status = AUGraphStart(self.audioGraph); 358 | if(status != noErr) { NSLog(@"Failed to start audio graph"); return; } 359 | 360 | struct ip_mreq mreq; 361 | mreq.imr_multiaddr.s_addr = inet_addr("239.255.1.42"); 362 | mreq.imr_interface.s_addr = htonl(INADDR_ANY); 363 | 364 | int addMembershipResult = setsockopt(self.socketFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); 365 | if (addMembershipResult < 0) 366 | { 367 | NSLog(@"Unable to listen on multicast port"); 368 | return; 369 | } 370 | 371 | u_char loopback = 0; 372 | int loopbackResult = setsockopt(self.socketFd, IPPROTO_IP, IP_MULTICAST_LOOP, &loopback, sizeof(loopback)); 373 | if(loopbackResult < 0) 374 | { 375 | NSLog(@"Error setting loopback on port"); 376 | return; 377 | } 378 | 379 | socklen_t loopbackSize; 380 | loopbackResult = getsockopt(self.socketFd, IPPROTO_IP, IP_MULTICAST_LOOP, &loopback, &loopbackSize); 381 | if(loopback != 0 || loopbackResult < 0) 382 | { 383 | NSLog(@"Loopback is on when it shouldn't be"); 384 | } 385 | 386 | dispatch_resume(self.receiveSource); 387 | } 388 | 389 | - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 390 | { 391 | CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer); 392 | CMMediaType mediaType = CMFormatDescriptionGetMediaType(formatDescription); 393 | 394 | if(mediaType == kCMMediaType_Video) 395 | { 396 | // TODO: process video 397 | // NSLog(@"Video sample"); 398 | } 399 | else if(mediaType == kCMMediaType_Audio) 400 | { 401 | // This is not used as it does not provide different sample rates and the Audio graph is required for playback anyway. 402 | NSArray *encodedSamples = [self.encoder encodeSample:sampleBuffer]; 403 | for (NSData *encodedSample in encodedSamples) { 404 | NSLog(@"Encoded %d bytes", encodedSample.length); 405 | } 406 | } 407 | 408 | } 409 | 410 | - (void)encodeAudio:(AudioBufferList *)data timestamp:(const AudioTimeStamp *)timestamp 411 | { 412 | NSArray *encodedSamples = [self.encoder encodeBufferList:data]; 413 | for (NSData *encodedSample in encodedSamples) { 414 | // NSLog(@"Encoded %d bytes", encodedSample.length); 415 | 416 | if(self.modeControl.selectedSegmentIndex == 1) 417 | { 418 | dispatch_async(self.decodeQueue, ^{[self.decoder decode:encodedSample];}); 419 | } 420 | else 421 | { 422 | dispatch_async(self.sendQueue, ^{[self sendPacket:encodedSample];}); 423 | } 424 | } 425 | } 426 | 427 | - (void)receivePacket 428 | { 429 | struct sockaddr_in addr; 430 | memset(&addr, 0, sizeof(addr)); 431 | addr.sin_family = AF_INET; 432 | addr.sin_addr.s_addr = htonl(INADDR_ANY); 433 | addr.sin_port = htons(31337); 434 | 435 | socklen_t addrLength = sizeof(addr); 436 | ssize_t bytesReceived = recvfrom(self.socketFd, self.receiveBuffer, RECV_BUFFER_SIZE, 0, (struct sockaddr*)&addr, &addrLength); 437 | if(bytesReceived < 0) 438 | { 439 | NSLog(@"There was a problem receiving data"); 440 | return; 441 | } 442 | 443 | if(self.modeControl.selectedSegmentIndex != 2) return; 444 | 445 | // NSLog(@"Received %zd bytes", bytesReceived); 446 | NSData* packet = [NSData dataWithBytesNoCopy:self.receiveBuffer length:bytesReceived freeWhenDone:NO]; 447 | [self.decoder decode:packet]; 448 | } 449 | 450 | - (void)sendPacket:(NSData*)packet 451 | { 452 | struct sockaddr_in addr; 453 | memset(&addr, 0, sizeof(addr)); 454 | addr.sin_family = AF_INET; 455 | addr.sin_addr.s_addr = inet_addr("239.255.1.42"); 456 | addr.sin_port = htons(31337); 457 | 458 | ssize_t bytesSent = sendto(self.socketFd, packet.bytes, packet.length, 0, (struct sockaddr*)&addr, sizeof(addr)); 459 | if(bytesSent < packet.length) 460 | { 461 | NSLog(@"There was a problem sending data"); 462 | } 463 | } 464 | 465 | @end 466 | -------------------------------------------------------------------------------- /OpusIPhoneTest/OpusIPhoneTest.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 224D0AF9167261CA00CFD024 /* CSIOpusDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 224D0AF8167261CA00CFD024 /* CSIOpusDecoder.m */; }; 11 | 224F4013167C3C8600CD01E8 /* webrtc@144x144.png in Resources */ = {isa = PBXBuildFile; fileRef = 224F4011167C3C8600CD01E8 /* webrtc@144x144.png */; }; 12 | 224F4014167C3C8600CD01E8 /* webrtc@72x72.png in Resources */ = {isa = PBXBuildFile; fileRef = 224F4012167C3C8600CD01E8 /* webrtc@72x72.png */; }; 13 | 22546D58167C3949002DD34C /* webrtc@57x57.png in Resources */ = {isa = PBXBuildFile; fileRef = 22546D57167C3949002DD34C /* webrtc@57x57.png */; }; 14 | 22546D5A167C397C002DD34C /* webrtc@114x114.png in Resources */ = {isa = PBXBuildFile; fileRef = 22546D59167C397C002DD34C /* webrtc@114x114.png */; }; 15 | 22A6A91C167A56F300F6BD05 /* CSIDataQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 22A6A91B167A56F300F6BD05 /* CSIDataQueue.c */; }; 16 | 22C28CD0166E6D01005A035C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28CCF166E6D01005A035C /* UIKit.framework */; }; 17 | 22C28CD2166E6D01005A035C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28CD1166E6D01005A035C /* Foundation.framework */; }; 18 | 22C28CD4166E6D01005A035C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28CD3166E6D01005A035C /* CoreGraphics.framework */; }; 19 | 22C28CDA166E6D01005A035C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 22C28CD8166E6D01005A035C /* InfoPlist.strings */; }; 20 | 22C28CDC166E6D01005A035C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C28CDB166E6D01005A035C /* main.m */; }; 21 | 22C28CE0166E6D01005A035C /* CSIAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C28CDF166E6D01005A035C /* CSIAppDelegate.m */; }; 22 | 22C28CE2166E6D01005A035C /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 22C28CE1166E6D01005A035C /* Default.png */; }; 23 | 22C28CE4166E6D01005A035C /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 22C28CE3166E6D01005A035C /* Default@2x.png */; }; 24 | 22C28CE6166E6D01005A035C /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 22C28CE5166E6D01005A035C /* Default-568h@2x.png */; }; 25 | 22C28CE9166E6D01005A035C /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 22C28CE7166E6D01005A035C /* MainStoryboard_iPhone.storyboard */; }; 26 | 22C28CEC166E6D01005A035C /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 22C28CEA166E6D01005A035C /* MainStoryboard_iPad.storyboard */; }; 27 | 22C28CEF166E6D01005A035C /* CSIViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C28CEE166E6D01005A035C /* CSIViewController.m */; }; 28 | 22C28CF7166E7151005A035C /* CSIOpusEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C28CF6166E7151005A035C /* CSIOpusEncoder.m */; }; 29 | 22C28CF9166E9C15005A035C /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28CF8166E9C15005A035C /* AVFoundation.framework */; }; 30 | 22C28CFB166EA4C4005A035C /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28CFA166EA4C4005A035C /* CoreMedia.framework */; }; 31 | 22C28D05166EB66B005A035C /* libopus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28D04166EB65D005A035C /* libopus.a */; }; 32 | 22C28D0B16700ED3005A035C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22C28D0A16700ED3005A035C /* AudioToolbox.framework */; }; 33 | /* End PBXBuildFile section */ 34 | 35 | /* Begin PBXContainerItemProxy section */ 36 | 22C28D03166EB65D005A035C /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = 22C28CFC166EB65C005A035C /* opus.xcodeproj */; 39 | proxyType = 2; 40 | remoteGlobalIDString = 60561485D25DA098AD994844; 41 | remoteInfo = opus; 42 | }; 43 | 22C28D06166EB695005A035C /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = 22C28CFC166EB65C005A035C /* opus.xcodeproj */; 46 | proxyType = 1; 47 | remoteGlobalIDString = 87FEE7BA56569457CC835153; 48 | remoteInfo = opus; 49 | }; 50 | /* End PBXContainerItemProxy section */ 51 | 52 | /* Begin PBXFileReference section */ 53 | 224D0AF7167261C900CFD024 /* CSIOpusDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSIOpusDecoder.h; sourceTree = ""; }; 54 | 224D0AF8167261CA00CFD024 /* CSIOpusDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSIOpusDecoder.m; sourceTree = ""; }; 55 | 224F4011167C3C8600CD01E8 /* webrtc@144x144.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "webrtc@144x144.png"; sourceTree = ""; }; 56 | 224F4012167C3C8600CD01E8 /* webrtc@72x72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "webrtc@72x72.png"; sourceTree = ""; }; 57 | 22546D57167C3949002DD34C /* webrtc@57x57.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "webrtc@57x57.png"; sourceTree = ""; }; 58 | 22546D59167C397C002DD34C /* webrtc@114x114.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "webrtc@114x114.png"; sourceTree = ""; }; 59 | 22A6A91A167A555200F6BD05 /* CSIDataQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSIDataQueue.h; sourceTree = ""; }; 60 | 22A6A91B167A56F300F6BD05 /* CSIDataQueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CSIDataQueue.c; sourceTree = ""; }; 61 | 22C28CCB166E6D01005A035C /* OpusIPhoneTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpusIPhoneTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | 22C28CCF166E6D01005A035C /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 63 | 22C28CD1166E6D01005A035C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 64 | 22C28CD3166E6D01005A035C /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 65 | 22C28CD7166E6D01005A035C /* OpusIPhoneTest-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "OpusIPhoneTest-Info.plist"; sourceTree = ""; }; 66 | 22C28CD9166E6D01005A035C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 67 | 22C28CDB166E6D01005A035C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 68 | 22C28CDD166E6D01005A035C /* OpusIPhoneTest-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OpusIPhoneTest-Prefix.pch"; sourceTree = ""; }; 69 | 22C28CDE166E6D01005A035C /* CSIAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSIAppDelegate.h; sourceTree = ""; }; 70 | 22C28CDF166E6D01005A035C /* CSIAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CSIAppDelegate.m; sourceTree = ""; }; 71 | 22C28CE1166E6D01005A035C /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 72 | 22C28CE3166E6D01005A035C /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 73 | 22C28CE5166E6D01005A035C /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 74 | 22C28CE8166E6D01005A035C /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = ""; }; 75 | 22C28CEB166E6D01005A035C /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = ""; }; 76 | 22C28CED166E6D01005A035C /* CSIViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSIViewController.h; sourceTree = ""; }; 77 | 22C28CEE166E6D01005A035C /* CSIViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CSIViewController.m; sourceTree = ""; }; 78 | 22C28CF5166E7151005A035C /* CSIOpusEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSIOpusEncoder.h; sourceTree = ""; }; 79 | 22C28CF6166E7151005A035C /* CSIOpusEncoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSIOpusEncoder.m; sourceTree = ""; }; 80 | 22C28CF8166E9C15005A035C /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 81 | 22C28CFA166EA4C4005A035C /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; 82 | 22C28CFC166EB65C005A035C /* opus.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = opus.xcodeproj; path = ../opus.xcodeproj; sourceTree = ""; }; 83 | 22C28D0A16700ED3005A035C /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 84 | /* End PBXFileReference section */ 85 | 86 | /* Begin PBXFrameworksBuildPhase section */ 87 | 22C28CC8166E6D01005A035C /* Frameworks */ = { 88 | isa = PBXFrameworksBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | 22C28D0B16700ED3005A035C /* AudioToolbox.framework in Frameworks */, 92 | 22C28D05166EB66B005A035C /* libopus.a in Frameworks */, 93 | 22C28CFB166EA4C4005A035C /* CoreMedia.framework in Frameworks */, 94 | 22C28CF9166E9C15005A035C /* AVFoundation.framework in Frameworks */, 95 | 22C28CD0166E6D01005A035C /* UIKit.framework in Frameworks */, 96 | 22C28CD2166E6D01005A035C /* Foundation.framework in Frameworks */, 97 | 22C28CD4166E6D01005A035C /* CoreGraphics.framework in Frameworks */, 98 | ); 99 | runOnlyForDeploymentPostprocessing = 0; 100 | }; 101 | /* End PBXFrameworksBuildPhase section */ 102 | 103 | /* Begin PBXGroup section */ 104 | 22C28CC0166E6D01005A035C = { 105 | isa = PBXGroup; 106 | children = ( 107 | 224F4011167C3C8600CD01E8 /* webrtc@144x144.png */, 108 | 224F4012167C3C8600CD01E8 /* webrtc@72x72.png */, 109 | 22546D59167C397C002DD34C /* webrtc@114x114.png */, 110 | 22546D57167C3949002DD34C /* webrtc@57x57.png */, 111 | 22C28CFC166EB65C005A035C /* opus.xcodeproj */, 112 | 22C28CD5166E6D01005A035C /* OpusIPhoneTest */, 113 | 22C28CCE166E6D01005A035C /* Frameworks */, 114 | 22C28CCC166E6D01005A035C /* Products */, 115 | ); 116 | sourceTree = ""; 117 | }; 118 | 22C28CCC166E6D01005A035C /* Products */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 22C28CCB166E6D01005A035C /* OpusIPhoneTest.app */, 122 | ); 123 | name = Products; 124 | sourceTree = ""; 125 | }; 126 | 22C28CCE166E6D01005A035C /* Frameworks */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 22C28D0A16700ED3005A035C /* AudioToolbox.framework */, 130 | 22C28CFA166EA4C4005A035C /* CoreMedia.framework */, 131 | 22C28CF8166E9C15005A035C /* AVFoundation.framework */, 132 | 22C28CCF166E6D01005A035C /* UIKit.framework */, 133 | 22C28CD1166E6D01005A035C /* Foundation.framework */, 134 | 22C28CD3166E6D01005A035C /* CoreGraphics.framework */, 135 | ); 136 | name = Frameworks; 137 | sourceTree = ""; 138 | }; 139 | 22C28CD5166E6D01005A035C /* OpusIPhoneTest */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | 22C28CDE166E6D01005A035C /* CSIAppDelegate.h */, 143 | 22C28CDF166E6D01005A035C /* CSIAppDelegate.m */, 144 | 22C28CE7166E6D01005A035C /* MainStoryboard_iPhone.storyboard */, 145 | 22C28CEA166E6D01005A035C /* MainStoryboard_iPad.storyboard */, 146 | 22C28CED166E6D01005A035C /* CSIViewController.h */, 147 | 22C28CEE166E6D01005A035C /* CSIViewController.m */, 148 | 22C28CD6166E6D01005A035C /* Supporting Files */, 149 | 22C28CF5166E7151005A035C /* CSIOpusEncoder.h */, 150 | 22C28CF6166E7151005A035C /* CSIOpusEncoder.m */, 151 | 224D0AF7167261C900CFD024 /* CSIOpusDecoder.h */, 152 | 224D0AF8167261CA00CFD024 /* CSIOpusDecoder.m */, 153 | 22A6A91A167A555200F6BD05 /* CSIDataQueue.h */, 154 | 22A6A91B167A56F300F6BD05 /* CSIDataQueue.c */, 155 | ); 156 | path = OpusIPhoneTest; 157 | sourceTree = ""; 158 | }; 159 | 22C28CD6166E6D01005A035C /* Supporting Files */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 22C28CD7166E6D01005A035C /* OpusIPhoneTest-Info.plist */, 163 | 22C28CD8166E6D01005A035C /* InfoPlist.strings */, 164 | 22C28CDB166E6D01005A035C /* main.m */, 165 | 22C28CDD166E6D01005A035C /* OpusIPhoneTest-Prefix.pch */, 166 | 22C28CE1166E6D01005A035C /* Default.png */, 167 | 22C28CE3166E6D01005A035C /* Default@2x.png */, 168 | 22C28CE5166E6D01005A035C /* Default-568h@2x.png */, 169 | ); 170 | name = "Supporting Files"; 171 | sourceTree = ""; 172 | }; 173 | 22C28CFD166EB65C005A035C /* Products */ = { 174 | isa = PBXGroup; 175 | children = ( 176 | 22C28D04166EB65D005A035C /* libopus.a */, 177 | ); 178 | name = Products; 179 | sourceTree = ""; 180 | }; 181 | /* End PBXGroup section */ 182 | 183 | /* Begin PBXNativeTarget section */ 184 | 22C28CCA166E6D01005A035C /* OpusIPhoneTest */ = { 185 | isa = PBXNativeTarget; 186 | buildConfigurationList = 22C28CF2166E6D01005A035C /* Build configuration list for PBXNativeTarget "OpusIPhoneTest" */; 187 | buildPhases = ( 188 | 22C28CC7166E6D01005A035C /* Sources */, 189 | 22C28CC8166E6D01005A035C /* Frameworks */, 190 | 22C28CC9166E6D01005A035C /* Resources */, 191 | ); 192 | buildRules = ( 193 | ); 194 | dependencies = ( 195 | 22C28D07166EB695005A035C /* PBXTargetDependency */, 196 | ); 197 | name = OpusIPhoneTest; 198 | productName = OpusIPhoneTest; 199 | productReference = 22C28CCB166E6D01005A035C /* OpusIPhoneTest.app */; 200 | productType = "com.apple.product-type.application"; 201 | }; 202 | /* End PBXNativeTarget section */ 203 | 204 | /* Begin PBXProject section */ 205 | 22C28CC2166E6D01005A035C /* Project object */ = { 206 | isa = PBXProject; 207 | attributes = { 208 | CLASSPREFIX = CSI; 209 | LastUpgradeCheck = 0450; 210 | ORGANIZATIONNAME = "Calgary Scientific Inc."; 211 | }; 212 | buildConfigurationList = 22C28CC5166E6D01005A035C /* Build configuration list for PBXProject "OpusIPhoneTest" */; 213 | compatibilityVersion = "Xcode 3.2"; 214 | developmentRegion = English; 215 | hasScannedForEncodings = 0; 216 | knownRegions = ( 217 | en, 218 | ); 219 | mainGroup = 22C28CC0166E6D01005A035C; 220 | productRefGroup = 22C28CCC166E6D01005A035C /* Products */; 221 | projectDirPath = ""; 222 | projectReferences = ( 223 | { 224 | ProductGroup = 22C28CFD166EB65C005A035C /* Products */; 225 | ProjectRef = 22C28CFC166EB65C005A035C /* opus.xcodeproj */; 226 | }, 227 | ); 228 | projectRoot = ""; 229 | targets = ( 230 | 22C28CCA166E6D01005A035C /* OpusIPhoneTest */, 231 | ); 232 | }; 233 | /* End PBXProject section */ 234 | 235 | /* Begin PBXReferenceProxy section */ 236 | 22C28D04166EB65D005A035C /* libopus.a */ = { 237 | isa = PBXReferenceProxy; 238 | fileType = archive.ar; 239 | path = libopus.a; 240 | remoteRef = 22C28D03166EB65D005A035C /* PBXContainerItemProxy */; 241 | sourceTree = BUILT_PRODUCTS_DIR; 242 | }; 243 | /* End PBXReferenceProxy section */ 244 | 245 | /* Begin PBXResourcesBuildPhase section */ 246 | 22C28CC9166E6D01005A035C /* Resources */ = { 247 | isa = PBXResourcesBuildPhase; 248 | buildActionMask = 2147483647; 249 | files = ( 250 | 22C28CDA166E6D01005A035C /* InfoPlist.strings in Resources */, 251 | 22C28CE2166E6D01005A035C /* Default.png in Resources */, 252 | 22C28CE4166E6D01005A035C /* Default@2x.png in Resources */, 253 | 22C28CE6166E6D01005A035C /* Default-568h@2x.png in Resources */, 254 | 22C28CE9166E6D01005A035C /* MainStoryboard_iPhone.storyboard in Resources */, 255 | 22C28CEC166E6D01005A035C /* MainStoryboard_iPad.storyboard in Resources */, 256 | 22546D58167C3949002DD34C /* webrtc@57x57.png in Resources */, 257 | 22546D5A167C397C002DD34C /* webrtc@114x114.png in Resources */, 258 | 224F4013167C3C8600CD01E8 /* webrtc@144x144.png in Resources */, 259 | 224F4014167C3C8600CD01E8 /* webrtc@72x72.png in Resources */, 260 | ); 261 | runOnlyForDeploymentPostprocessing = 0; 262 | }; 263 | /* End PBXResourcesBuildPhase section */ 264 | 265 | /* Begin PBXSourcesBuildPhase section */ 266 | 22C28CC7166E6D01005A035C /* Sources */ = { 267 | isa = PBXSourcesBuildPhase; 268 | buildActionMask = 2147483647; 269 | files = ( 270 | 22C28CDC166E6D01005A035C /* main.m in Sources */, 271 | 22C28CE0166E6D01005A035C /* CSIAppDelegate.m in Sources */, 272 | 22C28CEF166E6D01005A035C /* CSIViewController.m in Sources */, 273 | 22C28CF7166E7151005A035C /* CSIOpusEncoder.m in Sources */, 274 | 224D0AF9167261CA00CFD024 /* CSIOpusDecoder.m in Sources */, 275 | 22A6A91C167A56F300F6BD05 /* CSIDataQueue.c in Sources */, 276 | ); 277 | runOnlyForDeploymentPostprocessing = 0; 278 | }; 279 | /* End PBXSourcesBuildPhase section */ 280 | 281 | /* Begin PBXTargetDependency section */ 282 | 22C28D07166EB695005A035C /* PBXTargetDependency */ = { 283 | isa = PBXTargetDependency; 284 | name = opus; 285 | targetProxy = 22C28D06166EB695005A035C /* PBXContainerItemProxy */; 286 | }; 287 | /* End PBXTargetDependency section */ 288 | 289 | /* Begin PBXVariantGroup section */ 290 | 22C28CD8166E6D01005A035C /* InfoPlist.strings */ = { 291 | isa = PBXVariantGroup; 292 | children = ( 293 | 22C28CD9166E6D01005A035C /* en */, 294 | ); 295 | name = InfoPlist.strings; 296 | sourceTree = ""; 297 | }; 298 | 22C28CE7166E6D01005A035C /* MainStoryboard_iPhone.storyboard */ = { 299 | isa = PBXVariantGroup; 300 | children = ( 301 | 22C28CE8166E6D01005A035C /* en */, 302 | ); 303 | name = MainStoryboard_iPhone.storyboard; 304 | sourceTree = ""; 305 | }; 306 | 22C28CEA166E6D01005A035C /* MainStoryboard_iPad.storyboard */ = { 307 | isa = PBXVariantGroup; 308 | children = ( 309 | 22C28CEB166E6D01005A035C /* en */, 310 | ); 311 | name = MainStoryboard_iPad.storyboard; 312 | sourceTree = ""; 313 | }; 314 | /* End PBXVariantGroup section */ 315 | 316 | /* Begin XCBuildConfiguration section */ 317 | 22C28CF0166E6D01005A035C /* Debug */ = { 318 | isa = XCBuildConfiguration; 319 | buildSettings = { 320 | ALWAYS_SEARCH_USER_PATHS = NO; 321 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 322 | CLANG_CXX_LIBRARY = "libc++"; 323 | CLANG_ENABLE_OBJC_ARC = YES; 324 | CLANG_WARN_EMPTY_BODY = YES; 325 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 326 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 327 | COPY_PHASE_STRIP = NO; 328 | GCC_C_LANGUAGE_STANDARD = gnu99; 329 | GCC_DYNAMIC_NO_PIC = NO; 330 | GCC_OPTIMIZATION_LEVEL = 0; 331 | GCC_PREPROCESSOR_DEFINITIONS = ( 332 | "DEBUG=1", 333 | "$(inherited)", 334 | ); 335 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 336 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 337 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 338 | GCC_WARN_UNUSED_VARIABLE = YES; 339 | HEADER_SEARCH_PATHS = ../source/include; 340 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 341 | ONLY_ACTIVE_ARCH = YES; 342 | "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; 343 | SDKROOT = iphoneos; 344 | TARGETED_DEVICE_FAMILY = "1,2"; 345 | }; 346 | name = Debug; 347 | }; 348 | 22C28CF1166E6D01005A035C /* Release */ = { 349 | isa = XCBuildConfiguration; 350 | buildSettings = { 351 | ALWAYS_SEARCH_USER_PATHS = NO; 352 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 353 | CLANG_CXX_LIBRARY = "libc++"; 354 | CLANG_ENABLE_OBJC_ARC = YES; 355 | CLANG_WARN_EMPTY_BODY = YES; 356 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 357 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 358 | COPY_PHASE_STRIP = YES; 359 | GCC_C_LANGUAGE_STANDARD = gnu99; 360 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 361 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 362 | GCC_WARN_UNUSED_VARIABLE = YES; 363 | HEADER_SEARCH_PATHS = ../source/include; 364 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 365 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 366 | "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; 367 | SDKROOT = iphoneos; 368 | TARGETED_DEVICE_FAMILY = "1,2"; 369 | VALIDATE_PRODUCT = YES; 370 | }; 371 | name = Release; 372 | }; 373 | 22C28CF3166E6D01005A035C /* Debug */ = { 374 | isa = XCBuildConfiguration; 375 | buildSettings = { 376 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 377 | GCC_PREFIX_HEADER = "OpusIPhoneTest/OpusIPhoneTest-Prefix.pch"; 378 | INFOPLIST_FILE = "OpusIPhoneTest/OpusIPhoneTest-Info.plist"; 379 | PRODUCT_NAME = "$(TARGET_NAME)"; 380 | TARGETED_DEVICE_FAMILY = "1,2"; 381 | WRAPPER_EXTENSION = app; 382 | }; 383 | name = Debug; 384 | }; 385 | 22C28CF4166E6D01005A035C /* Release */ = { 386 | isa = XCBuildConfiguration; 387 | buildSettings = { 388 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 389 | GCC_PREFIX_HEADER = "OpusIPhoneTest/OpusIPhoneTest-Prefix.pch"; 390 | INFOPLIST_FILE = "OpusIPhoneTest/OpusIPhoneTest-Info.plist"; 391 | PRODUCT_NAME = "$(TARGET_NAME)"; 392 | TARGETED_DEVICE_FAMILY = "1,2"; 393 | WRAPPER_EXTENSION = app; 394 | }; 395 | name = Release; 396 | }; 397 | /* End XCBuildConfiguration section */ 398 | 399 | /* Begin XCConfigurationList section */ 400 | 22C28CC5166E6D01005A035C /* Build configuration list for PBXProject "OpusIPhoneTest" */ = { 401 | isa = XCConfigurationList; 402 | buildConfigurations = ( 403 | 22C28CF0166E6D01005A035C /* Debug */, 404 | 22C28CF1166E6D01005A035C /* Release */, 405 | ); 406 | defaultConfigurationIsVisible = 0; 407 | defaultConfigurationName = Release; 408 | }; 409 | 22C28CF2166E6D01005A035C /* Build configuration list for PBXNativeTarget "OpusIPhoneTest" */ = { 410 | isa = XCConfigurationList; 411 | buildConfigurations = ( 412 | 22C28CF3166E6D01005A035C /* Debug */, 413 | 22C28CF4166E6D01005A035C /* Release */, 414 | ); 415 | defaultConfigurationIsVisible = 0; 416 | defaultConfigurationName = Release; 417 | }; 418 | /* End XCConfigurationList section */ 419 | }; 420 | rootObject = 22C28CC2166E6D01005A035C /* Project object */; 421 | } 422 | -------------------------------------------------------------------------------- /opus.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 22914C2418AFB1A100390F3E /* A2NLSF.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5018AFB1A100390F3E /* A2NLSF.c */; }; 11 | 22914C2518AFB1A100390F3E /* ana_filt_bank_1.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5118AFB1A100390F3E /* ana_filt_bank_1.c */; }; 12 | 22914C2618AFB1A100390F3E /* biquad_alt.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5818AFB1A100390F3E /* biquad_alt.c */; }; 13 | 22914C2718AFB1A100390F3E /* bwexpander.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5918AFB1A100390F3E /* bwexpander.c */; }; 14 | 22914C2818AFB1A100390F3E /* bwexpander_32.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5A18AFB1A100390F3E /* bwexpander_32.c */; }; 15 | 22914C2918AFB1A100390F3E /* check_control_input.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5B18AFB1A100390F3E /* check_control_input.c */; }; 16 | 22914C2A18AFB1A100390F3E /* CNG.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5C18AFB1A100390F3E /* CNG.c */; }; 17 | 22914C2B18AFB1A100390F3E /* code_signs.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5D18AFB1A100390F3E /* code_signs.c */; }; 18 | 22914C2C18AFB1A100390F3E /* control_audio_bandwidth.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B5F18AFB1A100390F3E /* control_audio_bandwidth.c */; }; 19 | 22914C2D18AFB1A100390F3E /* control_codec.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6018AFB1A100390F3E /* control_codec.c */; }; 20 | 22914C2E18AFB1A100390F3E /* control_SNR.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6118AFB1A100390F3E /* control_SNR.c */; }; 21 | 22914C2F18AFB1A100390F3E /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6218AFB1A100390F3E /* debug.c */; }; 22 | 22914C3018AFB1A100390F3E /* dec_API.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6418AFB1A100390F3E /* dec_API.c */; }; 23 | 22914C3118AFB1A100390F3E /* decode_core.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6518AFB1A100390F3E /* decode_core.c */; }; 24 | 22914C3218AFB1A100390F3E /* decode_frame.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6618AFB1A100390F3E /* decode_frame.c */; }; 25 | 22914C3318AFB1A100390F3E /* decode_indices.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6718AFB1A100390F3E /* decode_indices.c */; }; 26 | 22914C3418AFB1A100390F3E /* decode_parameters.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6818AFB1A100390F3E /* decode_parameters.c */; }; 27 | 22914C3518AFB1A100390F3E /* decode_pitch.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6918AFB1A100390F3E /* decode_pitch.c */; }; 28 | 22914C3618AFB1A100390F3E /* decode_pulses.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6A18AFB1A100390F3E /* decode_pulses.c */; }; 29 | 22914C3718AFB1A100390F3E /* decoder_set_fs.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6B18AFB1A100390F3E /* decoder_set_fs.c */; }; 30 | 22914C3818AFB1A100390F3E /* enc_API.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6D18AFB1A100390F3E /* enc_API.c */; }; 31 | 22914C3918AFB1A100390F3E /* encode_indices.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6E18AFB1A100390F3E /* encode_indices.c */; }; 32 | 22914C3A18AFB1A100390F3E /* encode_pulses.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B6F18AFB1A100390F3E /* encode_pulses.c */; }; 33 | 22914C3B18AFB1A100390F3E /* apply_sine_window_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7218AFB1A100390F3E /* apply_sine_window_FIX.c */; }; 34 | 22914C3C18AFB1A100390F3E /* autocorr_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7318AFB1A100390F3E /* autocorr_FIX.c */; }; 35 | 22914C3D18AFB1A100390F3E /* burg_modified_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7418AFB1A100390F3E /* burg_modified_FIX.c */; }; 36 | 22914C3E18AFB1A100390F3E /* corrMatrix_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7518AFB1A100390F3E /* corrMatrix_FIX.c */; }; 37 | 22914C3F18AFB1A100390F3E /* encode_frame_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7618AFB1A100390F3E /* encode_frame_FIX.c */; }; 38 | 22914C4018AFB1A100390F3E /* find_LPC_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7718AFB1A100390F3E /* find_LPC_FIX.c */; }; 39 | 22914C4118AFB1A100390F3E /* find_LTP_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7818AFB1A100390F3E /* find_LTP_FIX.c */; }; 40 | 22914C4218AFB1A100390F3E /* find_pitch_lags_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7918AFB1A100390F3E /* find_pitch_lags_FIX.c */; }; 41 | 22914C4318AFB1A100390F3E /* find_pred_coefs_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7A18AFB1A100390F3E /* find_pred_coefs_FIX.c */; }; 42 | 22914C4418AFB1A100390F3E /* k2a_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7B18AFB1A100390F3E /* k2a_FIX.c */; }; 43 | 22914C4518AFB1A100390F3E /* k2a_Q16_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7C18AFB1A100390F3E /* k2a_Q16_FIX.c */; }; 44 | 22914C4618AFB1A100390F3E /* LTP_analysis_filter_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7D18AFB1A100390F3E /* LTP_analysis_filter_FIX.c */; }; 45 | 22914C4718AFB1A100390F3E /* LTP_scale_ctrl_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B7E18AFB1A100390F3E /* LTP_scale_ctrl_FIX.c */; }; 46 | 22914C4818AFB1A100390F3E /* noise_shape_analysis_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8018AFB1A100390F3E /* noise_shape_analysis_FIX.c */; }; 47 | 22914C4918AFB1A100390F3E /* pitch_analysis_core_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8118AFB1A100390F3E /* pitch_analysis_core_FIX.c */; }; 48 | 22914C4A18AFB1A100390F3E /* prefilter_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8218AFB1A100390F3E /* prefilter_FIX.c */; }; 49 | 22914C4B18AFB1A100390F3E /* process_gains_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8318AFB1A100390F3E /* process_gains_FIX.c */; }; 50 | 22914C4C18AFB1A100390F3E /* regularize_correlations_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8418AFB1A100390F3E /* regularize_correlations_FIX.c */; }; 51 | 22914C4D18AFB1A100390F3E /* residual_energy16_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8518AFB1A100390F3E /* residual_energy16_FIX.c */; }; 52 | 22914C4E18AFB1A100390F3E /* residual_energy_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8618AFB1A100390F3E /* residual_energy_FIX.c */; }; 53 | 22914C4F18AFB1A100390F3E /* schur64_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8718AFB1A100390F3E /* schur64_FIX.c */; }; 54 | 22914C5018AFB1A100390F3E /* schur_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8818AFB1A100390F3E /* schur_FIX.c */; }; 55 | 22914C5118AFB1A100390F3E /* solve_LS_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8918AFB1A100390F3E /* solve_LS_FIX.c */; }; 56 | 22914C5218AFB1A100390F3E /* vector_ops_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8B18AFB1A100390F3E /* vector_ops_FIX.c */; }; 57 | 22914C5318AFB1A100390F3E /* warped_autocorrelation_FIX.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8C18AFB1A100390F3E /* warped_autocorrelation_FIX.c */; }; 58 | 22914C5418AFB1A100390F3E /* apply_sine_window_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8E18AFB1A100390F3E /* apply_sine_window_FLP.c */; }; 59 | 22914C5518AFB1A100390F3E /* autocorrelation_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B8F18AFB1A100390F3E /* autocorrelation_FLP.c */; }; 60 | 22914C5618AFB1A100390F3E /* burg_modified_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9018AFB1A100390F3E /* burg_modified_FLP.c */; }; 61 | 22914C5718AFB1A100390F3E /* bwexpander_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9118AFB1A100390F3E /* bwexpander_FLP.c */; }; 62 | 22914C5818AFB1A100390F3E /* corrMatrix_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9218AFB1A100390F3E /* corrMatrix_FLP.c */; }; 63 | 22914C5918AFB1A100390F3E /* encode_frame_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9318AFB1A100390F3E /* encode_frame_FLP.c */; }; 64 | 22914C5A18AFB1A100390F3E /* energy_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9418AFB1A100390F3E /* energy_FLP.c */; }; 65 | 22914C5B18AFB1A100390F3E /* find_LPC_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9518AFB1A100390F3E /* find_LPC_FLP.c */; }; 66 | 22914C5C18AFB1A100390F3E /* find_LTP_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9618AFB1A100390F3E /* find_LTP_FLP.c */; }; 67 | 22914C5D18AFB1A100390F3E /* find_pitch_lags_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9718AFB1A100390F3E /* find_pitch_lags_FLP.c */; }; 68 | 22914C5E18AFB1A100390F3E /* find_pred_coefs_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9818AFB1A100390F3E /* find_pred_coefs_FLP.c */; }; 69 | 22914C5F18AFB1A100390F3E /* inner_product_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9918AFB1A100390F3E /* inner_product_FLP.c */; }; 70 | 22914C6018AFB1A100390F3E /* k2a_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9A18AFB1A100390F3E /* k2a_FLP.c */; }; 71 | 22914C6118AFB1A100390F3E /* levinsondurbin_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9B18AFB1A100390F3E /* levinsondurbin_FLP.c */; }; 72 | 22914C6218AFB1A100390F3E /* LPC_analysis_filter_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9C18AFB1A100390F3E /* LPC_analysis_filter_FLP.c */; }; 73 | 22914C6318AFB1A100390F3E /* LPC_inv_pred_gain_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9D18AFB1A100390F3E /* LPC_inv_pred_gain_FLP.c */; }; 74 | 22914C6418AFB1A100390F3E /* LTP_analysis_filter_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9E18AFB1A100390F3E /* LTP_analysis_filter_FLP.c */; }; 75 | 22914C6518AFB1A100390F3E /* LTP_scale_ctrl_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914B9F18AFB1A100390F3E /* LTP_scale_ctrl_FLP.c */; }; 76 | 22914C6618AFB1A100390F3E /* noise_shape_analysis_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA118AFB1A100390F3E /* noise_shape_analysis_FLP.c */; }; 77 | 22914C6718AFB1A100390F3E /* pitch_analysis_core_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA218AFB1A100390F3E /* pitch_analysis_core_FLP.c */; }; 78 | 22914C6818AFB1A100390F3E /* prefilter_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA318AFB1A100390F3E /* prefilter_FLP.c */; }; 79 | 22914C6918AFB1A100390F3E /* process_gains_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA418AFB1A100390F3E /* process_gains_FLP.c */; }; 80 | 22914C6A18AFB1A100390F3E /* regularize_correlations_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA518AFB1A100390F3E /* regularize_correlations_FLP.c */; }; 81 | 22914C6B18AFB1A100390F3E /* residual_energy_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA618AFB1A100390F3E /* residual_energy_FLP.c */; }; 82 | 22914C6C18AFB1A100390F3E /* scale_copy_vector_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA718AFB1A100390F3E /* scale_copy_vector_FLP.c */; }; 83 | 22914C6D18AFB1A100390F3E /* scale_vector_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA818AFB1A100390F3E /* scale_vector_FLP.c */; }; 84 | 22914C6E18AFB1A100390F3E /* schur_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BA918AFB1A100390F3E /* schur_FLP.c */; }; 85 | 22914C6F18AFB1A100390F3E /* solve_LS_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BAB18AFB1A100390F3E /* solve_LS_FLP.c */; }; 86 | 22914C7018AFB1A100390F3E /* sort_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BAC18AFB1A100390F3E /* sort_FLP.c */; }; 87 | 22914C7118AFB1A100390F3E /* warped_autocorrelation_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BAE18AFB1A100390F3E /* warped_autocorrelation_FLP.c */; }; 88 | 22914C7218AFB1A100390F3E /* wrappers_FLP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BAF18AFB1A100390F3E /* wrappers_FLP.c */; }; 89 | 22914C7318AFB1A100390F3E /* gain_quant.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB018AFB1A100390F3E /* gain_quant.c */; }; 90 | 22914C7418AFB1A100390F3E /* HP_variable_cutoff.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB118AFB1A100390F3E /* HP_variable_cutoff.c */; }; 91 | 22914C7518AFB1A100390F3E /* init_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB218AFB1A100390F3E /* init_decoder.c */; }; 92 | 22914C7618AFB1A100390F3E /* init_encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB318AFB1A100390F3E /* init_encoder.c */; }; 93 | 22914C7718AFB1A100390F3E /* inner_prod_aligned.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB518AFB1A100390F3E /* inner_prod_aligned.c */; }; 94 | 22914C7818AFB1A100390F3E /* interpolate.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB618AFB1A100390F3E /* interpolate.c */; }; 95 | 22914C7918AFB1A100390F3E /* lin2log.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB718AFB1A100390F3E /* lin2log.c */; }; 96 | 22914C7A18AFB1A100390F3E /* log2lin.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB818AFB1A100390F3E /* log2lin.c */; }; 97 | 22914C7B18AFB1A100390F3E /* LP_variable_cutoff.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BB918AFB1A100390F3E /* LP_variable_cutoff.c */; }; 98 | 22914C7C18AFB1A100390F3E /* LPC_analysis_filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BBA18AFB1A100390F3E /* LPC_analysis_filter.c */; }; 99 | 22914C7D18AFB1A100390F3E /* LPC_inv_pred_gain.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BBB18AFB1A100390F3E /* LPC_inv_pred_gain.c */; }; 100 | 22914C7E18AFB1A100390F3E /* NLSF2A.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC018AFB1A100390F3E /* NLSF2A.c */; }; 101 | 22914C7F18AFB1A100390F3E /* NLSF_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC118AFB1A100390F3E /* NLSF_decode.c */; }; 102 | 22914C8018AFB1A100390F3E /* NLSF_del_dec_quant.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC218AFB1A100390F3E /* NLSF_del_dec_quant.c */; }; 103 | 22914C8118AFB1A100390F3E /* NLSF_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC318AFB1A100390F3E /* NLSF_encode.c */; }; 104 | 22914C8218AFB1A100390F3E /* NLSF_stabilize.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC418AFB1A100390F3E /* NLSF_stabilize.c */; }; 105 | 22914C8318AFB1A100390F3E /* NLSF_unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC518AFB1A100390F3E /* NLSF_unpack.c */; }; 106 | 22914C8418AFB1A100390F3E /* NLSF_VQ.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC618AFB1A100390F3E /* NLSF_VQ.c */; }; 107 | 22914C8518AFB1A100390F3E /* NLSF_VQ_weights_laroia.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC718AFB1A100390F3E /* NLSF_VQ_weights_laroia.c */; }; 108 | 22914C8618AFB1A100390F3E /* NSQ.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC818AFB1A100390F3E /* NSQ.c */; }; 109 | 22914C8718AFB1A100390F3E /* NSQ_del_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BC918AFB1A100390F3E /* NSQ_del_dec.c */; }; 110 | 22914C8818AFB1A100390F3E /* pitch_est_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BCB18AFB1A100390F3E /* pitch_est_tables.c */; }; 111 | 22914C8918AFB1A100390F3E /* PLC.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BCC18AFB1A100390F3E /* PLC.c */; }; 112 | 22914C8A18AFB1A100390F3E /* process_NLSFs.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BCE18AFB1A100390F3E /* process_NLSFs.c */; }; 113 | 22914C8B18AFB1A100390F3E /* quant_LTP_gains.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BCF18AFB1A100390F3E /* quant_LTP_gains.c */; }; 114 | 22914C8C18AFB1A100390F3E /* resampler.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD018AFB1A100390F3E /* resampler.c */; }; 115 | 22914C8D18AFB1A100390F3E /* resampler_down2.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD118AFB1A100390F3E /* resampler_down2.c */; }; 116 | 22914C8E18AFB1A100390F3E /* resampler_down2_3.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD218AFB1A100390F3E /* resampler_down2_3.c */; }; 117 | 22914C8F18AFB1A100390F3E /* resampler_private_AR2.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD418AFB1A100390F3E /* resampler_private_AR2.c */; }; 118 | 22914C9018AFB1A100390F3E /* resampler_private_down_FIR.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD518AFB1A100390F3E /* resampler_private_down_FIR.c */; }; 119 | 22914C9118AFB1A100390F3E /* resampler_private_IIR_FIR.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD618AFB1A100390F3E /* resampler_private_IIR_FIR.c */; }; 120 | 22914C9218AFB1A100390F3E /* resampler_private_up2_HQ.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD718AFB1A100390F3E /* resampler_private_up2_HQ.c */; }; 121 | 22914C9318AFB1A100390F3E /* resampler_rom.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BD818AFB1A100390F3E /* resampler_rom.c */; }; 122 | 22914C9418AFB1A100390F3E /* shell_coder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BDB18AFB1A100390F3E /* shell_coder.c */; }; 123 | 22914C9518AFB1A100390F3E /* sigm_Q15.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BDC18AFB1A100390F3E /* sigm_Q15.c */; }; 124 | 22914C9618AFB1A100390F3E /* sort.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BDE18AFB1A100390F3E /* sort.c */; }; 125 | 22914C9718AFB1A100390F3E /* stereo_decode_pred.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BDF18AFB1A100390F3E /* stereo_decode_pred.c */; }; 126 | 22914C9818AFB1A100390F3E /* stereo_encode_pred.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE018AFB1A100390F3E /* stereo_encode_pred.c */; }; 127 | 22914C9918AFB1A100390F3E /* stereo_find_predictor.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE118AFB1A100390F3E /* stereo_find_predictor.c */; }; 128 | 22914C9A18AFB1A100390F3E /* stereo_LR_to_MS.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE218AFB1A100390F3E /* stereo_LR_to_MS.c */; }; 129 | 22914C9B18AFB1A100390F3E /* stereo_MS_to_LR.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE318AFB1A100390F3E /* stereo_MS_to_LR.c */; }; 130 | 22914C9C18AFB1A100390F3E /* stereo_quant_pred.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE418AFB1A100390F3E /* stereo_quant_pred.c */; }; 131 | 22914C9D18AFB1A100390F3E /* sum_sqr_shift.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE618AFB1A100390F3E /* sum_sqr_shift.c */; }; 132 | 22914C9E18AFB1A100390F3E /* table_LSF_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE718AFB1A100390F3E /* table_LSF_cos.c */; }; 133 | 22914C9F18AFB1A100390F3E /* tables_gain.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BE918AFB1A100390F3E /* tables_gain.c */; }; 134 | 22914CA018AFB1A100390F3E /* tables_LTP.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BEA18AFB1A100390F3E /* tables_LTP.c */; }; 135 | 22914CA118AFB1A100390F3E /* tables_NLSF_CB_NB_MB.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BEB18AFB1A100390F3E /* tables_NLSF_CB_NB_MB.c */; }; 136 | 22914CA218AFB1A100390F3E /* tables_NLSF_CB_WB.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BEC18AFB1A100390F3E /* tables_NLSF_CB_WB.c */; }; 137 | 22914CA318AFB1A100390F3E /* tables_other.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BED18AFB1A100390F3E /* tables_other.c */; }; 138 | 22914CA418AFB1A100390F3E /* tables_pitch_lag.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BEE18AFB1A100390F3E /* tables_pitch_lag.c */; }; 139 | 22914CA518AFB1A100390F3E /* tables_pulses_per_block.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BEF18AFB1A100390F3E /* tables_pulses_per_block.c */; }; 140 | 22914CA618AFB1A100390F3E /* VAD.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BF218AFB1A100390F3E /* VAD.c */; }; 141 | 22914CA718AFB1A100390F3E /* VQ_WMat_EC.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BF318AFB1A100390F3E /* VQ_WMat_EC.c */; }; 142 | 22914CA918AFB1A100390F3E /* mlp.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BF718AFB1A100390F3E /* mlp.c */; }; 143 | 22914CAB18AFB1A100390F3E /* opus.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BFA18AFB1A100390F3E /* opus.c */; }; 144 | 22914CAC18AFB1A100390F3E /* opus_compare.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BFB18AFB1A100390F3E /* opus_compare.c */; }; 145 | 22914CAD18AFB1A100390F3E /* opus_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BFC18AFB1A100390F3E /* opus_decoder.c */; }; 146 | 22914CAF18AFB1A100390F3E /* opus_encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BFE18AFB1A100390F3E /* opus_encoder.c */; }; 147 | 22914CB018AFB1A100390F3E /* opus_multistream.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914BFF18AFB1A100390F3E /* opus_multistream.c */; }; 148 | 22914CB118AFB1A100390F3E /* opus_multistream_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914C0018AFB1A100390F3E /* opus_multistream_decoder.c */; }; 149 | 22914CB218AFB1A100390F3E /* opus_multistream_encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914C0118AFB1A100390F3E /* opus_multistream_encoder.c */; }; 150 | 22914CB318AFB1A100390F3E /* repacketizer.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914C0318AFB1A100390F3E /* repacketizer.c */; }; 151 | 22914CC818AFB29000390F3E /* bands.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CB518AFB29000390F3E /* bands.c */; }; 152 | 22914CC918AFB29000390F3E /* celt_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CB618AFB29000390F3E /* celt_decoder.c */; }; 153 | 22914CCA18AFB29000390F3E /* celt_encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CB718AFB29000390F3E /* celt_encoder.c */; }; 154 | 22914CCB18AFB29000390F3E /* celt_lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CB818AFB29000390F3E /* celt_lpc.c */; }; 155 | 22914CCC18AFB29000390F3E /* celt.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CB918AFB29000390F3E /* celt.c */; }; 156 | 22914CCD18AFB29000390F3E /* cwrs.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CBA18AFB29000390F3E /* cwrs.c */; }; 157 | 22914CCE18AFB29000390F3E /* entcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CBB18AFB29000390F3E /* entcode.c */; }; 158 | 22914CCF18AFB29000390F3E /* entdec.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CBC18AFB29000390F3E /* entdec.c */; }; 159 | 22914CD018AFB29000390F3E /* entenc.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CBD18AFB29000390F3E /* entenc.c */; }; 160 | 22914CD118AFB29000390F3E /* kiss_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CBE18AFB29000390F3E /* kiss_fft.c */; }; 161 | 22914CD218AFB29000390F3E /* laplace.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CBF18AFB29000390F3E /* laplace.c */; }; 162 | 22914CD318AFB29000390F3E /* mathops.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC018AFB29000390F3E /* mathops.c */; }; 163 | 22914CD418AFB29000390F3E /* mdct.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC118AFB29000390F3E /* mdct.c */; }; 164 | 22914CD518AFB29000390F3E /* modes.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC218AFB29000390F3E /* modes.c */; }; 165 | 22914CD618AFB29000390F3E /* opus_custom_demo.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC318AFB29000390F3E /* opus_custom_demo.c */; }; 166 | 22914CD718AFB29000390F3E /* pitch.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC418AFB29000390F3E /* pitch.c */; }; 167 | 22914CD818AFB29000390F3E /* quant_bands.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC518AFB29000390F3E /* quant_bands.c */; }; 168 | 22914CD918AFB29000390F3E /* rate.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC618AFB29000390F3E /* rate.c */; }; 169 | 22914CDA18AFB29000390F3E /* vq.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CC718AFB29000390F3E /* vq.c */; }; 170 | 22914CDC18AFB2B300390F3E /* analysis.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CDB18AFB2B300390F3E /* analysis.c */; }; 171 | 22914CDE18AFB30200390F3E /* mlp_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 22914CDD18AFB30200390F3E /* mlp_data.c */; }; 172 | /* End PBXBuildFile section */ 173 | 174 | /* Begin PBXFileReference section */ 175 | 22914B5018AFB1A100390F3E /* A2NLSF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = A2NLSF.c; sourceTree = ""; }; 176 | 22914B5118AFB1A100390F3E /* ana_filt_bank_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ana_filt_bank_1.c; sourceTree = ""; }; 177 | 22914B5818AFB1A100390F3E /* biquad_alt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = biquad_alt.c; sourceTree = ""; }; 178 | 22914B5918AFB1A100390F3E /* bwexpander.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bwexpander.c; sourceTree = ""; }; 179 | 22914B5A18AFB1A100390F3E /* bwexpander_32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bwexpander_32.c; sourceTree = ""; }; 180 | 22914B5B18AFB1A100390F3E /* check_control_input.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = check_control_input.c; sourceTree = ""; }; 181 | 22914B5C18AFB1A100390F3E /* CNG.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CNG.c; sourceTree = ""; }; 182 | 22914B5D18AFB1A100390F3E /* code_signs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = code_signs.c; sourceTree = ""; }; 183 | 22914B5F18AFB1A100390F3E /* control_audio_bandwidth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = control_audio_bandwidth.c; sourceTree = ""; }; 184 | 22914B6018AFB1A100390F3E /* control_codec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = control_codec.c; sourceTree = ""; }; 185 | 22914B6118AFB1A100390F3E /* control_SNR.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = control_SNR.c; sourceTree = ""; }; 186 | 22914B6218AFB1A100390F3E /* debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = debug.c; sourceTree = ""; }; 187 | 22914B6418AFB1A100390F3E /* dec_API.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_API.c; sourceTree = ""; }; 188 | 22914B6518AFB1A100390F3E /* decode_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decode_core.c; sourceTree = ""; }; 189 | 22914B6618AFB1A100390F3E /* decode_frame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decode_frame.c; sourceTree = ""; }; 190 | 22914B6718AFB1A100390F3E /* decode_indices.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decode_indices.c; sourceTree = ""; }; 191 | 22914B6818AFB1A100390F3E /* decode_parameters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decode_parameters.c; sourceTree = ""; }; 192 | 22914B6918AFB1A100390F3E /* decode_pitch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decode_pitch.c; sourceTree = ""; }; 193 | 22914B6A18AFB1A100390F3E /* decode_pulses.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decode_pulses.c; sourceTree = ""; }; 194 | 22914B6B18AFB1A100390F3E /* decoder_set_fs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decoder_set_fs.c; sourceTree = ""; }; 195 | 22914B6D18AFB1A100390F3E /* enc_API.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_API.c; sourceTree = ""; }; 196 | 22914B6E18AFB1A100390F3E /* encode_indices.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encode_indices.c; sourceTree = ""; }; 197 | 22914B6F18AFB1A100390F3E /* encode_pulses.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encode_pulses.c; sourceTree = ""; }; 198 | 22914B7218AFB1A100390F3E /* apply_sine_window_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = apply_sine_window_FIX.c; sourceTree = ""; }; 199 | 22914B7318AFB1A100390F3E /* autocorr_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = autocorr_FIX.c; sourceTree = ""; }; 200 | 22914B7418AFB1A100390F3E /* burg_modified_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = burg_modified_FIX.c; sourceTree = ""; }; 201 | 22914B7518AFB1A100390F3E /* corrMatrix_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = corrMatrix_FIX.c; sourceTree = ""; }; 202 | 22914B7618AFB1A100390F3E /* encode_frame_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encode_frame_FIX.c; sourceTree = ""; }; 203 | 22914B7718AFB1A100390F3E /* find_LPC_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_LPC_FIX.c; sourceTree = ""; }; 204 | 22914B7818AFB1A100390F3E /* find_LTP_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_LTP_FIX.c; sourceTree = ""; }; 205 | 22914B7918AFB1A100390F3E /* find_pitch_lags_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_pitch_lags_FIX.c; sourceTree = ""; }; 206 | 22914B7A18AFB1A100390F3E /* find_pred_coefs_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_pred_coefs_FIX.c; sourceTree = ""; }; 207 | 22914B7B18AFB1A100390F3E /* k2a_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k2a_FIX.c; sourceTree = ""; }; 208 | 22914B7C18AFB1A100390F3E /* k2a_Q16_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k2a_Q16_FIX.c; sourceTree = ""; }; 209 | 22914B7D18AFB1A100390F3E /* LTP_analysis_filter_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LTP_analysis_filter_FIX.c; sourceTree = ""; }; 210 | 22914B7E18AFB1A100390F3E /* LTP_scale_ctrl_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LTP_scale_ctrl_FIX.c; sourceTree = ""; }; 211 | 22914B8018AFB1A100390F3E /* noise_shape_analysis_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = noise_shape_analysis_FIX.c; sourceTree = ""; }; 212 | 22914B8118AFB1A100390F3E /* pitch_analysis_core_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pitch_analysis_core_FIX.c; sourceTree = ""; }; 213 | 22914B8218AFB1A100390F3E /* prefilter_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = prefilter_FIX.c; sourceTree = ""; }; 214 | 22914B8318AFB1A100390F3E /* process_gains_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = process_gains_FIX.c; sourceTree = ""; }; 215 | 22914B8418AFB1A100390F3E /* regularize_correlations_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regularize_correlations_FIX.c; sourceTree = ""; }; 216 | 22914B8518AFB1A100390F3E /* residual_energy16_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = residual_energy16_FIX.c; sourceTree = ""; }; 217 | 22914B8618AFB1A100390F3E /* residual_energy_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = residual_energy_FIX.c; sourceTree = ""; }; 218 | 22914B8718AFB1A100390F3E /* schur64_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = schur64_FIX.c; sourceTree = ""; }; 219 | 22914B8818AFB1A100390F3E /* schur_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = schur_FIX.c; sourceTree = ""; }; 220 | 22914B8918AFB1A100390F3E /* solve_LS_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = solve_LS_FIX.c; sourceTree = ""; }; 221 | 22914B8B18AFB1A100390F3E /* vector_ops_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vector_ops_FIX.c; sourceTree = ""; }; 222 | 22914B8C18AFB1A100390F3E /* warped_autocorrelation_FIX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = warped_autocorrelation_FIX.c; sourceTree = ""; }; 223 | 22914B8E18AFB1A100390F3E /* apply_sine_window_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = apply_sine_window_FLP.c; sourceTree = ""; }; 224 | 22914B8F18AFB1A100390F3E /* autocorrelation_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = autocorrelation_FLP.c; sourceTree = ""; }; 225 | 22914B9018AFB1A100390F3E /* burg_modified_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = burg_modified_FLP.c; sourceTree = ""; }; 226 | 22914B9118AFB1A100390F3E /* bwexpander_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bwexpander_FLP.c; sourceTree = ""; }; 227 | 22914B9218AFB1A100390F3E /* corrMatrix_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = corrMatrix_FLP.c; sourceTree = ""; }; 228 | 22914B9318AFB1A100390F3E /* encode_frame_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encode_frame_FLP.c; sourceTree = ""; }; 229 | 22914B9418AFB1A100390F3E /* energy_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = energy_FLP.c; sourceTree = ""; }; 230 | 22914B9518AFB1A100390F3E /* find_LPC_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_LPC_FLP.c; sourceTree = ""; }; 231 | 22914B9618AFB1A100390F3E /* find_LTP_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_LTP_FLP.c; sourceTree = ""; }; 232 | 22914B9718AFB1A100390F3E /* find_pitch_lags_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_pitch_lags_FLP.c; sourceTree = ""; }; 233 | 22914B9818AFB1A100390F3E /* find_pred_coefs_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = find_pred_coefs_FLP.c; sourceTree = ""; }; 234 | 22914B9918AFB1A100390F3E /* inner_product_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inner_product_FLP.c; sourceTree = ""; }; 235 | 22914B9A18AFB1A100390F3E /* k2a_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k2a_FLP.c; sourceTree = ""; }; 236 | 22914B9B18AFB1A100390F3E /* levinsondurbin_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = levinsondurbin_FLP.c; sourceTree = ""; }; 237 | 22914B9C18AFB1A100390F3E /* LPC_analysis_filter_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LPC_analysis_filter_FLP.c; sourceTree = ""; }; 238 | 22914B9D18AFB1A100390F3E /* LPC_inv_pred_gain_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LPC_inv_pred_gain_FLP.c; sourceTree = ""; }; 239 | 22914B9E18AFB1A100390F3E /* LTP_analysis_filter_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LTP_analysis_filter_FLP.c; sourceTree = ""; }; 240 | 22914B9F18AFB1A100390F3E /* LTP_scale_ctrl_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LTP_scale_ctrl_FLP.c; sourceTree = ""; }; 241 | 22914BA118AFB1A100390F3E /* noise_shape_analysis_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = noise_shape_analysis_FLP.c; sourceTree = ""; }; 242 | 22914BA218AFB1A100390F3E /* pitch_analysis_core_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pitch_analysis_core_FLP.c; sourceTree = ""; }; 243 | 22914BA318AFB1A100390F3E /* prefilter_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = prefilter_FLP.c; sourceTree = ""; }; 244 | 22914BA418AFB1A100390F3E /* process_gains_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = process_gains_FLP.c; sourceTree = ""; }; 245 | 22914BA518AFB1A100390F3E /* regularize_correlations_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regularize_correlations_FLP.c; sourceTree = ""; }; 246 | 22914BA618AFB1A100390F3E /* residual_energy_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = residual_energy_FLP.c; sourceTree = ""; }; 247 | 22914BA718AFB1A100390F3E /* scale_copy_vector_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scale_copy_vector_FLP.c; sourceTree = ""; }; 248 | 22914BA818AFB1A100390F3E /* scale_vector_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scale_vector_FLP.c; sourceTree = ""; }; 249 | 22914BA918AFB1A100390F3E /* schur_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = schur_FLP.c; sourceTree = ""; }; 250 | 22914BAB18AFB1A100390F3E /* solve_LS_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = solve_LS_FLP.c; sourceTree = ""; }; 251 | 22914BAC18AFB1A100390F3E /* sort_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sort_FLP.c; sourceTree = ""; }; 252 | 22914BAE18AFB1A100390F3E /* warped_autocorrelation_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = warped_autocorrelation_FLP.c; sourceTree = ""; }; 253 | 22914BAF18AFB1A100390F3E /* wrappers_FLP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wrappers_FLP.c; sourceTree = ""; }; 254 | 22914BB018AFB1A100390F3E /* gain_quant.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gain_quant.c; sourceTree = ""; }; 255 | 22914BB118AFB1A100390F3E /* HP_variable_cutoff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = HP_variable_cutoff.c; sourceTree = ""; }; 256 | 22914BB218AFB1A100390F3E /* init_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init_decoder.c; sourceTree = ""; }; 257 | 22914BB318AFB1A100390F3E /* init_encoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init_encoder.c; sourceTree = ""; }; 258 | 22914BB518AFB1A100390F3E /* inner_prod_aligned.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inner_prod_aligned.c; sourceTree = ""; }; 259 | 22914BB618AFB1A100390F3E /* interpolate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = interpolate.c; sourceTree = ""; }; 260 | 22914BB718AFB1A100390F3E /* lin2log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lin2log.c; sourceTree = ""; }; 261 | 22914BB818AFB1A100390F3E /* log2lin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log2lin.c; sourceTree = ""; }; 262 | 22914BB918AFB1A100390F3E /* LP_variable_cutoff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LP_variable_cutoff.c; sourceTree = ""; }; 263 | 22914BBA18AFB1A100390F3E /* LPC_analysis_filter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LPC_analysis_filter.c; sourceTree = ""; }; 264 | 22914BBB18AFB1A100390F3E /* LPC_inv_pred_gain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LPC_inv_pred_gain.c; sourceTree = ""; }; 265 | 22914BC018AFB1A100390F3E /* NLSF2A.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF2A.c; sourceTree = ""; }; 266 | 22914BC118AFB1A100390F3E /* NLSF_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_decode.c; sourceTree = ""; }; 267 | 22914BC218AFB1A100390F3E /* NLSF_del_dec_quant.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_del_dec_quant.c; sourceTree = ""; }; 268 | 22914BC318AFB1A100390F3E /* NLSF_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_encode.c; sourceTree = ""; }; 269 | 22914BC418AFB1A100390F3E /* NLSF_stabilize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_stabilize.c; sourceTree = ""; }; 270 | 22914BC518AFB1A100390F3E /* NLSF_unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_unpack.c; sourceTree = ""; }; 271 | 22914BC618AFB1A100390F3E /* NLSF_VQ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_VQ.c; sourceTree = ""; }; 272 | 22914BC718AFB1A100390F3E /* NLSF_VQ_weights_laroia.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NLSF_VQ_weights_laroia.c; sourceTree = ""; }; 273 | 22914BC818AFB1A100390F3E /* NSQ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NSQ.c; sourceTree = ""; }; 274 | 22914BC918AFB1A100390F3E /* NSQ_del_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = NSQ_del_dec.c; sourceTree = ""; }; 275 | 22914BCB18AFB1A100390F3E /* pitch_est_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pitch_est_tables.c; sourceTree = ""; }; 276 | 22914BCC18AFB1A100390F3E /* PLC.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PLC.c; sourceTree = ""; }; 277 | 22914BCE18AFB1A100390F3E /* process_NLSFs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = process_NLSFs.c; sourceTree = ""; }; 278 | 22914BCF18AFB1A100390F3E /* quant_LTP_gains.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_LTP_gains.c; sourceTree = ""; }; 279 | 22914BD018AFB1A100390F3E /* resampler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler.c; sourceTree = ""; }; 280 | 22914BD118AFB1A100390F3E /* resampler_down2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_down2.c; sourceTree = ""; }; 281 | 22914BD218AFB1A100390F3E /* resampler_down2_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_down2_3.c; sourceTree = ""; }; 282 | 22914BD418AFB1A100390F3E /* resampler_private_AR2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_private_AR2.c; sourceTree = ""; }; 283 | 22914BD518AFB1A100390F3E /* resampler_private_down_FIR.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_private_down_FIR.c; sourceTree = ""; }; 284 | 22914BD618AFB1A100390F3E /* resampler_private_IIR_FIR.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_private_IIR_FIR.c; sourceTree = ""; }; 285 | 22914BD718AFB1A100390F3E /* resampler_private_up2_HQ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_private_up2_HQ.c; sourceTree = ""; }; 286 | 22914BD818AFB1A100390F3E /* resampler_rom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler_rom.c; sourceTree = ""; }; 287 | 22914BDB18AFB1A100390F3E /* shell_coder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = shell_coder.c; sourceTree = ""; }; 288 | 22914BDC18AFB1A100390F3E /* sigm_Q15.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sigm_Q15.c; sourceTree = ""; }; 289 | 22914BDE18AFB1A100390F3E /* sort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sort.c; sourceTree = ""; }; 290 | 22914BDF18AFB1A100390F3E /* stereo_decode_pred.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo_decode_pred.c; sourceTree = ""; }; 291 | 22914BE018AFB1A100390F3E /* stereo_encode_pred.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo_encode_pred.c; sourceTree = ""; }; 292 | 22914BE118AFB1A100390F3E /* stereo_find_predictor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo_find_predictor.c; sourceTree = ""; }; 293 | 22914BE218AFB1A100390F3E /* stereo_LR_to_MS.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo_LR_to_MS.c; sourceTree = ""; }; 294 | 22914BE318AFB1A100390F3E /* stereo_MS_to_LR.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo_MS_to_LR.c; sourceTree = ""; }; 295 | 22914BE418AFB1A100390F3E /* stereo_quant_pred.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo_quant_pred.c; sourceTree = ""; }; 296 | 22914BE618AFB1A100390F3E /* sum_sqr_shift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sum_sqr_shift.c; sourceTree = ""; }; 297 | 22914BE718AFB1A100390F3E /* table_LSF_cos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = table_LSF_cos.c; sourceTree = ""; }; 298 | 22914BE918AFB1A100390F3E /* tables_gain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_gain.c; sourceTree = ""; }; 299 | 22914BEA18AFB1A100390F3E /* tables_LTP.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_LTP.c; sourceTree = ""; }; 300 | 22914BEB18AFB1A100390F3E /* tables_NLSF_CB_NB_MB.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_NLSF_CB_NB_MB.c; sourceTree = ""; }; 301 | 22914BEC18AFB1A100390F3E /* tables_NLSF_CB_WB.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_NLSF_CB_WB.c; sourceTree = ""; }; 302 | 22914BED18AFB1A100390F3E /* tables_other.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_other.c; sourceTree = ""; }; 303 | 22914BEE18AFB1A100390F3E /* tables_pitch_lag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_pitch_lag.c; sourceTree = ""; }; 304 | 22914BEF18AFB1A100390F3E /* tables_pulses_per_block.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tables_pulses_per_block.c; sourceTree = ""; }; 305 | 22914BF218AFB1A100390F3E /* VAD.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = VAD.c; sourceTree = ""; }; 306 | 22914BF318AFB1A100390F3E /* VQ_WMat_EC.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = VQ_WMat_EC.c; sourceTree = ""; }; 307 | 22914BF718AFB1A100390F3E /* mlp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mlp.c; sourceTree = ""; }; 308 | 22914BFA18AFB1A100390F3E /* opus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus.c; sourceTree = ""; }; 309 | 22914BFB18AFB1A100390F3E /* opus_compare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_compare.c; sourceTree = ""; }; 310 | 22914BFC18AFB1A100390F3E /* opus_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_decoder.c; sourceTree = ""; }; 311 | 22914BFE18AFB1A100390F3E /* opus_encoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_encoder.c; sourceTree = ""; }; 312 | 22914BFF18AFB1A100390F3E /* opus_multistream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_multistream.c; sourceTree = ""; }; 313 | 22914C0018AFB1A100390F3E /* opus_multistream_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_multistream_decoder.c; sourceTree = ""; }; 314 | 22914C0118AFB1A100390F3E /* opus_multistream_encoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_multistream_encoder.c; sourceTree = ""; }; 315 | 22914C0318AFB1A100390F3E /* repacketizer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = repacketizer.c; sourceTree = ""; }; 316 | 22914CB518AFB29000390F3E /* bands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bands.c; sourceTree = ""; }; 317 | 22914CB618AFB29000390F3E /* celt_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = celt_decoder.c; sourceTree = ""; }; 318 | 22914CB718AFB29000390F3E /* celt_encoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = celt_encoder.c; sourceTree = ""; }; 319 | 22914CB818AFB29000390F3E /* celt_lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = celt_lpc.c; sourceTree = ""; }; 320 | 22914CB918AFB29000390F3E /* celt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = celt.c; sourceTree = ""; }; 321 | 22914CBA18AFB29000390F3E /* cwrs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cwrs.c; sourceTree = ""; }; 322 | 22914CBB18AFB29000390F3E /* entcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = entcode.c; sourceTree = ""; }; 323 | 22914CBC18AFB29000390F3E /* entdec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = entdec.c; sourceTree = ""; }; 324 | 22914CBD18AFB29000390F3E /* entenc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = entenc.c; sourceTree = ""; }; 325 | 22914CBE18AFB29000390F3E /* kiss_fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kiss_fft.c; sourceTree = ""; }; 326 | 22914CBF18AFB29000390F3E /* laplace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = laplace.c; sourceTree = ""; }; 327 | 22914CC018AFB29000390F3E /* mathops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mathops.c; sourceTree = ""; }; 328 | 22914CC118AFB29000390F3E /* mdct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mdct.c; sourceTree = ""; }; 329 | 22914CC218AFB29000390F3E /* modes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = modes.c; sourceTree = ""; }; 330 | 22914CC318AFB29000390F3E /* opus_custom_demo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opus_custom_demo.c; sourceTree = ""; }; 331 | 22914CC418AFB29000390F3E /* pitch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pitch.c; sourceTree = ""; }; 332 | 22914CC518AFB29000390F3E /* quant_bands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_bands.c; sourceTree = ""; }; 333 | 22914CC618AFB29000390F3E /* rate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rate.c; sourceTree = ""; }; 334 | 22914CC718AFB29000390F3E /* vq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vq.c; sourceTree = ""; }; 335 | 22914CDB18AFB2B300390F3E /* analysis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = analysis.c; sourceTree = ""; }; 336 | 22914CDD18AFB30200390F3E /* mlp_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mlp_data.c; sourceTree = ""; }; 337 | 60561485D25DA098AD994844 /* libopus.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libopus.a; sourceTree = BUILT_PRODUCTS_DIR; }; 338 | FD89D0884B7338F190C22AC6 /* opus.gyp */ = {isa = PBXFileReference; lastKnownFileType = text; path = opus.gyp; sourceTree = ""; }; 339 | /* End PBXFileReference section */ 340 | 341 | /* Begin PBXFrameworksBuildPhase section */ 342 | 73B16D1F5FCA37C7AF80C27C /* Frameworks */ = { 343 | isa = PBXFrameworksBuildPhase; 344 | buildActionMask = 2147483647; 345 | files = ( 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | }; 349 | /* End PBXFrameworksBuildPhase section */ 350 | 351 | /* Begin PBXGroup section */ 352 | 22914B0818AFB1A100390F3E /* celt */ = { 353 | isa = PBXGroup; 354 | children = ( 355 | 22914CB518AFB29000390F3E /* bands.c */, 356 | 22914CB618AFB29000390F3E /* celt_decoder.c */, 357 | 22914CB718AFB29000390F3E /* celt_encoder.c */, 358 | 22914CB818AFB29000390F3E /* celt_lpc.c */, 359 | 22914CB918AFB29000390F3E /* celt.c */, 360 | 22914CBA18AFB29000390F3E /* cwrs.c */, 361 | 22914CBB18AFB29000390F3E /* entcode.c */, 362 | 22914CBC18AFB29000390F3E /* entdec.c */, 363 | 22914CBD18AFB29000390F3E /* entenc.c */, 364 | 22914CBE18AFB29000390F3E /* kiss_fft.c */, 365 | 22914CBF18AFB29000390F3E /* laplace.c */, 366 | 22914CC018AFB29000390F3E /* mathops.c */, 367 | 22914CC118AFB29000390F3E /* mdct.c */, 368 | 22914CC218AFB29000390F3E /* modes.c */, 369 | 22914CC318AFB29000390F3E /* opus_custom_demo.c */, 370 | 22914CC418AFB29000390F3E /* pitch.c */, 371 | 22914CC518AFB29000390F3E /* quant_bands.c */, 372 | 22914CC618AFB29000390F3E /* rate.c */, 373 | 22914CC718AFB29000390F3E /* vq.c */, 374 | ); 375 | name = celt; 376 | path = "opus-1.1/celt"; 377 | sourceTree = SOURCE_ROOT; 378 | }; 379 | 22914B4F18AFB1A100390F3E /* silk */ = { 380 | isa = PBXGroup; 381 | children = ( 382 | 22914B5018AFB1A100390F3E /* A2NLSF.c */, 383 | 22914B5118AFB1A100390F3E /* ana_filt_bank_1.c */, 384 | 22914B5818AFB1A100390F3E /* biquad_alt.c */, 385 | 22914B5918AFB1A100390F3E /* bwexpander.c */, 386 | 22914B5A18AFB1A100390F3E /* bwexpander_32.c */, 387 | 22914B5B18AFB1A100390F3E /* check_control_input.c */, 388 | 22914B5C18AFB1A100390F3E /* CNG.c */, 389 | 22914B5D18AFB1A100390F3E /* code_signs.c */, 390 | 22914B5F18AFB1A100390F3E /* control_audio_bandwidth.c */, 391 | 22914B6018AFB1A100390F3E /* control_codec.c */, 392 | 22914B6118AFB1A100390F3E /* control_SNR.c */, 393 | 22914B6218AFB1A100390F3E /* debug.c */, 394 | 22914B6418AFB1A100390F3E /* dec_API.c */, 395 | 22914B6518AFB1A100390F3E /* decode_core.c */, 396 | 22914B6618AFB1A100390F3E /* decode_frame.c */, 397 | 22914B6718AFB1A100390F3E /* decode_indices.c */, 398 | 22914B6818AFB1A100390F3E /* decode_parameters.c */, 399 | 22914B6918AFB1A100390F3E /* decode_pitch.c */, 400 | 22914B6A18AFB1A100390F3E /* decode_pulses.c */, 401 | 22914B6B18AFB1A100390F3E /* decoder_set_fs.c */, 402 | 22914B6D18AFB1A100390F3E /* enc_API.c */, 403 | 22914B6E18AFB1A100390F3E /* encode_indices.c */, 404 | 22914B6F18AFB1A100390F3E /* encode_pulses.c */, 405 | 22914B7118AFB1A100390F3E /* fixed */, 406 | 22914B8D18AFB1A100390F3E /* float */, 407 | 22914BB018AFB1A100390F3E /* gain_quant.c */, 408 | 22914BB118AFB1A100390F3E /* HP_variable_cutoff.c */, 409 | 22914BB218AFB1A100390F3E /* init_decoder.c */, 410 | 22914BB318AFB1A100390F3E /* init_encoder.c */, 411 | 22914BB518AFB1A100390F3E /* inner_prod_aligned.c */, 412 | 22914BB618AFB1A100390F3E /* interpolate.c */, 413 | 22914BB718AFB1A100390F3E /* lin2log.c */, 414 | 22914BB818AFB1A100390F3E /* log2lin.c */, 415 | 22914BB918AFB1A100390F3E /* LP_variable_cutoff.c */, 416 | 22914BBA18AFB1A100390F3E /* LPC_analysis_filter.c */, 417 | 22914BBB18AFB1A100390F3E /* LPC_inv_pred_gain.c */, 418 | 22914BC018AFB1A100390F3E /* NLSF2A.c */, 419 | 22914BC118AFB1A100390F3E /* NLSF_decode.c */, 420 | 22914BC218AFB1A100390F3E /* NLSF_del_dec_quant.c */, 421 | 22914BC318AFB1A100390F3E /* NLSF_encode.c */, 422 | 22914BC418AFB1A100390F3E /* NLSF_stabilize.c */, 423 | 22914BC518AFB1A100390F3E /* NLSF_unpack.c */, 424 | 22914BC618AFB1A100390F3E /* NLSF_VQ.c */, 425 | 22914BC718AFB1A100390F3E /* NLSF_VQ_weights_laroia.c */, 426 | 22914BC818AFB1A100390F3E /* NSQ.c */, 427 | 22914BC918AFB1A100390F3E /* NSQ_del_dec.c */, 428 | 22914BCB18AFB1A100390F3E /* pitch_est_tables.c */, 429 | 22914BCC18AFB1A100390F3E /* PLC.c */, 430 | 22914BCE18AFB1A100390F3E /* process_NLSFs.c */, 431 | 22914BCF18AFB1A100390F3E /* quant_LTP_gains.c */, 432 | 22914BD018AFB1A100390F3E /* resampler.c */, 433 | 22914BD118AFB1A100390F3E /* resampler_down2.c */, 434 | 22914BD218AFB1A100390F3E /* resampler_down2_3.c */, 435 | 22914BD418AFB1A100390F3E /* resampler_private_AR2.c */, 436 | 22914BD518AFB1A100390F3E /* resampler_private_down_FIR.c */, 437 | 22914BD618AFB1A100390F3E /* resampler_private_IIR_FIR.c */, 438 | 22914BD718AFB1A100390F3E /* resampler_private_up2_HQ.c */, 439 | 22914BD818AFB1A100390F3E /* resampler_rom.c */, 440 | 22914BDB18AFB1A100390F3E /* shell_coder.c */, 441 | 22914BDC18AFB1A100390F3E /* sigm_Q15.c */, 442 | 22914BDE18AFB1A100390F3E /* sort.c */, 443 | 22914BDF18AFB1A100390F3E /* stereo_decode_pred.c */, 444 | 22914BE018AFB1A100390F3E /* stereo_encode_pred.c */, 445 | 22914BE118AFB1A100390F3E /* stereo_find_predictor.c */, 446 | 22914BE218AFB1A100390F3E /* stereo_LR_to_MS.c */, 447 | 22914BE318AFB1A100390F3E /* stereo_MS_to_LR.c */, 448 | 22914BE418AFB1A100390F3E /* stereo_quant_pred.c */, 449 | 22914BE618AFB1A100390F3E /* sum_sqr_shift.c */, 450 | 22914BE718AFB1A100390F3E /* table_LSF_cos.c */, 451 | 22914BE918AFB1A100390F3E /* tables_gain.c */, 452 | 22914BEA18AFB1A100390F3E /* tables_LTP.c */, 453 | 22914BEB18AFB1A100390F3E /* tables_NLSF_CB_NB_MB.c */, 454 | 22914BEC18AFB1A100390F3E /* tables_NLSF_CB_WB.c */, 455 | 22914BED18AFB1A100390F3E /* tables_other.c */, 456 | 22914BEE18AFB1A100390F3E /* tables_pitch_lag.c */, 457 | 22914BEF18AFB1A100390F3E /* tables_pulses_per_block.c */, 458 | 22914BF218AFB1A100390F3E /* VAD.c */, 459 | 22914BF318AFB1A100390F3E /* VQ_WMat_EC.c */, 460 | ); 461 | name = silk; 462 | path = "opus-1.1/silk"; 463 | sourceTree = SOURCE_ROOT; 464 | }; 465 | 22914B7118AFB1A100390F3E /* fixed */ = { 466 | isa = PBXGroup; 467 | children = ( 468 | 22914B7218AFB1A100390F3E /* apply_sine_window_FIX.c */, 469 | 22914B7318AFB1A100390F3E /* autocorr_FIX.c */, 470 | 22914B7418AFB1A100390F3E /* burg_modified_FIX.c */, 471 | 22914B7518AFB1A100390F3E /* corrMatrix_FIX.c */, 472 | 22914B7618AFB1A100390F3E /* encode_frame_FIX.c */, 473 | 22914B7718AFB1A100390F3E /* find_LPC_FIX.c */, 474 | 22914B7818AFB1A100390F3E /* find_LTP_FIX.c */, 475 | 22914B7918AFB1A100390F3E /* find_pitch_lags_FIX.c */, 476 | 22914B7A18AFB1A100390F3E /* find_pred_coefs_FIX.c */, 477 | 22914B7B18AFB1A100390F3E /* k2a_FIX.c */, 478 | 22914B7C18AFB1A100390F3E /* k2a_Q16_FIX.c */, 479 | 22914B7D18AFB1A100390F3E /* LTP_analysis_filter_FIX.c */, 480 | 22914B7E18AFB1A100390F3E /* LTP_scale_ctrl_FIX.c */, 481 | 22914B8018AFB1A100390F3E /* noise_shape_analysis_FIX.c */, 482 | 22914B8118AFB1A100390F3E /* pitch_analysis_core_FIX.c */, 483 | 22914B8218AFB1A100390F3E /* prefilter_FIX.c */, 484 | 22914B8318AFB1A100390F3E /* process_gains_FIX.c */, 485 | 22914B8418AFB1A100390F3E /* regularize_correlations_FIX.c */, 486 | 22914B8518AFB1A100390F3E /* residual_energy16_FIX.c */, 487 | 22914B8618AFB1A100390F3E /* residual_energy_FIX.c */, 488 | 22914B8718AFB1A100390F3E /* schur64_FIX.c */, 489 | 22914B8818AFB1A100390F3E /* schur_FIX.c */, 490 | 22914B8918AFB1A100390F3E /* solve_LS_FIX.c */, 491 | 22914B8B18AFB1A100390F3E /* vector_ops_FIX.c */, 492 | 22914B8C18AFB1A100390F3E /* warped_autocorrelation_FIX.c */, 493 | ); 494 | path = fixed; 495 | sourceTree = ""; 496 | }; 497 | 22914B8D18AFB1A100390F3E /* float */ = { 498 | isa = PBXGroup; 499 | children = ( 500 | 22914B8E18AFB1A100390F3E /* apply_sine_window_FLP.c */, 501 | 22914B8F18AFB1A100390F3E /* autocorrelation_FLP.c */, 502 | 22914B9018AFB1A100390F3E /* burg_modified_FLP.c */, 503 | 22914B9118AFB1A100390F3E /* bwexpander_FLP.c */, 504 | 22914B9218AFB1A100390F3E /* corrMatrix_FLP.c */, 505 | 22914B9318AFB1A100390F3E /* encode_frame_FLP.c */, 506 | 22914B9418AFB1A100390F3E /* energy_FLP.c */, 507 | 22914B9518AFB1A100390F3E /* find_LPC_FLP.c */, 508 | 22914B9618AFB1A100390F3E /* find_LTP_FLP.c */, 509 | 22914B9718AFB1A100390F3E /* find_pitch_lags_FLP.c */, 510 | 22914B9818AFB1A100390F3E /* find_pred_coefs_FLP.c */, 511 | 22914B9918AFB1A100390F3E /* inner_product_FLP.c */, 512 | 22914B9A18AFB1A100390F3E /* k2a_FLP.c */, 513 | 22914B9B18AFB1A100390F3E /* levinsondurbin_FLP.c */, 514 | 22914B9C18AFB1A100390F3E /* LPC_analysis_filter_FLP.c */, 515 | 22914B9D18AFB1A100390F3E /* LPC_inv_pred_gain_FLP.c */, 516 | 22914B9E18AFB1A100390F3E /* LTP_analysis_filter_FLP.c */, 517 | 22914B9F18AFB1A100390F3E /* LTP_scale_ctrl_FLP.c */, 518 | 22914BA118AFB1A100390F3E /* noise_shape_analysis_FLP.c */, 519 | 22914BA218AFB1A100390F3E /* pitch_analysis_core_FLP.c */, 520 | 22914BA318AFB1A100390F3E /* prefilter_FLP.c */, 521 | 22914BA418AFB1A100390F3E /* process_gains_FLP.c */, 522 | 22914BA518AFB1A100390F3E /* regularize_correlations_FLP.c */, 523 | 22914BA618AFB1A100390F3E /* residual_energy_FLP.c */, 524 | 22914BA718AFB1A100390F3E /* scale_copy_vector_FLP.c */, 525 | 22914BA818AFB1A100390F3E /* scale_vector_FLP.c */, 526 | 22914BA918AFB1A100390F3E /* schur_FLP.c */, 527 | 22914BAB18AFB1A100390F3E /* solve_LS_FLP.c */, 528 | 22914BAC18AFB1A100390F3E /* sort_FLP.c */, 529 | 22914BAE18AFB1A100390F3E /* warped_autocorrelation_FLP.c */, 530 | 22914BAF18AFB1A100390F3E /* wrappers_FLP.c */, 531 | ); 532 | path = float; 533 | sourceTree = ""; 534 | }; 535 | 22914BF418AFB1A100390F3E /* src */ = { 536 | isa = PBXGroup; 537 | children = ( 538 | 22914CDB18AFB2B300390F3E /* analysis.c */, 539 | 22914BF718AFB1A100390F3E /* mlp.c */, 540 | 22914CDD18AFB30200390F3E /* mlp_data.c */, 541 | 22914BFA18AFB1A100390F3E /* opus.c */, 542 | 22914BFB18AFB1A100390F3E /* opus_compare.c */, 543 | 22914BFC18AFB1A100390F3E /* opus_decoder.c */, 544 | 22914BFE18AFB1A100390F3E /* opus_encoder.c */, 545 | 22914BFF18AFB1A100390F3E /* opus_multistream.c */, 546 | 22914C0018AFB1A100390F3E /* opus_multistream_decoder.c */, 547 | 22914C0118AFB1A100390F3E /* opus_multistream_encoder.c */, 548 | 22914C0318AFB1A100390F3E /* repacketizer.c */, 549 | ); 550 | name = src; 551 | path = "opus-1.1/src"; 552 | sourceTree = SOURCE_ROOT; 553 | }; 554 | 89B1776FFFEF0A50F9D914A3 /* Source */ = { 555 | isa = PBXGroup; 556 | children = ( 557 | 22914B0818AFB1A100390F3E /* celt */, 558 | 22914B4F18AFB1A100390F3E /* silk */, 559 | 22914BF418AFB1A100390F3E /* src */, 560 | ); 561 | name = Source; 562 | path = source; 563 | sourceTree = ""; 564 | }; 565 | A08F3CF85CF2F4EC7FF23B53 = { 566 | isa = PBXGroup; 567 | children = ( 568 | 89B1776FFFEF0A50F9D914A3 /* Source */, 569 | D19DA913D7A001C96BA28A53 /* Products */, 570 | EAC3C5259020C0AE39020B77 /* Build */, 571 | ); 572 | sourceTree = ""; 573 | }; 574 | D19DA913D7A001C96BA28A53 /* Products */ = { 575 | isa = PBXGroup; 576 | children = ( 577 | 60561485D25DA098AD994844 /* libopus.a */, 578 | ); 579 | name = Products; 580 | sourceTree = ""; 581 | }; 582 | EAC3C5259020C0AE39020B77 /* Build */ = { 583 | isa = PBXGroup; 584 | children = ( 585 | FD89D0884B7338F190C22AC6 /* opus.gyp */, 586 | ); 587 | name = Build; 588 | sourceTree = ""; 589 | }; 590 | /* End PBXGroup section */ 591 | 592 | /* Begin PBXNativeTarget section */ 593 | 87FEE7BA56569457CC835153 /* opus */ = { 594 | isa = PBXNativeTarget; 595 | buildConfigurationList = 89C0F8903091BB36321FD776 /* Build configuration list for PBXNativeTarget "opus" */; 596 | buildPhases = ( 597 | 03F9A0B67622A9FBF319933F /* Sources */, 598 | 73B16D1F5FCA37C7AF80C27C /* Frameworks */, 599 | ); 600 | buildRules = ( 601 | ); 602 | dependencies = ( 603 | ); 604 | name = opus; 605 | productName = opus; 606 | productReference = 60561485D25DA098AD994844 /* libopus.a */; 607 | productType = "com.apple.product-type.library.static"; 608 | }; 609 | /* End PBXNativeTarget section */ 610 | 611 | /* Begin PBXProject section */ 612 | DC914A09EEC6E2DAD78CC851 /* Project object */ = { 613 | isa = PBXProject; 614 | attributes = { 615 | BuildIndependentTargetsInParallel = YES; 616 | }; 617 | buildConfigurationList = F589C1BF8C3B09756E7FB48E /* Build configuration list for PBXProject "opus" */; 618 | compatibilityVersion = "Xcode 3.2"; 619 | developmentRegion = English; 620 | hasScannedForEncodings = 1; 621 | knownRegions = ( 622 | en, 623 | ); 624 | mainGroup = A08F3CF85CF2F4EC7FF23B53; 625 | projectDirPath = ""; 626 | projectRoot = ""; 627 | targets = ( 628 | 87FEE7BA56569457CC835153 /* opus */, 629 | ); 630 | }; 631 | /* End PBXProject section */ 632 | 633 | /* Begin PBXSourcesBuildPhase section */ 634 | 03F9A0B67622A9FBF319933F /* Sources */ = { 635 | isa = PBXSourcesBuildPhase; 636 | buildActionMask = 2147483647; 637 | files = ( 638 | 22914CD918AFB29000390F3E /* rate.c in Sources */, 639 | 22914C4418AFB1A100390F3E /* k2a_FIX.c in Sources */, 640 | 22914CD418AFB29000390F3E /* mdct.c in Sources */, 641 | 22914C9518AFB1A100390F3E /* sigm_Q15.c in Sources */, 642 | 22914C6918AFB1A100390F3E /* process_gains_FLP.c in Sources */, 643 | 22914C5718AFB1A100390F3E /* bwexpander_FLP.c in Sources */, 644 | 22914CD218AFB29000390F3E /* laplace.c in Sources */, 645 | 22914C7A18AFB1A100390F3E /* log2lin.c in Sources */, 646 | 22914C8E18AFB1A100390F3E /* resampler_down2_3.c in Sources */, 647 | 22914C3D18AFB1A100390F3E /* burg_modified_FIX.c in Sources */, 648 | 22914CCD18AFB29000390F3E /* cwrs.c in Sources */, 649 | 22914C5F18AFB1A100390F3E /* inner_product_FLP.c in Sources */, 650 | 22914C3218AFB1A100390F3E /* decode_frame.c in Sources */, 651 | 22914C7718AFB1A100390F3E /* inner_prod_aligned.c in Sources */, 652 | 22914CAC18AFB1A100390F3E /* opus_compare.c in Sources */, 653 | 22914C2E18AFB1A100390F3E /* control_SNR.c in Sources */, 654 | 22914CB118AFB1A100390F3E /* opus_multistream_decoder.c in Sources */, 655 | 22914CA518AFB1A100390F3E /* tables_pulses_per_block.c in Sources */, 656 | 22914C6618AFB1A100390F3E /* noise_shape_analysis_FLP.c in Sources */, 657 | 22914C7D18AFB1A100390F3E /* LPC_inv_pred_gain.c in Sources */, 658 | 22914C2D18AFB1A100390F3E /* control_codec.c in Sources */, 659 | 22914C8418AFB1A100390F3E /* NLSF_VQ.c in Sources */, 660 | 22914CA318AFB1A100390F3E /* tables_other.c in Sources */, 661 | 22914C9918AFB1A100390F3E /* stereo_find_predictor.c in Sources */, 662 | 22914C8518AFB1A100390F3E /* NLSF_VQ_weights_laroia.c in Sources */, 663 | 22914C3718AFB1A100390F3E /* decoder_set_fs.c in Sources */, 664 | 22914C8F18AFB1A100390F3E /* resampler_private_AR2.c in Sources */, 665 | 22914C9118AFB1A100390F3E /* resampler_private_IIR_FIR.c in Sources */, 666 | 22914CCF18AFB29000390F3E /* entdec.c in Sources */, 667 | 22914C5E18AFB1A100390F3E /* find_pred_coefs_FLP.c in Sources */, 668 | 22914C8C18AFB1A100390F3E /* resampler.c in Sources */, 669 | 22914C8618AFB1A100390F3E /* NSQ.c in Sources */, 670 | 22914C6518AFB1A100390F3E /* LTP_scale_ctrl_FLP.c in Sources */, 671 | 22914CAD18AFB1A100390F3E /* opus_decoder.c in Sources */, 672 | 22914C3118AFB1A100390F3E /* decode_core.c in Sources */, 673 | 22914C5918AFB1A100390F3E /* encode_frame_FLP.c in Sources */, 674 | 22914CA218AFB1A100390F3E /* tables_NLSF_CB_WB.c in Sources */, 675 | 22914C6D18AFB1A100390F3E /* scale_vector_FLP.c in Sources */, 676 | 22914C7618AFB1A100390F3E /* init_encoder.c in Sources */, 677 | 22914CA718AFB1A100390F3E /* VQ_WMat_EC.c in Sources */, 678 | 22914C4018AFB1A100390F3E /* find_LPC_FIX.c in Sources */, 679 | 22914C5418AFB1A100390F3E /* apply_sine_window_FLP.c in Sources */, 680 | 22914C8918AFB1A100390F3E /* PLC.c in Sources */, 681 | 22914C6C18AFB1A100390F3E /* scale_copy_vector_FLP.c in Sources */, 682 | 22914C5518AFB1A100390F3E /* autocorrelation_FLP.c in Sources */, 683 | 22914CDC18AFB2B300390F3E /* analysis.c in Sources */, 684 | 22914C2818AFB1A100390F3E /* bwexpander_32.c in Sources */, 685 | 22914CB218AFB1A100390F3E /* opus_multistream_encoder.c in Sources */, 686 | 22914CD318AFB29000390F3E /* mathops.c in Sources */, 687 | 22914C5218AFB1A100390F3E /* vector_ops_FIX.c in Sources */, 688 | 22914C6418AFB1A100390F3E /* LTP_analysis_filter_FLP.c in Sources */, 689 | 22914C8018AFB1A100390F3E /* NLSF_del_dec_quant.c in Sources */, 690 | 22914C4918AFB1A100390F3E /* pitch_analysis_core_FIX.c in Sources */, 691 | 22914C3318AFB1A100390F3E /* decode_indices.c in Sources */, 692 | 22914C5818AFB1A100390F3E /* corrMatrix_FLP.c in Sources */, 693 | 22914CDE18AFB30200390F3E /* mlp_data.c in Sources */, 694 | 22914CA918AFB1A100390F3E /* mlp.c in Sources */, 695 | 22914C9718AFB1A100390F3E /* stereo_decode_pred.c in Sources */, 696 | 22914C4318AFB1A100390F3E /* find_pred_coefs_FIX.c in Sources */, 697 | 22914C7418AFB1A100390F3E /* HP_variable_cutoff.c in Sources */, 698 | 22914C2518AFB1A100390F3E /* ana_filt_bank_1.c in Sources */, 699 | 22914C7918AFB1A100390F3E /* lin2log.c in Sources */, 700 | 22914C2F18AFB1A100390F3E /* debug.c in Sources */, 701 | 22914C9E18AFB1A100390F3E /* table_LSF_cos.c in Sources */, 702 | 22914C9418AFB1A100390F3E /* shell_coder.c in Sources */, 703 | 22914C3918AFB1A100390F3E /* encode_indices.c in Sources */, 704 | 22914C8718AFB1A100390F3E /* NSQ_del_dec.c in Sources */, 705 | 22914C7018AFB1A100390F3E /* sort_FLP.c in Sources */, 706 | 22914C9F18AFB1A100390F3E /* tables_gain.c in Sources */, 707 | 22914CD118AFB29000390F3E /* kiss_fft.c in Sources */, 708 | 22914C6318AFB1A100390F3E /* LPC_inv_pred_gain_FLP.c in Sources */, 709 | 22914C4B18AFB1A100390F3E /* process_gains_FIX.c in Sources */, 710 | 22914CCE18AFB29000390F3E /* entcode.c in Sources */, 711 | 22914CCB18AFB29000390F3E /* celt_lpc.c in Sources */, 712 | 22914C2418AFB1A100390F3E /* A2NLSF.c in Sources */, 713 | 22914C2918AFB1A100390F3E /* check_control_input.c in Sources */, 714 | 22914C3018AFB1A100390F3E /* dec_API.c in Sources */, 715 | 22914C9D18AFB1A100390F3E /* sum_sqr_shift.c in Sources */, 716 | 22914C5A18AFB1A100390F3E /* energy_FLP.c in Sources */, 717 | 22914C2718AFB1A100390F3E /* bwexpander.c in Sources */, 718 | 22914C3618AFB1A100390F3E /* decode_pulses.c in Sources */, 719 | 22914CCC18AFB29000390F3E /* celt.c in Sources */, 720 | 22914C7E18AFB1A100390F3E /* NLSF2A.c in Sources */, 721 | 22914C8818AFB1A100390F3E /* pitch_est_tables.c in Sources */, 722 | 22914C9A18AFB1A100390F3E /* stereo_LR_to_MS.c in Sources */, 723 | 22914C8218AFB1A100390F3E /* NLSF_stabilize.c in Sources */, 724 | 22914C6218AFB1A100390F3E /* LPC_analysis_filter_FLP.c in Sources */, 725 | 22914C8A18AFB1A100390F3E /* process_NLSFs.c in Sources */, 726 | 22914C9C18AFB1A100390F3E /* stereo_quant_pred.c in Sources */, 727 | 22914C4D18AFB1A100390F3E /* residual_energy16_FIX.c in Sources */, 728 | 22914CB318AFB1A100390F3E /* repacketizer.c in Sources */, 729 | 22914C9218AFB1A100390F3E /* resampler_private_up2_HQ.c in Sources */, 730 | 22914C6018AFB1A100390F3E /* k2a_FLP.c in Sources */, 731 | 22914CD718AFB29000390F3E /* pitch.c in Sources */, 732 | 22914C8318AFB1A100390F3E /* NLSF_unpack.c in Sources */, 733 | 22914C7118AFB1A100390F3E /* warped_autocorrelation_FLP.c in Sources */, 734 | 22914C5318AFB1A100390F3E /* warped_autocorrelation_FIX.c in Sources */, 735 | 22914C4F18AFB1A100390F3E /* schur64_FIX.c in Sources */, 736 | 22914C9018AFB1A100390F3E /* resampler_private_down_FIR.c in Sources */, 737 | 22914C9B18AFB1A100390F3E /* stereo_MS_to_LR.c in Sources */, 738 | 22914C7318AFB1A100390F3E /* gain_quant.c in Sources */, 739 | 22914CC918AFB29000390F3E /* celt_decoder.c in Sources */, 740 | 22914C7218AFB1A100390F3E /* wrappers_FLP.c in Sources */, 741 | 22914C2C18AFB1A100390F3E /* control_audio_bandwidth.c in Sources */, 742 | 22914CD618AFB29000390F3E /* opus_custom_demo.c in Sources */, 743 | 22914C9818AFB1A100390F3E /* stereo_encode_pred.c in Sources */, 744 | 22914C8B18AFB1A100390F3E /* quant_LTP_gains.c in Sources */, 745 | 22914C4818AFB1A100390F3E /* noise_shape_analysis_FIX.c in Sources */, 746 | 22914C6E18AFB1A100390F3E /* schur_FLP.c in Sources */, 747 | 22914C5018AFB1A100390F3E /* schur_FIX.c in Sources */, 748 | 22914C3F18AFB1A100390F3E /* encode_frame_FIX.c in Sources */, 749 | 22914C3C18AFB1A100390F3E /* autocorr_FIX.c in Sources */, 750 | 22914C8D18AFB1A100390F3E /* resampler_down2.c in Sources */, 751 | 22914C5118AFB1A100390F3E /* solve_LS_FIX.c in Sources */, 752 | 22914C3418AFB1A100390F3E /* decode_parameters.c in Sources */, 753 | 22914CAF18AFB1A100390F3E /* opus_encoder.c in Sources */, 754 | 22914C2618AFB1A100390F3E /* biquad_alt.c in Sources */, 755 | 22914CC818AFB29000390F3E /* bands.c in Sources */, 756 | 22914CD518AFB29000390F3E /* modes.c in Sources */, 757 | 22914C4218AFB1A100390F3E /* find_pitch_lags_FIX.c in Sources */, 758 | 22914C5618AFB1A100390F3E /* burg_modified_FLP.c in Sources */, 759 | 22914CAB18AFB1A100390F3E /* opus.c in Sources */, 760 | 22914C5B18AFB1A100390F3E /* find_LPC_FLP.c in Sources */, 761 | 22914C4A18AFB1A100390F3E /* prefilter_FIX.c in Sources */, 762 | 22914C7C18AFB1A100390F3E /* LPC_analysis_filter.c in Sources */, 763 | 22914C6818AFB1A100390F3E /* prefilter_FLP.c in Sources */, 764 | 22914CDA18AFB29000390F3E /* vq.c in Sources */, 765 | 22914C2A18AFB1A100390F3E /* CNG.c in Sources */, 766 | 22914C7F18AFB1A100390F3E /* NLSF_decode.c in Sources */, 767 | 22914C9618AFB1A100390F3E /* sort.c in Sources */, 768 | 22914C6118AFB1A100390F3E /* levinsondurbin_FLP.c in Sources */, 769 | 22914C9318AFB1A100390F3E /* resampler_rom.c in Sources */, 770 | 22914C7518AFB1A100390F3E /* init_decoder.c in Sources */, 771 | 22914CA118AFB1A100390F3E /* tables_NLSF_CB_NB_MB.c in Sources */, 772 | 22914C7818AFB1A100390F3E /* interpolate.c in Sources */, 773 | 22914C4118AFB1A100390F3E /* find_LTP_FIX.c in Sources */, 774 | 22914C3A18AFB1A100390F3E /* encode_pulses.c in Sources */, 775 | 22914C3818AFB1A100390F3E /* enc_API.c in Sources */, 776 | 22914CD818AFB29000390F3E /* quant_bands.c in Sources */, 777 | 22914C7B18AFB1A100390F3E /* LP_variable_cutoff.c in Sources */, 778 | 22914C6F18AFB1A100390F3E /* solve_LS_FLP.c in Sources */, 779 | 22914C3518AFB1A100390F3E /* decode_pitch.c in Sources */, 780 | 22914C6718AFB1A100390F3E /* pitch_analysis_core_FLP.c in Sources */, 781 | 22914CA018AFB1A100390F3E /* tables_LTP.c in Sources */, 782 | 22914C4518AFB1A100390F3E /* k2a_Q16_FIX.c in Sources */, 783 | 22914C8118AFB1A100390F3E /* NLSF_encode.c in Sources */, 784 | 22914CA418AFB1A100390F3E /* tables_pitch_lag.c in Sources */, 785 | 22914C5C18AFB1A100390F3E /* find_LTP_FLP.c in Sources */, 786 | 22914C6B18AFB1A100390F3E /* residual_energy_FLP.c in Sources */, 787 | 22914C4718AFB1A100390F3E /* LTP_scale_ctrl_FIX.c in Sources */, 788 | 22914C4E18AFB1A100390F3E /* residual_energy_FIX.c in Sources */, 789 | 22914CCA18AFB29000390F3E /* celt_encoder.c in Sources */, 790 | 22914C4618AFB1A100390F3E /* LTP_analysis_filter_FIX.c in Sources */, 791 | 22914C4C18AFB1A100390F3E /* regularize_correlations_FIX.c in Sources */, 792 | 22914CD018AFB29000390F3E /* entenc.c in Sources */, 793 | 22914CB018AFB1A100390F3E /* opus_multistream.c in Sources */, 794 | 22914CA618AFB1A100390F3E /* VAD.c in Sources */, 795 | 22914C3B18AFB1A100390F3E /* apply_sine_window_FIX.c in Sources */, 796 | 22914C3E18AFB1A100390F3E /* corrMatrix_FIX.c in Sources */, 797 | 22914C5D18AFB1A100390F3E /* find_pitch_lags_FLP.c in Sources */, 798 | 22914C2B18AFB1A100390F3E /* code_signs.c in Sources */, 799 | 22914C6A18AFB1A100390F3E /* regularize_correlations_FLP.c in Sources */, 800 | ); 801 | runOnlyForDeploymentPostprocessing = 0; 802 | }; 803 | /* End PBXSourcesBuildPhase section */ 804 | 805 | /* Begin XCBuildConfiguration section */ 806 | 1171042F5846ECF9763435C1 /* Default */ = { 807 | isa = XCBuildConfiguration; 808 | buildSettings = { 809 | EXECUTABLE_PREFIX = lib; 810 | GCC_PREPROCESSOR_DEFINITIONS = ( 811 | "\"OPUS_BUILD\"", 812 | "\"HAVE_LRINTF\"", 813 | "\"VAR_ARRAYS\"", 814 | ); 815 | HEADER_SEARCH_PATHS = ( 816 | source/celt, 817 | source/include, 818 | source/silk, 819 | source/silk/float, 820 | source/src, 821 | ); 822 | PRODUCT_NAME = opus; 823 | }; 824 | name = Default; 825 | }; 826 | D6332985F5DD7C4BA73E5598 /* Default */ = { 827 | isa = XCBuildConfiguration; 828 | buildSettings = { 829 | INTERMEDIATE_DIR = "$(PROJECT_DERIVED_FILE_DIR)/$(CONFIGURATION)"; 830 | SDKROOT = iphoneos; 831 | SHARED_INTERMEDIATE_DIR = "$(SYMROOT)/DerivedSources/$(CONFIGURATION)"; 832 | }; 833 | name = Default; 834 | }; 835 | /* End XCBuildConfiguration section */ 836 | 837 | /* Begin XCConfigurationList section */ 838 | 89C0F8903091BB36321FD776 /* Build configuration list for PBXNativeTarget "opus" */ = { 839 | isa = XCConfigurationList; 840 | buildConfigurations = ( 841 | 1171042F5846ECF9763435C1 /* Default */, 842 | ); 843 | defaultConfigurationIsVisible = 1; 844 | defaultConfigurationName = Default; 845 | }; 846 | F589C1BF8C3B09756E7FB48E /* Build configuration list for PBXProject "opus" */ = { 847 | isa = XCConfigurationList; 848 | buildConfigurations = ( 849 | D6332985F5DD7C4BA73E5598 /* Default */, 850 | ); 851 | defaultConfigurationIsVisible = 1; 852 | defaultConfigurationName = Default; 853 | }; 854 | /* End XCConfigurationList section */ 855 | }; 856 | rootObject = DC914A09EEC6E2DAD78CC851 /* Project object */; 857 | } 858 | --------------------------------------------------------------------------------