From: Jeongmo Yang Date: Tue, 24 May 2016 03:20:39 +0000 (+0900) Subject: [Release version 0.10.51] Add video convert element for display X-Git-Tag: accepted/tizen/common/20160526.145840^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F68%2F71068%2F1;p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git [Release version 0.10.51] Add video convert element for display Change-Id: Id70a16ae0424165c7dc204c86eca86e128b8bb5a Signed-off-by: Jeongmo Yang --- diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index 1bcb778..2b4a501 100644 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -2,7 +2,7 @@ Name: libmm-camcorder Summary: Camera and recorder library -Version: 0.10.50 +Version: 0.10.51 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index f542862..292a909 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -484,6 +484,7 @@ typedef enum { /* Pipeline element of Video output */ _MMCAMCORDER_VIDEOSINK_QUE, + _MMCAMCORDER_VIDEOSINK_CLS, _MMCAMCORDER_VIDEOSINK_SINK, _MMCAMCORDER_PIPELINE_ELEMENT_NUM, @@ -686,6 +687,7 @@ typedef struct mmf_camcorder { int state_change_by_system; /**< MSL changes its state by itself because of system */ GMutex restart_preview_lock; /**< Capture sound mutex */ int use_zero_copy_format; /**< Whether use zero copy format for camera input */ + int use_videoconvert; /**< Whether use videoconvert element for display */ int support_media_packet_preview_cb; /**< Whether support zero copy format for camera input */ int shutter_sound_policy; /**< shutter sound policy */ int brightness_default; /**< default value of brightness */ diff --git a/src/mm_camcorder_configure.c b/src/mm_camcorder_configure.c index 2b51068..4334d4e 100644 --- a/src/mm_camcorder_configure.c +++ b/src/mm_camcorder_configure.c @@ -655,6 +655,7 @@ void _mmcamcorder_conf_init(MMHandleType handle, int type, camera_conf** configu { "VideosinkElementNull", CONFIGURE_VALUE_ELEMENT, {&_videosink_element_null_default} }, { "UseVideoscale", CONFIGURE_VALUE_INT, {.value_int = 0} }, { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {&_videoscale_element_default} }, + { "UseVideoconvert", CONFIGURE_VALUE_INT, {.value_int = 0} }, { "VideoconvertElement", CONFIGURE_VALUE_ELEMENT, {&_videoconvert_element_default} }, { "VideodecoderElementH264", CONFIGURE_VALUE_ELEMENT, {&_videodecoder_element_h264_default} }, { "RecreateDecoder", CONFIGURE_VALUE_INT, {.value_int = 0} } diff --git a/src/mm_camcorder_gstcommon.c b/src/mm_camcorder_gstcommon.c index 8fa89c2..02df73a 100644 --- a/src/mm_camcorder_gstcommon.c +++ b/src/mm_camcorder_gstcommon.c @@ -179,6 +179,7 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle) int display_surface_type = MM_DISPLAY_SURFACE_NULL; const char *videosrc_name = NULL; const char *videosink_name = NULL; + const char *videoconvert_name = NULL; char *err_name = NULL; char *socket_path = NULL; int socket_path_len; @@ -346,9 +347,11 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle) if (display_surface_type == MM_DISPLAY_SURFACE_REMOTE) { _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSINK_SINK, videosink_name, "ipc_sink", element_list, err); + _mmcamcorder_conf_set_value_element_property(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, sc->VideosinkElement); + err = mm_camcorder_get_attributes(handle, &err_name, - MMCAM_DISPLAY_SOCKET_PATH, &socket_path, &socket_path_len, - NULL); + MMCAM_DISPLAY_SOCKET_PATH, &socket_path, &socket_path_len, + NULL); if (err != MM_ERROR_NONE) { _mmcam_dbg_warn("Get socket path failed 0x%x", err); SAFE_FREE(err_name); @@ -357,7 +360,22 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle) g_object_set(G_OBJECT(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst), "socket-path", socket_path, NULL); } else { + + if (hcamcorder->use_videoconvert && !strcmp(videosink_name, "waylandsink")) { + /* get video convert name */ + _mmcamcorder_conf_get_value_element_name(sc->VideoconvertElement, &videoconvert_name); + + if (videoconvert_name) { + _mmcam_dbg_log("videoconvert element name : %s", videoconvert_name); + _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSINK_CLS, videoconvert_name, "videosink_cls", element_list, err); + } else + _mmcam_dbg_err("failed to get videoconvert element name"); + } + _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSINK_SINK, videosink_name, "videosink_sink", element_list, err); + + _mmcamcorder_conf_set_value_element_property(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, sc->VideosinkElement); + if (_mmcamcorder_videosink_window_set(handle, sc->VideosinkElement) != MM_ERROR_NONE) { _mmcam_dbg_err("_mmcamcorder_videosink_window_set error"); err = MM_ERROR_CAMCORDER_INVALID_ARGUMENT; @@ -365,8 +383,6 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle) } } - _mmcamcorder_conf_set_value_element_property(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, sc->VideosinkElement); - /* Set caps by rotation */ _mmcamcorder_set_videosrc_rotation(handle, camera_rotate); diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 895ce61..d4f3b38 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -333,6 +333,12 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) "SupportMediaPacketPreviewCb", &(hcamcorder->support_media_packet_preview_cb)); + /* Get UseVideoconvert value from INI */ + _mmcamcorder_conf_get_value_int((MMHandleType)hcamcorder, hcamcorder->conf_main, + CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT, + "UseVideoconvert", + &hcamcorder->use_videoconvert); + ret = mm_camcorder_get_attributes((MMHandleType)hcamcorder, NULL, MMCAM_CAMERA_WIDTH, &resolution_width, MMCAM_CAMERA_HEIGHT, &resolution_height, @@ -340,9 +346,10 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) mm_camcorder_get_fps_list_by_resolution((MMHandleType)hcamcorder, resolution_width, resolution_height, &fps_info); - _mmcam_dbg_log("UseZeroCopyFormat : %d", hcamcorder->use_zero_copy_format); - _mmcam_dbg_log("SupportMediaPacketPreviewCb : %d", hcamcorder->support_media_packet_preview_cb); - _mmcam_dbg_log("res : %d X %d, Default FPS by resolution : %d", resolution_width, resolution_height, fps_info.int_array.def); + _mmcam_dbg_log("UseZeroCopyFormat %d, UseVideoconvert %d, SupportMediaPacketPreviewCb %d", + hcamcorder->use_zero_copy_format, hcamcorder->use_videoconvert, hcamcorder->support_media_packet_preview_cb); + _mmcam_dbg_log("res : %d X %d, Default FPS by resolution : %d", + resolution_width, resolution_height, fps_info.int_array.def); if (camera_facing_direction == 1) { if (rcmd_dpy_rotation == MM_DISPLAY_ROTATION_270 || rcmd_dpy_rotation == MM_DISPLAY_ROTATION_90) { @@ -350,7 +357,7 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) } else { camera_default_flip = MM_FLIP_HORIZONTAL; } - _mmcam_dbg_log("camera_default_flip : [%d]",camera_default_flip); + _mmcam_dbg_log("camera_default_flip : [%d]", camera_default_flip); } mm_camcorder_set_attributes((MMHandleType)hcamcorder, &err_attr_name,