- Allows setting max video down/up bandwidth

- Allows setting video motion rank
- Allows enabling/disabling STUN for ICE per SIP stack
This commit is contained in:
bossiel 2013-06-03 08:39:53 +00:00
parent 35e839e63d
commit 3217795f85
34 changed files with 519 additions and 36 deletions

View File

@ -293,11 +293,18 @@ tmedia_bandwidth_level_t MediaSessionMgr::defaultsGetBandwidthLevel() // @deprec
{
return tmedia_defaults_get_bl();
}
bool MediaSessionMgr::defaultsSetVideoMotionRank(int32_t video_motion_rank)
{
return (tmedia_defaults_set_video_motion_rank(video_motion_rank) == 0);
}
bool MediaSessionMgr::defaultsSetBandwidthVideoUploadMax(int32_t bw_video_up_max_kbps)
{
return (tmedia_defaults_set_bandwidth_video_upload_max(bw_video_up_max_kbps) == 0);
}
bool MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(int32_t bw_video_down_max_kbps)
{
return (tmedia_defaults_set_bandwidth_video_download_max(bw_video_down_max_kbps) == 0);
}
bool MediaSessionMgr::defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size)
{

View File

@ -97,7 +97,9 @@ public:
static tmedia_profile_t defaultsGetProfile();
static bool defaultsSetBandwidthLevel(tmedia_bandwidth_level_t bl); // @deprecated
static tmedia_bandwidth_level_t defaultsGetBandwidthLevel(); // @deprecated
static bool defaultsSetVideoMotionRank(int32_t video_motion_rank);
static bool defaultsSetBandwidthVideoUploadMax(int32_t bw_video_up_max_kbps);
static bool defaultsSetBandwidthVideoDownloadMax(int32_t bw_video_down_max_kbps);
static bool defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size);
static bool defaultsSetJbMargin(uint32_t jb_margin_ms);
static bool defaultsSetJbMaxLateRate(uint32_t jb_late_rate_percent);

View File

@ -234,6 +234,14 @@ bool SipStack::removeSigCompCompartment(const char* compId)
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setSTUNEnabledForICE(bool enabled)
{
tsk_bool_t _enabled = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_ICE_STUN_ENABLED(_enabled),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setSTUNServer(const char* ip, unsigned short port)
{
unsigned _port = port;//promote

View File

@ -65,6 +65,7 @@ public: /* API functions */
bool addSigCompCompartment(const char* compId);
bool removeSigCompCompartment(const char* compId);
bool setSTUNEnabledForICE(bool enabled);
bool setSTUNServer(const char* ip, unsigned short port);
bool setSTUNCred(const char* login, const char* password);
bool setSTUNEnabled(bool enabled);

View File

@ -119,11 +119,21 @@ public class MediaSessionMgr : IDisposable {
return ret;
}
public static bool defaultsSetVideoMotionRank(int video_motion_rank) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetVideoMotionRank(video_motion_rank);
return ret;
}
public static bool defaultsSetBandwidthVideoUploadMax(int bw_video_up_max_kbps) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(bw_video_up_max_kbps);
return ret;
}
public static bool defaultsSetBandwidthVideoDownloadMax(int bw_video_down_max_kbps) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(bw_video_down_max_kbps);
return ret;
}
public static bool defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetPrefVideoSize((int)pref_video_size);
return ret;

View File

