Release version 0.10.19
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_client.c
index bde0d82..d131ab3 100644 (file)
 #include <storage.h>
 
 
+static _MMCamcorderInfoConverting g_client_display_info[] = {
+       {
+               CONFIGURE_TYPE_MAIN,
+               CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
+               MM_CAM_CLIENT_DISPLAY_DEVICE,
+               MM_CAMCORDER_ATTR_NONE,
+               "DisplayDevice",
+               MM_CAMCONVERT_TYPE_INT_ARRAY,
+               NULL,
+       },
+       {
+               CONFIGURE_TYPE_MAIN,
+               CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
+               MM_CAM_CLIENT_DISPLAY_MODE,
+               MM_CAMCORDER_ATTR_NONE,
+               "DisplayMode",
+               MM_CAMCONVERT_TYPE_INT_ARRAY,
+               NULL,
+       },
+       {
+               CONFIGURE_TYPE_MAIN,
+               CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
+               MM_CAM_CLIENT_DISPLAY_SURFACE,
+               MM_CAMCORDER_ATTR_NONE,
+               "Videosink",
+               MM_CAMCONVERT_TYPE_INT_ARRAY,
+               NULL,
+       },
+};
+
+
 static int _storage_device_supported_cb(int storage_id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
 {
        char **root_directory = (char **)user_data;
@@ -702,8 +733,31 @@ int _mmcamcorder_client_videosink_window_set(MMHandleType handle, type_element*
        return MM_ERROR_NONE;
 }
 
-MMHandleType
-_mmcamcorder_client_alloc_attribute(MMHandleType handle)
+int _mmcamcorder_client_init_attr_from_configure(MMHandleType handle)
+{
+       mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+       _MMCamcorderInfoConverting *info = NULL;
+
+       int table_size = 0;
+       int ret = MM_ERROR_NONE;
+
+       mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+       /* Initialize attribute related to display */
+       info = g_client_display_info;
+       table_size = sizeof(g_client_display_info) / sizeof(_MMCamcorderInfoConverting);
+       ret = __mmcamcorder_set_info_to_attr(handle, info, table_size);
+       if (ret != MM_ERROR_NONE) {
+               _mmcam_dbg_err("display info set error : 0x%x", ret);
+               return ret;
+       }
+
+       _mmcam_dbg_log("done");
+
+       return ret;
+}
+
+MMHandleType _mmcamcorder_client_alloc_attribute(MMHandleType handle)
 {
        _mmcam_dbg_log( "" );
 
@@ -1112,20 +1166,16 @@ __mmcamcorder_client_gstreamer_init(camera_conf * conf)
        /* release */
        for (i = 0; i < *argc; i++) {
                if (argv[i]) {
-                       free(argv[i]);
+                       g_free(argv[i]);
                        argv[i] = NULL;
                }
        }
 
-       if (argv) {
-               free(argv);
-               argv = NULL;
-       }
+       free(argv);
+       argv = NULL;
 
-       if (argc) {
-               free(argc);
-               argc = NULL;
-       }
+       free(argc);
+       argc = NULL;
 
        return ret;
 
@@ -1178,9 +1228,19 @@ int _mmcamcorder_client_create_preview_elements(MMHandleType handle, const char
        _mmcam_dbg_err("shm src socket path : %s", socket_path);
 
        g_object_set(sc->element[_MMCAMCORDER_CLIENT_VIDEOSRC_SRC].gst,
-                       "socket-path", socket_path,
-                       "is-live", TRUE,
-                       NULL);
+                    "socket-path", socket_path,
+                    "is-live", TRUE,
+                    NULL);
+
+       /* create capsfilter */
+       _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_CLIENT_VIDEOSRC_FILT, "capsfilter", "vidoesrc_filt", element_list, ret);
+
+       caps = gst_caps_from_string(string_caps);
+       MMCAMCORDER_G_OBJECT_SET_POINTER(sc->element[_MMCAMCORDER_CLIENT_VIDEOSRC_FILT].gst, "caps", caps);
+
+       gst_caps_unref(caps);
+
+       caps = NULL;
 
        /* Making Video sink from here */
        _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_CLIENT_VIDEOSINK_QUE, "queue", "videosink_queue", element_list, ret);
@@ -1211,9 +1271,8 @@ int _mmcamcorder_client_create_preview_elements(MMHandleType handle, const char
                goto pipeline_creation_error;
        }
 
-       caps = gst_caps_from_string(string_caps);
        /* link elements */
-       if (!_mmcamcorder_filtered_link_elements(element_list, caps)) {
+       if (!_mmcamcorder_link_elements(element_list)) {
                _mmcam_dbg_err( "element link error." );
                ret = MM_ERROR_CAMCORDER_GST_LINK;
                goto pipeline_creation_error;
@@ -1501,6 +1560,13 @@ int mm_camcorder_client_create(MMHandleType *handle)
                goto _ERR_DEFAULT_VALUE_INIT;
        }
 
+       ret = _mmcamcorder_client_init_attr_from_configure((MMHandleType)hcamcorder);
+       if (ret != MM_ERROR_NONE) {
+               _mmcam_dbg_warn("client_init_attr_from_configure error!!");
+               ret = MM_ERROR_CAMCORDER_INTERNAL;
+               goto _ERR_DEFAULT_VALUE_INIT;
+       }
+
        /* Set initial state */
        _mmcamcorder_set_state((MMHandleType)hcamcorder, MM_CAMCORDER_STATE_NULL);