Add new internal API to get meta 12/293012/1
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 24 Apr 2023 06:23:25 +0000 (15:23 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Thu, 18 May 2023 05:33:21 +0000 (14:33 +0900)
[Version] 0.4.106
[Issue Type] New feature

Change-Id: Iccadb9d2496f3307a2bc8029a4311ad0e7179606
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
include/camera_internal.h
packaging/capi-media-camera.spec
src/camera.c
src/camera_internal.c

index a0b86f8..ea6bdb9 100644 (file)
@@ -56,6 +56,27 @@ typedef struct _camera_meta_timestamp_s {
        unsigned long long td_aux;
 } camera_meta_timestamp_s;
 
+/**
+ * @internal
+ * @brief The structure type of the frame meta.
+ * @since_tizen 7.0
+ * @remarks This is available for specific device only.
+ */
+typedef struct _camera_frame_meta_s {
+       unsigned long long ts_soe;
+       unsigned long long ts_eoe;
+       unsigned long long ts_sof;
+       unsigned long long ts_eof;
+       unsigned long long ts_hal;
+       unsigned long long ts_qmf;
+       unsigned long long ts_gst;
+       unsigned long long td_exp;
+       unsigned long long ts_aux;
+       unsigned long long td_aux;
+       unsigned long long seqnum;
+       unsigned long long flags;
+} camera_frame_meta_s;
+
 
 /**
  * @internal
@@ -294,6 +315,21 @@ int camera_attr_get_preview_frame_timestamp(camera_h camera, unsigned long *time
  */
 int camera_attr_get_preview_frame_meta_timestamp(camera_h camera, camera_meta_timestamp_s *meta_timestamp);
 
+/**
+ * @internal
+ * @brief Gets the frame meta of preview buffer.
+ * @since_tizen 7.0
+ * @remarks The function should be called in camera_preview_cb() or camera_media_packet_preview_cb(),\n
+ *          otherwise, it will return #CAMERA_ERROR_INVALID_OPERATION.
+ * @param[in] camera      The handle to the camera
+ * @param[out] frame_meta The frame meta of preview buffer (in nsec for timestamp)
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #CAMERA_ERROR_NONE Successful
+ * @retval #CAMERA_ERROR_INVALID_OPERATION Internal error
+ * @retval #CAMERA_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int camera_attr_get_preview_frame_meta(camera_h camera, camera_frame_meta_s *frame_meta);
+
 
 /**
  * @}
index 620e736..31c1534 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-camera
 Summary:    A Camera API
-Version:    0.4.105
+Version:    0.4.106
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 0384007..4cf54ed 100644 (file)
@@ -410,12 +410,13 @@ static void __camera_event_handler_preview(camera_cb_info_s *cb_info, char *recv
        /* get stream info */
        stream = (MMCamcorderVideoStreamDataType *)buf_pos;
 
-       CAM_LOG_VERBOSE("meta ts: [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu]",
-               stream->ts_soe, stream->ts_eoe,
-               stream->ts_sof, stream->ts_eof,
-               stream->ts_hal, stream->ts_qmf,
-               stream->ts_gst, stream->td_exp,
-               stream->ts_aux, stream->td_aux);
+       CAM_LOG_VERBOSE("meta [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu] [%llu]",
+               stream->frame_meta.ts_soe, stream->frame_meta.ts_eoe,
+               stream->frame_meta.ts_sof, stream->frame_meta.ts_eof,
+               stream->frame_meta.ts_hal, stream->frame_meta.ts_qmf,
+               stream->frame_meta.ts_gst, stream->frame_meta.td_exp,
+               stream->frame_meta.ts_aux, stream->frame_meta.td_aux,
+               stream->frame_meta.seqnum, stream->frame_meta.flags);
 
        if (num_buffer_fd == 0 && CAMERA_IS_FD_VALID(tfd[1])) {
                /* import tbm data_bo and get virtual address */
index c994e4d..06e644e 100644 (file)
@@ -417,16 +417,49 @@ int camera_attr_get_preview_frame_meta_timestamp(camera_h camera, camera_meta_ti
                return CAMERA_ERROR_INVALID_OPERATION;
        }
 
-       meta_timestamp->ts_soe = stream->ts_soe;
-       meta_timestamp->ts_eoe = stream->ts_eoe;
-       meta_timestamp->ts_sof = stream->ts_sof;
-       meta_timestamp->ts_eof = stream->ts_eof;
-       meta_timestamp->ts_hal = stream->ts_hal;
-       meta_timestamp->ts_qmf = stream->ts_qmf;
-       meta_timestamp->ts_gst = stream->ts_gst;
-       meta_timestamp->td_exp = stream->td_exp;
-       meta_timestamp->ts_aux = stream->ts_aux;
-       meta_timestamp->td_aux = stream->td_aux;
+       meta_timestamp->ts_soe = stream->frame_meta.ts_soe;
+       meta_timestamp->ts_eoe = stream->frame_meta.ts_eoe;
+       meta_timestamp->ts_sof = stream->frame_meta.ts_sof;
+       meta_timestamp->ts_eof = stream->frame_meta.ts_eof;
+       meta_timestamp->ts_hal = stream->frame_meta.ts_hal;
+       meta_timestamp->ts_qmf = stream->frame_meta.ts_qmf;
+       meta_timestamp->ts_gst = stream->frame_meta.ts_gst;
+       meta_timestamp->td_exp = stream->frame_meta.td_exp;
+       meta_timestamp->ts_aux = stream->frame_meta.ts_aux;
+       meta_timestamp->td_aux = stream->frame_meta.td_aux;
+
+       return CAMERA_ERROR_NONE;
+}
+
+
+int camera_attr_get_preview_frame_meta(camera_h camera, camera_frame_meta_s *frame_meta)
+{
+       camera_cli_s *pc = (camera_cli_s *)camera;
+       MMCamcorderVideoStreamDataType *stream = NULL;
+
+       if (!pc || !pc->cb_info || !frame_meta) {
+               CAM_LOG_ERROR("NULL pointer %p %p", pc, frame_meta);
+               return CAMERA_ERROR_INVALID_PARAMETER;
+       }
+
+       stream = pc->cb_info->stream_data;
+       if (!stream) {
+               CAM_LOG_ERROR("no stream data, maybe it's not in preview callback");
+               return CAMERA_ERROR_INVALID_OPERATION;
+       }
+
+       frame_meta->ts_soe = stream->frame_meta.ts_soe;
+       frame_meta->ts_eoe = stream->frame_meta.ts_eoe;
+       frame_meta->ts_sof = stream->frame_meta.ts_sof;
+       frame_meta->ts_eof = stream->frame_meta.ts_eof;
+       frame_meta->ts_hal = stream->frame_meta.ts_hal;
+       frame_meta->ts_qmf = stream->frame_meta.ts_qmf;
+       frame_meta->ts_gst = stream->frame_meta.ts_gst;
+       frame_meta->td_exp = stream->frame_meta.td_exp;
+       frame_meta->ts_aux = stream->frame_meta.ts_aux;
+       frame_meta->td_aux = stream->frame_meta.td_aux;
+       frame_meta->seqnum = stream->frame_meta.seqnum;
+       frame_meta->flags = stream->frame_meta.flags;
 
        return CAMERA_ERROR_NONE;
 }