Update code for encoded preview setting
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_gstcommon.c
index 3e19d7c..fc4d1e8 100644 (file)
@@ -1381,7 +1381,8 @@ int _mmcamcorder_videosink_window_set(MMHandleType handle, type_element* Videosi
 #ifdef _MMCAMCORDER_RM_SUPPORT
        int display_scaler = 0;
 #endif /* _MMCAMCORDER_RM_SUPPORT */
-       int *overlay = NULL;
+       int *dp_handle = NULL;
+       MMCamWindowInfo *window_info = NULL;
        gulong xid;
        char *err_name = NULL;
        const char *videosink_name = NULL;
@@ -1411,7 +1412,7 @@ int _mmcamcorder_videosink_window_set(MMHandleType handle, type_element* Videosi
                MMCAM_DISPLAY_ROTATION, &rotation,
                MMCAM_DISPLAY_FLIP, &flip,
                MMCAM_DISPLAY_VISIBLE, &visible,
-               MMCAM_DISPLAY_HANDLE, (void**)&overlay, &size,
+               MMCAM_DISPLAY_HANDLE, (void **)&dp_handle, &size,
                MMCAM_DISPLAY_MODE, &display_mode,
                MMCAM_DISPLAY_GEOMETRY_METHOD, &display_geometry_method,
                MMCAM_DISPLAY_SCALE, &zoom_attr,
@@ -1435,13 +1436,12 @@ int _mmcamcorder_videosink_window_set(MMHandleType handle, type_element* Videosi
                return MM_ERROR_CAMCORDER_INTERNAL;
        }
 
-       _mmcam_dbg_log("(overlay=%p, size=%d)", overlay, size);
+       _mmcam_dbg_log("(dp_handle=%p, size=%d)", dp_handle, size);
 
        /* Set display handle */
-       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "ximagesink") ||
-               !strcmp(videosink_name, "directvideosink")) {
-               if (overlay) {
-                       xid = *overlay;
+       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "ximagesink")) {
+               if (dp_handle) {
+                       xid = *dp_handle;
                        _mmcam_dbg_log("xid = %lu )", xid);
                        gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(vsink), xid);
                } else {
@@ -1455,22 +1455,46 @@ int _mmcamcorder_videosink_window_set(MMHandleType handle, type_element* Videosi
                MMCAMCORDER_G_OBJECT_SET(vsink, "device-scaler", display_scaler);
 #endif /* _MMCAMCORDER_RM_SUPPORT */
        } else if (!strcmp(videosink_name, "evasimagesink") || !strcmp(videosink_name, "evaspixmapsink")) {
-               _mmcam_dbg_log("videosink : %s, handle : %p", videosink_name, overlay);
+               _mmcam_dbg_log("videosink : %s, handle : %p", videosink_name, dp_handle);
 
-               if (overlay) {
-                       MMCAMCORDER_G_OBJECT_SET_POINTER(vsink, "evas-object", overlay);
+               if (dp_handle) {
+                       MMCAMCORDER_G_OBJECT_SET_POINTER(vsink, "evas-object", dp_handle);
                        MMCAMCORDER_G_OBJECT_SET(vsink, "origin-size", !do_scaling);
                } else {
                        _mmcam_dbg_err("display handle(eavs object) is NULL");
                        return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
                }
        } else if (!strcmp(videosink_name, "tizenwlsink")) {
-               if (overlay) {
-                       _mmcam_dbg_log("wayland global surface id : %d", *overlay);
-                       gst_video_overlay_set_wl_window_wl_surface_id(GST_VIDEO_OVERLAY(vsink), *overlay);
+               if (dp_handle) {
+                       window_info = (MMCamWindowInfo *)dp_handle;
+                       _mmcam_dbg_log("wayland global surface id : %d", window_info->surface_id);
+                       gst_video_overlay_set_wl_window_wl_surface_id(GST_VIDEO_OVERLAY(vsink), window_info->surface_id);
                } else {
                        _mmcam_dbg_warn("Handle is NULL. skip setting.");
                }
+       } else if (!strcmp(videosink_name, "directvideosink")) {
+               if (dp_handle) {
+                       window_info = (MMCamWindowInfo *)dp_handle;
+                       _mmcam_dbg_log("wayland global surface id : %d, x,y,w,h (%d,%d,%d,%d)",
+                               window_info->surface_id,
+                               window_info->rect.x,
+                               window_info->rect.y,
+                               window_info->rect.width,
+                               window_info->rect.height);
+                       gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(vsink), (guintptr)window_info->surface_id);
+                       gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(vsink),
+                               window_info->rect.x,
+                               window_info->rect.y,
+                               window_info->rect.width,
+                               window_info->rect.height);
+               } else {
+                       _mmcam_dbg_warn("dp_handle is null");
+               }
+#ifdef _MMCAMCORDER_RM_SUPPORT
+               if (hcamcorder->request_resources.category_id[0] == RM_CATEGORY_VIDEO_DECODER_SUB)
+                       display_scaler = 1;
+               MMCAMCORDER_G_OBJECT_SET(vsink, "device-scaler", display_scaler);
+#endif /* _MMCAMCORDER_RM_SUPPORT */
        } else {
                _mmcam_dbg_warn("Who are you?? (Videosink: %s)", videosink_name);
        }
@@ -2929,10 +2953,6 @@ bool _mmcamcorder_set_camera_resolution(MMHandleType handle, int width, int heig
 bool _mmcamcorder_set_encoded_preview_bitrate(MMHandleType handle, int bitrate)
 {
        _MMCamcorderSubContext *sc = NULL;
-       GstCameraControl *CameraControl = NULL;
-       GstCameraControlChannel *CameraControlChannel = NULL;
-       const GList *controls = NULL;
-       const GList *item = NULL;
 
        if ((void *)handle == NULL) {
                _mmcam_dbg_warn("handle is NULL");
@@ -2952,27 +2972,13 @@ bool _mmcamcorder_set_encoded_preview_bitrate(MMHandleType handle, int bitrate)
 
        _mmcam_dbg_log("set encoded preview bitrate : %d bps", bitrate);
 
-       CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
-       controls = gst_camera_control_list_channels(CameraControl);
-       _mmcam_dbg_log("controls : %p", controls);
-       if (controls != NULL) {
-               for (item = controls ; item && item->data ; item = item->next) {
-                       CameraControlChannel = item->data;
-                       _mmcam_dbg_log("label : %s", CameraControlChannel->label);
-                       if (!strcmp(CameraControlChannel->label, "bitrate")) {
-                               _mmcam_dbg_log("set encoded preview bitrate %d", bitrate);
-                               return gst_camera_control_set_value(CameraControl, CameraControlChannel, bitrate);
-                       }
-               }
-
-               _mmcam_dbg_warn("failed to find \"bitrate\" control channel");
-       }
+       MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "bitrate", bitrate);
 
-       return FALSE;
+       return TRUE;
 }
 
 
-bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int interval)
+bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int gop_interval)
 {
        _MMCamcorderSubContext *sc = NULL;
 
@@ -2992,9 +2998,9 @@ bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int inte
                return FALSE;
        }
 
-       _mmcam_dbg_log("set encoded preview GOP interval : %d ms", interval);
+       _mmcam_dbg_log("set encoded preview GOP interval : %d ms", gop_interval);
 
-       MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "newgop-interval", interval);
+       MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "gop-interval", gop_interval);
 
        return TRUE;
 }