int mm_app_streamon_rdi(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int stream[2];
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
    int num_of_streams;

    /*if(rdi_mode == STREAM_IMAGE_AND_RAW){
        num_of_streams = 2;
        stream[0] = pme->stream[MM_CAMERA_RDI].id;
        stream[1] = pme->stream[MM_CAMERA_PREVIEW].id;
    }else */{
        num_of_streams = 1;
        stream[0] = pme->stream[MM_CAMERA_RDI].id;
    }

    if (MM_CAMERA_OK != (rc = pme->cam->ops->start_streams(pme->cam->camera_handle,pme->ch_id,num_of_streams,&stream))) {
        CDBG_ERROR("%s : Start RDI Stream preview Error",__func__);
        goto end;
    }
    pme->cam_state = CAMERA_STATE_RDI;
    end:
    CDBG("%s: X rc = %d",__func__,rc);
    return rc;
}
int mm_app_start_rdi(int cam_id)
{
    int rc = MM_CAMERA_OK;

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
    int op_mode = 0;

    CDBG("pme = %p, pme->cam =%p, pme->cam->camera_handle = %d",
         pme,pme->cam,pme->cam->camera_handle);

    if (pme->cam_state == CAMERA_STATE_RDI) {
        return rc;
    }

    if (MM_CAMERA_OK != (rc = mm_app_prepare_rdi(cam_id))) {
        CDBG_ERROR("%s:Prepare RDI failed rc=%d\n", __func__, rc);
        goto end;
    }

    if (MM_CAMERA_OK != (rc = mm_app_streamon_rdi(cam_id))) {
        CDBG_ERROR("%s:Stream On RDI failed rc=%d\n", __func__, rc);
        goto end;
    }

    end:
    CDBG("%s: END, rc=%d\n", __func__, rc); 
    return rc;
}
static int mm_app_streamdel_rdi(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int stream[2];
    int num_of_streams;

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    /*if(rdi_mode == STREAM_IMAGE_AND_RAW){
        num_of_streams = 2;
        stream[0] = pme->stream[MM_CAMERA_RDI].id;
        stream[1] = pme->stream[MM_CAMERA_PREVIEW].id;
    }else*/{
        num_of_streams = 1;
        stream[0] = pme->stream[MM_CAMERA_RDI].id;
    }

    if (MM_CAMERA_OK != (rc = pme->cam->ops->del_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_RDI].id))) {
        CDBG_ERROR("%s : Delete Stream RDI error",__func__);
        goto end;
    }
    CDBG("del_stream successfull");
    pme->cam_state = CAMERA_STATE_OPEN;
    end:
    CDBG("%s: END, rc=%d\n", __func__, rc);

    return rc;
}
static int mm_app_streamoff_preview(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int stream[2];

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    stream[0] = pme->stream[MM_CAMERA_PREVIEW].id;
    stream[1] = 0;

    if (MM_CAMERA_OK != (rc = pme->cam->ops->stop_streams(pme->cam->camera_handle,pme->ch_id,1,&stream))) {
        CDBG_ERROR("%s : Preview Stream off Error",__func__);
        goto end;
    }

    if (MM_CAMERA_OK != (rc = pme->cam->ops->del_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_PREVIEW].id))) {
        CDBG_ERROR("%s : Delete Stream Preview error",__func__);
        goto end;
    }
    CDBG("del_stream successfull");
    pme->cam_state = CAMERA_STATE_OPEN;
    end:
    CDBG("%s: END, rc=%d\n", __func__, rc);

    return rc;
}
int mm_app_start_preview(int cam_id)
{
    int rc = MM_CAMERA_OK;

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
    int op_mode = 0;

    CDBG("pme = %p, pme->cam =%p, pme->cam->camera_handle = %d",
         pme,pme->cam,pme->cam->camera_handle);

    if (pme->cam_state == CAMERA_STATE_PREVIEW) {
        return rc;
    }

    if (!my_cam_app.run_sanity) {
        if (MM_CAMERA_OK != initDisplay()) {
            CDBG_ERROR("%s : Could not initalize display",__func__);
            goto end;
        }
    }

    if (MM_CAMERA_OK != (rc = mm_app_prepare_preview(cam_id))) {
        CDBG_ERROR("%s:Stream On Preview failed rc=%d\n", __func__, rc);
        goto end;
    }

    if (MM_CAMERA_OK != (rc = mm_app_streamon_preview(cam_id))) {
        CDBG_ERROR("%s:Stream On Preview failed rc=%d\n", __func__, rc);
        goto end;
    }

    end:
    CDBG("%s: END, rc=%d\n", __func__, rc); 
    return rc;
}
int startRdi(int cam_id)
{
    int rc = MM_CAMERA_OK;

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    CDBG("%s: Start Preview",__func__);

    if (pme->cam_mode == ZSL_MODE || pme->cam_mode == RECORDER_MODE || pme->cam_mode == CAMERA_MODE) {
        switch (pme->cam_state) {
        case CAMERA_STATE_RECORD:
            if (MM_CAMERA_OK != mm_app_stop_video(cam_id)) {
                CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc);
                return -1;
            }
        case CAMERA_STATE_PREVIEW:
            if (MM_CAMERA_OK != mm_app_open_rdi(cam_id)) {
                CDBG_ERROR("%s: Cannot switch to camera mode=%d\n", __func__);
                return -1;
            }
        case CAMERA_STATE_SNAPSHOT:
        default:
            break;
        }
    }
    mm_app_start_rdi(cam_id);
    return rc;
}
示例#7
0
int mm_app_stop_raw(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int i;
    uint32_t stream[1];

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id;

    if (MM_CAMERA_OK != (rc = pme->cam->ops->stop_streams(pme->cam->camera_handle,pme->ch_id,1,stream))) {
        CDBG_ERROR("%s : Snapshot Stream off Error",__func__);
        goto end;
    }
    CDBG("Stop snapshot main successfull");

    if (MM_CAMERA_OK != (rc = pme->cam->ops->destroy_stream_bundle(pme->cam->camera_handle,pme->ch_id))) {
        CDBG_ERROR("%s : Snapshot destroy_stream_bundle Error",__func__);
        goto end;
    }

    if (MM_CAMERA_OK != (rc = pme->cam->ops->del_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id))) {
        CDBG_ERROR("%s : Snapshot main image del_stream Error",__func__);
        goto end;
    }
    CDBG("del_stream successfull");

    pme->cam_state = CAMERA_STATE_OPEN;
