From: Sangchul Lee Date: Mon, 19 Dec 2022 03:03:27 +0000 (+0900) Subject: webrtc_sink_snapshot: Remove switch-case X-Git-Tag: accepted/tizen/7.0/unified/20221223.170226^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e048ad55b93082ba4fcc7523ac00a5161d32b57;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_sink_snapshot: Remove switch-case 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 --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index bfcdfe1c..7c916632 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.3.273 +Version: 0.3.274 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_sink_snapshot.c b/src/webrtc_sink_snapshot.c index c896c545..d6e1edea 100644 --- a/src/webrtc_sink_snapshot.c +++ b/src/webrtc_sink_snapshot.c @@ -24,6 +24,8 @@ #include #include +#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");