菊风视频通话临时提交
authorp15692025051 <846603105@qq.com>
Mon, 9 Oct 2023 09:02:21 +0000 (17:02 +0800)
committerp15692025051 <846603105@qq.com>
Mon, 9 Oct 2023 09:02:21 +0000 (17:02 +0800)
2.sdk/Helios_SDK/components/juphoon/jrtc.h [new file with mode: 0644]
2.sdk/Helios_SDK/components/juphoon/jrtc0.h [new file with mode: 0644]
2.sdk/Helios_SDK/components/juphoon/juphoon.mk [new file with mode: 0644]
2.sdk/Helios_SDK/components/juphoon/juphoon_option.in [new file with mode: 0644]
2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a [new file with mode: 0644]
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk

diff --git a/2.sdk/Helios_SDK/components/juphoon/jrtc.h b/2.sdk/Helios_SDK/components/juphoon/jrtc.h
new file mode 100644 (file)
index 0000000..c7dd639
--- /dev/null
@@ -0,0 +1,296 @@
+#ifndef __JRTC_H__
+#define __JRTC_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * ºô½ÐÁ÷³Ì: ¼ÙÉè `É豸A' ºô½Ð `É豸B'
+ *
+ * Æô¶¯Á¬½ÓÁ÷³Ì
+ * - A ÐèÒª "ijÖÖÍÆËÍ»úÖÆ" (³¤Á¬½Ó,ÍÆËÍ·½Ê½) Í¨Öªµ½B,
+ * - A ´ò¿ªÍ¨ÐÅ(jrtc_open), ³õʼ״̬Ϊ JRTC_OPENED
+ * - B ÊÕµ½ "¸ÃÖÖÍÆËÍ֪ͨ" ºóÒ²´ò¿ªÍ¨ÐÅ(jrtc_open), ³õʼ״̬Ϊ JRTC_OPENED
+ * - A Ö÷¶¯¼¤»îýÌåÉ豸,ÒÔ±ã×Ô¶¯½ÓÌý
+ *          jrtc_activate(jc, JRTC_AUDIO|JRTC_CAMERA)
+ *
+ * ³É¹¦½¨Á¢ÍøÂçͨµÀ
+ * - A ºÍ B ÔÚ·þÎñÆ÷É϶ԺôºóÁ¬Í¨, Í¨»°×´Ì¬¶¼±äΪ JRTC_JOINED
+ * - A ¿ÉÒÔ¿ªÊ¼äÖȾ¾µÍ·Ô¤ÀÀ(äÖȾÁ÷³Ì)
+ *
+ * ±»½ÐÁ÷³Ì
+ * - B ÊÕµ½AµÄÒôÊÓÆµÊý¾Ý, Í¨»°×´Ì¬±äΪ JRTC_TALKING
+ * - B ¿ÉÒÔ¿ªÊ¼äÖȾ¶Ô¶ËÊÓÆµ(äÖȾÁ÷³Ì)
+ * - B µ¯³ö½ÓÌýÌáʾ, ÈôÓû§Ñ¡Ôñ"¾Ü½Ó"Ôò½øÈë¹Ò¶ÏÁ÷³Ì
+ * - B ÔÚ½çÃæÑ¡Ôñ½ÓÌýºó, Ò²¼¤»îýÌåÉ豸
+ *          jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA)
+ *
+ * Ö÷½ÐÁ÷³Ì
+ * - A ÔÚÊÕµ½ÒôÊÓÆµÊý¾Ýºó, ×´Ì¬±äΪJRTC_TALKING
+ * - A Ò²¿ªÊ¼äÖȾ¶Ô¶ËÊÓÆµ(äÖȾÁ÷³Ì)
+ *
+ * ¹Ò¶ÏÁ÷³Ì
+ * - A µ÷Óàjrtc_close Ö÷¶¯¹Ò¶Ï
+ * - B Í¨»°×´Ì¬½«±äΪ JRTC_LEAVING »ò JRTC_CLOSED
+ * - Í¨¹ý jrtc_error() ¿ÉÒÔ»ñÈ¡¹Ò¶ÏµÄÔ­Òò(³ö´íÖµ)
+ * - B µ÷Óàjrtc_close ½áÊøÍ¨»°
+ *
+ * ×î¼òº¯ÊýÁ÷³Ì
+ * - jrtc_config(...);   // ÅäÖû·¾³,Ö»Ðèµ÷ÓÃÒ»´Î
+ * - jc = jrtc_open(...);// ´ò¿ªÍ¨»°,·µ»Ø¶ÔÏó
+ * - jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA);//¼¤»îÉ豸
+ * - ÔÚ UI Ïß³Ì,¸üÐÂÊÓÆµ»òÔ¤ÀÀ,²Î¿¼ÏÂÃæµÄ`äÖȾÁ÷³Ì'
+ * - jrtc_close(jc, JRTC_EBYE); //Ö÷¶¯¹Ò¶Ï, ²¢ÇҵȴýÍøÂçÏ߳̽áÊø
+ *
+ * ÊÕµ½À´µçÖжϵĴ¦Àí
+ * - jrtc_close(jc, JRTC_EAUDIOCALL);//½áÊøÍ¨»°,µÈ´ýÍøÂçÏ߳̽áÊø
+ */
+
+/** Í¨»°×´Ì¬ */
+enum jrtc_state
+{
+    JRTC_CLOSED=0,/*< ³õʼ״̬ */
+    JRTC_LEAVING, /*< jrtc_leave »òÄÚ²¿³ö´íºóµÄ״̬ */
+    JRTC_OPENED,  /*< µ÷ÓÃjrtc_open ºóµÄ״̬ */
+    JRTC_JOINING, /*< ¼ÓÈëÖеÄ״̬ */
+    JRTC_JOINED,  /*< ³É¹¦¼ÓÈë»á»° */
+    JRTC_TALKING, /*< ÊÕµ½Ã½ÌåºóµÄ״̬ */
+};
+
+/** Í¨»°´íÎóÖµ */
+enum jrtc_error
+{
+    JRTC_ENIL   = 0,  /* unknown error */
+    JRTC_EPERM  = 1,  /* Operation not permitted */
+    JRTC_ENONET = 64, /* Machine is not on the network */
+    JRTC_EPROTO = 71, /* Protocol error */
+    JRTC_EMSGSIZE = 90,  /* Message too long */
+    JRTC_ECONNRESET=104, /* Connection reset by peer */
+    JRTC_ETIMEDOUT =101, /* Connection timed out */
+    JRTC_ECONNREFUSED=111,/* Connection refused or closed */
+
+    JRTC_EOFFLINE = 128, /* Peer offline or over */
+    JRTC_EDECLINE = 129, /* Peer decline the call */
+    JRTC_EINVOKETIMEOUT = 130, /* IoTUnit invoke timeout */
+    JRTC_ECALLSERVERERROR = 131, /* Call server error */
+    JRTC_EROOMNOTFND = 132, /* Room or callee not found */
+    JRTC_ECALLTIMEOUT = 133, /* Call timeout */
+    JRTC_ENOTREG = 134, /* device id not registered */
+    JRTC_ELOGIN = 135, /* device id login failed */
+    JRTC_ETOKEN_NOTFOUND = 136, /* secret not found */
+    JRTC_ETOKEN_INV = 137, /* token invalid */
+    JRTC_ETOKEN_EXPIRE = 138, /* token expire */
+
+    JRTC_EAUDIOCALL = 252, /* external audio call, don't close audio deivce */
+    JRTC_EAUDIO=253,  /* Audio device error */
+    JRTC_EVIDEO=254,  /* Video device error */
+
+    JRTC_EBYE = 255,  /* Success, Closed by peer leave */
+};
+
+/** Í¨»°ÖеÄýÌåÉ豸 */
+enum jrtc_device
+{
+    JRTC_SPEAKER    = 1,
+    JRTC_MICROPHONE = 2,
+    JRTC_CAMERA     = 4,
+    JRTC_AUDIO      = 3,
+};
+
+enum jrtc_netstat
+{
+    JRTC_NET_NORMAL  = 0, /* network is normal or unknown */
+    JRTC_LOCAL_POOR  = 1,
+    JRTC_REMOTE_POOR = 2,
+};
+
+/** Êý¾ÝÀàÐÍ
+ * @note
+ * |   Èí¼þϵͳ   |   Æ½Ì¨   |  ²É¼¯¸ñʽ  | ±àÂëºó¸ñʽ |  ½âÂëºó¸ñʽ  |
+ * | ------------ | -------- | ---------- | ---------- | ------------ |
+ * | Unisoc Mocor | UMS9117  | JRTC_NV16  | JRTC_JPEG  | JRTC_RGB565,JRTC_JPEG [^1] |
+ */
+enum jrtc_dtype
+{
+    JRTC_I420 = 0, /*< Í¼Ïñ×Ö½ÚÊý=W*H*3/2 */
+    JRTC_NV12 = 1, /*< Í¼Ïñ×Ö½ÚÊý=W*H*3/2 */
+    JRTC_UYVY = 2, /*< Í¼Ïñ×Ö½ÚÊý=W*H*2 */
+    JRTC_JPEG = 3, /*< ±£³Ö¼æÈÝÐÔ */
+    JRTC_NV16 = 4, /*< Í¼Ïñ×Ö½ÚÊý=W*H*2 */
+
+    JRTC_RGB565 = 64,
+
+    JRTC_H264 = 96,
+    JRTC_H263 = 97,
+};
+
+/** äÖȾÁ÷³Ì:
+ * jrtc_image_t* img ´ú±í jrtc_open Öд«Èë video »ò camera
+ * - ¼ì²âµ±Ç°ÎªÍ¨»°×´Ì¬, ·ñÔòÎÞÐëäÖȾ
+ *   if (jrtc_state(jc) < JRTC_JOINED) break;
+ *
+ * - ÄÚ²¿×Ô¶¯¸üÐÂͼÏñ:
+ *      if (img->get == img->put) {
+ *          '¸üÐÂͼÏñÄÚÈÝ: ¼´¶ÔimgÖеÄdata, width, height, format ¸³Öµ'
+ *          img->put++;//Ôö¼Óд¼ÆÊý
+ *      }
+ *
+ * - ÉϲãUIÏß³Ì(App ½çÃæ²ã)¸ºÔð»æÖÆÍ¼Ïñ:
+ *      if (img->get != img->put) {
+ *          '½çÃæ»æÖƲÙ×÷: ¼´Ê¹ÓÃimgÖеÄdata, ¸üнçÃæ¿Ø¼þ'
+ *          img->get = img->put;//Ôö¼Ó¶Á¼ÆÊý
+ *      }
+ *
+ * ÔÚjrtc_open()ÖÐÓÃÓÚÉèÖý¨ÒéÖµ, Í¨»°¹ý³ÌÖÐÓÃÓÚ»ñȡͼÏñÊý¾Ý.
+ * ÀýÈç, Ï£Íû½ÓÊպͷ¢ËͶ¼ÊÇ240x240, 8Ö¡/ÃëµÄÊÓÆµÍ¨»°:
+ *   static struct jrtc_image_t video, camera;
+ *   video.width  = camera.width  = 240;
+ *   video.height = camera.height = 240;
+ *   video.fps    = camera.fps    = 8;
+ *   video.kbps   = camera.kbps   = 120;
+ *   //×¢Òâ,ÒÔÉϽöÊǽ¨ÒéÖµ, ÔÚ×îÖÕ½Óͨʱ, ÓÉ·þÎñÆ÷¾ö¶¨Êµ¼ÊÖµ
+ *   //ÈôÄÚ²¿Ê¹ÓÃjpeg ±àÂë,Ôò»áºöÂÔ kbps Öµ
+ *
+ *   jc = jrtc_open(roomid, 0, &video, &camera);
+ */
+struct jrtc_image_t
+{/* ¿ÉǿתΪ jrtc_photo_t Ê¹Óà*/
+    void* data;
+    unsigned bytes;
+    unsigned short width, height;
+    char format;/*< enum jrtc_dtype */
+    char fps;
+    unsigned short kbps;
+    volatile char put, get;
+    char reserve[2];
+};
+
+extern void* _jrtc_net_info;
+
+/** µ±Ç°µÄ°æ±¾ºÅ */
+#define JRTC_VERSION   "1.7.2"
+
+/** ÅäÖÃÈ«¾Ö²ÎÊý,Ö»Ðèµ÷ÓÃÒ»´Î.
+ * ×¢Òâ:
+ * - appkey ¹Ì¶¨³¤¶ÈΪ24
+ * - key ¹Ì¶¨³¤¶ÈΪ16
+ * - uid ÏÞÖÆ×î´ó×Ö·ûÊýΪ64
+ * - tokens ÏÞÖÆ×î´ó×Ö·ûÊýΪ128
+ *
+ * @param[in] appkey µ±Ç°APPÌØÓеıêʶ, ÐèÏòJuphoonÉêÇë»ñµÃ
+ * @param[in] uid ÕË»§
+ * @param[in] key Í¨Ñ¶ÃÜÔ¿, ±ØÐëÓëappkeyÆ¥Åä, ÐèÏòJuphoonÉêÇë»ò×¢²á
+ * @param[in] ÓÃÓÚ¼øÈ¨µÄtokens,ĬÈÏΪ""
+ */
+void jrtc_config (const char* appkey, const char* uid, const char key[16], const char* tokens);
+
+/**Õ¹Èñ UIX9117 Æ½Ì¨ ÐèÒªÉèÖÃPDPÁ÷³Ìºó»ñµÃµÄÍøÂç ID */
+extern unsigned _jrtc_net_id;
+/**Õ¹Èñ UIX9117 Æ½Ì¨µÄ¾µÍ·½Ç¶È,¼´²É¼¯Í¼ÏñÐèҪ˳ʱÕëÐýת¸ÃÖµ,²ÅÄÜÕýÁ¢. Ä¬ÈÏ90 */
+extern unsigned _jrtc_cam_angle;
+
+/** ·ÖÅäͨ»°×ÊÔ´²¢Æô¶¯ÍøÂçÏß³Ì
+ * ×¢Òâ:
+ * - ¶Ôticket³¤¶ÈºÍ²ÎÊýroomid¶¼ÏÞÖÆ×î´ó×Ö·ûÊýΪ64
+ * - ÄÚ²¿É豸³õʼûÓ줻î,ºóÐøÐèÒªµ÷ÈçÏ¿ªÆô
+ *   jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA)
+ *
+ * ticket ×÷Ϊͨ»°ID, Î¨Ò»±êʶÿ´Îͨ»°:
+ *  - ²»Äܰüº¬JSONÐèתÒåµÄ×Ö·û
+ *  - Ã¿´Îͨ»°, ÒªÊ¹Óò»Í¬µÄ ticket,(Ëæ»ú²úÉú»òÏò·þÎñÆ÷ÉêÇë)
+ *  - A ºô½Ðǰ,ÉêÇë»ñµÃ ticket
+ *  - A ÐèҪͨ"ijÖÖÍÆËÍ»úÖÆ"(³¤Á¬½Ó,ÍÆËÍ·½Ê½) ½« ticket Í¨Öªµ½B
+ *  - A ºÍB ¶Ôºôʱ, ±ØÐëʹÓÃÏàͬµÄticket, ÒÔ±ã·þÎñÆ÷¾«È·±êʶ»á»°
+ *
+ * @param[in] id            ¼ÓÈëÒ»¶ÔÒ»»á»°(¶Ô·½µÄuid)»ò·¿¼ä(ÒÔroom:ǰ׺µÄ·¿¼äµØÖ·)
+ * @param[in] ticket        hashÖµ,¿Éͨ¹ýÆäËû·¾¶»ñµÃ,ĬÈÏΪNULL,½öÓÃÓÚµ÷ÊÔ.
+ * @param[in,out] video     ÆÚÍû½ÓÊÕµÄÊÓÆµ³ß´çºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL,Ôò²»½ÓÊÕÊÓÆµ
+ * @param[in,out] camera    ÓÃÓÚÔ¤ÀÀͼÏñ,½¨ÒéµÄ·¢ËͳߴçºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL, Ôò²»Ê¹ÓþµÍ·.
+ *                          ×îÖÕµÄÊÓÆµ³ß´çºÍ¾µÍ·µÄ³ß´ç,¶¼ÓÉ·þÎñÆ÷ЭÉ̾ö¶¨.
+ */
+struct jrtc_t* jrtc_open (const char* id, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera);
+
+/** ÊÍ·Åͨ»°×ÊÔ´,²¢µÈ´ýÍøÂçÏ߳̽áÊø.
+ *
+ * @param[in] err   Ö÷¶¯¹Ò¶ÏΪ JRTC_EBYE
+ *                  µ«µ±ÓïÒôµç»°ÖжÏʱ, ÐëÉèÖÃΪJRTC_EAUDIOCALL,
+ *                  ÆäËûδ֪Çé¿ö,¿ÉÉèÖÃΪ JRTC_ENIL(²»Ð޸ĹҶÏÔ­Òò)
+ */
+void jrtc_close (struct jrtc_t* jc, enum jrtc_error err);
+
+/** ±àÂëǰµÄµÄÊÓÆµÖ¡ */
+struct jrtc_photo_t
+{
+    void* data;
+    unsigned bytes;
+    unsigned short width,height;
+    char format;/*< enum jrtc_dtype */
+    char reserve[3];
+};
+
+/** ¶¯Ì¬ÉèÖÃǰºó¾µÍ·
+ * @param[in] camera 0Ϊºó¾µÍ·,1ÊÇǰ¾µÍ·
+ * @param[in] effect ±àÂëǰͼÏñµÄ´¦Àí»Øµ÷
+ *                   ½ûÖ¹¸Ä±äͼÏñ³ß´çºÍ¸ñʽ.
+ *                   ¿ÉÉèÖÃΪ NULL
+ * @code 
+ *   static char* encoding = NULL;
+ *   //Ö»¾µÏñ·¢ËÍͼÏñ
+ *   jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){
+ *      auto preview = frame->data;
+ *      if (!encoding) encoding = new char[frame->bytes];
+ *
+ *      assert (frame->format == JRTC_NV16 && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý");
+ *      jrtc_nv16_mirror(frame, frame->width, frame->height, encoding);
+ *      frame->data = encoding;
+ *   });
+ *   //Ö»¾µÏñÔ¤ÀÀͼÏñ
+ *   jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){
+ *      auto preview = frame->data;
+ *      if (!encoding) encoding = new char[frame->bytes];
+ *      frame->data = memcpy(encoding, preview, frame->bytes);
+ *
+ *      assert (frame->format == JRTC_NV16 && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý");
+ *      jrtc_nv16_mirror(frame, frame->width, frame->height, preview);
+ *   });
+ *   //ͬʱ¾µÏñÔ¤ÀÀºÍ·¢ËÍͼÏñ
+ *   jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){
+ *      auto preview = frame->data;
+ *      if (!encoding) encoding = new char[frame->bytes];
+ *      frame->data = memcpy(encoding, preview, frame->bytes);
+ *
+ *      assert (frame->format == JRTC_NV16 && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý");
+ *      jrtc_nv16_mirror(frame, frame->width, frame->height, preview);
+ *      frame->data = preview;
+ *   });
+ * @endcode
+ */
+void jrtc_set_camera (struct jrtc_t* jc, int camera,
+    void (*effect) (struct jrtc_photo_t* frame));
+
+/** ¼¤»îÉ豸, ¿ªÆô·¢ËÍÄÜÁ¦
+ * @param[in] devices jrtc_device µÄ¼¯ºÏ
+ */
+void jrtc_activate (struct jrtc_t* jc, int devices);
+
+/** ½û»îÉ豸, ¹Ø±Õ·¢ËÍÄÜÁ¦
+ * @param[in] devices jrtc_device µÄ¼¯ºÏ
+ */
+void jrtc_deactivate (struct jrtc_t* jc, int devices);
+
+/** ·µ»ØÍ¨»°×´Ì¬ */
+enum jrtc_state jrtc_state  (const struct jrtc_t *jc);
+
+/** ·µ»Ø×î½üµÄ³ö´íÖµ */
+enum jrtc_error jrtc_error  (const struct jrtc_t *jc);
+
+/** ·µ»ØÍøÂç״̬
+ * @param[out] remote_active_devices  ¶Ô¶ËµÄµÄÊý¾ÝÁ÷״̬. jrtc_device µÄ¼¯ºÏ
+ *                                    ÔÊÐí NULL.
+ */
+enum jrtc_netstat jrtc_netstat(struct jrtc_t* jc, int *remote_active_devices);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/2.sdk/Helios_SDK/components/juphoon/jrtc0.h b/2.sdk/Helios_SDK/components/juphoon/jrtc0.h
new file mode 100644 (file)
index 0000000..749a3b5
--- /dev/null
@@ -0,0 +1,156 @@
+#ifndef __JRTC_0_H__
+#define __JRTC_0_H__
+#include "jrtc.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Í¨»°×´Ì¬
+ *             jrtc_alloc              jrtc_schedule                   jrtc_schedule 
+ *             ´´½¨ÊµÀý                ·¢ËÍÇëÇó                        ÊÕµ½Ó¦´ð
+ * JRTC_CLOSED ----------> JRTC_OPENED ------------------> JRTC_JOINING -------------> JRTC_JOINED
+ *       ^                                                                            |
+ *       | jrtc_schedule                                                              | jrtc_schedule
+ *       | Ïú»ÙʵÀý        jrtc_leave »ò ÄÚ²¿³ö´í                                     | ÊÕµ½Ã½ÌåÊý¾Ý
+ * JRTC_LEAVING <---------------------------+------------- JRTC_TALKING <-------------+
+ *                                          |                  ^
+ *                                          |  jrtc_schedule   |
+ *                                          +------------------+
+ */
+
+/** ÖØÖ÷þÎñÆ÷µØÖ·
+ * ×¢Òâ:
+ * - ÊÖ¹¤ÉèÖÃеØÖ·,ͨ³£Ö»ÓÃÓÚ²âÊÔ
+ * - srvURL ÏÞÖÆ×î´ó×Ö·ûÊýΪ128
+ * - srvURL Îª¿Õʱ, »Ö¸´ÎªÄÚÖõÄĬÈÏ·þÎñÆ÷µØÖ·
+ *
+ * @param[in] srvURL ·þÎñÆ÷µØÖ· 
+ */
+void jrtc_config_server (const char* srvURL);
+
+/** ·ÖÅäͨ»°×ÊÔ´
+ * ×¢Òâ:
+ * - ÄÚ²¿Ö±½ÓÒýÓõØÖ·,ÓÉÍⲿ±£Ö¤ÄÚ´æµÄÓÐЧÐÔ
+ * - ÄÚ²¿Ã»ÓÐÆô¶¯ÍøÂçÏß³Ì,ÐèÒª²»¶ÏµÄµ÷ÓÃÈçÏÂÇý¶¯
+ *   jrtc_schedule(jc, nowMs);
+ * - ÄÚ²¿É豸³õʼûÓ줻î,ºóÐøÐèÒªµ÷ÈçÏ¿ªÆô
+ *   jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA)
+ *
+ * ticket ×÷Ϊͨ»°ID, Î¨Ò»±êʶÿ´Îͨ»°:
+ *  - ²»Äܰüº¬JSONÐèתÒåµÄ×Ö·û
+ *  - Ã¿´Îͨ»°, ÒªÊ¹Óò»Í¬µÄ ticket,(Ëæ»ú²úÉú»òÏò·þÎñÆ÷ÉêÇë)
+ *  - A ºô½Ðǰ,ÉêÇë»ñµÃ ticket
+ *  - A ÐèҪͨ"ijÖÖÍÆËÍ»úÖÆ"(³¤Á¬½Ó,ÍÆËÍ·½Ê½) ½« ticket Í¨Öªµ½B
+ *  - A ºÍB ¶Ôºôʱ, ±ØÐëʹÓÃÏàͬµÄticket, ÒÔ±ã·þÎñÆ÷¾«È·±êʶ»á»°
+ *
+ * @param[in] roomid    ¼ÓÈëµÄ·¿¼äºÅ(¶Ô·½ÕË»§)
+ * @param[in] ticket    ÓÃÓÚ·¿¼äµÄhashÖµ,¿Éͨ¹ýÆäËû·¾¶»ñµÃ,ĬÈÏΪNULL,½öÓÃÓÚµ÷ÊÔ.
+ * @param[in] video     ÆÚÍû½ÓÊÕµÄÊÓÆµ³ß´çºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL,Ôò²»½ÓÊÕÊÓÆµ
+ * @param[in] camera    ÓÃÓÚÔ¤ÀÀͼÏñ,½¨ÒéµÄ·¢ËͳߴçºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL, Ôò²»Ê¹ÓþµÍ·.
+ *                      ×îÖÕµÄÊÓÆµ³ß´çºÍ¾µÍ·µÄ³ß´ç,¶¼ÓÉ·þÎñÆ÷ЭÉ̾ö¶¨.
+ */
+struct jrtc_t* jrtc_alloc (const char* roomid, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera);
+
+/** µ¥²½¸üÐÂͨ»°
+ * ÒªÇóʵʱÐÔ´¦Àí, Îñ±ØÔÚ¶ÀÁ¢Ïß³ÌÖгÖÐø¸üÐÂ, 
+ * µ±·µ»Ø JRTC_CLOSED Ê±, ¿ÉÒÔÍ˳ö¸ÃÏß³Ì.
+ * ÀýÈç:
+ *  Æô¶¯ÍøÂçÏß³Ì([jc]{
+ *      do {
+ *          state = jrtc_schedule(jc, µ±Ç°ºÁÃë);
+ *      } while(state != JRTC_CLOSED);
+ *  }
+ *
+ * @param[in] ms        µ±Ç°ºÁÃë
+ */
+enum jrtc_state jrtc_schedule (struct jrtc_t* jc, unsigned ms);
+
+/** Ö÷¶¯À뿪/¹Ò¶Ï
+ * ×¢Òâ: ÕâÀïÖ»¸Ä±ä״̬, Ïú»Ù½«ÔÚjrtc_schedule()ÖÐ×Ô¶¯´¦Àí
+ * 
+ * @param[in] err   Ö÷¶¯¹Ò¶ÏΪ JRTC_EBYE
+ *                  µ«µ±ÓïÒôµç»°ÖжÏʱ, ÐëÉèÖÃΪJRTC_EAUDIOCALL,
+ *                  ÆäËûδ֪Çé¿ö,¿ÉÉèÖÃΪ JRTC_ENIL(²»Ð޸ĹҶÏÔ­Òò)
+ */
+enum jrtc_state jrtc_leave (struct jrtc_t *jc, enum jrtc_error err);
+
+/** ¾µÏñ
+ * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
+ * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚÐýת180¶È)
+ * @param[out] dst  Ä¿±êÄÚ´æ
+ */
+void jrtc_i420_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_nv12_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_uyvy_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_nv16_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+
+/** Ë³Ê±Õëת90¶È
+ * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
+ * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚת90ºóˮƽ¾µÏñ)
+ * @param[out] dst  Ä¿±êÄÚ´æ
+ */
+void jrtc_i420_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+void jrtc_nv12_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+void jrtc_uyvy_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+void jrtc_nv16_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+
+/** Ë³Ê±Õëת270¶È
+ * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
+ * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚת270ºóˮƽ¾µÏñ)
+ * @param[out] dst  Ä¿±êÄÚ´æ
+ */
+void jrtc_i420_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+void jrtc_nv12_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+void jrtc_uyvy_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+void jrtc_nv16_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
+
+/** ²Ã¼ô
+ * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
+ * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª
+ * @param[out] dst  Ä¿±êÄÚ´æ
+ */
+void jrtc_i420_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_nv12_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_uyvy_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_nv16_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+
+/** ×ª»»Îª RGB565
+ * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
+ * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª
+ * @param[out] dst  Ä¿±êÄÚ´æ, Êä³ö³¤¶ÈΪ dst_w*dst_h*sizeof(short)
+ */
+void jrtc_i420_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_nv12_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_uyvy_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+void jrtc_nv16_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
+
+/** ¿ÉÓÅ»¯ÅäÖõIJÎÊý @{ */
+extern unsigned JRTC_SESSION_TIMEOUT; /*< ½¨Á¢Í¨»°×ܵij¬Ê±·§Öµ,ĬÈÏ 300 Ãë*/
+extern unsigned JRTC_REPLY_TIMEOUT; /*< ½¨Á¢Í¨»°Öеȴý·þÎñÆ÷Ó¦´ðµÄ³¬Ê±·§Öµ,ĬÈÏ120 Ãë */
+extern unsigned JRTC_MEDIA_TIMEOUT; /*< ½ÓÊÕýÌåÊý¾ÝµÄ³¬Ê±·§Öµ, Ä¬ÈÏ 20 Ãë */
+extern unsigned JRTC_MAX_RTP_SIZE; /*< ·¢Ë͵Ä×î´ó RTP °ü·§Öµ, Ä¬ÈÏ1200,²»ÄÜ´óÓÚ1500 */
+extern unsigned JRTC_AUDIO_RED_LOSS;/*< ¿ªÆôÒôƵÈßÓà±àÂëµÄ¶ª°üÂÊ·§Öµ, Ä¬ÈÏ 10 % */
+extern unsigned JRTC_VIDEO_FEC_LOSS; /*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄ¶ª°üÂÊ·§Öµ, Ä¬ÈÏ 5 % */
+extern unsigned JRTC_VIDEO_FEC_MAX_RTT;/*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄRTTÉÏÏÞ, Ä¬ÈÏ 3000 ms, 0 ÔòÇ¿ÖÆ¹Ø±ÕFEC */
+extern unsigned JRTC_VIDEO_FEC_MAX_BW_RATIO; /*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄ¶îÍâµÄÂëÂÊÕ¼±È, Ä¬ÈÏ 80 %, 0 ÔòÇ¿ÖÆ¹Ø±ÕFEC */
+extern unsigned JRTC_VIDEO_INIT_GOP; /*< ³õʼĬÈϵÄÊÓÆµ¹Ø¼üÖ¡¼ä¸ô, Ä¬ÈÏ2000 ms */
+extern unsigned JRTC_TASK_STACK_KB; /*< ÄÚ²¿Ï̵߳ÄÕ»´óС,ÓëÆ½Ì¨Ïà¹Ø */
+extern unsigned JRTC_TASK_PRIORITY; /*< ÄÚ²¿Ï̵߳ÄÓÅÏȼ¶,ÓëÆ½Ì¨Ïà¹Ø */
+/** @} */
+
+/** ¿É¸¨Öúµ÷ÊÔµÄÈ«¾ÖÖµ @{ */
+extern char  _jrtc_errstr[256]; /* ×î½ü´íÎóÃèÊö */
+extern const char* _jrtc_version; /* µ±Ç°°æ±¾ºÅ */
+/* ÒÔÏÂÊÇjrtc_config(...)ÖеÄÈë²ÎÖµ */
+extern char _jrtc_appkey[25];
+extern char _jrtc_uid[65];
+extern char _jrtc_srvURL[129];
+extern char _jrtc_aeskey[17];
+extern char _jrtc_tokens[129];
+/** @} */
+
+extern unsigned jc_time(void);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/2.sdk/Helios_SDK/components/juphoon/juphoon.mk b/2.sdk/Helios_SDK/components/juphoon/juphoon.mk
new file mode 100644 (file)
index 0000000..5143ea8
--- /dev/null
@@ -0,0 +1,30 @@
+NAME := juphoon
+
+include config/$(KCONFIG_CONFIG)
+
+GLOBAL_INCS = include
+
+$(NAME)_SRCS += \
+
+
+
+GLOBAL_INCS += \
+       . \
+
+ifeq ($(CONFIG_juphoon), y)
+
+$(NAME)_ARCHIVES := \
+       lib/libjrtc.a 
+
+endif
+
+
+$(NAME)_CFLAGS = \
+       -Wno-error \
+       -Wno-unused-but-set-variable
+       
+
+
+$(NAME)_COMPONENTS = peripheral
+
+
diff --git a/2.sdk/Helios_SDK/components/juphoon/juphoon_option.in b/2.sdk/Helios_SDK/components/juphoon/juphoon_option.in
new file mode 100644 (file)
index 0000000..5871f69
--- /dev/null
@@ -0,0 +1,9 @@
+config juphoon 
+    bool "Enable juphoon" 
+    default y 
+help 
+    This is juphoon support.
+
+
+
+
diff --git a/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a
new file mode 100644 (file)
index 0000000..2e7e8da
Binary files /dev/null and b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a differ
index 979c982..32485e2 100644 (file)
@@ -663,7 +663,9 @@ endif
 ifeq ($(CONFIG_SC7A20), y)
 INC += -I$(ROOT)/components/SC7A20
 endif
-
+ifeq ($(CONFIG_juphoon), y)
+INC += -I$(ROOT)/components/juphoon
+endif
 ifeq ($(CONFIG_POC_BND), y)
 INC += -I$(ROOT)/components/poc
 INC += -I$(ROOT)/components/poc/bnd/inc
index 6e03ed9..343bad7 100644 (file)
@@ -10,6 +10,6 @@ source "../services/microPython/config/config.in"
 source "../components/poc/poc_option.in"
 source "../components/GH301x/GH301x_option.in"
 source "../components/SC7A20/SC7A20_option.in"
-
+source "../components/juphoon/juphoon_option.in"
 endmenu