From c48918a8a151aa19f3c7dc0a05e7b01055ccf186 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Wed, 24 Aug 2022 20:35:42 +0900 Subject: [PATCH] Support new extra preview mode - The defined extra preview mode : MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL : MM_CAMCORDER_EXTRA_PREVIEW_MODE_VIDEO_PAD -> New - Currently, only 1 extra preview stream is supported when it's MM_CAMCORDER_EXTRA_PREVIEW_MODE_VIDEO_PAD mode. [Version] 0.10.267 [Issue Type] New feature Change-Id: I0521335875569d9ffa2820f48172e7ab897ad2dc Signed-off-by: Jeongmo Yang --- packaging/libmm-camcorder.spec | 2 +- src/include/mm_camcorder.h | 8 ++ src/include/mm_camcorder_internal.h | 21 ++- src/include/mm_camcorder_stillshot.h | 5 +- src/mm_camcorder_configure.c | 3 +- src/mm_camcorder_internal.c | 18 ++- src/mm_camcorder_stillshot.c | 208 +++++++++++++++++++++++---- 7 files changed, 221 insertions(+), 44 deletions(-) diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index 19aaafb..0172819 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.266 +Version: 0.10.267 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_camcorder.h b/src/include/mm_camcorder.h index f2637df..7b48044 100644 --- a/src/include/mm_camcorder.h +++ b/src/include/mm_camcorder.h @@ -1407,6 +1407,14 @@ typedef enum { MM_CAMCORDER_CAPTURE_MODE_IMAGE_PAD /**< Capture through image source pad in camerasrc plugin */ } MMCamcorderCaptureMode; +/** + * An enumeration of extra preview mode. + */ +typedef enum { + MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL = 0, /**< Extra preview through camera control interface of camerasrc plugin */ + MM_CAMCORDER_EXTRA_PREVIEW_MODE_VIDEO_PAD /**< Extra preview through video source pad in camerasrc plugin */ +} MMCamcorderExtraPreviewMode; + /** * An enumeration for color tone. Color tone provides an impression of diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index 5b09b43..cbca186 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -546,6 +546,10 @@ typedef enum { _MMCAMCORDER_VIDEOSRC_CAP_FILT, _MMCAMCORDER_VIDEOSRC_CAP_SINK, + /* Pipeline element of extra preview */ + _MMCAMCORDER_VIDEOSRC_EXT_FILT, + _MMCAMCORDER_VIDEOSRC_EXT_SINK, + /* Pipeline element of Video output */ _MMCAMCORDER_VIDEOSINK_QUE, _MMCAMCORDER_VIDEOSINK_CLS, @@ -677,7 +681,7 @@ typedef struct { } _MMCamcorderReplayGain; /** - * MMCamcorder Extra preview stream format + * MMCamcorder Extra preview format */ typedef struct { int pixel_format; @@ -689,7 +693,16 @@ typedef struct { gboolean need_to_set_format; gboolean need_to_set_bitrate; gboolean need_to_set_gop_interval; -} _MMCamcorderExtraPreviewStreamFormat; +} _MMCamcorderExtraPreviewFormat; + +/** + * MMCamcorder Extra preview + */ +typedef struct { + gboolean is_supported; + MMCamcorderExtraPreviewMode mode; + _MMCamcorderExtraPreviewFormat format[MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM]; +} _MMCamcorderExtraPreview; /** * MMCamcorder Sub Context @@ -855,9 +868,7 @@ typedef struct mmf_camcorder { /* Profiling */ int measure_preview_fps; /**< Flag for measuring fps of preview frames */ - /* Extra preview */ - int support_extra_preview; - _MMCamcorderExtraPreviewStreamFormat extra_preview_format[MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM]; + _MMCamcorderExtraPreview extra_preview; /**< Extra preview */ GQuark buffer_quark; /**< Quark for buffer */ diff --git a/src/include/mm_camcorder_stillshot.h b/src/include/mm_camcorder_stillshot.h index 7dbf64d..443f815 100644 --- a/src/include/mm_camcorder_stillshot.h +++ b/src/include/mm_camcorder_stillshot.h @@ -116,10 +116,11 @@ void __mmcamcorder_get_capture_data_from_buffer(MMCamcorderCaptureDataType *capt void __mmcamcorder_release_jpeg_data(MMHandleType handle, MMCamcorderCaptureDataType *dest, int tag_enable, int provide_exif); int __mmcamcorder_capture_save_exifinfo(MMHandleType handle, MMCamcorderCaptureDataType *original, MMCamcorderCaptureDataType *thumbnail, int provide_exif); int __mmcamcorder_set_jpeg_data(MMHandleType handle, MMCamcorderCaptureDataType *dest, MMCamcorderCaptureDataType *thumbnail, int provide_exif); -gboolean __mmcamcorder_handoff_callback(GstElement *fakesink, GstBuffer *buffer, GstPad *pad, gpointer u_data); +gboolean __mmcamcorder_handoff_callback_capture(GstElement *fakesink, GstBuffer *buffer, GstPad *pad, gpointer u_data); +gboolean __mmcamcorder_handoff_callback_extra_preview(GstElement *fakesink, GstBuffer *buffer, GstPad *pad, gpointer u_data); /* extra preview */ -int _mmcamcorder_initialize_extra_preview_stream(MMHandleType handle); +int _mmcamcorder_initialize_extra_preview(MMHandleType handle); int _mmcamcorder_set_extra_preview_stream_format(MMHandleType camcorder, int stream_id, int pixel_format, int width, int height, int fps); int _mmcamcorder_get_extra_preview_stream_format(MMHandleType camcorder, int stream_id, int *pixel_format, int *width, int *height, int *fps); int _mmcamcorder_set_extra_preview_bitrate(MMHandleType camcorder, int stream_id, int bitrate); diff --git a/src/mm_camcorder_configure.c b/src/mm_camcorder_configure.c index f4f080a..2492109 100644 --- a/src/mm_camcorder_configure.c +++ b/src/mm_camcorder_configure.c @@ -822,7 +822,8 @@ int _mmcamcorder_conf_init(MMHandleType handle, int type, camera_conf *configure { "RecommendPreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {NULL} }, { "FacingDirection", CONFIGURE_VALUE_INT, {.value_int = MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR} }, { "FrameStabilityCount", CONFIGURE_VALUE_INT, {.value_int = 0} }, - { "SupportExtraPreview", CONFIGURE_VALUE_INT, {.value_int = 0} } + { "SupportExtraPreview", CONFIGURE_VALUE_INT, {.value_int = 0} }, + { "ExtraPreviewMode", CONFIGURE_VALUE_INT, {.value_int = MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL} } }; /* [Strobe] matching table */ diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 1856449..c81d318 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -423,7 +423,12 @@ static gint __mmcamcorder_init_configure_video_capture(mmf_camcorder_t *hcamcord _mmcamcorder_conf_get_value_int((MMHandleType)hcamcorder, hcamcorder->conf_ctrl, CONFIGURE_CATEGORY_CTRL_CAMERA, "SupportExtraPreview", - &hcamcorder->support_extra_preview); + (int *)&hcamcorder->extra_preview.is_supported); + + _mmcamcorder_conf_get_value_int((MMHandleType)hcamcorder, hcamcorder->conf_ctrl, + CONFIGURE_CATEGORY_CTRL_CAMERA, + "ExtraPreviewMode", + (int *)&hcamcorder->extra_preview.mode); _mmcamcorder_conf_get_value_int((MMHandleType)hcamcorder, hcamcorder->conf_ctrl, CONFIGURE_CATEGORY_CTRL_CAMERA, @@ -488,7 +493,8 @@ static gint __mmcamcorder_init_configure_video_capture(mmf_camcorder_t *hcamcord MMCAM_LOG_INFO("Support user buffer[%d]", hcamcorder->support_user_buffer); MMCAM_LOG_INFO("Support media packet preview cb[%d]", hcamcorder->support_media_packet_preview_cb); - MMCAM_LOG_INFO("Support extra preview[%d]", hcamcorder->support_extra_preview); + MMCAM_LOG_INFO("Support extra preview[%d]", hcamcorder->extra_preview.is_supported); + MMCAM_LOG_INFO("Extra preview mode[%d]", hcamcorder->extra_preview.mode); MMCAM_LOG_INFO("Capture mode[%d]", hcamcorder->capture_mode); MMCAM_LOG_INFO("Use zero copy format[%d]", hcamcorder->use_zero_copy_format); MMCAM_LOG_INFO("Use video convert[%d]", hcamcorder->use_videoconvert); @@ -546,7 +552,7 @@ static gint __mmcamcorder_init_configure_video_capture(mmf_camcorder_t *hcamcord MMCAM_SUPPORT_ZERO_COPY_FORMAT, hcamcorder->use_zero_copy_format, MMCAM_SUPPORT_MEDIA_PACKET_PREVIEW_CB, hcamcorder->support_media_packet_preview_cb, MMCAM_SUPPORT_USER_BUFFER, hcamcorder->support_user_buffer, - MMCAM_SUPPORT_EXTRA_PREVIEW, hcamcorder->support_extra_preview, + MMCAM_SUPPORT_EXTRA_PREVIEW, hcamcorder->extra_preview.is_supported, MMCAM_CAMERA_FPS, fps_info.int_array.def, MMCAM_DISPLAY_FLIP, camera_default_flip, MMCAM_CAPTURE_SOUND_ENABLE, play_capture_sound, @@ -3133,9 +3139,9 @@ int _mmcamcorder_create_pipeline(MMHandleType handle, int type) return ret; } - if (hcamcorder->support_extra_preview && - _mmcamcorder_initialize_extra_preview_stream(handle) != MM_ERROR_NONE) - MMCAM_LOG_WARNING("connect extra preview stream signal failed"); + if (hcamcorder->extra_preview.is_supported && + _mmcamcorder_initialize_extra_preview(handle) != MM_ERROR_NONE) + MMCAM_LOG_WARNING("initialize extra preview failed"); break; } diff --git a/src/mm_camcorder_stillshot.c b/src/mm_camcorder_stillshot.c index 01367e5..9161189 100644 --- a/src/mm_camcorder_stillshot.c +++ b/src/mm_camcorder_stillshot.c @@ -123,7 +123,7 @@ int _mmcamcorder_prepare_capture_mode_encodebin(MMHandleType handle) /* connect handoff signal to get capture data */ MMCAMCORDER_SIGNAL_CONNECT(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, _MMCAMCORDER_HANDLER_STILLSHOT, "handoff", - G_CALLBACK(__mmcamcorder_handoff_callback), + G_CALLBACK(__mmcamcorder_handoff_callback_capture), hcamcorder); return MM_ERROR_NONE; @@ -242,7 +242,7 @@ int _mmcamcorder_prepare_capture_mode_image_pad(MMHandleType handle) /* connect handoff signal to get capture data */ MMCAMCORDER_SIGNAL_CONNECT(sc->element[_MMCAMCORDER_VIDEOSRC_CAP_SINK].gst, _MMCAMCORDER_HANDLER_STILLSHOT, "handoff", - G_CALLBACK(__mmcamcorder_handoff_callback), + G_CALLBACK(__mmcamcorder_handoff_callback_capture), hcamcorder); return MM_ERROR_NONE; @@ -260,17 +260,16 @@ pipeline_creation_error: } -int _mmcamcorder_initialize_extra_preview_stream(MMHandleType handle) +static int __mmcamcorder_extra_preview_camera_control(mmf_camcorder_t *hcamcorder) { int i = 0; - mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); _MMCamcorderSubContext *sc = NULL; GstCameraControl *control = NULL; - _MMCamcorderExtraPreviewStreamFormat *e_fmt = NULL; + _MMCamcorderExtraPreviewFormat *e_fmt = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED); - sc = MMF_CAMCORDER_SUBCONTEXT(handle); + sc = MMF_CAMCORDER_SUBCONTEXT(hcamcorder); mmf_return_val_if_fail(sc && sc->element, MM_ERROR_CAMCORDER_NOT_INITIALIZED); mmf_return_val_if_fail(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, MM_ERROR_CAMCORDER_NOT_INITIALIZED); @@ -289,7 +288,7 @@ int _mmcamcorder_initialize_extra_preview_stream(MMHandleType handle) } for (i = 0 ; i < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM ; i++) { - e_fmt = &hcamcorder->extra_preview_format[i]; + e_fmt = &hcamcorder->extra_preview.format[i]; if (e_fmt->need_to_set_format) { if (!gst_camera_control_set_extra_preview_stream_format(control, @@ -320,6 +319,128 @@ int _mmcamcorder_initialize_extra_preview_stream(MMHandleType handle) } +static int __mmcamcorder_extra_preview_video_pad(mmf_camcorder_t *hcamcorder) +{ + int err = MM_ERROR_NONE; + int extra_preview_enable = 0; + int width = 0; + int height = 0; + int fps = 0; + gchar *caps_string = NULL; + GstCaps *caps = NULL; + GList *element_list = NULL; + _MMCamcorderSubContext *sc = NULL; + + mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED); + + sc = MMF_CAMCORDER_SUBCONTEXT(hcamcorder); + mmf_return_val_if_fail(sc && sc->element, MM_ERROR_CAMCORDER_NOT_INITIALIZED); + + err = mm_camcorder_get_attributes((MMHandleType)hcamcorder, NULL, + MMCAM_EXTRA_PREVIEW_ENABLE, &extra_preview_enable, + NULL); + + width = hcamcorder->extra_preview.format[0].width; + height = hcamcorder->extra_preview.format[0].height; + fps = hcamcorder->extra_preview.format[0].fps; + + if (!extra_preview_enable || width <= 0 || height <= 0 || fps <= 0) { + MMCAM_LOG_WARNING("extra preview disabled[enable:%d,res:%dx%d,fps:%d]", + extra_preview_enable, width, height, fps); + return MM_ERROR_NONE; + } + + _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSRC_EXT_FILT, "capsfilter", "videosrc_ext_filt", element_list, err); + _MMCAMCORDER_ELEMENT_MAKE(sc, sc->element, _MMCAMCORDER_VIDEOSRC_EXT_SINK, "fakesink", "videosrc_ext_sink", element_list, err); + + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_EXT_SINK].gst, "sync", TRUE); + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_EXT_SINK].gst, "async", FALSE); + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_EXT_SINK].gst, "enable-last-sample", FALSE); + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_EXT_SINK].gst, "signal-handoffs", TRUE); + + caps = gst_caps_new_simple("video/x-h264", + "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, + "framerate", GST_TYPE_FRACTION, fps, 1, + NULL); + if (!caps) { + MMCAM_LOG_ERROR("caps for extra preview failed"); + err = MM_ERROR_CAMCORDER_GST_LINK; + goto pipeline_creation_error; + } + + caps_string = gst_caps_to_string(caps); + if (caps_string) { + MMCAM_LOG_INFO("set caps for capture[%s]", caps_string); + g_free(caps_string); + caps_string = NULL; + } + + MMCAMCORDER_G_OBJECT_SET_POINTER(sc->element[_MMCAMCORDER_VIDEOSRC_EXT_FILT].gst, "caps", caps); + gst_caps_unref(caps); + + /* add elements to main pipeline */ + if (!_mmcamcorder_add_elements_to_bin(GST_BIN(sc->element[_MMCAMCORDER_MAIN_PIPE].gst), element_list)) { + MMCAM_LOG_ERROR("element_list add error."); + err = MM_ERROR_CAMCORDER_RESOURCE_CREATION; + goto pipeline_creation_error; + } + + /* link elements */ + if (!gst_element_link_pads(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "video_%u", + sc->element[_MMCAMCORDER_VIDEOSRC_EXT_FILT].gst, "sink")) { + MMCAM_LOG_ERROR("pad for extra preview link failed"); + err = MM_ERROR_CAMCORDER_GST_LINK; + goto pipeline_creation_error; + } + + if (!_mmcamcorder_link_elements(element_list)) { + MMCAM_LOG_ERROR("element link error."); + err = MM_ERROR_CAMCORDER_GST_LINK; + goto pipeline_creation_error; + } + + g_list_free(element_list); + + /* connect handoff signal to get capture data */ + MMCAMCORDER_SIGNAL_CONNECT(sc->element[_MMCAMCORDER_VIDEOSRC_EXT_SINK].gst, + _MMCAMCORDER_HANDLER_STILLSHOT, "handoff", + G_CALLBACK(__mmcamcorder_handoff_callback_extra_preview), + hcamcorder); + + return MM_ERROR_NONE; + +pipeline_creation_error: + _MMCAMCORDER_ELEMENT_REMOVE(sc->element, _MMCAMCORDER_VIDEOSRC_EXT_FILT); + _MMCAMCORDER_ELEMENT_REMOVE(sc->element, _MMCAMCORDER_VIDEOSRC_EXT_SINK); + + if (element_list) { + g_list_free(element_list); + element_list = NULL; + } + + return err; +} + + +int _mmcamcorder_initialize_extra_preview(MMHandleType handle) +{ + mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); + + mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED); + + switch (hcamcorder->extra_preview.mode) { + case MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL: + return __mmcamcorder_extra_preview_camera_control(hcamcorder); + case MM_CAMCORDER_EXTRA_PREVIEW_MODE_VIDEO_PAD: + return __mmcamcorder_extra_preview_video_pad(hcamcorder); + default: + MMCAM_LOG_ERROR("unknown extra preview mode[%d]", hcamcorder->extra_preview.mode); + return MM_ERROR_CAMCORDER_INTERNAL; + } +} + + int _mmcamcorder_unprepare_capture_mode_encodebin(MMHandleType handle) { int ret = MM_ERROR_NONE; @@ -1883,7 +2004,36 @@ static void __mmcamcorder_extra_preview_stream_cb(GstElement *element, int strea } -gboolean __mmcamcorder_handoff_callback(GstElement *fakesink, GstBuffer *buffer, GstPad *pad, gpointer u_data) +gboolean __mmcamcorder_handoff_callback_extra_preview(GstElement *fakesink, GstBuffer *buffer, GstPad *pad, gpointer u_data) +{ + mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(u_data); + _MMCamcorderSubContext *sc = NULL; + + GstCaps *caps = NULL; + GstSample *sample = NULL; + + mmf_return_val_if_fail(hcamcorder, FALSE); + + sc = MMF_CAMCORDER_SUBCONTEXT(hcamcorder); + mmf_return_val_if_fail(sc && sc->element, FALSE); + + /* make sample with buffer and caps */ + caps = gst_pad_get_allowed_caps(pad); + mmf_return_val_if_fail(caps, TRUE); + + sample = gst_sample_new(buffer, caps, NULL, NULL); + gst_caps_unref(caps); + mmf_return_val_if_fail(sample, TRUE); + + _mmcamcorder_invoke_video_stream_cb((MMHandleType)u_data, sample, TRUE, 0); + + gst_sample_unref(sample); + + return TRUE; +} + + +gboolean __mmcamcorder_handoff_callback_capture(GstElement *fakesink, GstBuffer *buffer, GstPad *pad, gpointer u_data) { mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(u_data); _MMCamcorderSubContext *sc = NULL; @@ -3036,7 +3186,7 @@ int _mmcamcorder_set_extra_preview_stream_format(MMHandleType camcorder, int str _MMCamcorderSubContext *sc = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); - mmf_return_val_if_fail(hcamcorder->support_extra_preview, MM_ERROR_CAMCORDER_NOT_SUPPORTED); + mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED); mmf_return_val_if_fail(stream_id >= 0 && stream_id < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); mmf_return_val_if_fail(pixel_format > MM_PIXEL_FORMAT_INVALID && pixel_format < MM_PIXEL_FORMAT_NUM, @@ -3060,13 +3210,13 @@ int _mmcamcorder_set_extra_preview_stream_format(MMHandleType camcorder, int str } } else { MMCAM_LOG_INFO("It will be set when start preview"); - hcamcorder->extra_preview_format[stream_id].need_to_set_format = TRUE; + hcamcorder->extra_preview.format[stream_id].need_to_set_format = TRUE; } - hcamcorder->extra_preview_format[stream_id].pixel_format = pixel_format; - hcamcorder->extra_preview_format[stream_id].width = width; - hcamcorder->extra_preview_format[stream_id].height = height; - hcamcorder->extra_preview_format[stream_id].fps = fps; + hcamcorder->extra_preview.format[stream_id].pixel_format = pixel_format; + hcamcorder->extra_preview.format[stream_id].width = width; + hcamcorder->extra_preview.format[stream_id].height = height; + hcamcorder->extra_preview.format[stream_id].fps = fps; return MM_ERROR_NONE; } @@ -3084,7 +3234,7 @@ int _mmcamcorder_get_extra_preview_stream_format(MMHandleType camcorder, int str _MMCamcorderSubContext *sc = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); - mmf_return_val_if_fail(hcamcorder->support_extra_preview, MM_ERROR_CAMCORDER_NOT_SUPPORTED); + mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED); mmf_return_val_if_fail(pixel_format && width && height && fps, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); mm_camcorder_get_state(camcorder, ¤t_state); @@ -3105,10 +3255,10 @@ int _mmcamcorder_get_extra_preview_stream_format(MMHandleType camcorder, int str *height = _height; *fps = _fps; } else { - *pixel_format = hcamcorder->extra_preview_format[stream_id].pixel_format; - *width = hcamcorder->extra_preview_format[stream_id].width; - *height = hcamcorder->extra_preview_format[stream_id].height; - *fps = hcamcorder->extra_preview_format[stream_id].fps; + *pixel_format = hcamcorder->extra_preview.format[stream_id].pixel_format; + *width = hcamcorder->extra_preview.format[stream_id].width; + *height = hcamcorder->extra_preview.format[stream_id].height; + *fps = hcamcorder->extra_preview.format[stream_id].fps; } MMCAM_LOG_INFO("get result[fmt:%d(%d),res:%dx%d,fps:%d][state:%d]", @@ -3126,7 +3276,7 @@ int _mmcamcorder_set_extra_preview_bitrate(MMHandleType camcorder, int stream_id _MMCamcorderSubContext *sc = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); - mmf_return_val_if_fail(hcamcorder->support_extra_preview, MM_ERROR_CAMCORDER_NOT_SUPPORTED); + mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED); mmf_return_val_if_fail(stream_id >= 0 && stream_id < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); mmf_return_val_if_fail(bitrate > 0, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); @@ -3146,10 +3296,10 @@ int _mmcamcorder_set_extra_preview_bitrate(MMHandleType camcorder, int stream_id } } else { MMCAM_LOG_INFO("It will be set when start preview"); - hcamcorder->extra_preview_format[stream_id].need_to_set_bitrate = TRUE; + hcamcorder->extra_preview.format[stream_id].need_to_set_bitrate = TRUE; } - hcamcorder->extra_preview_format[stream_id].bitrate = bitrate; + hcamcorder->extra_preview.format[stream_id].bitrate = bitrate; return MM_ERROR_NONE; } @@ -3164,7 +3314,7 @@ int _mmcamcorder_get_extra_preview_bitrate(MMHandleType camcorder, int stream_id _MMCamcorderSubContext *sc = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); - mmf_return_val_if_fail(hcamcorder->support_extra_preview, MM_ERROR_CAMCORDER_NOT_SUPPORTED); + mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED); mmf_return_val_if_fail(stream_id >= 0 && stream_id < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); mmf_return_val_if_fail(bitrate, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); @@ -3183,7 +3333,7 @@ int _mmcamcorder_get_extra_preview_bitrate(MMHandleType camcorder, int stream_id *bitrate = _bitrate; } else { - *bitrate = hcamcorder->extra_preview_format[stream_id].bitrate; + *bitrate = hcamcorder->extra_preview.format[stream_id].bitrate; } MMCAM_LOG_INFO("get bitrate[%d] for stream[%d][state:%d]", @@ -3201,7 +3351,7 @@ int _mmcamcorder_set_extra_preview_gop_interval(MMHandleType camcorder, int stre _MMCamcorderSubContext *sc = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); - mmf_return_val_if_fail(hcamcorder->support_extra_preview, MM_ERROR_CAMCORDER_NOT_SUPPORTED); + mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED); mmf_return_val_if_fail(stream_id >= 0 && stream_id < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); @@ -3220,10 +3370,10 @@ int _mmcamcorder_set_extra_preview_gop_interval(MMHandleType camcorder, int stre } } else { MMCAM_LOG_INFO("It will be set when start preview"); - hcamcorder->extra_preview_format[stream_id].need_to_set_gop_interval = TRUE; + hcamcorder->extra_preview.format[stream_id].need_to_set_gop_interval = TRUE; } - hcamcorder->extra_preview_format[stream_id].gop_interval = interval; + hcamcorder->extra_preview.format[stream_id].gop_interval = interval; return MM_ERROR_NONE; } @@ -3238,7 +3388,7 @@ int _mmcamcorder_get_extra_preview_gop_interval(MMHandleType camcorder, int stre _MMCamcorderSubContext *sc = NULL; mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); - mmf_return_val_if_fail(hcamcorder->support_extra_preview, MM_ERROR_CAMCORDER_NOT_SUPPORTED); + mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED); mmf_return_val_if_fail(stream_id >= 0 && stream_id < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); mmf_return_val_if_fail(interval, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); @@ -3257,7 +3407,7 @@ int _mmcamcorder_get_extra_preview_gop_interval(MMHandleType camcorder, int stre *interval = _interval; } else { - *interval = hcamcorder->extra_preview_format[stream_id].gop_interval; + *interval = hcamcorder->extra_preview.format[stream_id].gop_interval; } MMCAM_LOG_INFO("get GOP interval[%d] for stream[%d][state:%d]", -- 2.34.1