camera_v4l2_release_preview_buffer((void *)handle, index);
}
+ g_mutex_lock(&handle->extra_preview_lock);
+
+ if (handle->extra_preview_cb) {
+ handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 0, handle->extra_preview_cb_data);
+ handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 1, handle->extra_preview_cb_data);
+ handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 2, handle->extra_preview_cb_data);
+ handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 3, handle->extra_preview_cb_data);
+ }
+
+ g_mutex_unlock(&handle->extra_preview_lock);
+
/* check capture request flag */
if (handle->capture_request) {
__camera_do_capture(handle);
g_mutex_clear(&handle->lock);
g_mutex_clear(&handle->buffer_lock);
g_mutex_clear(&handle->msg_cb_lock);
+ g_mutex_clear(&handle->extra_preview_lock);
g_cond_clear(&handle->buffer_cond);
g_cond_clear(&handle->msg_cb_cond);
g_mutex_init(&new_handle->lock);
g_mutex_init(&new_handle->buffer_lock);
g_mutex_init(&new_handle->msg_cb_lock);
+ g_mutex_init(&new_handle->extra_preview_lock);
g_cond_init(&new_handle->buffer_cond);
g_cond_init(&new_handle->msg_cb_cond);
}
+int camera_v4l2_set_extra_preview_frame_cb(void *camera_handle, hal_camera_extra_preview_frame_cb callback, void *user_data)
+{
+ hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
+
+ if (!handle) {
+ LOGE("NULL handle");
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ g_mutex_lock(&handle->extra_preview_lock);
+
+ handle->extra_preview_cb = callback;
+ handle->extra_preview_cb_data = user_data;
+
+ g_mutex_unlock(&handle->extra_preview_lock);
+
+ LOGI("done");
+
+ return CAMERA_ERROR_NONE;
+}
+
+
+int camera_v4l2_unset_extra_preview_frame_cb(void *camera_handle)
+{
+ hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
+
+ if (!handle) {
+ LOGE("NULL handle");
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ g_mutex_lock(&handle->extra_preview_lock);
+
+ handle->extra_preview_cb = NULL;
+ handle->extra_preview_cb_data = NULL;
+
+ g_mutex_unlock(&handle->extra_preview_lock);
+
+ LOGI("done");
+
+ return CAMERA_ERROR_NONE;
+}
+
+
+int camera_v4l2_release_extra_preview_buffer(void *camera_handle, int stream_id, int buffer_index)
+{
+ hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
+
+ if (!handle) {
+ LOGE("NULL handle");
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ LOGI("done - stream_id[%d], index[%d]", stream_id, buffer_index);
+
+ return CAMERA_ERROR_NONE;
+}
+
+
int camera_v4l2_set_command(void *camera_handle, int64_t command, void *value)
{
int ret = CAMERA_ERROR_NONE;
funcs->set_command = camera_v4l2_set_command;
funcs->get_command = camera_v4l2_get_command;
funcs->set_batch_command = camera_v4l2_set_batch_command;
+ funcs->set_extra_preview_frame_cb = camera_v4l2_set_extra_preview_frame_cb;
+ funcs->unset_extra_preview_frame_cb = camera_v4l2_unset_extra_preview_frame_cb;
+ funcs->release_extra_preview_buffer = camera_v4l2_release_extra_preview_buffer;
*data = (void *)funcs;