#include <stdlib.h>
#include <sys/time.h>
#include <sys/times.h>
-#include <gst/video/cameracontrol.h>
#include "mm_camcorder_internal.h"
#include "mm_camcorder_stillshot.h"
#include "mm_camcorder_exifinfo.h"
}
-int _mmcamcorder_connect_extra_preview_stream(MMHandleType handle)
+int _mmcamcorder_initialize_extra_preview_stream(MMHandleType handle)
{
+ int i = 0;
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
_MMCamcorderSubContext *sc = NULL;
+ GstCameraControl *control = NULL;
+ _MMCamcorderExtraPreviewStreamFormat *e_fmt = NULL;
mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
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;
+ }
+
+ for (i = 0 ; i < MM_CAMCORDER_EXTRA_PREVIEW_STREAM_NUM ; i++) {
+ e_fmt = &hcamcorder->extra_preview_format[i];
+
+ if (!e_fmt->is_set)
+ continue;
+
+ if (!gst_camera_control_set_extra_preview_stream_format(control,
+ i, _mmcamcorder_get_pixel_format2(e_fmt->pixel_format),
+ e_fmt->width, e_fmt->height, e_fmt->fps))
+ MMCAM_LOG_WARNING("set failed[%d],[%d,%dx%d,%d]",
+ i, e_fmt->pixel_format, e_fmt->width, e_fmt->height, e_fmt->fps);
+ }
+
return MM_ERROR_NONE;
}
return;
}
+
+
+int _mmcamcorder_set_extra_preview_stream_format(MMHandleType camcorder, int stream_id, int pixel_format, int width, int height, int fps)
+{
+ mmf_camcorder_t *hcamcorder = (mmf_camcorder_t *)camcorder;
+ MMCamcorderStateType current_state = MM_CAMCORDER_STATE_NONE;
+ GstCameraControl *control = NULL;
+ _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(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,
+ MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+ mmf_return_val_if_fail(width > 0 && height > 0 && fps >= 0, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ mm_camcorder_get_state(camcorder, ¤t_state);
+
+ MMCAM_LOG_INFO("state[%d] stream_id[%d],fmt[%d],res[%dx%d],fps[%d]",
+ current_state, stream_id, pixel_format, width, height, fps);
+
+ if (current_state >= MM_CAMCORDER_STATE_READY) {
+ sc = MMF_CAMCORDER_SUBCONTEXT(camcorder);
+ mmf_return_val_if_fail(sc, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
+ if (!gst_camera_control_set_extra_preview_stream_format(control,
+ stream_id, _mmcamcorder_get_camera_control_image_format(pixel_format), width, height, fps)) {
+ MMCAM_LOG_ERROR("camera control failed");
+ return MM_ERROR_CAMCORDER_INTERNAL;
+ }
+ } else {
+ MMCAM_LOG_INFO("It will be set when start preview");
+ }
+
+ 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].is_set = TRUE;
+
+ return MM_ERROR_NONE;
+}
+
+
+int _mmcamcorder_get_extra_preview_stream_format(MMHandleType camcorder, int stream_id, int *pixel_format, int *width, int *height, int *fps)
+{
+ int _width = 0;
+ int _height = 0;
+ int _fps = 0;
+ GstCameraControlImageFormat _img_fmt = GST_CAMERA_CONTROL_IMAGE_FORMAT_NV12;
+ GstCameraControl *control = NULL;
+ mmf_camcorder_t *hcamcorder = (mmf_camcorder_t *)camcorder;
+ MMCamcorderStateType current_state = MM_CAMCORDER_STATE_NONE;
+ _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(pixel_format && width && height && fps, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ mm_camcorder_get_state(camcorder, ¤t_state);
+
+ if (current_state >= MM_CAMCORDER_STATE_READY) {
+ sc = MMF_CAMCORDER_SUBCONTEXT(camcorder);
+ mmf_return_val_if_fail(sc, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
+ if (!gst_camera_control_get_extra_preview_stream_format(control,
+ stream_id, &_img_fmt, &_width, &_height, &_fps)) {
+ MMCAM_LOG_ERROR("extra preview stream format get failed");
+ return MM_ERROR_CAMCORDER_INTERNAL;
+ }
+
+ *pixel_format = _mmcamcorder_get_pixel_format2(_img_fmt);
+ *width = _width;
+ *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;
+ }
+
+ MMCAM_LOG_INFO("get result[fmt:%d(%d),res:%dx%d,fps:%d][state:%d]",
+ *pixel_format, _img_fmt, *width, *height, *fps, current_state);
+
+ return MM_ERROR_NONE;
+}