end:
    return rc;
}
示例#8
0
int mm_app_open_ch(int cam_id, mm_camera_channel_type_t ch_type)
{
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	mm_camera_channel_type_t i;
	int rc = MM_CAMERA_OK;

	CDBG("%s:BEGIN\n", __func__);
	if(ch_type < MM_CAMERA_CH_MAX) {
		rc = pme->cam->ops->ch_acquire(pme->cam, ch_type);
			CDBG("%s:cam ch_open rc=%d\n",__func__, rc);
			goto end;
	}
	else {
		/* here we open all available channels */
		for(i = 0; i < MM_CAMERA_CH_MAX; i++) {
			if( MM_CAMERA_OK != (rc = pme->cam->ops->ch_acquire(pme->cam, i))) {
				CDBG("%s:cam ch_open err=%d\n",__func__, rc);
				goto end;
			}
		}
	}
end:
	CDBG("%s:END, rc=%d\n", __func__, rc);
	return rc;
}
示例#9
0
int mm_app_add_snapshot_stream(int cam_id)
{
    int rc = MM_CAMERA_OK;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id = pme->cam->ops->add_stream(pme->cam->camera_handle,pme->ch_id,
            NULL,pme,
            MM_CAMERA_SNAPSHOT_MAIN, 0);

    CDBG("Add Snapshot main is successfull stream ID = %d",pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id);
    if (!pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id) {
        CDBG_ERROR("%s:snapshot main streaming err=%d\n", __func__, rc);
        rc = -1;
        goto end;
    }

    pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id = pme->cam->ops->add_stream(pme->cam->camera_handle,pme->ch_id,
            NULL,pme,
            MM_CAMERA_SNAPSHOT_THUMBNAIL, 0);
    if (!pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id) {
        CDBG_ERROR("%s:snapshot thumbnail streaming err=%d\n", __func__, rc);
        rc = -1;
        goto end;
    }
end:
    CDBG("%s: END, rc=%d\n", __func__, rc);
    return rc;
}
int mm_app_stop_raw_snapshot(int cam_id)
{
    int rc = MM_CAMERA_OK;
#if 0
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);


    CDBG("%s: BEGIN\n", __func__);
    if (MM_CAMERA_OK != (rc = pme->cam->ops->action(pme->cam, FALSE, MM_CAMERA_OPS_RAW, 0))) {
        CDBG("%s:stop raw snapshot streaming err=%d\n", __func__, rc);
        goto end;
    }
    if (MM_CAMERA_OK != (rc = mm_app_unprepare_raw_snapshot_buf(cam_id))) {
        CDBG("%s:mm_app_unprepare_raw_snapshot_buf err=%d\n", __func__, rc);
        return rc;
    }
    if (MM_CAMERA_OK != (rc = mm_app_reg_raw_snapshot_data_cb(cam_id, FALSE))) {
        CDBG("%s:mm_app_reg_raw_snapshot_data_cb err=%d\n", __func__, rc);
        return rc;
    }
    mm_app_close_ch(cam_id, MM_CAMERA_CH_RAW);
