[Feature]Add liblynq-rtp
Change-Id: Ie5c3166d0bf56156a90ada278236c206affe0e6c
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-rtp/liblynq-rtp.bb b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-rtp/liblynq-rtp.bb
new file mode 100755
index 0000000..cca5119
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-rtp/liblynq-rtp.bb
@@ -0,0 +1,65 @@
+inherit externalsrc package
+
+DESCRIPTION = "liblynq conti plugin so"
+SECTION = "base"
+LICENSE = "MediaTekProprietary"
+#LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+inherit workonsrc
+DEPENDS += "platform-libs platform-libs-common libpal liblynq-log"
+WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-rtp/"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
+#Parameters passed to do_compile()
+EXTRA_OEMAKE = "'RAT_CONFIG_C2K_SUPPORT = ${RAT_CONFIG_C2K_SUPPORT}'\
+ 'MTK_MULTI_SIM_SUPPORT = ${MTK_MULTI_SIM_SUPPORT}'\
+ 'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
+
+
+FILES_${PN} = "${base_libdir}/*.so \
+ ${base_bindir}\
+ ${base_sbindir} \
+ /etc/dbus-1/system.d/"
+
+FILES_${PN}-dev = "/test \
+ ${includedir}"
+
+FILES_${PN}-doc = "/doc"
+
+FILES_${PN}-dbg ="${base_bindir}/.debug \
+ ${base_libdir}/.debug \
+ ${base_sbindir}/.debug"
+
+INSANE_SKIP_${PN} += "already-stripped"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+ if [ "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" ]; then
+ oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"
+ elif [ "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4" ]; then
+ oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"
+ elif [ "${PACKAGE_ARCH}" = "cortexa53hf-neon-fp-armv8" ]; then
+ oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE -mhard-float -mfpu=neon-fp-armv8 -mfloat-abi=hard -mcpu=cortex-a53 -mtune=cortex-a53"
+ else
+ oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"
+ fi
+}
+
+do_install () {
+ oe_runmake install ROOT=${D}
+
+
+
+ if [ -d "${WORKONSRC}" ] ; then
+ install -d ${D}${includedir}
+ cp -arf ${S}/include/ ${D}${includedir}/
+ fi
+}
+
+addtask bachclean
+do_bachclean () {
+ oe_runmake clean
+}
\ No newline at end of file
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
index eb05099..2960505 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
@@ -45,6 +45,7 @@
liblynq-sms \
liblynq-gnss \
liblynq-wifi6 \
+ liblynq-rtp \
lynq-gnss-test \
lynq-cv2x \
ntp \
diff --git a/src/lynq/lib/liblynq-rtp/Makefile b/src/lynq/lib/liblynq-rtp/Makefile
new file mode 100755
index 0000000..a96d783
--- /dev/null
+++ b/src/lynq/lib/liblynq-rtp/Makefile
@@ -0,0 +1,61 @@
+SHELL = /bin/sh
+RM = rm -f
+
+
+LOCAL_CFLAGS := \
+ -Wall \
+ -g \
+ -Wall \
+ -fPIC \
+ -shared \
+ -D__COMPILE_OPTION__ \
+ -D__LINUX_OS__ \
+
+CPPFLAGS=\
+ -std=c++11 \
+
+LOCAL_PATH = .
+$(warning ################# Typethree LOCAL_PATH:$(LOCAL_PATH),ROOT: $(ROOT),includedir:$(includedir),libdir:$(libdir))
+
+LOCAL_C_INCLUDES = \
+ -I$(LOCAL_PATH)/include \
+ -I$(ROOT)$(includedir)/liblog \
+ -I$(ROOT)$(includedir)/logger \
+ -I$(ROOT)$(includedir)/include \
+
+LOCAL_LIBS := \
+ -L. \
+ -ldl \
+ -lrt \
+ -llog \
+ -lutils \
+ -lcutils \
+ -llynq-log \
+# -llynq-log \
+
+$(warning libs=$(LOCAL_LIBS))
+
+CXXSRC=\
+
+SOURCES = $(wildcard *.c wildcard src/*.c)
+
+EXECUTABLE = liblynq-rtp.so
+
+COBJS=$(SOURCES:.c=.o)
+$(warning test)
+all: $(EXECUTABLE)
+$(EXECUTABLE): $(COBJS)
+ $(CXX) -shared -Wl,--no-undefined $(COBJS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o: %.c
+ $(warning ----->build $<)
+ $(CC) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+.PHONY: install clean
+install:
+ mkdir -p $(ROOT)$(base_libdir)/
+ install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+
+clean:
+ rm -f $(EXECUTABLE) rm -rf *.o
+ find ./ -name *.o | xargs rm -rf
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-rtp/include/lynq_rtp.h b/src/lynq/lib/liblynq-rtp/include/lynq_rtp.h
new file mode 100755
index 0000000..01cbe51
--- /dev/null
+++ b/src/lynq/lib/liblynq-rtp/include/lynq_rtp.h
@@ -0,0 +1,34 @@
+#ifndef LYNQ_RTP_H
+#define LYNQ_RTP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_IP_LENGTH 128
+#define MAX_EN_CODING_NAME_LENGTH 32
+#define MAX_CMD_SIZE 512
+
+typedef enum{
+ RTP_CLIENT = 0,
+ RTP_SERVER =1,
+}LYNQ_Rtp_Mode;
+
+int lynq_set_rtp_mode_media_play(const LYNQ_Rtp_Mode rtp_mode);
+int lynq_set_rtp_ip_media_play(LYNQ_Rtp_Mode rtp_mode,const char* ip,const int ip_length);
+int lynq_set_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,const int port);
+int lynq_set_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,const int clock_rate,const int channels,const int latency);
+
+int lynq_get_rtp_ip_media_play(const LYNQ_Rtp_Mode rtp_mode, char* ip, const int ip_length);
+int lynq_get_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,int* port);
+int lynq_get_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,int* clock_rate,int* channels,int* latency);
+
+int lynq_start_rtp_server_media_play();
+int lynq_stop_rtp_server_media_play();
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c b/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
new file mode 100755
index 0000000..76de919
--- /dev/null
+++ b/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
@@ -0,0 +1,223 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <log/log.h>
+#include <unistd.h>
+
+#include "lynq_rtp.h"
+#include "liblog/lynq_deflog.h"
+
+#define USER_LOG_TAG "LYNQ_RTP"
+
+char server_cmd[MAX_CMD_SIZE];
+
+char client_cmd[MAX_CMD_SIZE];
+
+typedef struct
+{
+ LYNQ_Rtp_Mode mode;
+ char ip[128];
+ int port;
+ int clockrate;
+ char address[128];
+ int latency;
+ int channels;
+}lynq_rtp_info;
+
+lynq_rtp_info lynq_rtp_client_info;
+lynq_rtp_info lynq_rtp_server_info;
+
+int g_lynq_rtp_mode;
+
+int g_lynq_rtp_pid;
+
+int get_pid(char *name)
+{
+ char buf[256] = "";
+ char cmd[30] = "";
+ int pid = -1;
+ sprintf(cmd, "pidof %s", name);
+
+ FILE *pFd = popen(cmd, "r");
+ if (pFd != NULL)
+ {
+ while (fgets(buf, sizeof(buf), pFd))
+ {
+ pid = atoi(buf);
+ break;
+ }
+ pclose(pFd);
+ }
+ return pid;
+}
+
+int lynq_set_rtp_mode_media_play(const LYNQ_Rtp_Mode rtp_mode)
+{
+ if (rtp_mode == 0)
+ {
+ lynq_rtp_client_info.mode = 0;
+ }
+ else if (rtp_mode == 1)
+ {
+ lynq_rtp_server_info.mode = 1;
+ }
+ g_lynq_rtp_mode = rtp_mode;
+
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ return 0;
+}
+
+int lynq_set_rtp_ip_media_play(LYNQ_Rtp_Mode rtp_mode,const char* ip,const int ip_length)
+{
+ if (NULL == ip)
+ {
+ LYERRLOG("ip is NULL!!!");
+ return -1;
+ }
+ if (ip_length != strlen(ip))
+ {
+ LYERRLOG("incoming ip length error");
+ return -1;
+ }
+
+ if (rtp_mode == 1)
+ {
+ bzero(lynq_rtp_server_info.ip,MAX_IP_LENGTH);
+ strcpy(lynq_rtp_server_info.ip,ip);
+ }
+ else if (rtp_mode == 0)
+ {
+ bzero(lynq_rtp_client_info.ip,MAX_IP_LENGTH);
+ strcpy(lynq_rtp_client_info.ip,ip);
+ }
+ return 0;
+}
+
+int lynq_set_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,const int port)
+{
+ if (port < 0)
+ {
+ LYERRLOG("invalid port number");
+ return -1;
+ }
+ if (rtp_mode == 0)
+ {
+ lynq_rtp_client_info.port = port;
+ }
+ else if (rtp_mode == 1)
+ {
+ lynq_rtp_server_info.port = port;
+ }
+ return 0;
+}
+
+int lynq_set_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,const int clock_rate,const int channels,const int latency)
+{
+ if (NULL == file_address)
+ {
+ LYERRLOG("file address is NULL");
+ return -1;
+ }
+ if (rtp_mode == 0)
+ {
+ lynq_rtp_client_info.clockrate = clock_rate;
+ lynq_rtp_client_info.channels = channels;
+ lynq_rtp_client_info.latency = latency;
+ }
+ if (rtp_mode == 1)
+ {
+ strcpy(lynq_rtp_server_info.address,file_address);
+ }
+ return 0;
+}
+
+int lynq_start_rtp_server_media_play()
+{
+ if (g_lynq_rtp_mode == 0)
+ {
+ bzero(client_cmd,MAX_CMD_SIZE);
+
+ sprintf(client_cmd,"gst-launch-1.0 udpsrc port=%d caps=\'application/x-rtp, media=(string)audio, clock-rate=(int)%d, channel=(int)%d\' ! rtpjitterbuffer latency=%d ! rtppcmadepay ! pulsesink", \
+ lynq_rtp_client_info.port,lynq_rtp_client_info.clockrate,lynq_rtp_client_info.channels,lynq_rtp_client_info.latency);
+
+ printf("typethree test :%s\r\n",client_cmd);
+ system(client_cmd);
+ }
+ else if (g_lynq_rtp_mode == 1)
+ {
+ bzero(server_cmd,MAX_CMD_SIZE);
+
+ sprintf(server_cmd,"gst-launch-1.0 -v filesrc location=\"%s\" ! decodebin ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s auto-multicast=true port=%d", \
+ lynq_rtp_server_info.address, lynq_rtp_server_info.ip,lynq_rtp_server_info.port);
+
+ printf("typethree test :%s\r\n",server_cmd);
+ system(server_cmd);
+ }
+ g_lynq_rtp_pid = get_pid(client_cmd);
+ return 0;
+}
+
+int lynq_stop_rtp_server_media_play()
+{
+ char kill_buf[512] = "";
+ sprintf(kill_buf,"kill -9 %d",g_lynq_rtp_pid);
+ system(kill_buf);
+ return 0;
+}
+
+
+/*query part*/
+int lynq_get_rtp_ip_media_play(const LYNQ_Rtp_Mode rtp_mode, char* ip, const int ip_length)
+{
+ if (NULL == ip)
+ {
+ LYERRLOG("incoming ip is NULL!!!");
+ return -1;
+ }
+ if (rtp_mode == 0)
+ {
+ bzero(ip,ip_length);
+ strcpy(ip,lynq_rtp_client_info.ip);
+ }
+ else if (rtp_mode == 1)
+ {
+ bzero(ip,ip_length);
+ strcpy(ip,lynq_rtp_server_info.ip);
+ }
+ return 0;
+}
+
+int lynq_get_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,int* port)
+{
+ if (rtp_mode == 0)
+ {
+ *port = lynq_rtp_client_info.port;
+ }
+ else if (rtp_mode == 1)
+ {
+ *port = lynq_rtp_server_info.port;
+ }
+ return 0;
+}
+
+int lynq_get_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,int* clock_rate,int* channels,int* latency)
+{
+ if (NULL == file_address)
+ {
+ LYERRLOG("file address is NULL");
+ return -1;
+ }
+ if (rtp_mode == 0)
+ {
+ *clock_rate = lynq_rtp_client_info.clockrate;
+ *channels = lynq_rtp_client_info.channels ;
+ *latency = lynq_rtp_client_info.latency;
+ }
+ if (rtp_mode == 1)
+ {
+ strcpy(file_address,lynq_rtp_server_info.address);
+ }
+ return 0;
+}
\ No newline at end of file