[Release version 0.10.51] Add video convert element for display 68/71068/1 accepted/tizen/common/20160526.145840 accepted/tizen/ivi/20160602.020554 accepted/tizen/mobile/20160602.020431 accepted/tizen/tv/20160602.020528 accepted/tizen/wearable/20160602.020507 submit/tizen/20160524.060031
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 24 May 2016 03:20:39 +0000 (12:20 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 24 May 2016 03:20:39 +0000 (12:20 +0900)
Change-Id: Id70a16ae0424165c7dc204c86eca86e128b8bb5a
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-camcorder.spec
src/include/mm_camcorder_internal.h
src/mm_camcorder_configure.c
src/mm_camcorder_gstcommon.c
src/mm_camcorder_internal.c

index 1bcb778..2b4a501 100644 (file)
@@ -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
index f542862..292a909 100644 (file)
@@ -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 */
index 2b51068..4334d4e 100644 (file)
@@ -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} }
index 8fa89c2..02df73a 100644 (file)
@@ -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);
 
index 895ce61..d4f3b38 100644 (file)
@@ -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,