Skip to content
This repository was archived by the owner on Aug 4, 2019. It is now read-only.

Update to latest toxAV from mannol #143

Merged
merged 9 commits into from
Oct 18, 2015
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Classes/Private/Manager/Database/OCTRealmManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ - (void)removeChatWithAllMessages:(OCTChat *)chat

- (void)convertAllCallsToMessages
{
RLMResults *calls = [OCTCall objectsInRealm:self.realm where:nil];
RLMResults *calls = [OCTCall allObjectsInRealm:self.realm];

DDLogInfo(@"OCTRealmManager: removing %lu calls", (unsigned long)calls.count);

Expand Down
39 changes: 5 additions & 34 deletions Classes/Private/Manager/Submanagers/OCTSubmanagerCalls.m
Original file line number Diff line number Diff line change
Expand Up @@ -470,40 +470,6 @@ - (void)toxAV:(OCTToxAV *)toxAV callStateChanged:(OCTToxAVCallState)state friend
[self updateCall:call withState:state pausedStatus:pauseStatus];
}

- (void)toxAV:(OCTToxAV *)toxAV audioBitRateChanged:(OCTToxAVAudioBitRate)bitrate stable:(BOOL)stable friendNumber:(OCTToxFriendNumber)friendNumber
{
if (stable) {
return;
}

OCTToxAVAudioBitRate newBitrate;

switch (bitrate) {
case OCTToxAVAudioBitRate48:
newBitrate = OCTToxAVAudioBitRate32;
break;
case OCTToxAVAudioBitRate32:
newBitrate = OCTToxAVAudioBitRate24;
break;
case OCTToxAVAudioBitRate24:
newBitrate = OCTToxAVAudioBitRate16;
break;
case OCTToxAVAudioBitRate16:
newBitrate = OCTToxAVAudioBitRate8;
break;
case OCTToxAVAudioBitRate8:
return;
case OCTToxAVAudioBitRateDisabled:
NSAssert(NO, @"We shouldn't be here!");
break;
}

[self.toxAV setAudioBitRate:newBitrate force:NO forFriend:friendNumber error:nil];
}

- (void)toxAV:(OCTToxAV *)toxAV videoBitRateChanged:(OCTToxAVVideoBitRate)bitrate friendNumber:(OCTToxFriendNumber)friendNumber stable:(BOOL)stable
{}

- (void) toxAV:(OCTToxAV *)toxAV
receiveAudio:(OCTToxAVPCMData *)pcm
sampleCount:(OCTToxAVSampleCount)sampleCount
Expand All @@ -514,6 +480,11 @@ - (void) toxAV:(OCTToxAV *)toxAV
[self.audioEngine provideAudioFrames:pcm sampleCount:sampleCount channels:channels sampleRate:sampleRate fromFriend:friendNumber];
}

- (void) toxAV:(OCTToxAV *)toxAV bitrateStatusForFriendNumber:(OCTToxFriendNumber)friendNumber
audioBitRate:(OCTToxAVAudioBitRate)audioBitrate
videoBitRate:(OCTToxAVVideoBitRate)videoBitrate
{}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why objcTox isn't handling this callback?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea you are right, this should be done at objcTox level. I'll move this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm... I think that it should be done not in OCTToxAV, but on more higher level. OCTSubmanagerCalls would be perfect place for that. So everything was fine, no need to remove the callback. I was just writing about those empty parentheses.

Can you please get it back (and add a comment to the #88 here)? :-)
Sorry for confusing.


- (void) toxAV:(OCTToxAV *)toxAV
receiveVideoFrameWithWidth:(OCTToxAVVideoWidth)width height:(OCTToxAVVideoHeight)height
yPlane:(OCTToxAVPlaneData *)yPlane uPlane:(OCTToxAVPlaneData *)uPlane
Expand Down
9 changes: 4 additions & 5 deletions Classes/Private/Wrapper/OCTToxAV+Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ extern bool (*_toxav_call)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_
extern bool (*_toxav_answer)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_bit_rate, uint32_t video_bit_rate, TOXAV_ERR_ANSWER *error);
extern bool (*_toxav_call_control)(ToxAV *toxAV, uint32_t friend_number, TOXAV_CALL_CONTROL control, TOXAV_ERR_CALL_CONTROL *error);

