}
+int camera_v4l2_set_extra_preview_stream_format(void *camera_handle, int stream_id, camera_format_s *format)
+{
+ hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
+
+ if (!handle) {
+ LOGE("NULL handle");
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ if (stream_id < 0 || stream_id >= EXTRA_PREVIEW_STREAM_MAX) {
+ LOGE("invalid stream_id[%d]", stream_id);
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ LOGI("stream_id[%d], [%d,%dx%d,%d]",
+ stream_id, format->stream_format,
+ format->stream_resolution.width, format->stream_resolution.height,
+ format->stream_fps);
+
+ memcpy(&handle->extra_preview_format[stream_id], format, sizeof(camera_format_s));
+
+ return CAMERA_ERROR_NONE;
+}
+
+
+int camera_v4l2_get_extra_preview_stream_format(void *camera_handle, int stream_id, camera_format_s *format)
+{
+ hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
+
+ if (!handle || !format) {
+ LOGE("NULL param[%p,%p]", handle, format);
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ if (stream_id < 0 || stream_id >= EXTRA_PREVIEW_STREAM_MAX) {
+ LOGE("invalid stream_id[%d]", stream_id);
+ return CAMERA_ERROR_INVALID_PARAMETER;
+ }
+
+ memcpy(format, &handle->extra_preview_format[stream_id], sizeof(camera_format_s));
+
+ LOGI("stream_id[%d], [%d,%dx%d,%d]",
+ stream_id, format->stream_format,
+ format->stream_resolution.width, format->stream_resolution.height,
+ format->stream_fps);
+
+ return CAMERA_ERROR_NONE;
+}
+
+
static int __set_command(hal_camera_handle *handle, int64_t command, void *value)
{
int cid = 0;
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;
+ funcs->set_extra_preview_stream_format = camera_v4l2_set_extra_preview_stream_format;
+ funcs->get_extra_preview_stream_format = camera_v4l2_get_extra_preview_stream_format;
*data = (void *)funcs;
#define MESSAGE_CALLBACK_MAX 10
#define BUFFER_MAX 4
#define V4L2_PLANES_MAX 4
+#define EXTRA_PREVIEW_STREAM_MAX 10
typedef struct _set_batch_table_s {
int64_t command;
hal_camera_extra_preview_frame_cb extra_preview_cb;
gpointer extra_preview_cb_data;
GMutex extra_preview_lock;
+ camera_format_s extra_preview_format[EXTRA_PREVIEW_STREAM_MAX];
/* capture */
hal_camera_capture_cb capture_cb;