Add "VideoFilterElement" for preview pipeline 31/283331/1
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 24 Oct 2022 09:20:47 +0000 (18:20 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 24 Oct 2022 10:58:34 +0000 (19:58 +0900)
[Version] 0.10.276
[Issue Type] New feature

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

index 293423f27322a8fc9acbf30473fe7a16eb5910a8..3acd727f538ac6d820ef254fd0daf7083f541810 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.275
+Version:    0.10.276
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 40227d14d012110d798122a8318c022c7db6237c..5fd79730bb3ba681b0acab0782b92e6a3ab2a6c6 100644 (file)
@@ -539,6 +539,7 @@ typedef enum {
        /* Pipeline element of Video input */
        _MMCAMCORDER_VIDEOSRC_SRC,
        _MMCAMCORDER_VIDEOSRC_CAPS,
+       _MMCAMCORDER_VIDEOSRC_FILT,
        _MMCAMCORDER_VIDEOSRC_QUE,
        _MMCAMCORDER_VIDEOSRC_PARSE,
        _MMCAMCORDER_VIDEOSRC_DECODE,
index bf2e84dbffda8bd27aee60e262f8b4a4e4e273a8..0537fff2b12ef7b8741b5c83b084bb7f804cc4ba 100644 (file)
@@ -825,7 +825,8 @@ int _mmcamcorder_conf_init(MMHandleType handle, int type, camera_conf *configure
                { "SupportExtraPreview",  CONFIGURE_VALUE_INT,            {.value_int = 0} },
                { "ExtraPreviewMode",     CONFIGURE_VALUE_INT,            {.value_int = MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL} },
                { "AltVideosrcElement",   CONFIGURE_VALUE_ELEMENT,        {NULL} }, /* The alternative of videosrc element, it will be used instead of "VideosrcElement" if exists. */
-               { "AltUseZeroCopyFormat", CONFIGURE_VALUE_INT,            {.value_int = -1} } /* The alternative of "UseZeroCopyFormat", it will be used if it's not default(-1) value. */
+               { "AltUseZeroCopyFormat", CONFIGURE_VALUE_INT,            {.value_int = -1} }, /* The alternative of "UseZeroCopyFormat", it will be used if it's not default(-1) value. */
+               { "VideoFilterElement",   CONFIGURE_VALUE_ELEMENT,        {NULL} } /* The video filter element which is placed between videosrc and videosink elements. */
        };
 
        /* [Strobe] matching table */
@@ -1556,6 +1557,7 @@ int _mmcamcorder_conf_add_info(MMHandleType handle, int type, conf_detail **info
                {
                        type_element2* new_element;
 
+                       j = 0;
                        new_element = (type_element2*)g_malloc0(sizeof(type_element2));
                        new_element->name         = get_new_string(buffer_token[0]);
                        new_element->element_name = get_new_string(buffer_token[1]);
@@ -1570,7 +1572,7 @@ int _mmcamcorder_conf_add_info(MMHandleType handle, int type, conf_detail **info
                        /* add int values */
                        if (new_element->count_int > 0 && new_element->count_int <= 30) {
                                new_element->value_int = (type_int2**)g_malloc0(sizeof(type_int2*)*(new_element->count_int));
-                               for (j = 0 ; j < new_element->count_int ; j++) {
+                               for ( ; j < new_element->count_int ; j++) {
                                        new_element->value_int[j] = (type_int2*)g_malloc0(sizeof(type_int2));
                                        new_element->value_int[j]->name  = get_new_string(buffer_token[4+(j<<1)]);
                                        new_element->value_int[j]->value = atoi(buffer_token[5+(j<<1)]);
index c34e40431eef7dfadfea13bf9dbdfe98b0945d84..b3efb47cca08b4e1a353e0ba1942115792e40d8e 100644 (file)
@@ -531,6 +531,7 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle)
        int anti_shake = 0;
        int display_surface_type = MM_DISPLAY_SURFACE_NULL;
        const char *videosrc_name = NULL;
+       const char *videofilt_name = NULL;
        const char *videosink_name = NULL;
        const char *videoconvert_name = NULL;
        const char *videodecoder_name = NULL;
@@ -553,6 +554,7 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle)
        mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
        _MMCamcorderSubContext *sc = NULL;
        type_element *videosrc_element = NULL;
+       type_element *videofilt_element = NULL;
        type_int_array *input_index = NULL;
 
        mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
@@ -656,8 +658,6 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle)
        MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "extra-preview", extra_preview_enable);
        MMCAMCORDER_G_OBJECT_GET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "buffer-quark", &hcamcorder->buffer_quark);
 
-       _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSRC_QUE, "queue", "videosrc_queue", element_list, err);
-
        /* set camera flip */
        _mmcamcorder_set_videosrc_flip(handle, camera_flip);
 
@@ -701,6 +701,16 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle)
                        &hcamcorder->recreate_decoder);
        }
 
+       _mmcamcorder_conf_get_element_and_name((MMHandleType)hcamcorder,
+               hcamcorder->conf_ctrl, CONFIGURE_CATEGORY_CTRL_CAMERA, "VideoFilterElement",
+               &videofilt_element, &videofilt_name);
+       if (videofilt_element && videofilt_name) {
+               _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSRC_FILT, videofilt_name, "videosrc_filt", element_list, err);
+               _mmcamcorder_conf_set_value_element_property(sc->element[_MMCAMCORDER_VIDEOSRC_FILT].gst, videofilt_element);
+       }
+
+       _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSRC_QUE, "queue", "videosrc_queue", element_list, err);
+
        if (display_surface_type != MM_DISPLAY_SURFACE_NULL &&
                _mmcamcorder_is_encoded_preview_pixel_format(sc->info_image->preview_format)) {
                switch (sc->info_image->preview_format) {