Update code for encoded preview setting 99/219599/4 accepted/tizen/unified/20191213.042430 submit/tizen/20191212.093208
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 6 Dec 2019 08:16:15 +0000 (17:16 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 9 Dec 2019 06:53:31 +0000 (15:53 +0900)
[Version] 0.10.191
[Profile] Common
[Issue Type] Update

Change-Id: I39eebc1d0ac65d1eb368fd60b80cb867846b3270
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-camcorder.spec
src/include/mm_camcorder_gstcommon.h
src/mm_camcorder_gstcommon.c
src/mm_camcorder_stillshot.c
src/mm_camcorder_videorec.c

index a93758a..f4c5eb4 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.190
+Version:    0.10.191
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 01250aa..7babef8 100644 (file)
@@ -178,7 +178,7 @@ bool _mmcamcorder_set_videosrc_anti_shake(MMHandleType handle, int anti_shake);
 bool _mmcamcorder_set_videosrc_stabilization(MMHandleType handle, int stabilization);
 bool _mmcamcorder_set_camera_resolution(MMHandleType handle, int width, int height);
 bool _mmcamcorder_set_encoded_preview_bitrate(MMHandleType handle, int bitrate);
-bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int gop);
+bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int gop_interval);
 bool _mmcamcorder_set_sound_stream_info(GstElement *element, char *stream_type, int stream_index);
 void _mmcamcorder_set_encoder_bitrate(MMCamcorderEncoderType type, int codec, int bitrate, GstElement *element);
 GstPadProbeReturn __mmcamcorder_muxed_dataprobe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data);
index a0da705..fc4d1e8 100644 (file)
@@ -2953,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");
@@ -2976,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;
 
@@ -3016,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;
 }
index 0b0ab0e..5fc9c95 100644 (file)
@@ -53,8 +53,6 @@ do { \
 #define THUMBNAIL_JPEG_QUALITY  90
 #define TRY_LOCK_MAX_COUNT      100
 #define TRY_LOCK_TIME           20000   /* ms */
-#define H264_PREVIEW_BITRATE    1024*10 /* kbps */
-#define H264_PREVIEW_NEWGOP_INTERVAL    1000 /* ms */
 #define _MMCAMCORDER_MAKE_THUMBNAIL_INTERNAL_ENCODE
 
 
@@ -633,6 +631,8 @@ int _mmcamcorder_image_cmd_preview_start(MMHandleType handle)
        int height = 0;
        int fps = 0;
        int rotation = 0;
+       int bitrate = 0;
+       int gop_interval = 0;
        unsigned int current_framecount = 0;
        int current_state = MM_CAMCORDER_STATE_NONE;
        gboolean fps_auto = FALSE;
@@ -817,8 +817,16 @@ int _mmcamcorder_image_cmd_preview_start(MMHandleType handle)
                        _mmcamcorder_sound_finalize(handle);
        } else {
                if (info->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
-                       MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "bitrate", H264_PREVIEW_BITRATE);
-                       MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "newgop-interval", H264_PREVIEW_NEWGOP_INTERVAL);
+                       ret = mm_camcorder_get_attributes(handle, NULL,
+                               MMCAM_ENCODED_PREVIEW_BITRATE, &bitrate,
+                               MMCAM_ENCODED_PREVIEW_GOP_INTERVAL, &gop_interval,
+                               NULL);
+                       if (ret == MM_ERROR_NONE) {
+                               _mmcamcorder_set_encoded_preview_bitrate(handle, bitrate);
+                               _mmcamcorder_set_encoded_preview_gop_interval(handle, gop_interval);
+                       } else {
+                               _mmcam_dbg_err("failed to get encoded preview setting");
+                       }
                }
 
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_QUE].gst, "empty-buffers", FALSE);
index 7eac0b9..f7d0c42 100644 (file)
@@ -501,14 +501,12 @@ int _mmcamcorder_video_command(MMHandleType handle, int command)
        int size = 0;
        int fileformat = 0;
        int count = 0;
+       int gop_interval = 0;
        int ret = MM_ERROR_NONE;
        double motion_rate = _MMCAMCORDER_DEFAULT_RECORDING_MOTION_RATE;
        char *err_name = NULL;
        char *target_filename = NULL;
        GstCameraControl *CameraControl = NULL;
-       GstCameraControlChannel *CameraControlChannel = NULL;
-       const GList *controls = NULL;
-       const GList *item = NULL;
 
        gint fps = 0;
        GstElement *pipeline = NULL;
@@ -822,49 +820,22 @@ int _mmcamcorder_video_command(MMHandleType handle, int command)
                                goto _ERR_CAMCORDER_VIDEO_COMMAND;
                        }
 
-                       /*set the camera control to create the GOP so that video record will get a new key frame*/
-                       if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264 &&
-                           GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
-                               CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
-                               controls = gst_camera_control_list_channels(CameraControl);
-                               if (controls != NULL) {
-                                       for (item = controls ; item && item->data ; item = item->next) {
-                                               CameraControlChannel = item->data;
-                                               _mmcam_dbg_log("CameraControlChannel->label %s", CameraControlChannel->label);
-                                               if (!strcmp(CameraControlChannel->label, "new-gop")) {
-                                                       /* gst_camera_control_set_value(CameraControl, CameraControlChannel, 1); */
-                                                       break;
-                                               }
-                                       }
-
-                                       if (item == NULL)
-                                               _mmcam_dbg_warn("failed to find new-gop control channel");
-                               }
-                       } else {
-                               _mmcam_dbg_warn("Can't cast Video source into camera control or not H264 prevew format[%d]",
-                                       sc->info_image->preview_format);
+                       /*set the GOP so that video record will get a new key frame*/
+                       if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+                               if (mm_camcorder_get_attributes(handle, NULL,
+                                       MMCAM_ENCODED_PREVIEW_GOP_INTERVAL, &gop_interval, NULL) == MM_ERROR_NONE)
+                                       _mmcamcorder_set_encoded_preview_gop_interval(handle, gop_interval);
+                               else
+                                       _mmcam_dbg_err("get gop interval failed");
                        }
                } else {
                        /* Resume case */
-
-                       if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264 &&
-                           GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
-                               /* generate and I-frame on resuming */
-                               CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
-                               controls = gst_camera_control_list_channels(CameraControl);
-                               if (controls != NULL) {
-                                       for (item = controls ; item && item->data ; item = item->next) {
-                                               CameraControlChannel = item->data;
-                                               _mmcam_dbg_log("CameraControlChannel->label %s", CameraControlChannel->label);
-                                               if (!strcmp(CameraControlChannel->label, "new-gop")) {
-                                                       /* gst_camera_control_set_value(CameraControl, CameraControlChannel, 1); */
-                                                       break;
-                                               }
-                                       }
-
-                                       if (item == NULL)
-                                               _mmcam_dbg_warn("failed to find new-gop control channel");
-                               }
+                       if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+                               if (mm_camcorder_get_attributes(handle, NULL,
+                                       MMCAM_ENCODED_PREVIEW_GOP_INTERVAL, &gop_interval, NULL) == MM_ERROR_NONE)
+                                       _mmcamcorder_set_encoded_preview_gop_interval(handle, gop_interval);
+                               else
+                                       _mmcam_dbg_err("get gop interval failed");
                        }
 
                        MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "runtime-pause", FALSE);