extern bool (*_toxav_audio_bit_rate_set)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_bit_rate, bool force, TOXAV_ERR_SET_BIT_RATE *error);
extern bool (*_toxav_video_bit_rate_set)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_bit_rate, bool force, TOXAV_ERR_SET_BIT_RATE *error);
extern bool (*_toxav_bit_rate_set)(ToxAV *toxAV, uint32_t friend_number, int32_t audio_bit_rate,
int32_t video_bit_rate, TOXAV_ERR_BIT_RATE_SET *error);

extern bool (*_toxav_audio_send_frame)(ToxAV *toxAV, uint32_t friend_number, const int16_t *pcm, size_t sample_count, uint8_t channels, uint32_t sampling_rate, TOXAV_ERR_SEND_FRAME *error);
extern bool (*_toxav_video_send_frame)(ToxAV *toxAV, uint32_t friend_number, uint16_t width, uint16_t height, const uint8_t *y, const uint8_t *u, const uint8_t *v, TOXAV_ERR_SEND_FRAME *error);
Expand All @@ -38,8 +38,7 @@ extern bool (*_toxav_video_send_frame)(ToxAV *toxAV, uint32_t friend_number, uin
*/
toxav_call_cb callIncomingCallback;
toxav_call_state_cb callStateCallback;
toxav_audio_bit_rate_status_cb audioBitRateStatusCallback;
toxav_video_bit_rate_status_cb videoBitRateStatusCallback;
toxav_bit_rate_status_cb bitRateStatusCallback;
toxav_audio_receive_frame_cb receiveAudioFrameCallback;
toxav_video_receive_frame_cb receiveVideoFrameCallback;

Expand All @@ -51,7 +50,7 @@ toxav_video_receive_frame_cb receiveVideoFrameCallback;
- (BOOL)fillError:(NSError **)error withCErrorCall:(TOXAV_ERR_CALL)cError;
- (BOOL)fillError:(NSError **)error withCErrorAnswer:(TOXAV_ERR_ANSWER)cError;
- (BOOL)fillError:(NSError **)error withCErrorControl:(TOXAV_ERR_CALL_CONTROL)cError;
- (BOOL)fillError:(NSError **)error withCErrorSetBitRate:(TOXAV_ERR_SET_BIT_RATE)cError;
- (BOOL)fillError:(NSError **)error withCErrorSetBitRate:(TOXAV_ERR_BIT_RATE_SET)cError;
- (BOOL)fillError:(NSError **)error withCErrorSendFrame:(TOXAV_ERR_SEND_FRAME)cError;
- (NSError *)createErrorWithCode:(NSUInteger)code
description:(NSString *)description
Expand Down
87 changes: 45 additions & 42 deletions Classes/Private/Wrapper/OCTToxAV.m
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
bool (*_toxav_answer)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_bit_rate, uint32_t video_bit_rate, TOXAV_ERR_ANSWER *error);
bool (*_toxav_call_control)(ToxAV *toxAV, uint32_t friend_number, TOXAV_CALL_CONTROL control, TOXAV_ERR_CALL_CONTROL *error);

bool (*_toxav_audio_bit_rate_set)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_bit_rate, bool force, TOXAV_ERR_SET_BIT_RATE *error);
bool (*_toxav_video_bit_rate_set)(ToxAV *toxAV, uint32_t friend_number, uint32_t audio_bit_rate, bool force, TOXAV_ERR_SET_BIT_RATE *error);
bool (*_toxav_bit_rate_set)(ToxAV *toxAV, uint32_t friend_number, int32_t audio_bit_rate,
int32_t video_bit_rate, TOXAV_ERR_BIT_RATE_SET *error);

