[feature][T8TSK-195][TCAM_T800_SW_0284][rtp] add interface to set call rtp ssrc

Change-Id: Ic4b319e1ab93de4e9c053a779e67aae27f52ccae
(cherry picked from commit 4df0b51fe88b5a322114304ccc36f1b5d6f3df06)
diff --git a/lib/liblynq-call/include/libcall/lynq_call.h b/lib/liblynq-call/include/libcall/lynq_call.h
index 0b1b86e..21de03b 100755
--- a/lib/liblynq-call/include/libcall/lynq_call.h
+++ b/lib/liblynq-call/include/libcall/lynq_call.h
@@ -9,7 +9,8 @@
 #define LYNQ_CALL_MAX 3

 #define LYNQ_CALL_FAIL_VENDOR_CAUSE 64

 #define MAX_IP_LENGTH 128

-#define MAX_VLAN_INFO_LENGTH 128

+#define MAX_VLAN_INFO_LENGTH 32

+#define MAX_SSRC_INFO_LENGTH 10   /*2^32=4294967296, 10 digit*/

 

 typedef enum {

     LYNQ_CALL_FAIL_UNOBTAINABLE_NUMBER = 1,

@@ -148,18 +149,26 @@
     RTP_MODE_MAX

 }LYNQ_Rtp_Mode;

 

+typedef enum{

+    Rtp_Ssrc_random = 0,     

+    RTP_Ssrc_specific =1,   

+}LYNQ_Rtp_Ssrc_Mode;

+

 /*set*/

 int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode); 

 int lynq_set_remote_rtp_ip(const char* ip, const int ip_length);

 int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length);

 int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port);

 int lynq_set_rtp_param(const int clock_rate,const int channels,const int latency); //only for client

+int lynq_set_call_rtp_ssrc(const LYNQ_Rtp_Ssrc_Mode ssrc_mode, const unsigned int ssrc);

+

 /*get*/

 LYNQ_Audio_Mode lynq_get_voice_audio_mode();

 int lynq_get_remote_rtp_ip(char* ip, const int ip_length);

 int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length);

 int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port);

 int lynq_get_rtp_param(int* clock_rate,int* channels, int* latency);//only for client

+int lynq_get_call_rtp_ssrc(LYNQ_Rtp_Ssrc_Mode* ssrc_mod, unsigned int* ssrc);

 /*Audio Path setting end*/

 

 void lynq_set_test_mode(const int test_mode);

diff --git a/lib/liblynq-call/lynq_call_rtp.cpp b/lib/liblynq-call/lynq_call_rtp.cpp
index e22b016..9e0d546 100755
--- a/lib/liblynq-call/lynq_call_rtp.cpp
+++ b/lib/liblynq-call/lynq_call_rtp.cpp
@@ -19,14 +19,18 @@
 #include "lynq_call_common.h"

 

 #define RTP_FROM_CMD "gst-launch-1.0 -v udpsrc port=%d caps=\'application/x-rtp, media=(string)audio, clock-rate=(int)%d, channels=(int)%d\' ! rtpjitterbuffer latency=%d ! rtppcmadepay ! alawdec ! audioresample ! audioconvert ! alsasink device=\'hw:0,2\'"

-#define RTP_TO_CMD   "gst-launch-1.0 -v alsasrc device=\'hw:0,6\' ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s %s auto-multicast=true port=%d"

+#define RTP_TO_CMD   "gst-launch-1.0 -v alsasrc device=\'hw:0,6\' ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! %s udpsink host=%s %s auto-multicast=true port=%d"

 #define RTP_VLAN_INFO_FORMAT "multicast-iface=\"%s\""

+#define RTP_SSRC_INFO_FORMAT " rtpmux name=mux ssrc=%u !"

+

 #define USER_LOG_TAG "LYNQ_CALL"

 

 typedef struct

 {   

     char ip[MAX_IP_LENGTH];

     int port;   

+    LYNQ_Rtp_Ssrc_Mode ssrc_mode;

+    unsigned int ssrc;

     char vlan_info[MAX_VLAN_INFO_LENGTH];

 }lynq_rtp_server_info;

 

@@ -105,6 +109,7 @@
     int* rtp_mode= (int*) arg;

     char cmd[384];

     char vlan_para_string[sizeof(RTP_VLAN_INFO_FORMAT)+MAX_VLAN_INFO_LENGTH-2/*sizeof "%s"*/]={0};

+    char ssrc_para_string[sizeof(RTP_SSRC_INFO_FORMAT)+MAX_SSRC_INFO_LENGTH-2/*sizeof "%u"*/]={0};

     LYINFLOG("lynq_start_rtp_cmd: rtp_mode is %d",(*rtp_mode));    

     if ((*rtp_mode) == RTP_CLIENT)

     {

@@ -120,10 +125,15 @@
         {

            sprintf(vlan_para_string,RTP_VLAN_INFO_FORMAT,g_rtp_server_info.vlan_info);

         }

+

+        if(g_rtp_server_info.ssrc_mode == RTP_Ssrc_specific)

+        {

+           sprintf(ssrc_para_string,RTP_SSRC_INFO_FORMAT,g_rtp_server_info.ssrc);

+        }

         sprintf(cmd,RTP_TO_CMD,   \

-        g_rtp_server_info.ip,vlan_para_string,g_rtp_server_info.port);       

+        ssrc_para_string, g_rtp_server_info.ip,vlan_para_string,g_rtp_server_info.port);       

         

-    //  LYINFLOG("start to rtp play: cmd is %s",cmd);

+        LYINFLOG("start to rtp play: cmd is %s",cmd);

         system(cmd);    

     }

     return NULL;

@@ -275,6 +285,17 @@
     LYINFLOG("lynq_set_rtp_param suc: clockrate is %d, channels is %d, latency is %d", clock_rate, channels, latency);

     return RESULT_OK;  

 }

+int lynq_set_call_rtp_ssrc(const LYNQ_Rtp_Ssrc_Mode ssrc_mode,const unsigned int ssrc)

+{

+    if(ssrc_mode < Rtp_Ssrc_random || ssrc_mode > RTP_Ssrc_specific)

+    {

+        return LYNQ_E_PARAMETER_ANONALY;

+    }

+    g_rtp_server_info.ssrc_mode = ssrc_mode;

+    g_rtp_server_info.ssrc = ssrc ;

+    LYINFLOG("%s suc: param is %d %d", __func__, ssrc_mode, ssrc);

+    return RESULT_OK;

+}

 /*get*/

 LYNQ_Audio_Mode lynq_get_voice_audio_mode()

 {

@@ -355,3 +376,16 @@
 

     return RESULT_OK;  

 }

+int lynq_get_call_rtp_ssrc(LYNQ_Rtp_Ssrc_Mode* ssrc_mode, unsigned int* ssrc)

+{

+    if(ssrc_mode == NULL || ssrc ==NULL)

+    {

+        LYERRLOG("input parameter is NULL");

+        return LYNQ_E_PARAMETER_ANONALY;

+    }

+    

+    *ssrc_mode = g_rtp_server_info.ssrc_mode;

+    *ssrc = g_rtp_server_info.ssrc ;   

+    

+    return RESULT_OK;

+}