webrtc_source: Add support for MJPEG encoded format 93/259493/5
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 9 Jun 2021 02:43:32 +0000 (11:43 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 18 Jun 2021 05:33:35 +0000 (14:33 +0900)
[Version] 0.2.17
[Issue Type] New feature

Change-Id: Ic75efda737780d29a327d03e6f60b9ddbb8673e8
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_sink.c
src/webrtc_source.c

index 29198a93698026955be1157747da1ea5665d3abd..c636ee8c599b7e7996bb05d4ba4f505513ff51bc 100644 (file)
@@ -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
 
index 370e0f165f05afa7d173fa00e8ce93db61bf9cfa..6a18747df87f0a4f8c0ce16412c037bd9cf13c97 100644 (file)
@@ -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
index 5d91e96780c9d345d0dd7678bedcbbf8a3a95249..2a12c1b5392772ae0e8e05c4f953f10fa9df3acb 100644 (file)
@@ -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;
index 5fab90fb36e0d9991649398b82100730d31f6566..5441407878796fc4221a8f9719fdc36162bde2b5 100644 (file)
@@ -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);