Support raw image capture with encodebin 52/181652/2 accepted/tizen/unified/20180716.185657 submit/tizen/20180713.022919
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 15 Jun 2018 09:32:37 +0000 (18:32 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Wed, 27 Jun 2018 06:43:25 +0000 (15:43 +0900)
[Version] 0.10.160
[Profile] Common
[Issue Type] Bug fix
[Dependency module] N/A

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

index 97b8c22..a81c8e8 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.159
+Version:    0.10.160
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index b0653f3..691e9aa 100644 (file)
@@ -757,6 +757,7 @@ int _mmcamcorder_create_encodesink_bin(MMHandleType handle, MMCamcorderEncodebin
        int auto_audio_convert = 0;
        int auto_audio_resample = 0;
        int auto_color_space = 0;
+       int cap_format = MM_PIXEL_FORMAT_INVALID;
        const char *gst_element_venc_name = NULL;
        const char *gst_element_aenc_name = NULL;
        const char *gst_element_ienc_name = NULL;
@@ -884,12 +885,18 @@ int _mmcamcorder_create_encodesink_bin(MMHandleType handle, MMCamcorderEncodebin
        _MMCAMCORDER_ELEMENT_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCSINK_ENCBIN, "encodebin", "encodesink_encbin", element_list, err);
 
        /* check element availability */
-       err = mm_camcorder_get_attributes(handle, &err_name,
-               MMCAM_AUDIO_ENCODER, &audio_enc,
-               MMCAM_AUDIO_CHANNEL, &channel,
-               MMCAM_VIDEO_ENCODER_BITRATE, &v_bitrate,
-               MMCAM_AUDIO_ENCODER_BITRATE, &a_bitrate,
-               NULL);
+       if (profile == MM_CAMCORDER_ENCBIN_PROFILE_IMAGE) {
+               err = mm_camcorder_get_attributes(handle, &err_name,
+                       MMCAM_CAPTURE_FORMAT, &cap_format,
+                       NULL);
+       } else {
+               err = mm_camcorder_get_attributes(handle, &err_name,
+                       MMCAM_AUDIO_ENCODER, &audio_enc,
+                       MMCAM_AUDIO_CHANNEL, &channel,
+                       MMCAM_VIDEO_ENCODER_BITRATE, &v_bitrate,
+                       MMCAM_AUDIO_ENCODER_BITRATE, &a_bitrate,
+                       NULL);
+       }
 
        if (err != MM_ERROR_NONE) {
                if (err_name) {
@@ -951,10 +958,12 @@ int _mmcamcorder_create_encodesink_bin(MMHandleType handle, MMCamcorderEncodebin
                        goto pipeline_creation_error;
                }
 
-               if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264)
-                       gst_element_venc_name = "capsfilter";
-               else
+               if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+                       /* set dummy element */
+                       gst_element_venc_name = "identity";
+               } else {
                        _mmcamcorder_conf_get_value_element_name(VideoencElement, &gst_element_venc_name);
+               }
 
                if (gst_element_venc_name) {
                        _mmcam_dbg_log("video encoder name [%s]", gst_element_venc_name);
@@ -1052,14 +1061,19 @@ int _mmcamcorder_create_encodesink_bin(MMHandleType handle, MMCamcorderEncodebin
        }
 
        if (profile == MM_CAMCORDER_ENCBIN_PROFILE_IMAGE) {
-               ImageencElement = _mmcamcorder_get_type_element(handle, MM_CAM_IMAGE_ENCODER);
-               if (!ImageencElement) {
-                       _mmcam_dbg_err("Fail to get type element");
-                       err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
-                       goto pipeline_creation_error;
-               }
+               if (cap_format == MM_PIXEL_FORMAT_ENCODED) {
+                       ImageencElement = _mmcamcorder_get_type_element(handle, MM_CAM_IMAGE_ENCODER);
+                       if (!ImageencElement) {
+                               _mmcam_dbg_err("Fail to get type element");
+                               err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
+                               goto pipeline_creation_error;
+                       }
 
-               _mmcamcorder_conf_get_value_element_name(ImageencElement, &gst_element_ienc_name);
+                       _mmcamcorder_conf_get_value_element_name(ImageencElement, &gst_element_ienc_name);
+               } else {
+                       /* raw format - set dummy element */
+                       gst_element_ienc_name = "identity";
+               }
 
                MMCAMCORDER_G_OBJECT_SET_POINTER(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "ienc-name", gst_element_ienc_name);
                _MMCAMCORDER_ENCODEBIN_ELMGET(sc, _MMCAMCORDER_ENCSINK_IENC, "image-encode", err);
index 53adfb0..7fece95 100644 (file)
@@ -1505,6 +1505,11 @@ static void __mmcamcorder_image_capture_cb(GstElement *element, GstSample *sampl
                _mmcam_dbg_log("Done Internal Encode - data %p, length %d", dest.data, dest.length);
        }
 
+       if (pixtype_main < MM_PIXEL_FORMAT_ENCODED) {
+               _mmcam_dbg_log("raw capture, skip EXIF related functions");
+               goto _CAPTURE_CB_EXIF_DONE;
+       }
+
        /* create EXIF info */
        if (!provide_exif) {    /* make new exif */
                ret = mm_exif_create_exif_info(&(hcamcorder->exif_info));
@@ -1560,32 +1565,32 @@ static void __mmcamcorder_image_capture_cb(GstElement *element, GstSample *sampl
        mm_camcorder_get_attributes((MMHandleType)hcamcorder, NULL, MMCAM_TAG_ENABLE, &tag_enable, NULL);
 
        /* Set extra data for JPEG if tag enabled and doesn't provide EXIF */
-       if (dest.format == MM_PIXEL_FORMAT_ENCODED) {
-               if (tag_enable) {
-                       mm_camcorder_get_attributes((MMHandleType)hcamcorder, NULL,
-                               MMCAM_IMAGE_ENCODER, &codectype,
-                               NULL);
-                       _mmcam_dbg_log("codectype %d", codectype);
+       if (tag_enable) {
+               mm_camcorder_get_attributes((MMHandleType)hcamcorder, NULL,
+                       MMCAM_IMAGE_ENCODER, &codectype,
+                       NULL);
+               _mmcam_dbg_log("codectype %d", codectype);
 
-                       switch (codectype) {
-                       case MM_IMAGE_CODEC_JPEG:
-                       case MM_IMAGE_CODEC_SRW:
-                       case MM_IMAGE_CODEC_JPEG_SRW:
-                               ret = __mmcamcorder_set_jpeg_data((MMHandleType)hcamcorder, &dest, &thumb, provide_exif);
-                               if (ret != MM_ERROR_NONE) {
-                                       _mmcam_dbg_err("Error on setting extra data to jpeg");
-                                       MMCAM_SEND_MESSAGE(hcamcorder, MM_MESSAGE_CAMCORDER_ERROR, ret);
-                                       goto error;
-                               }
-                               break;
-                       default:
-                               _mmcam_dbg_err("The codectype is not supported. (%d)", codectype);
-                               MMCAM_SEND_MESSAGE(hcamcorder, MM_MESSAGE_CAMCORDER_ERROR, MM_ERROR_CAMCORDER_INTERNAL);
+               switch (codectype) {
+               case MM_IMAGE_CODEC_JPEG:
+               case MM_IMAGE_CODEC_SRW:
+               case MM_IMAGE_CODEC_JPEG_SRW:
+                       ret = __mmcamcorder_set_jpeg_data((MMHandleType)hcamcorder, &dest, &thumb, provide_exif);
+                       if (ret != MM_ERROR_NONE) {
+                               _mmcam_dbg_err("Error on setting extra data to jpeg");
+                               MMCAM_SEND_MESSAGE(hcamcorder, MM_MESSAGE_CAMCORDER_ERROR, ret);
                                goto error;
                        }
+                       break;
+               default:
+                       _mmcam_dbg_err("The codectype is not supported. (%d)", codectype);
+                       MMCAM_SEND_MESSAGE(hcamcorder, MM_MESSAGE_CAMCORDER_ERROR, MM_ERROR_CAMCORDER_INTERNAL);
+                       goto error;
                }
        }
 
+_CAPTURE_CB_EXIF_DONE:
+
        /* Handle Capture Callback */
        _MMCAMCORDER_LOCK_VCAPTURE_CALLBACK(hcamcorder);