end:
    CDBG("%s: END, rc=%d\n", __func__, rc);
#endif
    return rc;
}
示例#11
0
int mm_app_config_snapshot_format(int cam_id)
{
    int rc = MM_CAMERA_OK;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    mm_app_set_snapshot_fmt(cam_id,&pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.fmt);

    mm_app_set_thumbnail_fmt(cam_id,&pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config.fmt);

    pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.need_stream_on = 1;
    pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.num_of_bufs = 1;

    if (MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id,
                              &pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config))) {
        CDBG_ERROR("%s:preview streaming err=%d\n", __func__, rc);
        goto end;
    }

    pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config.need_stream_on = 1;
    pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config.num_of_bufs = 1;

    if (MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id,
                              &pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config))) {
        CDBG_ERROR("%s:preview streaming err=%d\n", __func__, rc);
        goto end;
    }
end:
    CDBG("%s: END, rc=%d\n", __func__, rc);
    return rc;

}
int mm_app_take_raw_picture(int cam_id)
{
    int rc;
#if 0
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id);
    g_status = FALSE;
    if (MM_CAMERA_OK != (rc = pme->cam->ops->action(pme->cam, TRUE, MM_CAMERA_OPS_PREPARE_SNAPSHOT, 0))) {
        CDBG("%s:prepare snapshot err=%d\n", __func__, rc);
        goto end;
    }
    if (MM_CAMERA_OK != (rc = mm_app_stop_preview(cam_id))) {
        CDBG("%s:mm_app_stop_preview err=%d\n", __func__, rc);
        goto end;
    }
    if (MM_CAMERA_OK != mm_app_start_raw_snapshot(cam_id))
        goto preview;
    CDBG("%s:waiting images\n",__func__);
    mm_app_snapshot_wait(cam_id);
    CDBG("%s:calling mm_app_stop_snapshot() \n",__func__);
    mm_app_stop_raw_snapshot(cam_id);
preview:
    mm_app_start_preview(cam_id);
end:
    CDBG("%s:END, cam_id=%d\n",__func__,cam_id);
