webrtc_sink_snapshot: Remove switch-case 92/285892/1 accepted/tizen/7.0/unified/20221223.170226
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 19 Dec 2022 03:03:27 +0000 (12:03 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 22 Dec 2022 06:22:20 +0000 (06:22 +0000)
Instead, bit-wise check is used whether to encode data or not.
Some functions to convert type are added.

[Version] 0.3.274
[Issue Type] Refactoring

Change-Id: Ib05495d97ef390429440a3c0e049e5018868758c
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
src/webrtc_sink_snapshot.c

index bfcdfe1c4c5fbe10ecd27844e34b94b4b6c05560..7c916632d9a5852271255baed310c933811afb0c 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.273
+Version:    0.3.274
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index c896c54512c3640092720b957647ea808c1c6e2e..d6e1edea145290c56c0b1e2d04948ab1d2d8db03 100644 (file)
@@ -24,6 +24,8 @@
 #include <mm_util_jpeg.h>
 #include <mm_util_magick.h>
 
+#define WEBRTC_SNAPSHOT_ENCODED_FORMAT    0x10
+
 typedef struct {
        unsigned char *data;
        size_t size;
@@ -42,13 +44,29 @@ typedef struct {
        void *user_data;
 } queue_data_s;
 
-static const char * __format_str[] = {
-       [WEBRTC_SNAPSHOT_FORMAT_RAW_RGB24] = "RGB24",
-       [WEBRTC_SNAPSHOT_FORMAT_JPEG] = "JPEG",
-       [WEBRTC_SNAPSHOT_FORMAT_PNG] = "PNG",
-};
-
 //LCOV_EXCL_START
+static const char *__get_format_str(webrtc_snapshot_format_e format)
+{
+       if (format == WEBRTC_SNAPSHOT_FORMAT_RAW_RGB24)
+               return "RGB24";
+       if (format == WEBRTC_SNAPSHOT_FORMAT_JPEG)
+               return "JPEG";
+       if (format == WEBRTC_SNAPSHOT_FORMAT_PNG)
+               return "PNG";
+
+       return "unknown";
+}
+
+static mm_util_img_codec_type __get_img_codec(webrtc_snapshot_format_e format)
+{
+       if (format == WEBRTC_SNAPSHOT_FORMAT_JPEG)
+               return IMG_CODEC_JPEG;
+       if (format == WEBRTC_SNAPSHOT_FORMAT_PNG)
+               return IMG_CODEC_PNG;
+
+       return IMG_CODEC_UNKNOWN_TYPE;
+}
+
 static void __add_probe_to_pad_for_snapshot(webrtc_gst_slot_s *sink, GstElement *videosink, void *probe_cb)
 {
        GstPad *pad;
@@ -387,14 +405,15 @@ static void __dump_encoded_result(webrtc_video_frame_s *result, int target_forma
        if (!result->data)
                return;
 
-       file_path = g_strdup_printf("/tmp/snapshot_%03u_%ux%u_%s_opt%d.dump", idx, result->width, result->height, __format_str[target_format], option);
+       file_path = g_strdup_printf("/tmp/snapshot_%03u_%ux%u_%s_opt%d.dump",
+               idx, result->width, result->height, __get_format_str((webrtc_snapshot_format_e)target_format), option);
 
        if (!g_file_set_contents(file_path, (char *)result->data, result->size, &error)) {
                LOG_ERROR("failed to g_file_set_contents() for %s, error:%s", file_path, error->message);
                return;
        }
 
-       LOG_WARNING("encoded %s frame is dumped to [%s]", __format_str[target_format], file_path);
+       LOG_WARNING("encoded %s frame is dumped to [%s]", __get_format_str((webrtc_snapshot_format_e)target_format), file_path);
 }
 #endif
 
@@ -454,7 +473,7 @@ static gpointer __convert_thread(gpointer data)
                LOG_DEBUG("wait for data...");
                qd = g_async_queue_pop(webrtc->snapshot.queue);
                LOG_INFO("process qd[%p, vbuffer:%p, target_format:%s, exit:%d]",
-                       qd, qd->vbuffer, __format_str[qd->target_format], qd->exit);
+                       qd, qd->vbuffer, __get_format_str((webrtc_snapshot_format_e)qd->target_format), qd->exit);
                if (qd->exit) {
                        __release_queue_data(qd);
                        break;
@@ -464,20 +483,10 @@ static gpointer __convert_thread(gpointer data)
                if (__change_colorspace_to_rgb24(qd->vbuffer, qd->color_format, &rgb24_frame) == WEBRTC_ERROR_NONE) {
                        int ret = WEBRTC_ERROR_NONE;
 
-                       /* check target format and encode it if needed */
-                       switch (qd->target_format) {
-                       case WEBRTC_SNAPSHOT_FORMAT_RAW_RGB24:
-                               break; /* skip encoding */
-                       case WEBRTC_SNAPSHOT_FORMAT_JPEG:
-                       case WEBRTC_SNAPSHOT_FORMAT_PNG:
+                       if (qd->target_format & WEBRTC_SNAPSHOT_ENCODED_FORMAT)
                                ret = __mm_image_encode(rgb24_frame.data, rgb24_frame.size, rgb24_frame.width, rgb24_frame.height, MM_UTIL_COLOR_RGB24,
-                                       (qd->target_format == WEBRTC_SNAPSHOT_FORMAT_JPEG) ? IMG_CODEC_JPEG : IMG_CODEC_PNG, qd->option, &encoded_frame);
-                               break;
-                       default:
-                               LOG_ERROR_IF_REACHED("target_format(0x%x)", qd->target_format);
-                               ret = WEBRTC_ERROR_INVALID_PARAMETER;
-                               break;
-                       }
+                                       __get_img_codec((webrtc_snapshot_format_e)qd->target_format), qd->option, &encoded_frame);
+
                        if (ret == WEBRTC_ERROR_NONE) {
                                int width = (int)(encoded_frame.data ? encoded_frame.width : rgb24_frame.width);
                                int height = (int)(encoded_frame.data ? encoded_frame.height : rgb24_frame.height);
@@ -487,7 +496,7 @@ static gpointer __convert_thread(gpointer data)
                                __dump_encoded_result(&encoded_frame, qd->target_format, qd->option, idx);
 #endif
                                LOG_DEBUG(">>> callback[%p] user_data[%p] track_id[%u] format[%s] %ux%u",
-                                       qd->callback, qd->user_data, qd->track_id, __format_str[qd->target_format], width, height);
+                                       qd->callback, qd->user_data, qd->track_id, __get_format_str((webrtc_snapshot_format_e)qd->target_format), width, height);
                                ((webrtc_snapshot_cb)(qd->callback))(webrtc, qd->track_id, qd->target_format, encoded_frame.data ?
                                        (const char *)encoded_frame.data : (const char *)rgb24_frame.data, width, height, size, qd->user_data);
                                LOG_DEBUG("<<< end of the callback");