Support H/W video encoder when use zero copy format
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 19 Mar 2013 08:34:39 +0000 (17:34 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 19 Mar 2013 08:34:39 +0000 (17:34 +0900)
packaging/libmm-camcorder.spec
src/include/mm_camcorder_internal.h
src/mm_camcorder_gstcommon.c

index eff02fac430a4b1efa5b63e46f845d72d2b1d73c..32f56217ccefa710d9efb3ca31b48aee161e4c16 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.7.8
+Version:    0.7.9
 Release:    0
 Group:      libs
 License:    Apache-2.0
index 8819aac03d6fc635ac200fe3241fbaeead317112..fbd080f3f92e514ddd6d6bc12a4b948e0d3f4bcf 100644 (file)
@@ -436,6 +436,7 @@ typedef enum {
        _MMCAMCORDER_ENCSINK_AENC,
        _MMCAMCORDER_ENCSINK_AENC_QUE,
        _MMCAMCORDER_ENCSINK_VQUE,
+       _MMCAMCORDER_ENCSINK_VCONV,
        _MMCAMCORDER_ENCSINK_VENC,
        _MMCAMCORDER_ENCSINK_VENC_QUE,
        _MMCAMCORDER_ENCSINK_ITOG,
index 7998bc26a89881d4fe10e1869128f5e9f7836233..c9437838ed7dc6af1cedf8e00a2350bdae391200 100644 (file)
@@ -120,7 +120,8 @@ gboolean    videocodec_fileformat_compatibility_table[MM_VIDEO_CODEC_NUM][MM_FILE_F
 |    LOCAL VARIABLE DEFINITIONS for internal                           |
 -----------------------------------------------------------------------*/
 #define USE_AUDIO_CLOCK_TUNE
-#define _MMCAMCORDER_WAIT_EOS_TIME     5.0             //sec
+#define _MMCAMCORDER_WAIT_EOS_TIME              5.0     /* sec */
+#define _MMCAMCORDER_CONVERT_OUTPUT_BUFFER_NUM  6
 
 /*-----------------------------------------------------------------------
 |    LOCAL FUNCTION PROTOTYPES:                                                |
@@ -989,6 +990,33 @@ int _mmcamcorder_create_encodesink_bin(MMHandleType handle, MMCamcorderEncodebin
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "venc-name", gst_element_venc_name);
                _MMCAMCORDER_ENCODEBIN_ELMGET(sc, _MMCAMCORDER_ENCSINK_VENC, "video-encode", err);
 
+               /* set color convert plugin */
+               if (hcamcorder->use_zero_copy_format &&
+                   sc->fourcc != GST_MAKE_FOURCC('S','N','1','2')) {
+                       int dst_buffer_num = _MMCAMCORDER_CONVERT_OUTPUT_BUFFER_NUM;
+
+                       /* set fimcconvert as colorspace element */
+                       MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "vconv-name", "fimcconvert");
+                       _MMCAMCORDER_ENCODEBIN_ELMGET(sc, _MMCAMCORDER_ENCSINK_VCONV, "video-convert", err);
+
+                       caps = gst_caps_new_simple("video/x-raw-yuv",
+                                                  "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC('S','N','1','2'),
+                                                  NULL);
+                       if (caps) {
+                               MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "vcaps", caps);
+                               MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_ENCSINK_VCONV].gst, "dst-buffer-num", dst_buffer_num);
+                               MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "auto-colorspace", TRUE);
+
+                               gst_caps_unref (caps);
+                               caps = NULL;
+                       } else {
+                               err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
+                               goto pipeline_creation_error;
+                       }
+
+                       _mmcam_dbg_log("fimcconvert dst-buffer-num %d", dst_buffer_num);
+               }
+
                _mmcamcorder_conf_get_value_int(hcamcorder->conf_main,
                                                CONFIGURE_CATEGORY_MAIN_RECORD,
                                                "UseVideoEncoderQueue",