#endif
    return rc;
}
示例#13
0
void switchCamera(int cam_id)
{
    int rc = MM_CAMERA_OK;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    if(my_cam_app.cam_open == cam_id){
        return;
    }

    switch(pme->cam_state) {
        case CAMERA_STATE_RECORD:
            if(MM_CAMERA_OK != stopRecording(cam_id)){
                CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc);
                return -1;
            }
        case CAMERA_STATE_PREVIEW:
            if(MM_CAMERA_OK !=  mm_app_stop_preview(cam_id)){
                CDBG_ERROR("%s: Cannot switch to camera mode=%d\n", __func__);
                return -1;
            }
            break;
        case CAMERA_STATE_SNAPSHOT:
        default:
            break;
    }

    mm_app_close(my_cam_app.cam_open);
    mm_app_open(cam_id);
}
int stopPreview(int cam_id)
{
    int rc = MM_CAMERA_OK;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    CDBG("%s : pme->cam_mode = %d, pme->cam_state = %d",__func__,pme->cam_mode,pme->cam_state);

    if (pme->cam_mode == CAMERA_MODE && pme->cam_state == CAMERA_STATE_PREVIEW) {
        if (MM_CAMERA_OK != (rc = mm_app_stop_preview(cam_id))) {
            CDBG("%s:streamoff preview err=%d\n", __func__, rc);
            goto end;
        }
    } else if (pme->cam_mode == ZSL_MODE && pme->cam_state == CAMERA_STATE_PREVIEW) {
        if (MM_CAMERA_OK != (rc = mm_app_stop_preview_zsl(cam_id))) {
            CDBG("%s:streamoff preview err=%d\n", __func__, rc);
            goto end;
        }
    } else if (pme->cam_mode == RECORDER_MODE && pme->cam_state == CAMERA_STATE_PREVIEW) {
        if (MM_CAMERA_OK != (rc = mm_app_stop_preview(cam_id))) {
            CDBG("%s:streamoff preview err=%d\n", __func__, rc);
            goto end;
        }
        mm_app_unprepare_video(cam_id);
    }
    end:
    return rc;
}
示例#15
0
int mm_app_close(int8_t cam_id)
{
	int rc = MM_CAMERA_OK;
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	mm_camera_channel_type_t ch;

	CDBG("%s:BEGIN\n", __func__);
	if(!pme->cam) {
		CDBG("%s:cam already closed. nop\n",__func__);
		goto end;
	}
	pme->cam = &my_cam_app.cam[cam_id];
	pme->my_id = cam_id;
	pme->op_mode = 0;
	for(ch = 0; ch < MM_CAMERA_CH_MAX; ch++) {
		mm_app_close_ch(cam_id, ch);
		CDBG("%s:cam_id = %d, channel %d relaesed\n",__func__,cam_id, ch);
	}
	pme->cam->ops->close(pme->cam);
	pme->open_flag = FALSE;
	pme->cam = NULL;
	pme->my_id = 0;
	pme->op_mode = 0;
	memset(&pme->dim, 0, sizeof(pme->dim));
end:
	CDBG("%s:END, rc=%d\n", __func__, rc);
	return rc;
}
示例#16
0
int mm_app_get_dim(int8_t cam_id, cam_ctrl_dimension_t *dim)
{
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	int rc = MM_CAMERA_OK;

	CDBG("%s:BEGIN\n", __func__);
	if(pme->open_flag != TRUE) {
		CDBG("%s: dev not open yet\n", __func__);
		rc = -MM_CAMERA_E_INVALID_OPERATION;
		goto end;
	}
	/* now we only use the upper portion. TBD: needs to be fixed later */
	//memcpy(&pme->dim, dim, sizeof(cam_ctrl_dimension_t));
	if(MM_CAMERA_OK != (rc = pme->cam->cfg->get_parm(pme->cam,
													MM_CAMERA_PARM_DIMENSION, &pme->dim))) {
		CDBG("%s: set dimension err=%d\n", __func__, rc);
	}
	CDBG("%s: raw_w=%d,raw_h=%d\n",
			 __func__, pme->dim.orig_picture_width, pme->dim.orig_picture_height);
	if(dim)
		memcpy(dim, &pme->dim, sizeof(cam_ctrl_dimension_t));

end:
	CDBG("%s:END, rc=%d\n", __func__, rc);
	return rc;
}
int mm_app_config_video(int cam_id)
{
	int rc = MM_CAMERA_OK;
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

	mm_app_set_video_fmt(cam_id,&pme->stream[MM_CAMERA_VIDEO].str_config.fmt);
	pme->stream[MM_CAMERA_VIDEO].str_config.need_stream_on = 1;
	pme->stream[MM_CAMERA_VIDEO].str_config.num_of_bufs = VIDEO_BUF_NUM;

	if(MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_VIDEO].id,
								 &pme->stream[MM_CAMERA_VIDEO].str_config))) {
		CDBG_ERROR("%s:MM_CAMERA_VIDEO config streaming err=%d\n", __func__, rc);
		goto end;
	}

	CDBG("config_stream stream is successfull");

	pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.need_stream_on = pme->fullSizeSnapshot;
	pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.num_of_bufs = 1;

	mm_app_set_live_snapshot_fmt(cam_id,&pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.fmt);

	if(MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id,
								 &pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config))) {
		CDBG_ERROR("%s:preview streaming err=%d\n", __func__, rc);
		goto end;
	}
