while (tmp_list) {
export_data = (muse_camera_export_data *)tmp_list->data;
+ tmp_list = tmp_list->next;
if (export_data) {
if (export_data->key == key || remove_all) {
/*LOGD("key %d matched, remove it (remove_all %d)", key, remove_all);*/
+ if (remove_all) {
+ LOGW("remove remained export data key %d, internal buffer %p",
+ export_data->key, export_data->internal_buffer);
+ }
+
if (export_data->is_capture) {
LOGD("capture callback is done");
g_cond_signal(&muse_camera->list_cond);
} else {
LOGW("bo for key %d is NULL", key);
}
+
export_data->key = 0;
+
if (export_data->internal_buffer) {
gst_buffer_unref((GstBuffer *)export_data->internal_buffer);
export_data->internal_buffer = NULL;
} else {
LOGW("NULL data");
}
-
- tmp_list = tmp_list->next;
}
g_mutex_unlock(&muse_camera->list_lock);
if (remove_all) {
- LOGD("remove all done");
+ LOGW("remove all done");
} else {
LOGE("should not be reached here - key %d", key);
}
int data_key = 0;
int buffer_key[BUFFER_MAX_PLANE_NUM] = {0, };
int num_buffer_key = 0;
+ int send_ret = 0;
muse_module_h module = (muse_module_h)user_data;
unsigned char *buf_pos = NULL;
char *send_message = NULL;
/* add bo info to list */
g_mutex_lock(&muse_camera->list_lock);
+
muse_camera->data_list = g_list_append(muse_camera->data_list, (gpointer)export_data);
+
+ if (muse_camera->is_shutting_down) {
+ LOGW("now shutting down.. skip this buffer");
+ g_mutex_unlock(&muse_camera->list_lock);
+ _camera_remove_export_data(module, tbm_key, FALSE);
+ return;
+ }
+
g_mutex_unlock(&muse_camera->list_lock);
g_mutex_lock(&muse_camera->preview_cb_lock);
MUSE_TYPE_ARRAY, "buffer_key", BUFFER_MAX_PLANE_NUM, buffer_key,
0);
- muse_core_ipc_send_msg(muse_core_client_get_msg_fd(module), send_message);
+ send_ret = muse_core_ipc_send_msg(muse_core_client_get_msg_fd(module), send_message);
muse_core_msg_json_factory_free(send_message);
/*LOGD("wait preview callback return message");*/
- if (!CHECK_PREVIEW_CB(muse_camera, PREVIEW_CB_TYPE_EVAS)) {
+ if (!CHECK_PREVIEW_CB(muse_camera, PREVIEW_CB_TYPE_EVAS) && send_ret > 0) {
gint64 end_time = g_get_monotonic_time() + G_TIME_SPAN_SECOND;
if (!g_cond_wait_until(&muse_camera->preview_cb_cond, &muse_camera->preview_cb_lock, end_time)) {
}
-_camera_dispatcher_release_resource(muse_module_h module)
+static void _camera_dispatcher_release_resource(muse_module_h module)
{
muse_camera_handle_s *muse_camera = NULL;
free(muse_camera);
muse_camera = NULL;
+
+ LOGW("leave");
+
+ return;
}
legacy_camera_lock(muse_camera->camera_handle, false);
+ muse_camera->is_shutting_down = true;
+
again:
legacy_camera_get_state(muse_camera->camera_handle, &state);
legacy_camera_start_preview(muse_camera->camera_handle);
/* fall through */
case CAMERA_STATE_PREVIEW:
+ _camera_remove_export_data(module, 0, TRUE); /* force return buffer before stop preview */
legacy_camera_stop_preview(muse_camera->camera_handle);
/* fall through */
case CAMERA_STATE_CREATED: