Merge branch 'master' into kif

Conflicts:
	Classes/Base.lproj/WizardViews.xib
This commit is contained in:
Guillaume BIENKOWSKI 2015-01-21 21:10:14 +01:00
commit 9c53b4edb8
15 changed files with 92 additions and 40 deletions

View file

@ -114,8 +114,8 @@
<action selector="onConnectLinphoneAccountClick:" destination="-1" eventType="touchUpInside" id="JTf-u3-Kbe"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="Kbn-dL-C5h" userLabel="remoteProvisioningButton" customClass="UILinphoneButton">
<rect key="frame" x="34" y="471" width="255" height="72"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="39" userLabel="externalAccountButton" customClass="UILinphoneButton">
<rect key="frame" x="33" y="269" width="255" height="50"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Sign in SIP account">
<bool key="isElement" value="YES"/>

View file

@ -292,7 +292,10 @@ static UICompositeViewDescription *compositeDescription = nil;
// Display name
if(displayName == nil) {
displayName = [NSString stringWithUTF8String:linphone_address_get_username(linphoneAddress)];
const char* username = linphone_address_get_username(linphoneAddress);
char* address = linphone_address_as_string(linphoneAddress);
displayName = [NSString stringWithUTF8String:username?:address];
ms_free(address);
}
[addressLabel setText:displayName];

View file

@ -144,15 +144,23 @@ static UICompositeViewDescription *compositeDescription = nil;
[callButton setEnabled:TRUE];
// Update on show
LinphoneManager *mgr=[LinphoneManager instance];
LinphoneCore* lc = [LinphoneManager getLc];
LinphoneCall* call = linphone_core_get_current_call(lc);
LinphoneManager *mgr = [LinphoneManager instance];
LinphoneCore* lc = [LinphoneManager getLc];
LinphoneCall* call = linphone_core_get_current_call(lc);
LinphoneCallState state = (call != NULL)?linphone_call_get_state(call): 0;
[self callUpdate:call state:state];
if([LinphoneManager runningOnIpad]) {
if(linphone_core_video_enabled(lc) && [mgr lpConfigBoolForKey:@"preview_preference"]) {
BOOL videoEnabled = linphone_core_video_enabled(lc);
BOOL previewPref = [mgr lpConfigBoolForKey:@"preview_preference"];
if( videoEnabled && previewPref ) {
linphone_core_set_native_preview_window_id(lc, (unsigned long)videoPreview);
if( !linphone_core_video_preview_enabled(lc)){
linphone_core_enable_video_preview(lc, TRUE);
}
[backgroundView setHidden:FALSE];
[videoCameraSwitch setHidden:FALSE];
} else {

View file

@ -67,6 +67,7 @@ static UICompositeViewDescription *compositeDescription = nil;
fullscreen:false
landscapeMode:[LinphoneManager runningOnIpad]
portraitMode:true];
compositeDescription.darkBackground = false;
}
return compositeDescription;
}
@ -93,7 +94,7 @@ static UICompositeViewDescription *compositeDescription = nil;
[popoverController presentPopoverFromRect:CGRectZero inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:FALSE];
}
[[UIApplication sharedApplication] setStatusBarHidden:NO]; //Fix UIImagePickerController status bar hide
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque]; //Fix UIImagePickerController status bar style change
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; //Fix UIImagePickerController status bar style change
}

View file

@ -99,7 +99,10 @@
// Display name
if(displayName == nil) {
displayName = [NSString stringWithUTF8String:linphone_address_get_username(linphoneAddress)];
const char* username = linphone_address_get_username(linphoneAddress);
char* address = linphone_address_as_string(linphoneAddress);
displayName = [NSString stringWithUTF8String:username?:address];
ms_free(address);
}
[addressLabel setText:displayName];

View file

@ -39,6 +39,8 @@
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) IBOutlet id<ContactDetailsDelegate> contactDetailsDelegate;
@property (retain, nonatomic) ImagePickerViewController* popoverController;
@property(nonatomic,getter=isEditing) BOOL editing;
- (IBAction)onAvatarClick:(id)event;

View file

@ -36,6 +36,7 @@
@synthesize editView;
@synthesize tableView;
@synthesize contactDetailsDelegate;
@synthesize popoverController;
#pragma mark - Lifecycle Functions
@ -243,11 +244,13 @@
- (IBAction)onAvatarClick:(id)event {
if(self.isEditing) {
void (^block)(UIImagePickerControllerSourceType) = ^(UIImagePickerControllerSourceType type) {
void (^showAppropriateController)(UIImagePickerControllerSourceType) = ^(UIImagePickerControllerSourceType type) {
UICompositeViewDescription *description = [ImagePickerViewController compositeViewDescription];
ImagePickerViewController *controller;
if([LinphoneManager runningOnIpad]) {
controller = DYNAMIC_CAST([[PhoneMainView instance].mainViewController getCachedController:description.content], ImagePickerViewController);
// keep a reference to this controller so that in case of memory pressure we keep it
self.popoverController = controller;
} else {
controller = DYNAMIC_CAST([[PhoneMainView instance] changeCurrentView:description push:TRUE], ImagePickerViewController);
}
@ -271,12 +274,12 @@
DTActionSheet *sheet = [[[DTActionSheet alloc] initWithTitle:NSLocalizedString(@"Select picture source",nil)] autorelease];
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
[sheet addButtonWithTitle:NSLocalizedString(@"Camera",nil) block:^(){
block(UIImagePickerControllerSourceTypeCamera);
showAppropriateController(UIImagePickerControllerSourceTypeCamera);
}];
}
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
[sheet addButtonWithTitle:NSLocalizedString(@"Photo library",nil) block:^(){
block(UIImagePickerControllerSourceTypePhotoLibrary);
showAppropriateController(UIImagePickerControllerSourceTypePhotoLibrary);
}];
}
if([FastAddressBook getContactImage:contact thumbnail:true] != nil) {
@ -288,8 +291,10 @@
[self update];
}];
}
[sheet addCancelButtonWithTitle:NSLocalizedString(@"Cancel",nil) block:nil];
[sheet addCancelButtonWithTitle:NSLocalizedString(@"Cancel",nil) block:^{
self.popoverController = nil;
}];
[sheet showInView:[PhoneMainView instance].view];
}
}
@ -304,19 +309,25 @@
ImagePickerViewController *controller = DYNAMIC_CAST([[PhoneMainView instance].mainViewController getCachedController:description.content], ImagePickerViewController);
if(controller != nil) {
[controller.popoverController dismissPopoverAnimated:TRUE];
self.popoverController = nil;
}
}
FastAddressBook* fab = [LinphoneManager instance].fastAddressBook;
NSError* error = NULL;
if(!ABPersonRemoveImageData(contact, (CFErrorRef*)error)) {
[LinphoneLogger log:LinphoneLoggerLog format:@"Can't remove entry: %@", [error localizedDescription]];
}
NSData *dataRef = UIImageJPEGRepresentation(image, 0.9f);
CFDataRef cfdata = CFDataCreate(NULL,[dataRef bytes], [dataRef length]);
if(!ABPersonSetImageData(contact, cfdata, (CFErrorRef*)error)) {
[LinphoneLogger log:LinphoneLoggerLog format:@"Can't add entry: %@", [error localizedDescription]];
}
[fab saveAddressBook];
if(!ABPersonSetImageData(contact, cfdata, (CFErrorRef*)error)) {
[LinphoneLogger log:LinphoneLoggerLog format:@"Can't add entry: %@", [error localizedDescription]];
} else {
[fab saveAddressBook];
}
CFRelease(cfdata);
[self update];

View file

@ -31,6 +31,7 @@
+ (UIImage*)getContactImage:(ABRecordRef)contact thumbnail:(BOOL)thumbnail;
- (ABRecordRef)getContact:(NSString*)address;
- (void)reload;
- (void)saveAddressBook;
+ (BOOL)isAuthorized;
+ (NSString*)appendCountryCodeIfPossible:(NSString*)number;
+ (NSString*)normalizePhoneNumber:(NSString*)number;

View file

