From: p15692025051 <846603105@qq.com> Date: Mon, 9 Oct 2023 09:02:21 +0000 (+0800) Subject: 菊风视频通话临时提交 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=bfd8ab9a1d6a25ee730293b5acc9c72d147a8d14;p=mirrors%2FASR1603_G5.git 菊风视频通话临时提交 --- diff --git a/2.sdk/Helios_SDK/components/juphoon/jrtc.h b/2.sdk/Helios_SDK/components/juphoon/jrtc.h new file mode 100644 index 00000000..c7dd639e --- /dev/null +++ b/2.sdk/Helios_SDK/components/juphoon/jrtc.h @@ -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 index 00000000..749a3b5b --- /dev/null +++ b/2.sdk/Helios_SDK/components/juphoon/jrtc0.h @@ -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 index 00000000..5143ea83 --- /dev/null +++ b/2.sdk/Helios_SDK/components/juphoon/juphoon.mk @@ -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 index 00000000..5871f697 --- /dev/null +++ b/2.sdk/Helios_SDK/components/juphoon/juphoon_option.in @@ -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 index 00000000..2e7e8da3 Binary files /dev/null and b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a differ diff --git a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile index 979c982f..32485e25 100644 --- a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 diff --git a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h index 26766385..da13fded 100644 --- a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h +++ b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h @@ -40,3 +40,5 @@ #define CONFIG_CAMERA 1 #define CONFIG_JPEG 1 #define CONFIG_CAMERA_SAVEPHOTOS 1 +//菊风视频通话 +//#define CONFIG_juphoon 1 \ No newline at end of file diff --git a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in index 6e03ed93..343bad71 100644 --- a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in +++ b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in @@ -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 diff --git a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk index bf69c97c..8f299ee2 100644 --- a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk +++ b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk @@ -61,4 +61,6 @@ CONFIG_LCD=y # CONFIG_POC is not set #CONFIG_GH301x=y CONFIG_SC7A20=y +#菊风视频通话 +#CONFIG_juphoon=y