@ -158,6 +158,11 @@ public class SipStack : SafeObject {
return ret;
}
public bool setSTUNEnabledForICE(bool enabled) {
bool ret = tinyWRAPPINVOKE.SipStack_setSTUNEnabledForICE(swigCPtr, enabled);
return ret;
}
public bool setSTUNServer(string ip, ushort port) {
bool ret = tinyWRAPPINVOKE.SipStack_setSTUNServer(swigCPtr, ip, port);
return ret;
@ -168,8 +173,8 @@ public class SipStack : SafeObject {
return ret;
}
public bool setSTUNEnabled(bool bEnabled) {
bool ret = tinyWRAPPINVOKE.SipStack_setSTUNEnabled(swigCPtr, bEnabled);
public bool setSTUNEnabled(bool enabled) {
bool ret = tinyWRAPPINVOKE.SipStack_setSTUNEnabled(swigCPtr, enabled);
return ret;
}

View File

@ -336,9 +336,15 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsGetBandwidthLevel")]
public static extern int MediaSessionMgr_defaultsGetBandwidthLevel();
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetVideoMotionRank")]
public static extern bool MediaSessionMgr_defaultsSetVideoMotionRank(int jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax")]
public static extern bool MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(int jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax")]
public static extern bool MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(int jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetPrefVideoSize")]
public static extern bool MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1);
@ -1656,6 +1662,9 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_removeSigCompCompartment")]
public static extern bool SipStack_removeSigCompCompartment(HandleRef jarg1, string jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setSTUNEnabledForICE")]
public static extern bool SipStack_setSTUNEnabledForICE(HandleRef jarg1, bool jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_SipStack_setSTUNServer")]
public static extern bool SipStack_setSTUNServer(HandleRef jarg1, string jarg2, ushort jarg3);

View File

@ -1806,6 +1806,18 @@ SWIGEXPORT int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsGetBandwidthLevel() {
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetVideoMotionRank(int jarg1) {
unsigned int jresult ;
int32_t arg1 ;
bool result;
arg1 = (int32_t)jarg1;
result = (bool)MediaSessionMgr::defaultsSetVideoMotionRank(arg1);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(int jarg1) {
unsigned int jresult ;
int32_t arg1 ;
@ -1818,6 +1830,18 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetBandwidthV
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(int jarg1) {
unsigned int jresult ;
int32_t arg1 ;
bool result;
arg1 = (int32_t)jarg1;
result = (bool)MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(arg1);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1) {
unsigned int jresult ;
tmedia_pref_video_size_t arg1 ;
@ -7398,6 +7422,20 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_removeSigCompCompartment(voi
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setSTUNEnabledForICE(void * jarg1, unsigned int jarg2) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;
bool arg2 ;
bool result;
arg1 = (SipStack *)jarg1;
arg2 = jarg2 ? true : false;
result = (bool)(arg1)->setSTUNEnabledForICE(arg2);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_setSTUNServer(void * jarg1, char * jarg2, unsigned short jarg3) {
unsigned int jresult ;
SipStack *arg1 = (SipStack *) 0 ;

View File

@ -98,10 +98,18 @@ public class MediaSessionMgr {
return tmedia_bandwidth_level_t.swigToEnum(tinyWRAPJNI.MediaSessionMgr_defaultsGetBandwidthLevel());
}
public static boolean defaultsSetVideoMotionRank(int video_motion_rank) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetVideoMotionRank(video_motion_rank);
}
public static boolean defaultsSetBandwidthVideoUploadMax(int bw_video_up_max_kbps) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(bw_video_up_max_kbps);
}
public static boolean defaultsSetBandwidthVideoDownloadMax(int bw_video_down_max_kbps) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(bw_video_down_max_kbps);
}
public static boolean defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetPrefVideoSize(pref_video_size.swigValue());
}

View File

@ -131,6 +131,10 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_removeSigCompCompartment(swigCPtr, this, compId);
}
public boolean setSTUNEnabledForICE(boolean enabled) {
return tinyWRAPJNI.SipStack_setSTUNEnabledForICE(swigCPtr, this, enabled);
}
public boolean setSTUNServer(String ip, int port) {
return tinyWRAPJNI.SipStack_setSTUNServer(swigCPtr, this, ip, port);
}
@ -139,8 +143,8 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setSTUNCred(swigCPtr, this, login, password);
}
public boolean setSTUNEnabled(boolean bEnabled) {
return tinyWRAPJNI.SipStack_setSTUNEnabled(swigCPtr, this, bEnabled);
public boolean setSTUNEnabled(boolean enabled) {
return tinyWRAPJNI.SipStack_setSTUNEnabled(swigCPtr, this, enabled);
}
public boolean setTLSSecAgree(boolean enabled) {

View File

@ -98,10 +98,18 @@ public class MediaSessionMgr {
return tmedia_bandwidth_level_t.swigToEnum(tinyWRAPJNI.MediaSessionMgr_defaultsGetBandwidthLevel());
}
public static boolean defaultsSetVideoMotionRank(int video_motion_rank) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetVideoMotionRank(video_motion_rank);
}
public static boolean defaultsSetBandwidthVideoUploadMax(int bw_video_up_max_kbps) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(bw_video_up_max_kbps);
}
public static boolean defaultsSetBandwidthVideoDownloadMax(int bw_video_down_max_kbps) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(bw_video_down_max_kbps);
}
public static boolean defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetPrefVideoSize(pref_video_size.swigValue());
}

View File

@ -131,6 +131,10 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_removeSigCompCompartment(swigCPtr, this, compId);
}
public boolean setSTUNEnabledForICE(boolean enabled) {
return tinyWRAPJNI.SipStack_setSTUNEnabledForICE(swigCPtr, this, enabled);
}
public boolean setSTUNServer(String ip, int port) {
return tinyWRAPJNI.SipStack_setSTUNServer(swigCPtr, this, ip, port);
}
@ -139,8 +143,8 @@ public class SipStack extends SafeObject {
return tinyWRAPJNI.SipStack_setSTUNCred(swigCPtr, this, login, password);
}
public boolean setSTUNEnabled(boolean bEnabled) {
return tinyWRAPJNI.SipStack_setSTUNEnabled(swigCPtr, this, bEnabled);
public boolean setSTUNEnabled(boolean enabled) {
return tinyWRAPJNI.SipStack_setSTUNEnabled(swigCPtr, this, enabled);
}
public boolean setTLSSecAgree(boolean enabled) {

View File

@ -59,7 +59,9 @@ public class tinyWRAPJNI {
public final static native int MediaSessionMgr_defaultsGetProfile();
public final static native boolean MediaSessionMgr_defaultsSetBandwidthLevel(int jarg1);
public final static native int MediaSessionMgr_defaultsGetBandwidthLevel();
public final static native boolean MediaSessionMgr_defaultsSetVideoMotionRank(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMargin(long jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMaxLateRate(long jarg1);
@ -506,6 +508,7 @@ public class tinyWRAPJNI {
public final static native boolean SipStack_setSigCompParams(long jarg1, SipStack jarg1_, long jarg2, long jarg3, long jarg4, boolean jarg5);
public final static native boolean SipStack_addSigCompCompartment(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_removeSigCompCompartment(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setSTUNEnabledForICE(long jarg1, SipStack jarg1_, boolean jarg2);
public final static native boolean SipStack_setSTUNServer(long jarg1, SipStack jarg1_, String jarg2, int jarg3);
public final static native boolean SipStack_setSTUNCred(long jarg1, SipStack jarg1_, String jarg2, String jarg3);
public final static native boolean SipStack_setSTUNEnabled(long jarg1, SipStack jarg1_, boolean jarg2);

View File

@ -2841,6 +2841,20 @@ SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetVideoMotionRank(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
int32_t arg1 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = (int32_t)jarg1;
result = (bool)MediaSessionMgr::defaultsSetVideoMotionRank(arg1);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetBandwidthVideoUploadMax(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
int32_t arg1 ;
@ -2855,6 +2869,20 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionM
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetBandwidthVideoDownloadMax(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
int32_t arg1 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = (int32_t)jarg1;
result = (bool)MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(arg1);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetPrefVideoSize(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
tmedia_pref_video_size_t arg1 ;
@ -10464,6 +10492,23 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1rem
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNEnabledForICE(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
bool arg2 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = jarg2 ? true : false;
result = (bool)(arg1)->setSTUNEnabledForICE(arg2);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNServer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;

View File

@ -59,7 +59,9 @@ public class tinyWRAPJNI {
public final static native int MediaSessionMgr_defaultsGetProfile();
public final static native boolean MediaSessionMgr_defaultsSetBandwidthLevel(int jarg1);
public final static native int MediaSessionMgr_defaultsGetBandwidthLevel();
public final static native boolean MediaSessionMgr_defaultsSetVideoMotionRank(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMargin(long jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMaxLateRate(long jarg1);
@ -506,6 +508,7 @@ public class tinyWRAPJNI {
public final static native boolean SipStack_setSigCompParams(long jarg1, SipStack jarg1_, long jarg2, long jarg3, long jarg4, boolean jarg5);
public final static native boolean SipStack_addSigCompCompartment(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_removeSigCompCompartment(long jarg1, SipStack jarg1_, String jarg2);
public final static native boolean SipStack_setSTUNEnabledForICE(long jarg1, SipStack jarg1_, boolean jarg2);
public final static native boolean SipStack_setSTUNServer(long jarg1, SipStack jarg1_, String jarg2, int jarg3);
public final static native boolean SipStack_setSTUNCred(long jarg1, SipStack jarg1_, String jarg2, String jarg3);
public final static native boolean SipStack_setSTUNEnabled(long jarg1, SipStack jarg1_, boolean jarg2);

View File

@ -2841,6 +2841,20 @@ SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetVideoMotionRank(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
int32_t arg1 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = (int32_t)jarg1;
result = (bool)MediaSessionMgr::defaultsSetVideoMotionRank(arg1);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetBandwidthVideoUploadMax(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
int32_t arg1 ;
@ -2855,6 +2869,20 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionM
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetBandwidthVideoDownloadMax(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
int32_t arg1 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = (int32_t)jarg1;
result = (bool)MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(arg1);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetPrefVideoSize(JNIEnv *jenv, jclass jcls, jint jarg1) {
jboolean jresult = 0 ;
tmedia_pref_video_size_t arg1 ;
@ -10464,6 +10492,23 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1rem
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNEnabledForICE(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;
bool arg2 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(SipStack **)&jarg1;
arg2 = jarg2 ? true : false;
result = (bool)(arg1)->setSTUNEnabledForICE(arg2);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipStack_1setSTUNServer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3) {
jboolean jresult = 0 ;
SipStack *arg1 = (SipStack *) 0 ;

View File

@ -246,7 +246,9 @@ sub DESTROY {
*defaultsGetProfile = *tinyWRAPc::MediaSessionMgr_defaultsGetProfile;
*defaultsSetBandwidthLevel = *tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthLevel;
*defaultsGetBandwidthLevel = *tinyWRAPc::MediaSessionMgr_defaultsGetBandwidthLevel;
*defaultsSetVideoMotionRank = *tinyWRAPc::MediaSessionMgr_defaultsSetVideoMotionRank;
*defaultsSetBandwidthVideoUploadMax = *tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoUploadMax;
*defaultsSetBandwidthVideoDownloadMax = *tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax;
*defaultsSetPrefVideoSize = *tinyWRAPc::MediaSessionMgr_defaultsSetPrefVideoSize;
*defaultsSetJbMargin = *tinyWRAPc::MediaSessionMgr_defaultsSetJbMargin;
*defaultsSetJbMaxLateRate = *tinyWRAPc::MediaSessionMgr_defaultsSetJbMaxLateRate;
@ -1957,6 +1959,7 @@ sub DESTROY {
*setSigCompParams = *tinyWRAPc::SipStack_setSigCompParams;
*addSigCompCompartment = *tinyWRAPc::SipStack_addSigCompCompartment;
*removeSigCompCompartment = *tinyWRAPc::SipStack_removeSigCompCompartment;
*setSTUNEnabledForICE = *tinyWRAPc::SipStack_setSTUNEnabledForICE;
*setSTUNServer = *tinyWRAPc::SipStack_setSTUNServer;
*setSTUNCred = *tinyWRAPc::SipStack_setSTUNCred;
*setSTUNEnabled = *tinyWRAPc::SipStack_setSTUNEnabled;

View File

@ -3976,6 +3976,34 @@ XS(_wrap_MediaSessionMgr_defaultsGetBandwidthLevel) {
}
XS(_wrap_MediaSessionMgr_defaultsSetVideoMotionRank) {
{
int32_t arg1 ;
int val1 ;
int ecode1 = 0 ;
int argvi = 0;
bool result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: MediaSessionMgr_defaultsSetVideoMotionRank(video_motion_rank);");
}
ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetVideoMotionRank" "', argument " "1"" of type '" "int32_t""'");
}
arg1 = static_cast< int32_t >(val1);
result = (bool)MediaSessionMgr::defaultsSetVideoMotionRank(arg1);
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax) {
{
int32_t arg1 ;
@ -4004,6 +4032,34 @@ XS(_wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax) {
}
XS(_wrap_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax) {
{
int32_t arg1 ;
int val1 ;
int ecode1 = 0 ;
int argvi = 0;
bool result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(bw_video_down_max_kbps);");
}
ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax" "', argument " "1"" of type '" "int32_t""'");
}
arg1 = static_cast< int32_t >(val1);
result = (bool)MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(arg1);
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_MediaSessionMgr_defaultsSetPrefVideoSize) {
{
tmedia_pref_video_size_t arg1 ;
@ -21987,6 +22043,44 @@ XS(_wrap_SipStack_removeSigCompCompartment) {
}
XS(_wrap_SipStack_setSTUNEnabledForICE) {
{
SipStack *arg1 = (SipStack *) 0 ;
bool arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
bool val2 ;
int ecode2 = 0 ;
int argvi = 0;
bool result;
dXSARGS;
if ((items < 2) || (items > 2)) {
SWIG_croak("Usage: SipStack_setSTUNEnabledForICE(self,enabled);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_SipStack, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SipStack_setSTUNEnabledForICE" "', argument " "1"" of type '" "SipStack *""'");
}
arg1 = reinterpret_cast< SipStack * >(argp1);
ecode2 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SipStack_setSTUNEnabledForICE" "', argument " "2"" of type '" "bool""'");
}
arg2 = static_cast< bool >(val2);
result = (bool)(arg1)->setSTUNEnabledForICE(arg2);
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_SipStack_setSTUNServer) {
{
SipStack *arg1 = (SipStack *) 0 ;
@ -22099,7 +22193,7 @@ XS(_wrap_SipStack_setSTUNEnabled) {
dXSARGS;
if ((items < 2) || (items > 2)) {
SWIG_croak("Usage: SipStack_setSTUNEnabled(self,bEnabled);");
SWIG_croak("Usage: SipStack_setSTUNEnabled(self,enabled);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_SipStack, 0 | 0 );
if (!SWIG_IsOK(res1)) {
@ -27260,7 +27354,9 @@ static swig_command_info swig_commands[] = {
{"tinyWRAPc::MediaSessionMgr_defaultsGetProfile", _wrap_MediaSessionMgr_defaultsGetProfile},
{"tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthLevel", _wrap_MediaSessionMgr_defaultsSetBandwidthLevel},
{"tinyWRAPc::MediaSessionMgr_defaultsGetBandwidthLevel", _wrap_MediaSessionMgr_defaultsGetBandwidthLevel},
{"tinyWRAPc::MediaSessionMgr_defaultsSetVideoMotionRank", _wrap_MediaSessionMgr_defaultsSetVideoMotionRank},
{"tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoUploadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax},
{"tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax},
{"tinyWRAPc::MediaSessionMgr_defaultsSetPrefVideoSize", _wrap_MediaSessionMgr_defaultsSetPrefVideoSize},
{"tinyWRAPc::MediaSessionMgr_defaultsSetJbMargin", _wrap_MediaSessionMgr_defaultsSetJbMargin},
{"tinyWRAPc::MediaSessionMgr_defaultsSetJbMaxLateRate", _wrap_MediaSessionMgr_defaultsSetJbMaxLateRate},
@ -27601,6 +27697,7 @@ static swig_command_info swig_commands[] = {
{"tinyWRAPc::SipStack_setSigCompParams", _wrap_SipStack_setSigCompParams},
{"tinyWRAPc::SipStack_addSigCompCompartment", _wrap_SipStack_addSigCompCompartment},
{"tinyWRAPc::SipStack_removeSigCompCompartment", _wrap_SipStack_removeSigCompCompartment},
{"tinyWRAPc::SipStack_setSTUNEnabledForICE", _wrap_SipStack_setSTUNEnabledForICE},
{"tinyWRAPc::SipStack_setSTUNServer", _wrap_SipStack_setSTUNServer},
{"tinyWRAPc::SipStack_setSTUNCred", _wrap_SipStack_setSTUNCred},
{"tinyWRAPc::SipStack_setSTUNEnabled", _wrap_SipStack_setSTUNEnabled},

View File

@ -199,8 +199,12 @@ class MediaSessionMgr(_object):
if _newclass:defaultsSetBandwidthLevel = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetBandwidthLevel)
__swig_getmethods__["defaultsGetBandwidthLevel"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsGetBandwidthLevel
if _newclass:defaultsGetBandwidthLevel = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsGetBandwidthLevel)
__swig_getmethods__["defaultsSetVideoMotionRank"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetVideoMotionRank
if _newclass:defaultsSetVideoMotionRank = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetVideoMotionRank)
__swig_getmethods__["defaultsSetBandwidthVideoUploadMax"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax
if _newclass:defaultsSetBandwidthVideoUploadMax = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax)
__swig_getmethods__["defaultsSetBandwidthVideoDownloadMax"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax
if _newclass:defaultsSetBandwidthVideoDownloadMax = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax)
__swig_getmethods__["defaultsSetPrefVideoSize"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize
if _newclass:defaultsSetPrefVideoSize = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize)
__swig_getmethods__["defaultsSetJbMargin"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetJbMargin
@ -330,10 +334,18 @@ def MediaSessionMgr_defaultsGetBandwidthLevel():
return _tinyWRAP.MediaSessionMgr_defaultsGetBandwidthLevel()
MediaSessionMgr_defaultsGetBandwidthLevel = _tinyWRAP.MediaSessionMgr_defaultsGetBandwidthLevel
def MediaSessionMgr_defaultsSetVideoMotionRank(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetVideoMotionRank(*args)
MediaSessionMgr_defaultsSetVideoMotionRank = _tinyWRAP.MediaSessionMgr_defaultsSetVideoMotionRank
def MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(*args)
MediaSessionMgr_defaultsSetBandwidthVideoUploadMax = _tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoUploadMax
def MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(*args)
MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax = _tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax
def MediaSessionMgr_defaultsSetPrefVideoSize(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize(*args)
MediaSessionMgr_defaultsSetPrefVideoSize = _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize
@ -1494,6 +1506,7 @@ class SipStack(SafeObject):
def setSigCompParams(self, *args): return _tinyWRAP.SipStack_setSigCompParams(self, *args)
def addSigCompCompartment(self, *args): return _tinyWRAP.SipStack_addSigCompCompartment(self, *args)
def removeSigCompCompartment(self, *args): return _tinyWRAP.SipStack_removeSigCompCompartment(self, *args)
def setSTUNEnabledForICE(self, *args): return _tinyWRAP.SipStack_setSTUNEnabledForICE(self, *args)
def setSTUNServer(self, *args): return _tinyWRAP.SipStack_setSTUNServer(self, *args)
def setSTUNCred(self, *args): return _tinyWRAP.SipStack_setSTUNCred(self, *args)
def setSTUNEnabled(self, *args): return _tinyWRAP.SipStack_setSTUNEnabled(self, *args)

View File

@ -6993,6 +6993,28 @@ fail:
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetVideoMotionRank(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
int32_t arg1 ;
int val1 ;
int ecode1 = 0 ;
PyObject * obj0 = 0 ;
bool result;
if (!PyArg_ParseTuple(args,(char *)"O:MediaSessionMgr_defaultsSetVideoMotionRank",&obj0)) SWIG_fail;
ecode1 = SWIG_AsVal_int(obj0, &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetVideoMotionRank" "', argument " "1"" of type '" "int32_t""'");
}
arg1 = static_cast< int32_t >(val1);
result = (bool)MediaSessionMgr::defaultsSetVideoMotionRank(arg1);
resultobj = SWIG_From_bool(static_cast< bool >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
int32_t arg1 ;
@ -7015,6 +7037,28 @@ fail:
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
int32_t arg1 ;
int val1 ;
int ecode1 = 0 ;
PyObject * obj0 = 0 ;
bool result;
if (!PyArg_ParseTuple(args,(char *)"O:MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax",&obj0)) SWIG_fail;
ecode1 = SWIG_AsVal_int(obj0, &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax" "', argument " "1"" of type '" "int32_t""'");
}
arg1 = static_cast< int32_t >(val1);
result = (bool)MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(arg1);
resultobj = SWIG_From_bool(static_cast< bool >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetPrefVideoSize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
tmedia_pref_video_size_t arg1 ;
@ -21556,6 +21600,37 @@ fail:
}
SWIGINTERN PyObject *_wrap_SipStack_setSTUNEnabledForICE(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
SipStack *arg1 = (SipStack *) 0 ;
bool arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
bool val2 ;
int ecode2 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
bool result;
if (!PyArg_ParseTuple(args,(char *)"OO:SipStack_setSTUNEnabledForICE",&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SipStack, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SipStack_setSTUNEnabledForICE" "', argument " "1"" of type '" "SipStack *""'");
}
arg1 = reinterpret_cast< SipStack * >(argp1);
ecode2 = SWIG_AsVal_bool(obj1, &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SipStack_setSTUNEnabledForICE" "', argument " "2"" of type '" "bool""'");
}
arg2 = static_cast< bool >(val2);
result = (bool)(arg1)->setSTUNEnabledForICE(arg2);
resultobj = SWIG_From_bool(static_cast< bool >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_SipStack_setSTUNServer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
SipStack *arg1 = (SipStack *) 0 ;
@ -25717,7 +25792,9 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"MediaSessionMgr_defaultsGetProfile", _wrap_MediaSessionMgr_defaultsGetProfile, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetBandwidthLevel", _wrap_MediaSessionMgr_defaultsSetBandwidthLevel, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsGetBandwidthLevel", _wrap_MediaSessionMgr_defaultsGetBandwidthLevel, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetVideoMotionRank", _wrap_MediaSessionMgr_defaultsSetVideoMotionRank, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetBandwidthVideoUploadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetPrefVideoSize", _wrap_MediaSessionMgr_defaultsSetPrefVideoSize, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetJbMargin", _wrap_MediaSessionMgr_defaultsSetJbMargin, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetJbMaxLateRate", _wrap_MediaSessionMgr_defaultsSetJbMaxLateRate, METH_VARARGS, NULL},
@ -26107,6 +26184,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"SipStack_setSigCompParams", _wrap_SipStack_setSigCompParams, METH_VARARGS, NULL},
{ (char *)"SipStack_addSigCompCompartment", _wrap_SipStack_addSigCompCompartment, METH_VARARGS, NULL},
{ (char *)"SipStack_removeSigCompCompartment", _wrap_SipStack_removeSigCompCompartment, METH_VARARGS, NULL},
{ (char *)"SipStack_setSTUNEnabledForICE", _wrap_SipStack_setSTUNEnabledForICE, METH_VARARGS, NULL},
{ (char *)"SipStack_setSTUNServer", _wrap_SipStack_setSTUNServer, METH_VARARGS, NULL},
{ (char *)"SipStack_setSTUNCred", _wrap_SipStack_setSTUNCred, METH_VARARGS, NULL},
{ (char *)"SipStack_setSTUNEnabled", _wrap_SipStack_setSTUNEnabled, METH_VARARGS, NULL},

View File

@ -57,6 +57,9 @@ typedef struct tdav_session_av_s
tmedia_srtp_type_t srtp_type;
tmedia_srtp_mode_t srtp_mode;
int32_t bandwidth_max_upload;
int32_t bandwidth_max_download;
/* sdp capabilities (RFC 5939) */
struct tdav_sdp_caps_s* sdp_caps;

View File

@ -120,7 +120,7 @@ static void tdav_codec_vp8_rtp_callback(tdav_codec_vp8_t *self, const void *data
static int tdav_codec_vp8_set(tmedia_codec_t* self, const tmedia_param_t* param)
{
tdav_codec_vp8_t* vp8 = (tdav_codec_vp8_t*)self;
vpx_codec_err_t vpx_ret;
vpx_codec_err_t vpx_ret = VPX_CODEC_OK;
if(!vp8->encoder.initialized){
TSK_DEBUG_ERROR("Codec not initialized");
@ -138,14 +138,14 @@ static int tdav_codec_vp8_set(tmedia_codec_t* self, const tmedia_param_t* param)
}
case tmedia_codec_action_bw_down:
{
vp8->encoder.cfg.rc_target_bitrate = ((vp8->encoder.cfg.rc_target_bitrate << 1) / 3);
vp8->encoder.cfg.rc_target_bitrate = TSK_CLAMP(0, (int32_t)((vp8->encoder.cfg.rc_target_bitrate << 1) / 3), TMEDIA_CODEC(vp8)->bandwidth_max_upload);
TSK_DEBUG_INFO("New target bitrate = %d kbps", vp8->encoder.cfg.rc_target_bitrate);
reconf = tsk_true;
break;
}
case tmedia_codec_action_bw_up:
{
vp8->encoder.cfg.rc_target_bitrate = ((vp8->encoder.cfg.rc_target_bitrate * 3) >> 1);
vp8->encoder.cfg.rc_target_bitrate = TSK_CLAMP(0, (int32_t)((vp8->encoder.cfg.rc_target_bitrate * 3) >> 1), TMEDIA_CODEC(vp8)->bandwidth_max_upload);
TSK_DEBUG_INFO("New target bitrate = %d kbps", vp8->encoder.cfg.rc_target_bitrate);
reconf = tsk_true;
break;
@ -157,10 +157,17 @@ static int tdav_codec_vp8_set(tmedia_codec_t* self, const tmedia_param_t* param)
TSK_DEBUG_ERROR("vpx_codec_enc_config_set failed with error =%s", vpx_codec_err_to_string(vpx_ret));
}
}
return (vpx_ret == VPX_CODEC_OK) ? 0 : -2;
}
else if(tsk_striequals(param->key, "bandwidth-max-upload")){
int32_t bw_max_upload = *((int32_t*)param->value);
TSK_DEBUG_INFO("VP8 codec: bandwidth-max-upload=%d", bw_max_upload);
TMEDIA_CODEC(vp8)->bandwidth_max_upload = bw_max_upload;
return 0;
}
else if(tsk_striequals(param->key, "rotation")){
// IMPORTANT: changing resolution requires at least libvpx v1.1.0 "Eider"
int rotation = *((int32_t*)param->value);
int32_t rotation = *((int32_t*)param->value);
if(vp8->encoder.rotation != rotation){
vp8->encoder.rotation = rotation;
if(vp8->encoder.initialized){
@ -665,7 +672,11 @@ int tdav_codec_vp8_open_encoder(tdav_codec_vp8_t* self)
}
self->encoder.cfg.g_timebase.num = 1;
self->encoder.cfg.g_timebase.den = TMEDIA_CODEC_VIDEO(self)->out.fps;
self->encoder.cfg.rc_target_bitrate = self->encoder.target_bitrate = TSK_CLAMP(0, (int32_t)(TMEDIA_CODEC_VIDEO(self)->out.width * TMEDIA_CODEC_VIDEO(self)->out.height * 256 / 352 / 288), self->encoder.max_bw_kpbs);
self->encoder.cfg.rc_target_bitrate = self->encoder.target_bitrate = TSK_CLAMP(
0,
tmedia_get_video_bandwidth_kbps_2(TMEDIA_CODEC_VIDEO(self)->out.width, TMEDIA_CODEC_VIDEO(self)->out.height, TMEDIA_CODEC_VIDEO(self)->out.fps),
self->encoder.max_bw_kpbs
);
self->encoder.cfg.g_w = (self->encoder.rotation == 90 || self->encoder.rotation == 270) ? TMEDIA_CODEC_VIDEO(self)->out.height : TMEDIA_CODEC_VIDEO(self)->out.width;
self->encoder.cfg.g_h = (self->encoder.rotation == 90 || self->encoder.rotation == 270) ? TMEDIA_CODEC_VIDEO(self)->out.width : TMEDIA_CODEC_VIDEO(self)->out.height;
self->encoder.cfg.kf_mode = VPX_KF_AUTO;

View File

@ -45,6 +45,7 @@
#include "tls/tnet_dtls.h"
#include <math.h> /* log10 */
#include <limits.h> /* INT_MAX */
#if HAVE_SRTP
@ -211,6 +212,8 @@ int tdav_session_av_init(tdav_session_av_t* self, tmedia_type_t media_type)
self->use_rtcp = tmedia_defaults_get_rtcp_enabled();
self->use_rtcpmux = tmedia_defaults_get_rtcpmux_enabled();
self->use_avpf = (profile == tmedia_profile_rtcweb); // negotiate if not RTCWeb profile or RFC5939 is in action
self->bandwidth_max_upload = (media_type == tmedia_video ? tmedia_defaults_get_bandwidth_video_upload_max() : INT_MAX); // INT_MAX or <=0 means undefined
self->bandwidth_max_download = (media_type == tmedia_video ? tmedia_defaults_get_bandwidth_video_download_max() : INT_MAX); // INT_MAX or <=0 means undefined
#if HAVE_SRTP
// this is the default value and can be updated by the user using "session_set('srtp-mode', mode_e)"
self->srtp_type = (profile == tmedia_profile_rtcweb) ? tmedia_srtp_type_sdes : tmedia_defaults_get_srtp_type();
@ -500,10 +503,11 @@ int tdav_session_av_start(tdav_session_av_t* self, const tmedia_codec_t* best_co
ret = trtp_manager_set_dtls_callback(self->rtp_manager, self, _tdav_session_av_srtp_dtls_cb);
#endif /* HAVE_SRTP */
// these information will be updated when the RTP manager starts if ICE is enabled
// network information will be updated when the RTP manager starts if ICE is enabled
ret = trtp_manager_set_rtp_remote(self->rtp_manager, self->remote_ip, self->remote_port);
ret = trtp_manager_set_payload_type(self->rtp_manager, best_codec->neg_format ? atoi(best_codec->neg_format) : atoi(best_codec->format));
self->rtp_manager->use_rtcpmux = self->use_rtcpmux;
ret = trtp_manager_set_payload_type(self->rtp_manager, best_codec->neg_format ? atoi(best_codec->neg_format) : atoi(best_codec->format));
ret = trtp_manager_set_app_bandwidth_max(self->rtp_manager, self->bandwidth_max_upload, self->bandwidth_max_download);
ret = trtp_manager_start(self->rtp_manager);
// because of AudioUnit under iOS => prepare both consumer and producer then start() at the same time
@ -707,6 +711,12 @@ const tsdp_header_M_t* tdav_session_av_get_lo(tdav_session_av_t* self, tsk_bool_
TSDP_HEADER_A_VA_ARGS("rtcp-fb", "* nack pli"),
TSDP_HEADER_A_VA_ARGS("rtcp-fb", "* ccm fir"),
tsk_null);
// http://tools.ietf.org/html/rfc3556
if(self->bandwidth_max_download > 0 && self->bandwidth_max_download != INT_MAX){ // INT_MAX or <=0 means undefined
tsdp_header_M_add_headers(base->M.lo,
TSDP_HEADER_B_VA_ARGS("AS", self->bandwidth_max_download),
tsk_null);
}
}
}
else{

View File

@ -570,7 +570,9 @@ static int tdav_session_video_rtcp_cb(const void* callback_data, const trtp_rtcp
case trtp_rtcp_psfb_fci_type_afb:
{
if(psfb->afb.type == trtp_rtcp_psfb_afb_type_remb){
TSK_DEBUG_INFO("Receiving RTCP-AFB-REMB (%u), exp=%u, mantissa=%u", ((const trtp_rtcp_report_fb_t*)psfb)->ssrc_media, psfb->afb.remb.exp, psfb->afb.remb.mantissa);
uint32_t bandwidth = ((psfb->afb.remb.mantissa << psfb->afb.remb.exp) / 1024);
TSK_DEBUG_INFO("Receiving RTCP-AFB-REMB (%u), exp=%u, mantissa=%u, bandwidth = %ukbps", ((const trtp_rtcp_report_fb_t*)psfb)->ssrc_media, psfb->afb.remb.exp, psfb->afb.remb.mantissa, bandwidth);
// for now we just don't respect the requested bandwidth
}
break;
}

View File

@ -226,6 +226,10 @@ typedef struct tmedia_codec_s
char* format;
//! bandwidth level
tmedia_bandwidth_level_t bl; // @deprecated
//! maximum bandwidth to use for outgoing RTP (INT_MAX or <=0 means undefined)
int32_t bandwidth_max_upload;
//! maximum bandwidth to use for incoming RTP (INT_MAX or <=0 means undefined)
int32_t bandwidth_max_download;
//! the negociated format (only useful for codecs with dyn. payload type)
char* neg_format;
//! whether this is a passthrough codec

View File

@ -252,6 +252,8 @@ TINYMEDIA_API int tmedia_parse_video_imageattr(const char* imageattr, tmedia_pre
TINYMEDIA_API char* tmedia_get_video_fmtp(tmedia_pref_video_size_t pref_vs);
TINYMEDIA_API char* tmedia_get_video_imageattr(tmedia_pref_video_size_t pref_vs, unsigned in_width, unsigned in_height, unsigned out_width, unsigned out_height);
TINYMEDIA_API int tmedia_get_video_quality(tmedia_bandwidth_level_t bl);
TINYMEDIA_API int32_t tmedia_get_video_bandwidth_kbps(unsigned width, unsigned height, unsigned fps, unsigned motion_rank);
TINYMEDIA_API int32_t tmedia_get_video_bandwidth_kbps_2(unsigned width, unsigned height, unsigned fps);
#define tmedia_get_video_qscale tmedia_get_video_quality
TMEDIA_END_DECLS

View File

@ -33,8 +33,12 @@ TINYMEDIA_API int tmedia_defaults_set_profile(tmedia_profile_t profile);
TINYMEDIA_API tmedia_profile_t tmedia_defaults_get_profile();
TINYMEDIA_API int tmedia_defaults_set_bl(tmedia_bandwidth_level_t bl); // @deprecated
TINYMEDIA_API tmedia_bandwidth_level_t tmedia_defaults_get_bl(); // @deprecated
TINYMEDIA_API int tmedia_defaults_set_video_motion_rank(int32_t video_motion_rank);
TINYMEDIA_API int32_t tmedia_defaults_get_video_motion_rank();
TINYMEDIA_API int tmedia_defaults_set_bandwidth_video_upload_max(int32_t bw_video_up_max_kbps);
TINYMEDIA_API int32_t tmedia_defaults_get_bandwidth_video_upload_max();
TINYMEDIA_API int tmedia_defaults_set_bandwidth_video_download_max(int32_t bw_video_down_max_kbps);
TINYMEDIA_API int32_t tmedia_defaults_get_bandwidth_video_download_max();
TINYMEDIA_API int tmedia_defaults_set_pref_video_size(tmedia_pref_video_size_t pref_video_size);
TINYMEDIA_API tmedia_pref_video_size_t tmedia_defaults_get_pref_video_size();
TINYMEDIA_API int tmedia_defaults_set_jb_margin(int32_t jb_margin_ms);

View File

@ -36,6 +36,8 @@
#include "tsk_memory.h"
#include "tsk_debug.h"
#include <limits.h> /* INT_MAX */
/**@defgroup tmedia_codec_group Codecs
*/
@ -80,6 +82,8 @@ int tmedia_codec_init(tmedia_codec_t* self, tmedia_type_t type, const char* name
tsk_strupdate(&self->name, name);
tsk_strupdate(&self->desc,desc);
tsk_strupdate(&self->format, format);
if(!self->bandwidth_max_upload) self->bandwidth_max_upload = (type == tmedia_video ? tmedia_defaults_get_bandwidth_video_upload_max() : INT_MAX); // INT_MAX or <=0 means undefined
if(!self->bandwidth_max_download) self->bandwidth_max_download = (type == tmedia_video ? tmedia_defaults_get_bandwidth_video_download_max() : INT_MAX); // INT_MAX or <=0 means undefined
if(!self->in.rate) self->in.rate = self->plugin->rate;
if(!self->out.rate) self->out.rate = self->plugin->rate;

View File

@ -31,6 +31,7 @@
#include "tinymedia/tmedia_session.h"
#include "tinymedia/tmedia_imageattr.h"
#include "tinymedia/tmedia_defaults.h"
#include "tsk_params.h"
#include "tsk_debug.h"
@ -313,4 +314,14 @@ int tmedia_get_video_quality(tmedia_bandwidth_level_t bl)
case tmedia_bl_hight: return 5;
case tmedia_bl_unrestricted: return 1;
}
}
int32_t tmedia_get_video_bandwidth_kbps(unsigned width, unsigned height, unsigned fps, unsigned motion_rank)
{
return (int32_t)((width * height * fps * motion_rank * 0.07) / 1024);
}
int32_t tmedia_get_video_bandwidth_kbps_2(unsigned width, unsigned height, unsigned fps)
{
return tmedia_get_video_bandwidth_kbps(width, height, fps, tmedia_defaults_get_video_motion_rank());
}

View File

@ -30,7 +30,9 @@
static tmedia_profile_t __profile = tmedia_profile_default;
static tmedia_bandwidth_level_t __bl = tmedia_bl_unrestricted;
static int32_t __video_motion_rank = 2; // allowed values: 1(low), 2(medium) or 4(high)
static int32_t __bw_video_up_max_kbps = INT_MAX; // <= 0: unrestricted, Unit: kbps
static int32_t __bw_video_down_max_kbps = INT_MAX; // <= 0: unrestricted, Unit: kbps
static tmedia_pref_video_size_t __pref_video_size = tmedia_pref_video_size_cif; // 352 x 288: Android, iOS, WP7
static int32_t __jb_margin_ms = -1; // disable
static int32_t __jb_max_late_rate_percent = -1; // -1: disable 4: default for speex
@ -93,6 +95,16 @@ tmedia_bandwidth_level_t tmedia_defaults_get_bl(){
return __bl;
}
int tmedia_defaults_set_video_motion_rank(int32_t video_motion_rank){
switch(video_motion_rank){
case 1/*low*/: case 2/*medium*/: case 4/*high*/: __video_motion_rank = video_motion_rank; return 0;
default: TSK_DEBUG_ERROR("%d not valid for video motion rank. Must be 1, 2 or 4", video_motion_rank); return -1;
}
}
int32_t tmedia_defaults_get_video_motion_rank(){
return __video_motion_rank;
}
int tmedia_defaults_set_bandwidth_video_upload_max(int32_t bw_video_up_max_kbps){
__bw_video_up_max_kbps = bw_video_up_max_kbps > 0 ? bw_video_up_max_kbps : INT_MAX;
return 0;
@ -101,6 +113,14 @@ int32_t tmedia_defaults_get_bandwidth_video_upload_max(){
return __bw_video_up_max_kbps;
}
int tmedia_defaults_set_bandwidth_video_download_max(int32_t bw_video_down_max_kbps){
__bw_video_down_max_kbps = bw_video_down_max_kbps > 0 ? bw_video_down_max_kbps : INT_MAX;
return 0;
}
int32_t tmedia_defaults_get_bandwidth_video_download_max(){
return __bw_video_down_max_kbps;
}
int tmedia_defaults_set_pref_video_size(tmedia_pref_video_size_t pref_video_size){
__pref_video_size = pref_video_size;
return 0;

View File

@ -48,6 +48,7 @@ int trtp_rtcp_session_set_callback(struct trtp_rtcp_session_s* self, trtp_rtcp_c
#if HAVE_SRTP
int trtp_rtcp_session_set_srtp_sess(struct trtp_rtcp_session_s* self, const srtp_t* session);
#endif
int trtp_rtcp_session_set_app_bandwidth_max(struct trtp_rtcp_session_s* self, int32_t bw_upload_kbps, int32_t bw_download_kbps);
int trtp_rtcp_session_start(struct trtp_rtcp_session_s* self, tnet_fd_t local_fd, const struct sockaddr* remote_addr);
int trtp_rtcp_session_stop(struct trtp_rtcp_session_s* self);
int trtp_rtcp_session_process_rtp_out(struct trtp_rtcp_session_s* self, const struct trtp_rtp_packet_s* packet_rtp, tsk_size_t size);

View File

@ -53,6 +53,8 @@ typedef struct trtp_manager_s
tsk_bool_t is_force_symetric_rtp;
tsk_bool_t is_symetric_rtp_checked;
tsk_bool_t is_symetric_rtcp_checked;
int32_t app_bw_max_upload; // application specific (kbps)
int32_t app_bw_max_download; // application specific (kbps)
tnet_transport_t* transport;
@ -200,6 +202,7 @@ TINYRTP_API int trtp_manager_start(trtp_manager_t* self);
TINYRTP_API tsk_size_t trtp_manager_send_rtp(trtp_manager_t* self, const void* data, tsk_size_t size, uint32_t duration, tsk_bool_t marker, tsk_bool_t last_packet);
TINYRTP_API tsk_size_t trtp_manager_send_rtp_packet(trtp_manager_t* self, const struct trtp_rtp_packet_s* packet, tsk_bool_t bypass_encrypt);
TINYRTP_API tsk_size_t trtp_manager_send_rtp_raw(trtp_manager_t* self, const void* data, tsk_size_t size);
TINYRTP_API int trtp_manager_set_app_bandwidth_max(trtp_manager_t* self, int32_t bw_upload_kbps, int32_t bw_download_kbps);
TINYRTP_API int trtp_manager_signal_pkt_loss(trtp_manager_t* self, uint32_t ssrc_media, const uint16_t* seq_nums, tsk_size_t count);
TINYRTP_API int trtp_manager_signal_frame_corrupted(trtp_manager_t* self, uint32_t ssrc_media);
TINYRTP_API int trtp_manager_signal_jb_error(trtp_manager_t* self, uint32_t ssrc_media);

View File

@ -49,6 +49,7 @@
#include <stdlib.h>
#include <string.h>
#include <limits.h> /* INT_MAX */
#ifdef _MSC_VER
static double drand48() { return (((double)rand()) / RAND_MAX); }
@ -269,6 +270,9 @@ typedef struct trtp_rtcp_session_s
const void* callback_data;
trtp_rtcp_cb_f callback;
int32_t app_bw_max_upload; // application specific (kbps)
int32_t app_bw_max_download; // application specific (kbps)
struct{
tsk_timer_manager_handle_t* handle_global;
tsk_timer_id_t id_report;
@ -325,6 +329,8 @@ static tsk_object_t* trtp_rtcp_session_ctor(tsk_object_t * self, va_list * app)
{
trtp_rtcp_session_t *session = self;
if(session){
session->app_bw_max_upload = INT_MAX; // INT_MAX or <=0 means undefined
session->app_bw_max_download = INT_MAX; // INT_MAX or <=0 means undefined
session->sources = tsk_list_create();
session->timer.id_report = TSK_INVALID_TIMER_ID;
session->timer.id_bye = TSK_INVALID_TIMER_ID;
@ -432,6 +438,17 @@ int trtp_rtcp_session_set_srtp_sess(trtp_rtcp_session_t* self, const srtp_t* ses
}
#endif
int trtp_rtcp_session_set_app_bandwidth_max(trtp_rtcp_session_t* self, int32_t bw_upload_kbps, int32_t bw_download_kbps)
{
if(!self){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
self->app_bw_max_upload = bw_upload_kbps;
self->app_bw_max_download = bw_download_kbps;
return 0;
}
int trtp_rtcp_session_start(trtp_rtcp_session_t* self, tnet_fd_t local_fd, const struct sockaddr * remote_addr)
{
int ret;
@ -1167,32 +1184,15 @@ static tsk_size_t SendRTCPReport(trtp_rtcp_session_t* session, event_ e)
}
}
// RFC 4885 - 3.1. Compound RTCP Feedback Packets
// The FB message(s) MUST be placed in the compound packet after RR and
// SDES RTCP packets defined in [1]. The ordering with respect to other
// RTCP extensions is not defined.
// RFC 5104 Full Intra Request (FIR)
if(packet_lost){
#if 0 // Will be managed by the jitter buffer
trtp_rtcp_report_psfb_t* psfb_fir = trtp_rtcp_report_psfb_create_fir(session->fir_seqnr++, session->source_local->ssrc, source->ssrc);
if(psfb_fir){
trtp_rtcp_packet_add_packet((trtp_rtcp_packet_t*)sr, (trtp_rtcp_packet_t*)psfb_fir, tsk_false);
TSK_OBJECT_SAFE_FREE(psfb_fir);
}
TSK_DEBUG_INFO("RTCP Packet Lost (Sending FIR)");
#endif
}
#if 0
// draft-alvestrand-rmcat-remb-02
{
trtp_rtcp_report_psfb_t* psfb_afb_remb = trtp_rtcp_report_psfb_create_afb_remb(session->source_local->ssrc, source->ssrc, 150000);
if(session->app_bw_max_download > 0 && session->app_bw_max_download != INT_MAX){ // INT_MAX or <=0 means undefined
// app_bw_max_download unit is kbps while create_afb_remb() expect bps
trtp_rtcp_report_psfb_t* psfb_afb_remb = trtp_rtcp_report_psfb_create_afb_remb(session->source_local->ssrc, source->ssrc, (session->app_bw_max_download * 1024));
if(psfb_afb_remb){
trtp_rtcp_packet_add_packet((trtp_rtcp_packet_t*)sr, (trtp_rtcp_packet_t*)psfb_afb_remb, tsk_false);
TSK_OBJECT_SAFE_FREE(psfb_afb_remb);
}
}
#endif
// serialize and send the packet
ret = _trtp_rtcp_session_send_pkt(session, (trtp_rtcp_packet_t*)sr);

View File

@ -36,6 +36,8 @@
#include "tsk_md5.h"
#include "tsk_debug.h"
#include <limits.h> /* INT_MAX */
#if !defined(TRTP_TRANSPORT_NAME)
# define TRTP_TRANSPORT_NAME "RTP/RTCP Manager"
#endif
@ -1285,6 +1287,7 @@ int trtp_manager_start(trtp_manager_t* self)
}
if(self->rtcp.session){
ret = trtp_rtcp_session_set_callback(self->rtcp.session, self->rtcp.cb.fun, self->rtcp.cb.usrdata);
ret = trtp_rtcp_session_set_app_bandwidth_max(self->rtcp.session, self->app_bw_max_upload, self->app_bw_max_download);
if((ret = trtp_rtcp_session_start(self->rtcp.session, local_rtcp_fd, (const struct sockaddr *)&self->rtcp.remote_addr))){
TSK_DEBUG_ERROR("Failed to start RTCP session");
goto bail;
@ -1464,6 +1467,18 @@ tsk_size_t trtp_manager_send_rtp_raw(trtp_manager_t* self, const void* data, tsk
return 0;
}
int trtp_manager_set_app_bandwidth_max(trtp_manager_t* self, int32_t bw_upload_kbps, int32_t bw_download_kbps)
{
if(self){
self->app_bw_max_upload = bw_upload_kbps;
self->app_bw_max_download = bw_download_kbps;
if(self->rtcp.session){
return trtp_rtcp_session_set_app_bandwidth_max(self->rtcp.session, bw_upload_kbps, bw_download_kbps);
}
return 0;
}
return -1;
}
int trtp_manager_signal_pkt_loss(trtp_manager_t* self, uint32_t ssrc_media, const uint16_t* seq_nums, tsk_size_t count)
{
if(self && self->rtcp.session){
@ -1551,6 +1566,8 @@ static tsk_object_t* trtp_manager_ctor(tsk_object_t * self, va_list * app)
manager->port_range.start = tmedia_defaults_get_rtp_port_range_start();
manager->port_range.stop = tmedia_defaults_get_rtp_port_range_stop();
manager->is_force_symetric_rtp = tmedia_defaults_get_rtp_symetric_enabled();
manager->app_bw_max_upload = INT_MAX; // INT_MAX or <=0 means undefined
manager->app_bw_max_download = INT_MAX; // INT_MAX or <=0 means undefined
/* srtp */
#if HAVE_SRTP