From: Sangchul Lee Date: Wed, 9 Jun 2021 02:43:32 +0000 (+0900) Subject: webrtc_source: Add support for MJPEG encoded format X-Git-Tag: submit/tizen/20210729.023123~45 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F93%2F259493%2F5;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: Add support for MJPEG encoded format [Version] 0.2.17 [Issue Type] New feature Change-Id: Ic75efda737780d29a327d03e6f60b9ddbb8673e8 Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_private.h b/include/webrtc_private.h index 29198a93..c636ee8c 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -215,6 +215,7 @@ do { \ #define MEDIA_TYPE_VIDEO_THEORA "video/x-theora" #define MEDIA_TYPE_VIDEO_H264 "video/x-h264" #define MEDIA_TYPE_VIDEO_H265 "video/x-h265" +#define MEDIA_TYPE_VIDEO_JPEG "image/jpeg" #define WEBRTC_DISPLAY_TYPE_ECORE_WL 2 diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 370e0f16..6a18747d 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -1,6 +1,6 @@ Name: capi-media-webrtc Summary: A WebRTC library in Tizen Native API -Version: 0.2.16 +Version: 0.2.17 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index 5d91e967..2a12c1b5 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -522,6 +522,8 @@ static int __get_media_format_mimetype(const gchar *mime, media_format_mimetype_ *media_format_mime = MEDIA_FORMAT_VP9; } else if (!g_strcmp0(mime, MEDIA_TYPE_VIDEO_H264)) { *media_format_mime = MEDIA_FORMAT_H264_HP; + } else if (!g_strcmp0(mime, MEDIA_TYPE_VIDEO_JPEG)) { + *media_format_mime = MEDIA_FORMAT_MJPEG; } else { LOG_ERROR("not supported mime[%s]", mime); return WEBRTC_ERROR_INVALID_PARAMETER; diff --git a/src/webrtc_source.c b/src/webrtc_source.c index 5fab90fb..54414078 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -72,6 +72,7 @@ typedef enum { CODEC_TYPE_THEORA, CODEC_TYPE_H264, CODEC_TYPE_H265, + CODEC_TYPE_JPEG, CODEC_TYPE_NOT_SUPPORTED, } codec_type_e; @@ -111,6 +112,7 @@ static payload_type_s payload_types[] = { [CODEC_TYPE_THEORA] = { "THEORA", 90000 }, [CODEC_TYPE_H264] = { "H264", 90000 }, [CODEC_TYPE_H265] = { "H265", 90000 }, + [CODEC_TYPE_JPEG] = { "JPEG", 90000 }, }; static const char * __get_audio_media_type(const char *codec_name) @@ -141,6 +143,8 @@ static const char * __get_video_media_type(const char *codec_name) return MEDIA_TYPE_VIDEO_H264; else if (!strcmp(codec_name, "h265") || !strcmp(codec_name, "H265")) return MEDIA_TYPE_VIDEO_H265; + else if (!strcmp(codec_name, "jpeg") || !strcmp(codec_name, "JPEG") || !strcmp(codec_name, "mjpeg") || !strcmp(codec_name, "MJPEG")) + return MEDIA_TYPE_VIDEO_JPEG; LOG_ERROR("not supported video codec_name[%s]", codec_name); @@ -169,6 +173,8 @@ static codec_type_e __get_video_codec_type(const gchar *media_type) return CODEC_TYPE_H264; else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_H265)) return CODEC_TYPE_H265; + else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_JPEG)) + return CODEC_TYPE_JPEG; return CODEC_TYPE_NOT_SUPPORTED; } @@ -198,6 +204,8 @@ static const char *__get_format_name(media_format_mimetype_e mime_type, bool zer case MEDIA_FORMAT_H264_MP: /* main profile */ case MEDIA_FORMAT_H264_HP: /* high profile */ return "H264"; + case MEDIA_FORMAT_MJPEG: + return "JPEG"; default: LOG_ERROR("not supported mime_type(0x%x)", mime_type); return NULL; @@ -241,6 +249,7 @@ static bool __is_supported_mime_type(media_format_mimetype_e mime_type) case MEDIA_FORMAT_H264_SP: case MEDIA_FORMAT_H264_MP: case MEDIA_FORMAT_H264_HP: + case MEDIA_FORMAT_MJPEG: LOG_INFO("[%s][ENCODED/%s] mime_type[0x%x]", mime_type & MEDIA_FORMAT_AUDIO ? "AUDIO" : "VIDEO", __get_format_name(mime_type, false), mime_type); return true; @@ -560,7 +569,7 @@ static GstCaps *__make_rtp_caps(const gchar *media_type, unsigned int id) RET_VAL_IF(media_type == NULL, NULL, "media_type is NULL"); - is_video = g_strrstr(media_type, "video") ? TRUE : FALSE; + is_video = (g_strrstr(media_type, "video") || g_strrstr(media_type, "image")) ? TRUE : FALSE; codec_type = is_video ? __get_video_codec_type(media_type) : __get_audio_codec_type(media_type); RET_VAL_IF(codec_type == CODEC_TYPE_NOT_SUPPORTED, NULL, "media_type[%s] is not supported", media_type);