Commit d57b8552 authored by Ghislain MARY's avatar Ghislain MARY

Use properties for LinphoneCallLog, LinphoneCallParams and LinphoneCallStats objects.

parent a575d5eb
......@@ -198,5 +198,27 @@ namespace Linphone
LinphoneCoreLogCollectionUploadStateDelivered = 1, /**< Log collection upload successfully delivered and acknowledged by remote end point */
LinphoneCoreLogCollectionUploadStateNotDelivered = 2
};
/// <summary>
/// Media type of the statistics (audio or video).
/// </summary>
public enum class MediaType : int
{
Audio = 0,
Video = 1
};
/// <summary>
/// State of the ICE processing.
/// </summary>
public enum class IceState : int
{
NotActivated = 0,
Failed = 1,
InProgress = 2,
HostConnection = 3,
ReflexiveConnection = 4,
RelayConnection = 5
};
}
}
\ No newline at end of file
......@@ -5,42 +5,42 @@
#include "Globals.h"
#include "LinphoneCoreFactory.h"
Linphone::Core::LinphoneAddress^ Linphone::Core::LinphoneCallLog::GetFrom()
Linphone::Core::LinphoneAddress^ Linphone::Core::LinphoneCallLog::From::get()
{
return (Linphone::Core::LinphoneAddress^)Linphone::Core::Utils::CreateLinphoneAddress((void*)linphone_call_log_get_from(this->callLog));
}
Linphone::Core::LinphoneAddress^ Linphone::Core::LinphoneCallLog::GetTo()
Linphone::Core::LinphoneAddress^ Linphone::Core::LinphoneCallLog::To::get()
{
return (Linphone::Core::LinphoneAddress^)Linphone::Core::Utils::CreateLinphoneAddress((void*)linphone_call_log_get_to(this->callLog));
}
Linphone::Core::CallDirection Linphone::Core::LinphoneCallLog::GetDirection()
Linphone::Core::CallDirection Linphone::Core::LinphoneCallLog::Direction::get()
{
return (Linphone::Core::CallDirection)linphone_call_log_get_dir(this->callLog);
}
Linphone::Core::LinphoneCallStatus Linphone::Core::LinphoneCallLog::GetStatus()
Linphone::Core::LinphoneCallStatus Linphone::Core::LinphoneCallLog::Status::get()
{
return (Linphone::Core::LinphoneCallStatus)linphone_call_log_get_status(this->callLog);
}
int64 Linphone::Core::LinphoneCallLog::GetStartDate()
int64 Linphone::Core::LinphoneCallLog::StartDate::get()
{
return linphone_call_log_get_start_date(this->callLog);
}
int Linphone::Core::LinphoneCallLog::GetCallDuration()
int Linphone::Core::LinphoneCallLog::Duration::get()
{
return linphone_call_log_get_duration(this->callLog);
}
Platform::String^ Linphone::Core::LinphoneCallLog::GetCallId()
Platform::String^ Linphone::Core::LinphoneCallLog::CallId::get()
{
return Linphone::Core::Utils::cctops(linphone_call_log_get_call_id(this->callLog));
}
Platform::Boolean Linphone::Core::LinphoneCallLog::WasVideoEnabled()
Platform::Boolean Linphone::Core::LinphoneCallLog::VideoEnabled::get()
{
return (linphone_call_log_video_enabled(this->callLog) == TRUE);
}
......@@ -48,12 +48,12 @@ Platform::Boolean Linphone::Core::LinphoneCallLog::WasVideoEnabled()
Linphone::Core::LinphoneCallLog::LinphoneCallLog(::LinphoneCallLog *cl) :
callLog(cl)
{
RefToPtrProxy<LinphoneCallLog^> *log = new RefToPtrProxy<LinphoneCallLog^>(this);
RefToPtrProxy<LinphoneCallLog^> *log = new RefToPtrProxy<LinphoneCallLog^>(this);
linphone_call_log_set_user_pointer(this->callLog, log);
}
Linphone::Core::LinphoneCallLog::~LinphoneCallLog()
{
RefToPtrProxy<LinphoneCallLog^> *log = reinterpret_cast< RefToPtrProxy<LinphoneCallLog^> *>(linphone_call_log_get_user_pointer(this->callLog));
RefToPtrProxy<LinphoneCallLog^> *log = reinterpret_cast< RefToPtrProxy<LinphoneCallLog^> *>(linphone_call_log_get_user_pointer(this->callLog));
delete log;
}
\ No newline at end of file
......@@ -16,52 +16,69 @@ namespace Linphone
public ref class LinphoneCallLog sealed
{
public:
/// <summary>
/// Gets the LinphoneAddress of the caller.
/// <summary>
/// Gets the LinphoneAddress of the caller.
/// </summary>
/// <returns>The address of the caller</returns>
LinphoneAddress^ GetFrom();
property LinphoneAddress^ From
{
LinphoneAddress^ get();
}
/// <summary>
/// Gets the LinphoneAddress of the callee.
/// <summary>
/// Gets the LinphoneAddress of the callee.
/// </summary>
/// <returns>The address of the callee</returns>
LinphoneAddress^ GetTo();
property LinphoneAddress^ To
{
LinphoneAddress^ get();
}
/// <summary>
/// Gets the CallDirection of the call (Incoming or Outgoing).
/// <summary>
/// Gets the CallDirection of the call (Incoming or Outgoing).
/// </summary>
/// <returns>The direction of the call</returns>
CallDirection GetDirection();
property CallDirection Direction
{
CallDirection get();
}
/// <summary>
/// Gets the LinphoneCallStatus of the call (Success, Aborted, Missed or Declined).
/// <summary>
/// Gets the LinphoneCallStatus of the call (Success, Aborted, Missed or Declined).
/// </summary>
/// <returns>The status of the call</returns>
LinphoneCallStatus GetStatus();
property LinphoneCallStatus Status
{
LinphoneCallStatus get();
}
/// <summary>
/// Returns the start date/time of the call in seconds elpsed since January first 1970.
/// </summary>
/// <returns>The start date/time of the call</returns>
int64 GetStartDate();
property int64 StartDate
{
int64 get();
}
/// <summary>
/// Returns the call duration in seconds.
/// </summary>
/// <returns>The duration of the call in seconds</returns>
int GetCallDuration();
property int Duration
{
int get();
}
/// <summary>
/// Returns the call id from signaling.
/// </summary>
Platform::String^ GetCallId();
property Platform::String^ CallId
{
Platform::String^ get();
}
/// <summary>
/// Tells whether video was enabled at the end of the call.
/// </summary>
/// <returns>true if video was enabled at the end of the call, false otherwise</returns>
Platform::Boolean WasVideoEnabled();
property Platform::Boolean VideoEnabled
{
Platform::Boolean get();
}
private:
friend class Linphone::Core::Utils;
......
......@@ -3,26 +3,25 @@
#include "PayloadType.h"
#include "Server.h"
void Linphone::Core::LinphoneCallParams::SetAudioBandwidth(int value)
void Linphone::Core::LinphoneCallParams::AudioBandwidthLimit::set(int value)
{
API_LOCK;
linphone_call_params_set_audio_bandwidth_limit(this->params, value);
}
Linphone::Core::MediaEncryption Linphone::Core::LinphoneCallParams::GetMediaEncryption()
Linphone::Core::MediaEncryption Linphone::Core::LinphoneCallParams::MediaEncryption::get()
{
API_LOCK;
Linphone::Core::MediaEncryption enc = (Linphone::Core::MediaEncryption) linphone_call_params_get_media_encryption(this->params);
return enc;
return (Linphone::Core::MediaEncryption) linphone_call_params_get_media_encryption(this->params);
}
void Linphone::Core::LinphoneCallParams::SetMediaEncryption(Linphone::Core::MediaEncryption menc)
void Linphone::Core::LinphoneCallParams::MediaEncryption::set(Linphone::Core::MediaEncryption menc)
{
API_LOCK;
linphone_call_params_set_media_encryption(this->params, (LinphoneMediaEncryption) menc);
}
Linphone::Core::PayloadType^ Linphone::Core::LinphoneCallParams::GetUsedAudioCodec()
Linphone::Core::PayloadType^ Linphone::Core::LinphoneCallParams::UsedAudioCodec::get()
{
API_LOCK;
Linphone::Core::PayloadType^ payloadType = nullptr;
......@@ -33,13 +32,13 @@ Linphone::Core::PayloadType^ Linphone::Core::LinphoneCallParams::GetUsedAudioCod
return payloadType;
}
void Linphone::Core::LinphoneCallParams::EnableLowBandwidth(Platform::Boolean enable)
void Linphone::Core::LinphoneCallParams::LowBandwidthEnabled::set(Platform::Boolean enable)
{
API_LOCK;
linphone_call_params_enable_low_bandwidth(this->params, enable);
}
Platform::Boolean Linphone::Core::LinphoneCallParams::IsLowBandwidthEnabled()
Platform::Boolean Linphone::Core::LinphoneCallParams::LowBandwidthEnabled::get()
{
API_LOCK;
return (linphone_call_params_low_bandwidth_enabled(this->params) == TRUE);
......@@ -57,7 +56,7 @@ void Linphone::Core::LinphoneCallParams::VideoEnabled::set(Platform::Boolean ena
linphone_call_params_enable_video(this->params, enable);
}
Linphone::Core::PayloadType^ Linphone::Core::LinphoneCallParams::GetUsedVideoCodec()
Linphone::Core::PayloadType^ Linphone::Core::LinphoneCallParams::UsedVideoCodec::get()
{
API_LOCK;
Linphone::Core::PayloadType^ payloadType = nullptr;
......@@ -68,33 +67,31 @@ Linphone::Core::PayloadType^ Linphone::Core::LinphoneCallParams::GetUsedVideoCod
return payloadType;
}
Windows::Foundation::Size Linphone::Core::LinphoneCallParams::GetSentVideoSize()
Windows::Foundation::Size Linphone::Core::LinphoneCallParams::SentVideoSize::get()
{
API_LOCK;
MSVideoSize vs = linphone_call_params_get_sent_video_size(this->params);
Windows::Foundation::Size size;
size.Width = vs.width;
size.Height = vs.height;
size.Width = (float)vs.width;
size.Height = (float)vs.height;
return size;
}
Windows::Foundation::Size Linphone::Core::LinphoneCallParams::GetReceivedVideoSize()
Windows::Foundation::Size Linphone::Core::LinphoneCallParams::ReceivedVideoSize::get()
{
API_LOCK;
MSVideoSize vs = linphone_call_params_get_received_video_size(this->params);
Windows::Foundation::Size size;
size.Width = vs.width;
size.Height = vs.height;
size.Width = (float)vs.width;
size.Height = (float)vs.height;
return size;
}
Linphone::Core::LinphoneCallParams::LinphoneCallParams(::LinphoneCallParams *call_params) :
params(call_params)
{
}
Linphone::Core::LinphoneCallParams::~LinphoneCallParams()
{
}
......@@ -17,28 +17,29 @@ namespace Linphone
{
public:
/// <summary>
/// Sets the audio bandwidth in kbits/s.
/// Sets the audio bandwidth in kbits/s (0 to disable limitation).
/// </summary>
/// <param name="value">0 to disable limitation</param>
void SetAudioBandwidth(int value);
property int AudioBandwidthLimit
{
void set(int value);
}
/// <summary>
/// Returns the MediaEncryption of the call (None, SRTP or ZRTP).
/// </summary>
/// <returns>The media encryption of the call</returns>
MediaEncryption GetMediaEncryption();
/// <summary>
/// Sets the MediaEncryption (None, SRTP or ZRTP).
/// </summary>
/// <param name="menc">The media encryption to use for the call</param>
void SetMediaEncryption(MediaEncryption menc);
property Linphone::Core::MediaEncryption MediaEncryption
{
Linphone::Core::MediaEncryption get();
void set(Linphone::Core::MediaEncryption value);
}
/// <summary>
/// Returns the PayloadType currently in use for the audio stream.
/// </summary>
/// <returns>The payload type currently in use for the audio stream</returns>
PayloadType^ GetUsedAudioCodec();
property PayloadType^ UsedAudioCodec
{
PayloadType^ get();
}
/// <summary>
/// Indicates low bandwidth mode.
......@@ -46,15 +47,11 @@ namespace Linphone
/// Tyically, ptime (packetization time) will be increased, audio codecs's output bitrate will be targetted to 20kbits/s provided that it is achievable by the codec selected after SDP handshake.
/// Video is automatically disabled.
/// </summary>
/// <param name="enable">A boolean value telling whether to enable the low bandwidth mode</param>
void EnableLowBandwidth(Platform::Boolean enable);
/// <summary>
/// Gets if the low bandwidth mode is enabled.
/// See EnableLowBandwidth(boolean enable).
/// </summary>
/// <returns>A boolean value telling whether the low bandwidth mode is enabled or not</returns>
Platform::Boolean IsLowBandwidthEnabled();
property Platform::Boolean LowBandwidthEnabled
{
Platform::Boolean get();
void set(Platform::Boolean value);
}
/// <summary>
/// Enable or disable video.
......@@ -68,20 +65,26 @@ namespace Linphone
/// <summary>
/// Returns the PayloadType currently in use for the video stream.
/// </summary>
/// <returns>The payload type currently in use for the video stream</returns>
PayloadType^ GetUsedVideoCodec();
property PayloadType^ UsedVideoCodec
{
PayloadType^ get();
}
/// <summary>
/// Returns the size of the video being sent.
/// </summary>
/// <returns>The size of the video being sent</returns>
Windows::Foundation::Size GetSentVideoSize();
property Windows::Foundation::Size SentVideoSize
{
Windows::Foundation::Size get();
}
/// <summary>
/// Returns the size of the video being received.
/// </summary>
/// <returns>The size of the video being received</returns>
Windows::Foundation::Size GetReceivedVideoSize();
property Windows::Foundation::Size ReceivedVideoSize
{
Windows::Foundation::Size get();
}
private:
friend class Linphone::Core::Utils;
......
......@@ -3,67 +3,67 @@
#include "LinphoneCall.h"
#include "Server.h"
Linphone::Core::MediaType Linphone::Core::LinphoneCallStats::GetMediaType()
Linphone::Core::MediaType Linphone::Core::LinphoneCallStats::MediaType::get()
{
return this->mediaType;
}
Linphone::Core::IceState Linphone::Core::LinphoneCallStats::GetIceState()
Linphone::Core::IceState Linphone::Core::LinphoneCallStats::IceState::get()
{
return this->iceState;
}
float Linphone::Core::LinphoneCallStats::GetDownloadBandwidth()
float Linphone::Core::LinphoneCallStats::DownloadBandwidth::get()
{
return this->downloadBandwidth;
}
float Linphone::Core::LinphoneCallStats::GetUploadBandwidth()
float Linphone::Core::LinphoneCallStats::UploadBandwidth::get()
{
return this->uploadBandwidth;
}
float Linphone::Core::LinphoneCallStats::GetSenderLossRate()
float Linphone::Core::LinphoneCallStats::SenderLossRate::get()
{
return this->senderLossRate;
}
float Linphone::Core::LinphoneCallStats::GetReceiverLossRate()
float Linphone::Core::LinphoneCallStats::ReceiverLossRate::get()
{
return this->receiverLossRate;
}
float Linphone::Core::LinphoneCallStats::GetSenderInterarrivalJitter()
float Linphone::Core::LinphoneCallStats::SenderInterarrivalJitter::get()
{
return this->senderInterarrivalJitter;
}
float Linphone::Core::LinphoneCallStats::GetReceiverInterarrivalJitter()
float Linphone::Core::LinphoneCallStats::ReceiverInterarrivalJitter::get()
{
return this->receiverInterarrivalJitter;
}
float Linphone::Core::LinphoneCallStats::GetRoundTripDelay()
float Linphone::Core::LinphoneCallStats::RoundTripDelay::get()
{
return this->roundTripDelay;
}
int64 Linphone::Core::LinphoneCallStats::GetLatePacketsCumulativeNumber()
int64 Linphone::Core::LinphoneCallStats::LatePacketsCumulativeNumber::get()
{
return this->cumulativeLatePackets;
}
float Linphone::Core::LinphoneCallStats::GetJitterBufferSize()
float Linphone::Core::LinphoneCallStats::JitterBufferSize::get()
{
return this->jitterBufferSize;
}
float Linphone::Core::LinphoneCallStats::GetLocalLossRate()
float Linphone::Core::LinphoneCallStats::LocalLossRate::get()
{
return this->localLossRate;
}
float Linphone::Core::LinphoneCallStats::GetLocalLateRate()
float Linphone::Core::LinphoneCallStats::LocalLateRate::get()
{
return this->localLateRate;
}
......@@ -73,7 +73,7 @@ Linphone::Core::LinphoneCallStats::LinphoneCallStats(::LinphoneCall *call, Linph
{
API_LOCK;
const ::LinphoneCallStats *stats = nullptr;
if (mediaType == MediaType::Audio) {
if (mediaType == Linphone::Core::MediaType::Audio) {
stats = linphone_call_get_audio_stats(this->call);
} else {
stats = linphone_call_get_video_stats(this->call);
......
......@@ -6,28 +6,6 @@ namespace Linphone
{
namespace Core
{
/// <summary>
/// Media type of the statistics (audio or video).
/// </summary>
public enum class MediaType : int
{
Audio = 0,
Video = 1
};
/// <summary>
/// State of the ICE processing.
/// </summary>
public enum class IceState : int
{
NotActivated = 0,
Failed = 1,
InProgress = 2,
HostConnection = 3,
ReflexiveConnection = 4,
RelayConnection = 5
};
/// <summary>
/// Object representing the statistics of a call.
/// To get the statistics of a call use the LinphoneCall::GetAudioStats() method. It gives the call statistics at the specific time it is asked for.
......@@ -39,70 +17,106 @@ namespace Linphone
/// <summary>
/// Gets the media type (audio or video).
/// </summary>
MediaType GetMediaType();
property Linphone::Core::MediaType MediaType
{
Linphone::Core::MediaType get();
}
/// <summary>
/// Gets the state of the ICE process.
/// </summary>
IceState GetIceState();
property Linphone::Core::IceState IceState
{
Linphone::Core::IceState get();
}
/// <summary>
/// Gets the download bandwidth in kbits/s.
/// </summary>
float GetDownloadBandwidth();
property float DownloadBandwidth
{
float get();
}
/// <summary>
/// Gets the upload bandwidth in kbits/s.
/// </summary>
float GetUploadBandwidth();
property float UploadBandwidth
{
float get();
}
/// <summary>
/// Gets the local loss rate since last emitted RTCP report.
/// </summary>
float GetSenderLossRate();
property float SenderLossRate
{
float get();
}
/// <summary>
/// Gets the remote loss rate from the last received RTCP report.
/// </summary>
float GetReceiverLossRate();
property float ReceiverLossRate
{
float get();
}
/// <summary>
/// Gets the local interarrival jitter.
/// </summary>
float GetSenderInterarrivalJitter();
property float SenderInterarrivalJitter
{
float get();
}
/// <summary>
/// Gets the remote reported interarrival jitter.
/// </summary>
float GetReceiverInterarrivalJitter();
property float ReceiverInterarrivalJitter
{
float get();
}
/// <summary>
/// Gets the round trip delay in seconds.
/// Gets the round trip delay in seconds. -1 if the information is not available.
/// </summary>
/// <returns>
/// -1 if the information is not available.
/// </returns>
float GetRoundTripDelay();
property float RoundTripDelay
{
float get();
}
/// <summary>
/// Gets the cumulative number of late packets.
/// </summary>
int64 GetLatePacketsCumulativeNumber();
property int64 LatePacketsCumulativeNumber
{
int64 get();
}
/// <summary>
/// Gets the jitter buffer size in milliseconds.
/// </summary>
float GetJitterBufferSize();
property float JitterBufferSize
{
float get();
}
/// <summary>
/// Get the local loss rate. Unlike GetSenderLossRate() that returns this loss rate "since last emitted RTCP report", the value returned here is updated every second.
/// </summary>
float GetLocalLossRate();
property float LocalLossRate
{
float get();
}
/// <summary>
/// Get the local late packets rate. The value returned here is updated every second.
/// </summary>
float GetLocalLateRate();
property float LocalLateRate
{
float get();
}
private:
friend class Linphone::Core::Utils;
......@@ -120,8 +134,8 @@ namespace Linphone
void Linphone::Core::LinphoneCallStats::FillStats(const ::LinphoneCallStats *stats);
::LinphoneCall *call;
MediaType mediaType;
IceState iceState;
Linphone::Core::MediaType mediaType;
Linphone::Core::IceState iceState;
float downloadBandwidth;
float uploadBandwidth;
float senderLossRate;
......
......@@ -439,9 +439,9 @@ namespace Linphone.Model
{
foreach (LinphoneCallLog log in LinphoneManager.Instance.LinphoneCore.GetCallLogs())
{
if (log.GetDirection() == CallDirection.Outgoing)
if (log.Direction == CallDirection.Outgoing)
{
return log.GetTo().AsStringUriOnly();
return log.To.AsStringUriOnly();
}
}
return null;
......@@ -459,23 +459,23 @@ namespace Linphone.Model
{
foreach (LinphoneCallLog log in LinphoneCore.GetCallLogs())
{
string from = log.GetFrom().DisplayName;
string from = log.From.DisplayName;
if (from.Length == 0)
{
LinphoneAddress fromAddress = log.GetFrom();
LinphoneAddress fromAddress = log.From;
from = String.Format("{0}@{1}", fromAddress.UserName, fromAddress.Domain);
}
string to = log.GetTo().DisplayName;
string to = log.To.DisplayName;
if (to.Length == 0)
{
LinphoneAddress toAddress = log.GetTo();
LinphoneAddress toAddress = log.To;
to = String.Format("{0}@{1}", toAddress.UserName, toAddress.Domain);
}
bool isMissed = log.GetStatus() == LinphoneCallStatus.Missed;
long startDate = log.GetStartDate();
CallLog callLog = new CallLog(log, from, to, log.GetDirection() == CallDirection.Incoming, isMissed, startDate);
bool isMissed = log.Status == LinphoneCallStatus.Missed;
long startDate = log.StartDate;
CallLog callLog = new CallLog(log, from, to, log.Direction == CallDirection.Incoming, isMissed, startDate);
_history.Add(callLog);
}
}
......
......@@ -131,9 +131,9 @@ namespace Linphone.Views
String address;
if (log.IsIncoming)
address = nativeLog.GetFrom().AsStringUriOnly();
address = nativeLog.From.AsStringUriOnly();
else
address = nativeLog.GetTo().AsStringUriOnly();
address = nativeLog.To.AsStringUriOnly();
SetAddressGoToDialerAndCall(address);
}
......
......@@ -463,7 +463,7 @@ namespace Linphone.Views
string videoUploadBandwidth = "";
LinphoneCallParams param = call.GetCurrentParamsCopy();
((InCallModel)ViewModel).MediaEncryption = param.GetMediaEncryption().ToString();
((InCallModel)ViewModel).MediaEncryption = param.MediaEncryption.ToString();
LinphoneCallStats audioStats = null;
try
......@@ -474,12 +474,12 @@ namespace Linphone.Views
if (audioStats != null)
{
audioDownloadBandwidth = String.Format("{0:0.00}", audioStats.GetDownloadBandwidth());
audioUploadBandwidth = String.Format("{0:0.00}", audioStats.GetUploadBandwidth());
((InCallModel)ViewModel).ICE = audioStats.GetIceState().ToString();
audioDownloadBandwidth = String.Format("{0:0.00}", audioStats.DownloadBandwidth);
audioUploadBandwidth = String.Format("{0:0.00}", audioStats.UploadBandwidth);
((InCallModel)ViewModel).ICE = audioStats.IceState.ToString();
}
PayloadType audiopt = param.GetUsedAudioCodec();
PayloadType audiopt = param.UsedAudioCodec;
if (audiopt != null)
{
audioPayloadType = audiopt.GetMimeType() + "/" + audiopt.GetClockRate();
......@@ -490,18 +490,18 @@ namespace Linphone.Views
LinphoneCallStats videoStats = call.VideoStats;
if (videoStats != null)
{
videoDownloadBandwidth = String.Format("{0:0.00}", videoStats.GetDownloadBandwidth());
videoUploadBandwidth = String.Format("{0:0.00}", videoStats.GetUploadBandwidth());
videoDownloadBandwidth = String.Format("{0:0.00}", videoStats.DownloadBandwidth);
videoUploadBandwidth = String.Format("{0:0.00}", videoStats.UploadBandwidth);
}
PayloadType videopt = param.GetUsedVideoCodec();
PayloadType videopt = param.UsedVideoCodec;
if (videopt != null)
{
videoPayloadType = videopt.GetMimeType();
}
Windows.Foundation.Size receivedVideoSize = param.GetReceivedVideoSize();
Windows.Foundation.Size receivedVideoSize = param.ReceivedVideoSize;
((InCallModel)ViewModel).ReceivedVideoSize = String.Format("{0}x{1}", receivedVideoSize.Width, receivedVideoSize.Height);
Windows.Foundation.Size sentVideoSize = param.GetSentVideoSize();
Windows.Foundation.Size sentVideoSize = param.SentVideoSize;
((InCallModel)ViewModel).SentVideoSize = String.Format("{0}x{1}", sentVideoSize.Width, sentVideoSize.Height);
((InCallModel)ViewModel).VideoStatsVisibility = Visibility.Visible;
}
......