end:
	return rc;

}
int startRecording(int cam_id)
{
	int rc = MM_CAMERA_OK;
	
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

	CDBG("%s: Start Recording mode = %d state = %d",__func__,pme->cam_mode,pme->cam_state);

	if(pme->cam_mode == CAMERA_MODE || pme->cam_mode == ZSL_MODE) {
		switch(pme->cam_state) {
			case CAMERA_STATE_PREVIEW:
				if(MM_CAMERA_OK != mm_app_open_recorder(cam_id)){
					CDBG_ERROR("%s: Open Record Failed \n", __func__);
					return -1;
				}
				break;
			case CAMERA_STATE_RECORD:
			case CAMERA_STATE_SNAPSHOT:
			default:
				break;
		}
	}/*else{
		mm_app_prepare_video(cam_id);
	}*/
	CDBG("%s : startRecording : mode = %d state = %d",__func__,pme->cam_mode,pme->cam_state);
	if(pme->cam_mode == RECORDER_MODE && pme->cam_state == CAMERA_STATE_PREVIEW){
		if(MM_CAMERA_OK != mm_app_streamon_video(cam_id)){
			CDBG_ERROR("%s:start video err=%d\n", __func__, rc);
			return -1;
		}
	}
	CDBG("%s: END, rc=%d\n", __func__, rc);
	return rc;
}
示例#19
0
int mm_app_start_video(int cam_id)
{
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	int rc = MM_CAMERA_OK;

	CDBG("%s: BEGIN\n", __func__);
	if(MM_CAMERA_OK != (rc = mm_app_open_video(cam_id))) {
		CDBG("%s:mm_app_open_preview err=%d\n", __func__, rc);
		goto end;
	}
	if(MM_CAMERA_OK != (rc = mm_app_set_video_fmt(cam_id))) {
		CDBG("%s:set preview format err=%d\n", __func__, rc);
		goto end;
	}
	if(MM_CAMERA_OK != (rc = mm_app_prepare_video_buf(cam_id,
						VIDEO_FRAMES_NUM))) {
		CDBG("%s:reg preview buf err=%d\n", __func__, rc);
		goto end;
	}
	if(MM_CAMERA_OK != (rc = mm_app_reg_video_data_cb(cam_id, TRUE))) {
		CDBG("%s:reg preview data cb err=%d\n", __func__, rc);
	}
	if(MM_CAMERA_OK != (rc = mm_app_streamon_video(cam_id))) {
		CDBG("%s:preview streaming on err=%d\n", __func__, rc);
	}
end:
	CDBG("%s: END, rc=%d\n", __func__, rc);
	return rc;
}
示例#20
0
int mm_app_stop_video(int cam_id)
{
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	int rc = MM_CAMERA_OK;

	CDBG("%s: BEGIN\n", __func__);

	if(MM_CAMERA_OK != (rc = mm_app_streamoff_video(cam_id))) {
		CDBG("%s:streamoff video err=%d\n", __func__, rc);
		return rc;
	}
	if(MM_CAMERA_OK != (rc = mm_app_reg_video_data_cb(cam_id, FALSE))) {
		CDBG("%s:reg video data cb err=%d\n", __func__, rc);
		return rc;
	}
	if(MM_CAMERA_OK != (rc = mm_app_unprepare_video_buf(cam_id))) {
		CDBG("%s:treg video buf err=%d\n", __func__, rc);
		return rc;
	}
	if(MM_CAMERA_OK != (rc = mm_app_close_video(cam_id))) {
		CDBG("%s:mm_app_close_video err=%d\n", __func__, rc);
		goto end;
	}
end:
	CDBG("%s: END, rc=%d\n", __func__, rc);
	return rc;
}
示例#21
0
static int mm_app_unprepare_video_buf(int cam_id)
{
	/* now we hard code format */
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	int i, rc = MM_CAMERA_OK;

	CDBG("%s: BEGIN\n", __func__);
	/* this is unreg case */
	rc = pme->cam->cfg->unprepare_buf(pme->cam, MM_CAMERA_CH_VIDEO);
	if(rc) {
		CDBG("%s:unreg video buf err=%d\n", __func__, rc);
		goto end;
	}
	for(i = 0; i < pme->video_buf.num; i++) {
		rc = my_cam_app.hal_lib.mm_camera_do_munmap(pme->video_buf.frame[i].fd, (void *)pme->video_buf.frame[i].buffer,
											 pme->video_buf.frame_len);
		if(rc != MM_CAMERA_OK) {
		  CDBG("%s: mm_camera_do_munmap err, pmem_fd = %d, rc = %d",
			   __func__, pme->video_buf.frame[i].fd, rc);
		  goto end;
		}

	}
	memset(&pme->video_buf, 0, sizeof(pme->video_buf));
end:
	CDBG("%s: END, rc=%d\n", __func__, rc);
	return rc;
}
示例#22
0
static int mm_app_reg_video_data_cb(int cam_id, int is_reg)
{
	mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);
	int rc = MM_CAMERA_OK;

	CDBG("%s: BEGIN\n", __func__);
	if(is_reg) {
		rc = pme->cam->evt->register_buf_notify(pme->cam,
				MM_CAMERA_CH_VIDEO,
				mm_app_video_notify_cb,
				MM_CAMERA_REG_BUF_CB_INFINITE, 0,
				pme);
		if(rc != MM_CAMERA_OK) {
			CDBG("%s:register video data notify cb err=%d\n",
			     __func__, rc);
			goto end;
		}
	} else {
		rc = pme->cam->evt->register_buf_notify(pme->cam,
					 MM_CAMERA_CH_VIDEO,
					 NULL,
					 (mm_camera_register_buf_cb_type_t)NULL,
					 0, pme);
		if(rc != MM_CAMERA_OK) {
			CDBG("%s:unregister video data notify cb err=%d\n",
			      __func__, rc);
			goto end;
		}
	}
