#include <mm_util_jpeg.h>
#include <mm_util_magick.h>
+#define WEBRTC_SNAPSHOT_ENCODED_FORMAT 0x10
+
typedef struct {
unsigned char *data;
size_t size;
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;
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
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;
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);
__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");