/* Pipeline element of Video input */
_MMCAMCORDER_VIDEOSRC_SRC,
_MMCAMCORDER_VIDEOSRC_CAPS,
+ _MMCAMCORDER_VIDEOSRC_FILT,
_MMCAMCORDER_VIDEOSRC_QUE,
_MMCAMCORDER_VIDEOSRC_PARSE,
_MMCAMCORDER_VIDEOSRC_DECODE,
{ "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 */
{
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]);
/* 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)]);
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;
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);
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);
&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) {