end:
	CDBG("%s: END, rc=%d\n", __func__, rc);
	return rc;
}
int mm_app_bundle_zsl_stream(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int stream[3];
    mm_camera_bundle_attr_t attr;

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    stream[0] = pme->stream[MM_CAMERA_PREVIEW].id;
    stream[1] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id;

    attr.notify_mode = MM_CAMERA_SUPER_BUF_NOTIFY_BURST;
    attr.burst_num = 1;
    attr.look_back = 2;
    attr.post_frame_skip = 0;
    attr.water_mark = 2;

    if (MM_CAMERA_OK != (rc = pme->cam->ops->init_stream_bundle(
                                  pme->cam->camera_handle,pme->ch_id,mm_app_zsl_notify_cb,pme,&attr,2,stream))) {
        CDBG_ERROR("%s:init_stream_bundle err=%d\n", __func__, rc);
        rc = -1;
        goto end;
    }

    if (MM_CAMERA_OK != (rc = pme->cam->ops->start_streams(pme->cam->camera_handle,pme->ch_id,
                              2, stream))) {
        CDBG_ERROR("%s:start_streams err=%d\n", __func__, rc);
        rc = -1;
        goto end;
    }
end:
    return rc;
}
示例#24
0
int mm_app_close(int8_t cam_id)
{
    int rc = MM_CAMERA_OK;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    CDBG("%s:BEGIN\n", __func__);
    if(!pme->cam) {
        CDBG("%s:cam already closed. nop\n",__func__);
        goto end;
    }

    pme->cam->ops->ch_release(pme->cam->camera_handle,pme->ch_id);
    pme->cam->ops->camera_close(pme->cam->camera_handle);
    pme->open_flag = false;
    pme->cam = NULL;
    pme->my_id = 0;
    free(pme->mem_cam);
    pme->mem_cam = NULL;
    memset(&pme->dim, 0, sizeof(pme->dim));
    memset(&pme->dim, 0, sizeof(pme->dim));

    free(pme);
    pme = NULL;
    my_cam_app.obj[cam_id] = NULL;
    
end:
    CDBG("%s:END, rc=%d\n", __func__, rc);
    return rc;
}
示例#25
0
int mm_app_take_picture_raw(int cam_id)
{

    int rc;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id);

    if (MM_CAMERA_OK != mm_app_start_raw(cam_id)) {
        CDBG_ERROR("%s: cam_id=%d\n",__func__,cam_id);
        rc = -1;
        goto end;
    }

    CDBG("%s:waiting images\n",__func__);
    mm_app_snapshot_wait(cam_id);

    if (MM_CAMERA_OK !=mm_app_stop_raw(cam_id)) {
        CDBG_ERROR("%s: Snapshot Stop error",__func__);
    }

preview:
    if (MM_CAMERA_OK != (rc = mm_app_start_preview(cam_id))) {
        CDBG("%s:preview start stream err=%d\n", __func__, rc);
    }