bool (*_toxav_audio_send_frame)(ToxAV *toxAV, uint32_t friend_number, const int16_t *pcm, size_t sample_count, uint8_t channels, uint32_t sampling_rate, TOXAV_ERR_SEND_FRAME *error);
bool (*_toxav_video_send_frame)(ToxAV *toxAV, uint32_t friend_number, uint16_t width, uint16_t height, const uint8_t *y, const uint8_t *u, const uint8_t *v, TOXAV_ERR_SEND_FRAME *error);
Expand Down Expand Up @@ -216,9 +216,9 @@ - (BOOL)sendCallControl:(OCTToxAVCallControl)control toFriendNumber:(OCTToxFrien

- (BOOL)setAudioBitRate:(OCTToxAVAudioBitRate)bitRate force:(BOOL)force forFriend:(OCTToxFriendNumber)friendNumber error:(NSError **)error
{
TOXAV_ERR_SET_BIT_RATE cError;
TOXAV_ERR_BIT_RATE_SET cError;

BOOL status = _toxav_audio_bit_rate_set(self.toxAV, friendNumber, bitRate, force, &cError);
BOOL status = _toxav_bit_rate_set(self.toxAV, friendNumber, bitRate, kOCTToxAVBitRateUnchanged, &cError);

[self fillError:error withCErrorSetBitRate:cError];

Expand All @@ -229,9 +229,9 @@ - (BOOL)setAudioBitRate:(OCTToxAVAudioBitRate)bitRate force:(BOOL)force forFrien

- (BOOL)setVideoBitRate:(OCTToxAVVideoBitRate)bitRate force:(BOOL)force forFriend:(OCTToxFriendNumber)friendNumber error:(NSError **)error
{
TOXAV_ERR_SET_BIT_RATE cError;
TOXAV_ERR_BIT_RATE_SET cError;

BOOL status = _toxav_video_bit_rate_set(self.toxAV, friendNumber, bitRate, force, &cError);
BOOL status = _toxav_bit_rate_set(self.toxAV, friendNumber, kOCTToxAVBitRateUnchanged, bitRate, &cError);

[self fillError:error withCErrorSetBitRate:cError];

Expand Down Expand Up @@ -287,8 +287,7 @@ - (void)setupCFunctions
_toxav_answer = toxav_answer;
_toxav_call_control = toxav_call_control;

_toxav_audio_bit_rate_set = toxav_audio_bit_rate_set;
_toxav_video_bit_rate_set = toxav_video_bit_rate_set;
_toxav_bit_rate_set = toxav_bit_rate_set;

_toxav_audio_send_frame = toxav_audio_send_frame;
_toxav_video_send_frame = toxav_video_send_frame;
Expand All @@ -298,8 +297,7 @@ - (void)setupCallbacks
{
toxav_callback_call(_toxAV, callIncomingCallback, (__bridge void *)(self));
toxav_callback_call_state(_toxAV, callStateCallback, (__bridge void *)(self));
toxav_callback_audio_bit_rate_status(_toxAV, audioBitRateStatusCallback, (__bridge void *)(self));
toxav_callback_video_bit_rate_status(_toxAV, videoBitRateStatusCallback, (__bridge void *)(self));
toxav_callback_bit_rate_status(_toxAV, bitRateStatusCallback, (__bridge void *)(self));
toxav_callback_audio_receive_frame(_toxAV, receiveAudioFrameCallback, (__bridge void *)(self));
toxav_callback_video_receive_frame(_toxAV, receiveVideoFrameCallback, (__bridge void *)(self));
}
Expand Down Expand Up @@ -354,6 +352,10 @@ - (BOOL)fillError:(NSError **)error withCErrorCall:(TOXAV_ERR_CALL)cError
code = OCTToxAVErrorCallMalloc;
failureReason = @"A resource allocation error occured while trying to create the structures required for the call.";
break;
case TOXAV_ERR_CALL_SYNC:
code = OCTToxAVErrorCallSync;
failureReason = @"Synchronization error occurred.";
break;
case TOXAV_ERR_CALL_FRIEND_NOT_FOUND:
code = OCTToxAVErrorCallFriendNotFound;
failureReason = @"The friend number did not designate a valid friend.";
Expand Down Expand Up @@ -391,6 +393,9 @@ - (BOOL)fillError:(NSError **)error withCErrorAnswer:(TOXAV_ERR_ANSWER)cError
case TOXAV_ERR_ANSWER_OK:
NSAssert(NO, @"We shouldn't be here!");
break;
case TOXAV_ERR_ANSWER_SYNC:
code = OCTToxAVErrorAnswerSync;
break;
case TOXAV_ERR_ANSWER_CODEC_INITIALIZATION:
code = OCTToxAVErrorAnswerCodecInitialization;
break;
Expand Down Expand Up @@ -424,6 +429,10 @@ - (BOOL)fillError:(NSError **)error withCErrorControl:(TOXAV_ERR_CALL_CONTROL)cE
case TOXAV_ERR_CALL_CONTROL_OK:
NSAssert(NO, @"We shouldn't be here!");
break;
case TOXAV_ERR_CALL_CONTROL_SYNC:
code = OCTToxAVErrorControlSync;
failureReason = @"Synchronization error occurred.";
break;
case TOXAV_ERR_CALL_CONTROL_FRIEND_NOT_FOUND:
code = OCTToxAVErrorControlFriendNotFound;
failureReason = @"The friend number passed did not designate a valid friend.";
Expand All @@ -443,9 +452,9 @@ - (BOOL)fillError:(NSError **)error withCErrorControl:(TOXAV_ERR_CALL_CONTROL)cE
return YES;
}

- (BOOL)fillError:(NSError **)error withCErrorSetBitRate:(TOXAV_ERR_SET_BIT_RATE)cError
- (BOOL)fillError:(NSError **)error withCErrorSetBitRate:(TOXAV_ERR_BIT_RATE_SET)cError
{
if (! error || (cError == TOXAV_ERR_SET_BIT_RATE_OK)) {
if (! error || (cError == TOXAV_ERR_BIT_RATE_SET_OK)) {
return NO;
}

Expand All @@ -454,18 +463,26 @@ - (BOOL)fillError:(NSError **)error withCErrorSetBitRate:(TOXAV_ERR_SET_BIT_RATE
NSString *failureReason = nil;

switch (cError) {
case TOXAV_ERR_SET_BIT_RATE_OK:
case TOXAV_ERR_BIT_RATE_SET_OK:
NSAssert(NO, @"We shouldn't be here!");
break;
case TOXAV_ERR_SET_BIT_RATE_INVALID:
code = OCTToxAVErrorSetBitRateInvalid;
failureReason = @"The bit rate passed was not one of the supported values.";
case TOXAV_ERR_BIT_RATE_SET_SYNC:
code = OCTToxAVErrorSetBitRateSync;
failureReason = @"Synchronization error occurred.";
break;
case TOXAV_ERR_BIT_RATE_SET_INVALID_AUDIO_BIT_RATE:
code = OCTToxAVErrorSetBitRateInvalidAudioBitRate;
failureReason = @"The audio bit rate passed was not one of the supported values.";
break;
case TOXAV_ERR_SET_BIT_RATE_FRIEND_NOT_FOUND:
case TOXAV_ERR_BIT_RATE_SET_INVALID_VIDEO_BIT_RATE:
code = OCTToxAVErrorSetBitRateInvalidVideoBitRate;
failureReason = @"The video bit rate passed was not one of the supported values.";
break;
case TOXAV_ERR_BIT_RATE_SET_FRIEND_NOT_FOUND:
code = OCTToxAVErrorSetBitRateFriendNotFound;
failureReason = @"The friend number passed did not designate a valid friend";
break;
case TOXAV_ERR_SET_BIT_RATE_FRIEND_NOT_IN_CALL:
case TOXAV_ERR_BIT_RATE_SET_FRIEND_NOT_IN_CALL:
code = OCTToxAVErrorSetBitRateFriendNotInCall;
failureReason = @"This client is currently not in a call with the friend";
break;
Expand Down Expand Up @@ -607,34 +624,20 @@ void callStateCallback(ToxAV *cToxAV,
});
}

void audioBitRateStatusCallback(ToxAV *cToxAV,
uint32_t friendNumber,
bool stable,
uint32_t bitRate,
void *userData)
{
OCTToxAV *toxAV = (__bridge OCTToxAV *)userData;

dispatch_async(dispatch_get_main_queue(), ^{
DDLogCInfo(@"%@: audioBitRateStatusCallback from friend %d stable: %d bitRate: %d", toxAV, friendNumber, stable, bitRate);
if ([toxAV.delegate respondsToSelector:@selector(toxAV:audioBitRateChanged:stable:friendNumber:)]) {
[toxAV.delegate toxAV:toxAV audioBitRateChanged:bitRate stable:stable friendNumber:friendNumber];
}
});
}

void videoBitRateStatusCallback(ToxAV *cToxAV,
uint32_t friendNumber,
bool stable,
uint32_t bitRate,
void *userData)
void bitRateStatusCallback(ToxAV *cToxAV,
uint32_t friendNumber,
uint32_t audio_bit_rate,
uint32_t video_bit_rate,
void *userData)
{
OCTToxAV *toxAV = (__bridge OCTToxAV *)userData;

dispatch_async(dispatch_get_main_queue(), ^{
DDLogCInfo(@"%@: videoBitRateStatusCallback from friend %d stable: %d bitRate: %d", toxAV, friendNumber, stable, bitRate);
if ([toxAV.delegate respondsToSelector:@selector(toxAV:videoBitRateChanged:friendNumber:stable:)]) {
[toxAV.delegate toxAV:toxAV videoBitRateChanged:bitRate friendNumber:friendNumber stable:stable];
DDLogCInfo(@"%@: bitRateStatusCallback from friend %d audioBitRate: %d videoBitRate: %d", toxAV, friendNumber, audio_bit_rate, video_bit_rate);
if ([toxAV.delegate respondsToSelector:@selector(toxAV:bitrateStatusForFriendNumber:audioBitRate:videoBitRate:)]) {
[toxAV.delegate toxAV:toxAV bitrateStatusForFriendNumber:friendNumber
audioBitRate:audio_bit_rate
videoBitRate:video_bit_rate];
}
});
}
Expand Down
1 change: 1 addition & 0 deletions Classes/Private/Wrapper/OCTToxAVConstants.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
#import "OCTToxAVConstants.h"

const OCTToxAVVideoBitRate kOCTToxAVVideoBitRateDisable = 0;
const uint32_t kOCTToxAVBitRateUnchanged = -1;

NSString *const kOCTToxAVErrorDomain = @"me.dvor.objcTox.ErrorDomain";
30 changes: 28 additions & 2 deletions Classes/Public/Wrapper/OCTToxAVConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ typedef const uint8_t OCTToxAVPlaneData;
typedef const int32_t OCTToxAVStrideData;

extern const OCTToxAVVideoBitRate kOCTToxAVVideoBitRateDisable;
extern const uint32_t kOCTToxAVBitRateUnchanged;

extern NSString *const kOCTToxAVErrorDomain;

Expand Down Expand Up @@ -112,6 +113,11 @@ typedef NS_ENUM(NSInteger, OCTToxAVErrorCall) {
*/
OCTToxAVErrorCallMalloc,

/**
* Synchronization error occurred.
*/
OCTToxAVErrorCallSync,

/**
* The friend number did not designate a valid friend.
*/
Expand Down Expand Up @@ -140,6 +146,11 @@ typedef NS_ENUM(NSInteger, OCTToxAVErrorCall) {
typedef NS_ENUM(NSInteger, OCTToxAVErrorAnswer) {
OCTToxAVErrorAnswerUnknown,

/**
* Synchronization error occurred.
*/
OCTToxAVErrorAnswerSync,

/**
* Failed to initialize codecs for call session. Note that codec initiation
* will fail if there is no receive callback registered for either audio or
Expand Down Expand Up @@ -170,6 +181,11 @@ typedef NS_ENUM(NSInteger, OCTToxAVErrorAnswer) {
typedef NS_ENUM(NSInteger, OCTToxErrorCallControl) {
OCTToxAVErrorControlUnknown,

/**
* Synchronization error occurred.
*/
OCTToxAVErrorControlSync,

/**
* The friend number passed did not designate a valid friend.
*/
Expand All @@ -196,9 +212,19 @@ typedef NS_ENUM(NSInteger, OCTToxAVErrorSetBitRate) {
OCTToxAVErrorSetBitRateUnknown,

/**
* The bit rate passed was not one of the supported values.
* Synchronization error occured.
*/
OCTToxAVErrorSetBitRateSync,

/**
* The audio bit rate passed was not one of the supported values.
*/
OCTToxAVErrorSetBitRateInvalidAudioBitRate,

/**
* The video bit rate passed was not one of the supported values.
*/
OCTToxAVErrorSetBitRateInvalid,
OCTToxAVErrorSetBitRateInvalidVideoBitRate,

/**
* The friend number passed did not designate a valid friend.
Expand Down
32 changes: 9 additions & 23 deletions Classes/Public/Wrapper/OCTToxAVDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,30 +36,16 @@
- (void)toxAV:(OCTToxAV *)toxAV callStateChanged:(OCTToxAVCallState)state friendNumber:(OCTToxFriendNumber)friendNumber;

/**
* Audio bitrate has changed.
* @param bitrate The bitrate in Kb/sec.
* @param stable Is the stream stable enough to keep the bit rate.
* Upon successful, non forceful, bit rate change, this is set to
* true and 'bit_rate' is set to new bit rate.
* The stable is set to false with bit_rate set to the unstable
* bit rate when either current stream is unstable with said bit rate
* or the non forceful change failed.
* @param friendNumber Friend number of appropriate friend.
* The event is triggered when the network becomes too saturated for
* current bit rates at which point core suggests new bit rates.
* @param friendNumber The friend number of the friend for which to set the
* bit rate.
* @param audio_bit_rate Suggested maximum audio bit rate in Kb/sec.
* @param video_bit_rate Suggested maximum video bit rate in Kb/sec.
*/
- (void)toxAV:(OCTToxAV *)toxAV audioBitRateChanged:(OCTToxAVAudioBitRate)bitrate stable:(BOOL)stable friendNumber:(OCTToxFriendNumber)friendNumber;

/**
* Video bitrate has changed.
* @param bitrate The bitrate in Kb/sec.
* @param stable Is the stream stable enough to keep the bit rate.
* Upon successful, non forceful, bit rate change, this is set to
* true and 'bit_rate' is set to new bit rate.
* The stable is set to false with bit_rate set to the unstable
* bit rate when either current stream is unstable with said bit rate
* or the non forceful change failed.
* @param friendNumber Friend number of appropriate friend.
*/
- (void)toxAV:(OCTToxAV *)toxAV videoBitRateChanged:(OCTToxAVVideoBitRate)bitrate friendNumber:(OCTToxFriendNumber)friendNumber stable:(BOOL)stable;
- (void) toxAV:(OCTToxAV *)toxAV bitrateStatusForFriendNumber:(OCTToxFriendNumber)friendNumber
audioBitRate:(OCTToxAVAudioBitRate)audioBitrate
videoBitRate:(OCTToxAVVideoBitRate)videoBitrate;

/**
* Received audio frame from friend.
Expand Down
2 changes: 1 addition & 1 deletion Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ source 'https://github.com/CocoaPods/Specs.git'
inhibit_all_warnings!

def common_pods
pod 'toxcore', :podspec => 'https://raw.githubusercontent.com/Antidote-for-Tox/toxcore/0.0.0-641b0f-new-av-2/toxcore.podspec'
pod 'toxcore', :podspec => 'https://raw.githubusercontent.com/Antidote-for-Tox/toxcore/0.0.0-63a82-new-av-3/toxcore.podspec'
pod 'CocoaLumberjack', '~> 1.9.2'
pod 'Realm', '0.95.0'
pod 'TPCircularBuffer', '~> 0.0.1'
Expand Down
Loading