From 47462a74adc763872f76685d76fb946eb850be77 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Mon, 24 Oct 2022 18:20:47 +0900 Subject: [PATCH] Add "VideoFilterElement" for preview pipeline [Version] 0.10.276 [Issue Type] New feature Change-Id: I29b9260498a539f75ee8a9b29e81bc8a7f05c2a7 Signed-off-by: Jeongmo Yang --- packaging/libmm-camcorder.spec | 2 +- src/include/mm_camcorder_internal.h | 1 + src/mm_camcorder_configure.c | 6 ++++-- src/mm_camcorder_gstcommon.c | 14 ++++++++++++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index 293423f..3acd727 100755 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -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 diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index 40227d1..5fd7973 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -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, diff --git a/src/mm_camcorder_configure.c b/src/mm_camcorder_configure.c index bf2e84d..0537fff 100644 --- a/src/mm_camcorder_configure.c +++ b/src/mm_camcorder_configure.c @@ -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)]); diff --git a/src/mm_camcorder_gstcommon.c b/src/mm_camcorder_gstcommon.c index c34e404..b3efb47 100644 --- a/src/mm_camcorder_gstcommon.c +++ b/src/mm_camcorder_gstcommon.c @@ -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) { -- 2.34.1