summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeongmo Yang <jm80.yang@samsung.com>2020-01-10 17:47:06 +0900
committerJeongmo Yang <jm80.yang@samsung.com>2020-01-16 17:50:13 +0900
commit6a05d1fc1b4d83579203e53901ac63d259f4160d (patch)
tree6027bb444dfadb8f2b85a19dcc0d735e1b7e38ab
parent776e9acb332b616ea5dea5a3f5abb2a477999ec5 (diff)
downloadcamera-6a05d1fc1b4d83579203e53901ac63d259f4160d.tar.gz
camera-6a05d1fc1b4d83579203e53901ac63d259f4160d.tar.bz2
camera-6a05d1fc1b4d83579203e53901ac63d259f4160d.zip
[ACR-1487] Add new preview format and update camera_preview_data_ssubmit/tizen/20200204.110420submit/tizen/20200204.080130accepted/tizen/unified/20200205.125315
- new preview format : CAMERA_PIXEL_FORMAT_MJPEG for motion JPEG preview is added - update camera_preview_data_s : is_delta_frame in camera_preview_data_s is added [Version] 0.4.29 [Profile] Common [Issue Type] ACR Change-Id: If449b78fdaa5092565ab848677fd4d175760d602 Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
-rw-r--r--include/camera.h5
-rw-r--r--include/camera_private.h1
-rw-r--r--packaging/capi-media-camera.spec2
-rw-r--r--src/camera.c1
-rw-r--r--test/camera_test.c14
5 files changed, 18 insertions, 5 deletions
diff --git a/include/camera.h b/include/camera.h
index 1b5dc7c..63c1739 100644
--- a/include/camera.h
+++ b/include/camera.h
@@ -120,7 +120,8 @@ typedef enum {
CAMERA_PIXEL_FORMAT_ARGB, /**< ARGB pixel format */
CAMERA_PIXEL_FORMAT_JPEG, /**< Encoded pixel format */
CAMERA_PIXEL_FORMAT_H264 = 15, /**< Encoded pixel format : H264 (Since 3.0) */
- CAMERA_PIXEL_FORMAT_INVZ /**< Depth pixel format : INVZ (Since 5.0) */
+ CAMERA_PIXEL_FORMAT_INVZ, /**< Depth pixel format : INVZ (Since 5.0) */
+ CAMERA_PIXEL_FORMAT_MJPEG /**< Encoded pixel format : Motion JPEG for preview (Since 6.0) */
} camera_pixel_format_e;
/**
@@ -257,6 +258,7 @@ typedef struct {
struct {
unsigned char *data; /**< The encoded data pointer */
unsigned int size; /**< The size of encoded data */
+ bool is_delta_frame; /**< The flag indicating whether it's delta frame or not (Since 6.0) */
} encoded_plane; /**< Encoded plane frame data */
struct {
@@ -609,6 +611,7 @@ typedef void (*camera_focus_changed_cb)(camera_focus_state_e state, void *user_d
*
* @remarks This function is issued in the context of internal framework so the UI update code should not be directly invoked.\n
* If the camera is used as a recorder then this callback function won't be called.
+ * @remarks The @a frame should not be released and it's available until the callback returns.
*
* @param[in] frame The reference pointer to preview stream data
* @param[in] user_data The user data passed from the callback registration function
diff --git a/include/camera_private.h b/include/camera_private.h
index 2a74fa5..0ce8ed9 100644
--- a/include/camera_private.h
+++ b/include/camera_private.h
@@ -87,6 +87,7 @@ typedef struct _camera_stream_data_s {
struct {
unsigned char *data;
unsigned int length_data;
+ int is_delta_frame;
} encoded, depth, rgb;
} data; /**< pointer of captured stream */
int data_type; /**< data type */
diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec
index 27f9f7f..ddefff8 100644
--- a/packaging/capi-media-camera.spec
+++ b/packaging/capi-media-camera.spec
@@ -1,6 +1,6 @@
Name: capi-media-camera
Summary: A Camera API
-Version: 0.4.28
+Version: 0.4.29
Release: 0
Group: Multimedia/API
License: Apache-2.0
diff --git a/src/camera.c b/src/camera.c
index 211b29c..9aa8b48 100644
--- a/src/camera.c
+++ b/src/camera.c
@@ -1039,6 +1039,7 @@ static void _camera_preview_frame_create(camera_stream_data_s *stream, int num_b
if (stream->format == MM_PIXEL_FORMAT_ENCODED_H264) {
frame->data.encoded_plane.data = buf_pos;
frame->data.encoded_plane.size = stream->data.encoded.length_data;
+ frame->data.encoded_plane.is_delta_frame = (bool)stream->data.encoded.is_delta_frame;
total_size = stream->data.encoded.length_data;
} else if (stream->format == MM_PIXEL_FORMAT_INVZ) {
frame->data.depth_plane.data = buf_pos;
diff --git a/test/camera_test.c b/test/camera_test.c
index 33e731d..f92cdfa 100644
--- a/test/camera_test.c
+++ b/test/camera_test.c
@@ -88,6 +88,7 @@ GTimeVal result_time;
| LOCAL #defines: |
-----------------------------------------------------------------------*/
#define DEFAULT_FILE_PATH "/home/owner/media"
+#define PREVIEW_CB_DUMP_FILE_NAME "preview.data"
#define MAX_FILE_NAME_LENGTH 256
#define MAX_FILE_PATH_LENGTH (MAX_FILE_NAME_LENGTH - 20)
@@ -461,9 +462,14 @@ static void _camera_interrupt_started_cb(camera_policy_e policy, camera_state_e
void _camera_preview_cb(camera_preview_data_s *frame, void *user_data)
{
#if 1
- FILE *fp = fopen(DEFAULT_FILE_PATH"/test.raw", "a");
+ char preview_dump[MAX_FILE_NAME_LENGTH] = {'\0',};
+ FILE *fp = NULL;
+
+ snprintf(preview_dump, MAX_FILE_NAME_LENGTH, "%s/%s", DEFAULT_FILE_PATH, PREVIEW_CB_DUMP_FILE_NAME);
+
+ fp = fopen(preview_dump, "a");
if (fp == NULL) {
- g_print("\n==== file[%s] open failed ====\n", DEFAULT_FILE_PATH"/test.raw");
+ g_print("\n==== file[%s] open failed ====\n", preview_dump);
return;
}
@@ -472,6 +478,8 @@ void _camera_preview_cb(camera_preview_data_s *frame, void *user_data)
fwrite(frame->data.rgb_plane.data, 1, frame->data.rgb_plane.size, fp);
} else if (frame->format == CAMERA_PIXEL_FORMAT_INVZ) {
fwrite(frame->data.depth_plane.data, 1, frame->data.depth_plane.size, fp);
+ } else if (frame->format == CAMERA_PIXEL_FORMAT_MJPEG) {
+ fwrite(frame->data.encoded_plane.data, 1, frame->data.encoded_plane.size, fp);
} else {
switch (frame->num_of_planes) {
case 1:
@@ -491,7 +499,7 @@ void _camera_preview_cb(camera_preview_data_s *frame, void *user_data)
}
}
- g_print("==== file[%s] write done ====\n", DEFAULT_FILE_PATH"/test.raw");
+ g_print("==== file[%s] write done ====\n", preview_dump);
fclose(fp);
fp = NULL;