end:
    CDBG("%s:END, cam_id=%d\n",__func__,cam_id);
    return rc;
}
示例#26
0
int mm_app_take_live_snapshot(int cam_id)
{
    int rc = 0;
    int stream[3];
    mm_camera_bundle_attr_t attr;

    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id);

    if (pme->cam_mode == RECORDER_MODE &&
            pme->cam_state == CAMERA_STATE_RECORD) {
        //Code to get live shot
        if (mm_app_prepare_live_snapshot(cam_id) != MM_CAMERA_OK) {
            CDBG_ERROR("%s: Failed prepare liveshot",__func__);
            return -1;
        }
        if (MM_CAMERA_OK != (rc =pme->cam->ops->request_super_buf(pme->cam->camera_handle,pme->ch_id, 1))) {
            CDBG_ERROR("%s:request_super_buf err=%d\n", __func__, rc);
            return -1;
        }
        CDBG("%s:waiting images\n",__func__);
        mm_app_snapshot_wait(cam_id);

        if (MM_CAMERA_OK !=mm_app_unprepare_live_snapshot(cam_id)) {
            CDBG_ERROR("%s: Snapshot Stop error",__func__);
        }

    } else {
        CDBG_ERROR("%s: Should not come here for liveshot",__func__);
    }
    return rc;
}
int mm_app_open_zsl(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int value = 0;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    if (pme->cam_mode == ZSL_MODE) {
        return rc;
    }

    if (MM_CAMERA_OK != (rc = mm_app_stop_preview(cam_id))) {
        CDBG_ERROR("%s:Stop preview err=%d\n", __func__, rc);
        goto end;
    }

    pme->cam->ops->set_parm(pme->cam->camera_handle,MM_CAMERA_PARM_RECORDING_HINT, &value);

    if (MM_CAMERA_OK != (rc = mm_app_start_preview_zsl(cam_id))) {
        CDBG_ERROR("%s:stream on preview err=%d\n", __func__, rc);
        goto end;
    }
    pme->cam_mode = ZSL_MODE;
    end:
    CDBG("%s: END, rc=%d\n", __func__, rc);
    return rc;
}
示例#28
0
void mm_app_close_ch(int cam_id, int ch_type)
{
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    pme->cam->ops->ch_release(pme->cam->camera_handle,pme->ch_id);
    CDBG("%s:END,cam_id = %d, ch = %d\n", __func__, cam_id, ch_type);

}
示例#29
0
int mm_app_start_snapshot(int cam_id)
{
    int rc = MM_CAMERA_OK;
    int stream[2];
    int op_mode = 0;
    uint8_t initial_reg_flag;
    mm_camera_frame_len_offset frame_offset_info;

    mm_camera_bundle_attr_t attr;


    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    if (MM_CAMERA_OK != mm_app_stop_preview(cam_id)) {
        CDBG_ERROR("%s: Stop preview Failed cam_id=%d\n",__func__,cam_id);
        return -1;
    }
    op_mode = MM_CAMERA_OP_MODE_CAPTURE;
    mm_app_set_snapshot_mode(cam_id,op_mode);
    usleep(20*1000);
//    pme->cam->ops->prepare_snapshot(pme->cam->camera_handle,pme->ch_id,0);

    if (MM_CAMERA_OK != (rc = mm_app_add_snapshot_stream(cam_id))) {
        CDBG_ERROR("%s : Add Snapshot stream err",__func__);
        return rc;
    }

    if (MM_CAMERA_OK != (rc = mm_app_config_snapshot_format(cam_id))) {
        CDBG_ERROR("%s : Config Snapshot stream err",__func__);
        return rc;
    }

    if (MM_CAMERA_OK != (rc = mm_app_streamon_snapshot(cam_id))) {
        CDBG_ERROR("%s : Stream on Snapshot stream err",__func__);
        return rc;
    }

    /* init jpeg buf */
    pme->cam->ops->get_stream_parm(pme->cam->camera_handle,
                                   pme->ch_id,
                                   pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id,
                                   MM_CAMERA_STREAM_OFFSET,
                                   &frame_offset_info);
    CDBG_ERROR("%s : alloc jpeg buf (len=%d)",__func__, frame_offset_info.frame_len);
    rc = mm_stream_alloc_bufs(pme,
                              &pme->jpeg_buf,
                              &frame_offset_info,
                              1);
    if (0 != rc) {
        CDBG_ERROR("%s : mm_stream_alloc_bufs err",__func__);
        return rc;
    }

    CDBG("%s: END, rc=%d\n", __func__, rc);
    return rc;
}
int stopRdi(int cam_id)
{
    int rc = MM_CAMERA_OK;
    mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id);

    mm_app_streamoff_rdi(cam_id);

    end:
    return rc;
}