bool _mmcamcorder_commit_extra_preview(MMHandleType handle, int attr_idx, const MMAttrsValue *value)
{
+ int ret = MM_ERROR_NONE;
int current_state = MM_CAMCORDER_STATE_NONE;
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
_MMCamcorderSubContext *sc = NULL;
MMCAM_LOG_INFO("Enable extra preview(%d)", value->value.i_val);
- hcamcorder->extra_preview.is_enabled = (gboolean)value->value.i_val;
-
current_state = _mmcamcorder_get_state(handle);
if (current_state < MM_CAMCORDER_STATE_READY) {
MMCAM_LOG_INFO("will be set when preview is started");
sc = MMF_CAMCORDER_SUBCONTEXT(handle);
mmf_return_val_if_fail(sc, FALSE);
- MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "extra-preview", value->value.i_val);
+ if (value->value.i_val)
+ ret = _mmcamcorder_initialize_extra_preview_mode(handle);
+ else
+ ret = _mmcamcorder_deinitialize_extra_preview_mode(handle);
+
+ if (ret != MM_ERROR_NONE) {
+ MMCAM_LOG_ERROR("set[%d] failed[0x%x]", value->value.i_val, ret);
+ return FALSE;
+ }
MMCAM_LOG_INFO("done");
MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "capture-height", capture_height);
MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "capture-quality", capture_quality);
MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "hdr-capture", sc->info_image->hdr_capture_mode);
- 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);
/* set camera flip */
#endif
}
+ /* extra preview */
+ if (extra_preview_enable)
+ _mmcamcorder_initialize_extra_preview_mode(handle);
+
/* set user buffer fd to videosrc element */
if (hcamcorder->support_user_buffer) {
control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
goto pipeline_creation_error;
}
- /* extra preview mode */
- err = _mmcamcorder_initialize_extra_preview_mode(handle);
- if (err != MM_ERROR_NONE) {
- MMCAM_LOG_ERROR("initialize extra preview mode[%d] failed", hcamcorder->extra_preview.mode);
- goto pipeline_creation_error;
- }
-
return MM_ERROR_NONE;
pipeline_creation_error:
static int __mmcamcorder_capture_mode_deinit_encodebin(MMHandleType handle);
static int __mmcamcorder_extra_preview_mode_init_camera_control(mmf_camcorder_t *hcamcorder);
+static int __mmcamcorder_extra_preview_mode_deinit_camera_control(mmf_camcorder_t *hcamcorder);
static int __mmcamcorder_extra_preview_mode_init_pipeline(MMHandleType handle, MMCamcorderExtraPreviewMode mode);
+static int __mmcamcorder_extra_preview_mode_deinit_pipeline(MMHandleType handle, MMCamcorderExtraPreviewMode mode);
static int __mmcamcorder_set_exif_basic_info(MMHandleType handle, int image_width, int image_height);
static int __mmcamcorder_update_exif_info(MMHandleType handle, void *imagedata, int imgln);
mmf_return_val_if_fail(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
- MMCAM_LOG_INFO("connect extra preview stream signal to _MMCAMCORDER_VIDEOSRC_SRC");
-
- MMCAMCORDER_SIGNAL_CONNECT(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst,
- _MMCAMCORDER_HANDLER_EXTRA_PREVIEW, "extra-preview-stream-cb",
- G_CALLBACK(__mmcamcorder_extra_preview_stream_cb),
- hcamcorder);
-
control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
if (!control) {
MMCAM_LOG_ERROR("no camera control");
return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
}
+ MMCAM_LOG_INFO("connect extra preview stream signal and enable extra preview");
+
for (i = 0 ; i < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM ; i++) {
e_fmt = &hcamcorder->extra_preview.format[i];
}
}
+ MMCAMCORDER_SIGNAL_CONNECT(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst,
+ _MMCAMCORDER_HANDLER_EXTRA_PREVIEW, "extra-preview-stream-cb",
+ G_CALLBACK(__mmcamcorder_extra_preview_stream_cb),
+ hcamcorder);
+
+ MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "extra-preview", TRUE);
+
+ MMCAM_LOG_INFO("done");
+
+ return MM_ERROR_NONE;
+}
+
+
+static int __mmcamcorder_extra_preview_mode_deinit_camera_control(mmf_camcorder_t *hcamcorder)
+{
+ _MMCamcorderSubContext *sc = NULL;
+ GstCameraControl *control = 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);
+
+ mmf_return_val_if_fail(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
+ if (!control) {
+ MMCAM_LOG_ERROR("no camera control");
+ return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
+ }
+
+ MMCAM_LOG_INFO("disable extra preview and disconnect extra preview stream signal");
+
+ MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "extra-preview", FALSE);
+
+ _mmcamcorder_disconnect_signal((MMHandleType)hcamcorder, _MMCAMCORDER_HANDLER_EXTRA_PREVIEW);
+
+ MMCAM_LOG_INFO("done");
+
return MM_ERROR_NONE;
}
}
+static int __mmcamcorder_extra_preview_mode_deinit_pipeline(MMHandleType handle, MMCamcorderExtraPreviewMode mode)
+{
+ /* TODO */
+ return MM_ERROR_NONE;
+}
+
+
int _mmcamcorder_initialize_extra_preview_mode(MMHandleType handle)
{
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
- mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_NONE);
- mmf_return_val_if_fail(hcamcorder->extra_preview.is_enabled, MM_ERROR_NONE);
+ mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED);
switch (hcamcorder->extra_preview.mode) {
case MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL:
}
+int _mmcamcorder_deinitialize_extra_preview_mode(MMHandleType handle)
+{
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+
+ mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+ mmf_return_val_if_fail(hcamcorder->extra_preview.is_supported, MM_ERROR_CAMCORDER_NOT_SUPPORTED);
+
+ switch (hcamcorder->extra_preview.mode) {
+ case MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL:
+ return __mmcamcorder_extra_preview_mode_deinit_camera_control(handle);
+ case MM_CAMCORDER_EXTRA_PREVIEW_MODE_PIPELINE_SRCPAD:
+ case MM_CAMCORDER_EXTRA_PREVIEW_MODE_PIPELINE_ELEMENT:
+ return __mmcamcorder_extra_preview_mode_deinit_pipeline(handle, hcamcorder->extra_preview.mode);
+ default:
+ MMCAM_LOG_ERROR("unknown extra preview mode[%d]", hcamcorder->extra_preview.mode);
+ return MM_ERROR_CAMCORDER_INTERNAL;
+ }
+}
+
+
static int __mmcamcorder_capture_mode_deinit_encodebin(MMHandleType handle)
{
int ret = MM_ERROR_NONE;