@ -161,6 +161,15 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
return self;
}
- (void)saveAddressBook {
if( addressBook != nil ){
NSError* err = nil;
if( !ABAddressBookSave(addressBook, (CFErrorRef*)err) ){
Linphone_warn(@"Couldn't save Address Book");
}
}
}
- (void)reload {
if(addressBook != nil) {
ABAddressBookUnregisterExternalChangeCallback(addressBook, sync_address_book, self);

View file

@ -12,11 +12,11 @@ You will NOT be able to build the SDK if you did not read liblinphone README fir
* Using HomeBrew:
brew install imagemagick
brew install imagemagick yasm nasm
* Using MacPorts:
sudo port install ImageMagick optipng
sudo port install ImageMagick optipng yasm nasm
### System linking
@ -112,6 +112,11 @@ Now, simply press `Command + U` and the default simulator will launch and try to
* Video capture does not work in simulator (not implemented by simulator?).
* Link errors with x86_64: this happens when you try to run linphone on the iPhone 5S/6/6+ simulators.
This is due to the fact that we're not building the SDK for the x86_64 architecture, due to it being redundant with i386 (and increasing dramatically the compile time and build size).
The solution (temporary) is to force the acceptable architectures to be 'armv7' only (remove 'arm64') and disable the "build active architecture" flag in the linphone, XMLRPC and NinePatch projects.
Don't forget to re-enable them when archiving your project.
## DEBUGING THE SDK
Sometime it can be useful to step into liblinphone SDK functions. To allow Xcode to enable breakpoint within liblinphone, SDK must be built with debug symbols.

View file

@ -30,6 +30,7 @@ capture_dev_id=AU: Audio Unit Receiver
eq_active=0
[app]
preview_preference=1
animations_preference=1
edge_opt_preference=0
use_system_contacts=0

View file

@ -53,7 +53,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>2.2.4.1</string>
<string>2.2.4.2</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIApplicationExitsOnSuspend</key>

@ -1 +1 @@
Subproject commit 18040383bd13a5c683934df6744d99aee4a1231b
Subproject commit e46939b25c990d825d94c2d526c350a1380db67f

View file

@ -183,7 +183,6 @@
225D65871521C009008B2E81 /* telephonyevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 222CA6D711F6CF9F00621220 /* telephonyevents.c */; };
225D65881521C009008B2E81 /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 222CA6F211F6CF9F00621220 /* utils.c */; };
225D65B81521C009008B2E81 /* netsim.c in Sources */ = {isa = PBXBuildFile; fileRef = F4D9F23D145710540035B0D0 /* netsim.c */; };
225D65B91521C009008B2E81 /* ortp_srtp.c in Sources */ = {isa = PBXBuildFile; fileRef = F4D9F23E145710540035B0D0 /* ortp_srtp.c */; };
225D65BF1521C009008B2E81 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; };
225D65CC1521C195008B2E81 /* libmediastreamer_base.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 225D64F81521BFA6008B2E81 /* libmediastreamer_base.a */; };
225D65CD1521C19A008B2E81 /* libortp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 225D65C51521C009008B2E81 /* libortp.a */; };
@ -346,6 +345,8 @@
F02538F7197948C9002C30F3 /* rtcp_xr.c in Sources */ = {isa = PBXBuildFile; fileRef = F02538F3197948BE002C30F3 /* rtcp_xr.c */; };
F02538F919794908002C30F3 /* flowcontrol.c in Sources */ = {isa = PBXBuildFile; fileRef = F02538F819794908002C30F3 /* flowcontrol.c */; };
F02538FB1979491B002C30F3 /* videostarter.c in Sources */ = {isa = PBXBuildFile; fileRef = F02538FA1979491B002C30F3 /* videostarter.c */; };
F0340ADD1A6D13BD002E4BF1 /* ms_srtp.c in Sources */ = {isa = PBXBuildFile; fileRef = F0340ADC1A6D13BD002E4BF1 /* ms_srtp.c */; };
F0340ADF1A6D13FF002E4BF1 /* zrtp.c in Sources */ = {isa = PBXBuildFile; fileRef = F0340ADE1A6D13FF002E4BF1 /* zrtp.c */; };
F0497F021A1652F100B67112 /* mediastreamer2_neon_tester.c in Sources */ = {isa = PBXBuildFile; fileRef = F0ED9B981A164D7200A788CE /* mediastreamer2_neon_tester.c */; };
F0497F0C1A1B483E00B67112 /* zrtp.c in Sources */ = {isa = PBXBuildFile; fileRef = F0497F0B1A1B483E00B67112 /* zrtp.c */; };
F0497F0E1A1B4C1700B67112 /* mediastreamer2_tester_ios.m in Sources */ = {isa = PBXBuildFile; fileRef = F0497F0D1A1B4C1700B67112 /* mediastreamer2_tester_ios.m */; };
@ -366,9 +367,7 @@
F0ED99471A1645C200A788CE /* hello8000-1s.wav in Resources */ = {isa = PBXBuildFile; fileRef = F0ED992B1A1645C200A788CE /* hello8000-1s.wav */; };
F0ED99481A1645C200A788CE /* hello8000.wav in Resources */ = {isa = PBXBuildFile; fileRef = F0ED992C1A1645C200A788CE /* hello8000.wav */; };
F0ED99491A1645C200A788CE /* hello_opus.mka in Resources */ = {isa = PBXBuildFile; fileRef = F0ED992D1A1645C200A788CE /* hello_opus.mka */; };
F0ED994A1A1645C200A788CE /* hello_opus_h264.mkv in Resources */ = {isa = PBXBuildFile; fileRef = F0ED992E1A1645C200A788CE /* hello_opus_h264.mkv */; };
F0ED994B1A1645C200A788CE /* hello_pcmu.mka in Resources */ = {isa = PBXBuildFile; fileRef = F0ED992F1A1645C200A788CE /* hello_pcmu.mka */; };
F0ED994C1A1645C200A788CE /* hello_pcmu_h264.mkv in Resources */ = {isa = PBXBuildFile; fileRef = F0ED99301A1645C200A788CE /* hello_pcmu_h264.mkv */; };
F0ED994D1A1645C200A788CE /* laserrocket_16000_mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = F0ED99311A1645C200A788CE /* laserrocket_16000_mono.wav */; };
F0ED994E1A1645C200A788CE /* nylon_48000_mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = F0ED99321A1645C200A788CE /* nylon_48000_mono.wav */; };
F0ED994F1A1645C200A788CE /* owl_44100_mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = F0ED99331A1645C200A788CE /* owl_44100_mono.wav */; };
@ -765,6 +764,8 @@
F02538F3197948BE002C30F3 /* rtcp_xr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rtcp_xr.c; sourceTree = "<group>"; };
F02538F819794908002C30F3 /* flowcontrol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = flowcontrol.c; sourceTree = "<group>"; };
F02538FA1979491B002C30F3 /* videostarter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = videostarter.c; sourceTree = "<group>"; };
F0340ADC1A6D13BD002E4BF1 /* ms_srtp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ms_srtp.c; sourceTree = "<group>"; };
F0340ADE1A6D13FF002E4BF1 /* zrtp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zrtp.c; sourceTree = "<group>"; };
F0497F0B1A1B483E00B67112 /* zrtp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zrtp.c; sourceTree = "<group>"; };
F0497F0D1A1B4C1700B67112 /* mediastreamer2_tester_ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = mediastreamer2_tester_ios.m; sourceTree = "<group>"; };
F0497F151A1C9F8700B67112 /* mediastream-tester-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "mediastream-tester-Info.plist"; sourceTree = "<group>"; };
@ -804,7 +805,6 @@
F0ED9B961A164A4800A788CE /* msmediaplayer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = msmediaplayer.c; sourceTree = "<group>"; };
F0ED9B981A164D7200A788CE /* mediastreamer2_neon_tester.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mediastreamer2_neon_tester.c; sourceTree = "<group>"; };
F4D9F23D145710540035B0D0 /* netsim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netsim.c; sourceTree = "<group>"; };
F4D9F23E145710540035B0D0 /* ortp_srtp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ortp_srtp.c; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -1040,20 +1040,21 @@
222CA5DC11F6CF7600621220 /* src */ = {
isa = PBXGroup;
children = (
F0ED99161A1645C200A788CE /* tester */,
222CA5DD11F6CF7600621220 /* .gitignore */,
222CA5F911F6CF7600621220 /* Makefile.am */,
2252935A12F6CA4700DD9BFB /* ec-calibrator.c */,
2203127413A249F70049A2ED /* filter-template.c */,
221DCB6A153584410025E54D /* yuv2rgb.fs */,
222CA5FA11F6CF7600621220 /* Makefile.in */,
221DCB6B153584410025E54D /* yuv2rgb.vs */,
223CA7EF16D9268D00EF1BEC /* audiofilters */,
223CA81116D9268D00EF1BEC /* base */,
F0340ADB1A6D13BD002E4BF1 /* crypto */,
223CA81A16D9268D00EF1BEC /* otherfilters */,
F0ED99161A1645C200A788CE /* tester */,
223CA82016D9268D00EF1BEC /* utils */,
223CA83316D9268D00EF1BEC /* videofilters */,
223CA84E16D9268D00EF1BEC /* voip */,
222CA5DD11F6CF7600621220 /* .gitignore */,
2252935A12F6CA4700DD9BFB /* ec-calibrator.c */,
2203127413A249F70049A2ED /* filter-template.c */,
222CA5F911F6CF7600621220 /* Makefile.am */,
222CA5FA11F6CF7600621220 /* Makefile.in */,
221DCB6A153584410025E54D /* yuv2rgb.fs */,
221DCB6B153584410025E54D /* yuv2rgb.vs */,
);
path = src;
sourceTree = "<group>";
@ -1110,7 +1111,6 @@
222CA6C011F6CF9F00621220 /* master */,
F4D9F23D145710540035B0D0 /* netsim.c */,
222CA6C211F6CF9F00621220 /* ortp.c */,
F4D9F23E145710540035B0D0 /* ortp_srtp.c */,
222CA6C311F6CF9F00621220 /* payloadtype.c */,
222CA6C411F6CF9F00621220 /* port.c */,
222CA6C511F6CF9F00621220 /* posixtimer.c */,
@ -1278,6 +1278,7 @@
223CA86616D9268D00EF1BEC /* videostream.c */,
F02538E71979481D002C30F3 /* vp8rtpfmt.c */,
F02538E81979481D002C30F3 /* vp8rtpfmt.h */,
F0340ADE1A6D13FF002E4BF1 /* zrtp.c */,
F0497F0B1A1B483E00B67112 /* zrtp.c */,
);
path = voip;
@ -1312,6 +1313,14 @@
name = "Supporting Files";
sourceTree = "<group>";
};
F0340ADB1A6D13BD002E4BF1 /* crypto */ = {
isa = PBXGroup;
children = (
F0340ADC1A6D13BD002E4BF1 /* ms_srtp.c */,
);
path = crypto;
sourceTree = "<group>";
};
F0ED99161A1645C200A788CE /* tester */ = {
isa = PBXGroup;
children = (
@ -1783,12 +1792,10 @@
F0ED99441A1645C200A788CE /* chimes_48000_stereo.wav in Resources */,
F0ED99361A1645C200A788CE /* Makefile.am in Resources */,
F0ED99431A1645C200A788CE /* bird_44100_stereo.wav in Resources */,
F0ED994C1A1645C200A788CE /* hello_pcmu_h264.mkv in Resources */,
F0ED99471A1645C200A788CE /* hello8000-1s.wav in Resources */,
2206D2E1177ACF5700C40726 /* nowebcamCIF.jpg in Resources */,
F0ED99501A1645C200A788CE /* piano_8000_stereo.wav in Resources */,
F0ED99461A1645C200A788CE /* hello16000.wav in Resources */,
F0ED994A1A1645C200A788CE /* hello_opus_h264.mkv in Resources */,
F0ED994B1A1645C200A788CE /* hello_pcmu.mka in Resources */,
F0ED99491A1645C200A788CE /* hello_opus.mka in Resources */,
F0ED99421A1645C200A788CE /* arpeggio_8000_mono.wav in Resources */,
@ -1886,7 +1893,6 @@
225D65871521C009008B2E81 /* telephonyevents.c in Sources */,
225D65881521C009008B2E81 /* utils.c in Sources */,
225D65B81521C009008B2E81 /* netsim.c in Sources */,
225D65B91521C009008B2E81 /* ortp_srtp.c in Sources */,
22405EE51600671D00B92522 /* logging.c in Sources */,
22405EE61600671D00B92522 /* rtpprofile.c in Sources */,
);
@ -1912,6 +1918,7 @@
22C8D0A61769F8FF00DAFB4E /* msfileplayer.c in Sources */,
22C8D0A71769F8FF00DAFB4E /* msfilerec.c in Sources */,
22C8D0A81769F8FF00DAFB4E /* msg722.c in Sources */,
F0340ADD1A6D13BD002E4BF1 /* ms_srtp.c in Sources */,
22C8D0A91769F8FF00DAFB4E /* msiounit.m in Sources */,
22C8D0AA1769F8FF00DAFB4E /* msresample.c in Sources */,
22C8D0AB1769F8FF00DAFB4E /* msspeex.c in Sources */,
@ -1950,6 +1957,7 @@
22C8D0D11769F8FF00DAFB4E /* bitratecontrol.c in Sources */,
22C8D0D21769F8FF00DAFB4E /* bitratedriver.c in Sources */,
22C8D0D31769F8FF00DAFB4E /* ice.c in Sources */,
F0340ADF1A6D13FF002E4BF1 /* zrtp.c in Sources */,
22C8D0D41769F8FF00DAFB4E /* layouts.c in Sources */,
22C8D0D51769F8FF00DAFB4E /* mediastream.c in Sources */,
22C8D0D61769F8FF00DAFB4E /* msvideo.c in Sources */,

@ -1 +1 @@
Subproject commit d282ec6ad9c05e1e18c2cb9a917cb6b4f417e56d
Subproject commit b4dc7b3868a6fe6f5aa9ece5c08d28393ba0e8dd