+
+
+int _mmcamcorder_connect_video_stream_cb_signal(MMHandleType handle)
+{
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+ _MMCamcorderSubContext *sc = NULL;
+
+ mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ sc = MMF_CAMCORDER_SUBCONTEXT(handle);
+ mmf_return_val_if_fail(sc && sc->element, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ /* check video source element */
+ if (sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst) {
+ _mmcam_dbg_warn("connect video stream cb signal to _MMCAMCORDER_VIDEOSRC_SRC");
+ MMCAMCORDER_SIGNAL_CONNECT(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst,
+ _MMCAMCORDER_HANDLER_VIDEOREC, "video-stream-cb",
+ G_CALLBACK(__mmcamcorder_video_stream_cb),
+ hcamcorder);
+ return MM_ERROR_NONE;
+ } else {
+ _mmcam_dbg_err("videosrc element is not created yet");
+ return MM_ERROR_CAMCORDER_NOT_INITIALIZED;
+ }
+}
+
+
+int _mmcamcorder_video_prepare_record(MMHandleType handle)
+{
+ int ret = MM_ERROR_NONE;
+
+ _MMCamcorderVideoInfo *info = NULL;
+ _MMCamcorderSubContext *sc = NULL;
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+
+ mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ sc = MMF_CAMCORDER_SUBCONTEXT(handle);
+ mmf_return_val_if_fail(sc, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+ mmf_return_val_if_fail(sc->info_video, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ info = sc->info_video;
+
+ _mmcam_dbg_warn("start");
+
+ /* create encoding pipeline */
+ ret = _mmcamcorder_create_recorder_pipeline((MMHandleType)hcamcorder);
+ if (ret != MM_ERROR_NONE)
+ goto _ERR_PREPARE_RECORD;
+
+ if (info->filename == NULL) {
+ char *temp_filename = NULL;
+ int size = 0;
+
+ mm_camcorder_get_attributes(handle, NULL,
+ MMCAM_TARGET_FILENAME, &temp_filename, &size,
+ NULL);
+ if (temp_filename)
+ info->filename = g_strdup(temp_filename);
+
+ if (!info->filename) {
+ _mmcam_dbg_err("strdup[src:%p] was failed", temp_filename);
+ goto _ERR_PREPARE_RECORD;
+ }
+ }
+
+ _mmcam_dbg_log("Record file name [%s]", info->filename);
+
+ MMCAMCORDER_G_OBJECT_SET_POINTER(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, "location", info->filename);
+ MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", 0);
+
+ /* Adjust display FPS */
+ sc->display_interval = 0;
+ sc->previous_slot_time = 0;
+
+ ret = _mmcamcorder_gst_set_state(handle, sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst, GST_STATE_PAUSED);
+ if (ret != MM_ERROR_NONE)
+ goto _ERR_PREPARE_RECORD;
+
+ _mmcam_dbg_warn("done");
+
+ return ret;
+
+_ERR_PREPARE_RECORD:
+ /* Remove recorder pipeline and recording file which size maybe zero */
+ _mmcamcorder_remove_recorder_pipeline((MMHandleType)hcamcorder);
+ if (info && info->filename) {
+ _mmcam_dbg_log("file delete(%s)", info->filename);
+ unlink(info->filename);
+ }
+
+ return ret;
+}