Add sub function to get TBM surface info 40/301740/6 accepted/tizen/unified/20231205.024707 accepted/tizen/unified/riscv/20231211.234028
authorJeongmo Yang <jm80.yang@samsung.com>
Wed, 22 Nov 2023 09:02:15 +0000 (18:02 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 1 Dec 2023 06:01:10 +0000 (15:01 +0900)
- This patch removes duplicated code for TBM surface info.
- Additional change
 : Fix crash - Correct the order of arguments for MEDIA_PACKET_CHECK_CONDITION() macro.

[Version] 0.1.60
[Issue Type] Improvement

Change-Id: Icf04e2f5436d31c5e558e7473eeb7725d64407d3
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/capi-media-tool.spec
src/media_packet.c

index 76ff104842284e6dadbe41cc424c2ddebf87ee37..765189e7a69fcf046076e92f4416212cb112223f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-tool
 Summary:    A Core API media tool library in Tizen Native API
-Version:    0.1.59
+Version:    0.1.60
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 3134a11562c1a0ee3215010c43c47879fc2c2bf3..fecd018cd1d5cf35a94f790644ce792a27cd92d7 100644 (file)
@@ -32,6 +32,7 @@ static int  __pkt_create_alloc(media_format_h fmt, void *cb, void *cb_data, medi
 static int  __pkt_create_from_tbm_surface(media_format_h fmt, tbm_surface_h surface, void *cb, void *cb_data, media_packet_h *packet, bool is_from_new);
 static int  __pkt_create_from_external_memory(media_format_h fmt, void *mem_ptr, uint64_t size, void *cb, void *cb_data, media_packet_h *packet, bool is_from_new);
 static int  __pkt_destroy(media_packet_s *handle);
+static int  __pkt_get_tbm_surface_info(media_packet_s *handle, int plane_idx, int *num_planes, int *stride_width, int *stride_height, void **data_ptr);
 static size_t __pkt_calculate_video_buffer_size(media_packet_s *pkt);
 static size_t __pkt_calculate_audio_buffer_size(media_packet_s *pkt);
 static size_t __pkt_calculate_text_buffer_size(media_packet_s *pkt);
@@ -182,7 +183,7 @@ static int __pkt_create_from_external_memory(media_format_h fmt, void *mem_ptr,
        MEDIA_PACKET_INSTANCE_CHECK(fmt);
        MEDIA_PACKET_NULL_ARG_CHECK(mem_ptr);
        MEDIA_PACKET_NULL_ARG_CHECK(packet);
-       MEDIA_PACKET_CHECK_CONDITION(size > 0, "invalid size", MEDIA_PACKET_ERROR_INVALID_PARAMETER);
+       MEDIA_PACKET_CHECK_CONDITION(size > 0, MEDIA_PACKET_ERROR_INVALID_PARAMETER, "invalid size");
 
        ret = __pkt_init(MEDIA_BUFFER_TYPE_EXTERNAL_MEMORY, fmt, cb, cb_data, is_from_new, &handle);
        if (ret != MEDIA_PACKET_ERROR_NONE) {
@@ -265,6 +266,62 @@ static int __pkt_destroy(media_packet_s *handle)
 }
 
 
+static int  __pkt_get_tbm_surface_info(media_packet_s *handle, int plane_idx, int *num_planes, int *stride_width, int *stride_height, void **data_ptr)
+{
+       tbm_surface_info_s surface_info;
+       int ret = 0;
+
+       MEDIA_PACKET_INSTANCE_CHECK(handle);
+       MEDIA_PACKET_CHECK_CONDITION(handle->surface_data, MEDIA_PACKET_ERROR_INVALID_OPERATION, "NULL surface data");
+
+       ret = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
+       if (ret != TBM_SURFACE_ERROR_NONE) {
+               if (num_planes)
+                       *num_planes = 0;
+
+               if (stride_width)
+                       *stride_width = 0;
+
+               if (stride_height)
+                       *stride_height = 0;
+
+               if (data_ptr)
+                       *data_ptr = NULL;
+
+               LOGE("tbm_surface_get_info() failed[0x%x", ret);
+
+               return MEDIA_PACKET_ERROR_INVALID_OPERATION;
+       }
+
+       if (plane_idx < 0 || plane_idx >= surface_info.num_planes) {
+               LOGE("invalid plane_idx[%d](num_planes:%d)", plane_idx, surface_info.num_planes);
+               return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
+       }
+
+       if (num_planes) {
+               *num_planes = surface_info.num_planes;
+               LOGD("plane[%d] number of planes[%d]", plane_idx, *num_planes);
+       }
+
+       if (stride_width) {
+               *stride_width = surface_info.planes[plane_idx].stride;
+               LOGD("plane[%d] stride width[%d]", plane_idx, *stride_width);
+       }
+
+       if (stride_height) {
+               *stride_height = surface_info.planes[plane_idx].size / surface_info.planes[plane_idx].stride;
+               LOGD("plane[%d] stride height[%d]", plane_idx, *stride_height);
+       }
+
+       if (data_ptr) {
+               *data_ptr = surface_info.planes[plane_idx].ptr;
+               LOGD("plane[%d] data ptr[%p]", plane_idx, *data_ptr);
+       }
+
+       return MEDIA_PACKET_ERROR_NONE;
+}
+
+
 int media_packet_create(media_format_h fmt, media_packet_finalize_cb fcb, void *fcb_data, media_packet_h *packet)
 {
        MEDIA_PACKET_INSTANCE_CHECK(fmt);
@@ -1120,165 +1177,30 @@ int media_packet_has_tbm_surface_buffer(media_packet_h packet, bool *has_tbm_sur
 
 int media_packet_get_number_of_video_planes(media_packet_h packet, uint32_t *num)
 {
-       media_packet_s *handle;
-       int ret = MEDIA_PACKET_ERROR_NONE;
-       bool has_tbm;
-
-       MEDIA_PACKET_INSTANCE_CHECK(packet);
        MEDIA_PACKET_NULL_ARG_CHECK(num);
 
-       handle = (media_packet_s *)packet;
-
-       media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
-       if (has_tbm) {
-               tbm_surface_info_s surface_info;
-               int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
-               if (err == TBM_SURFACE_ERROR_NONE) {
-                       *num = surface_info.num_planes;
-                       LOGD(" surface_info the number of planes = %d", (int)surface_info.num_planes);
-               } else {
-                       *num = 0;
-                       LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
-                       ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-               }
-       } else {
-               *num = 0;
-               LOGE("The packet handle doesn't have tbm_surface buffer type");
-               ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-
-       }
-
-       return ret;
+       return __pkt_get_tbm_surface_info((media_packet_s *)packet, 0, num, NULL, NULL, NULL);
 }
 
 int media_packet_get_video_stride_width(media_packet_h packet, int plane_idx, int *stride_width)
 {
-       media_packet_s *handle;
-       int ret = MEDIA_PACKET_ERROR_NONE;
-       bool has_tbm;
-
-       MEDIA_PACKET_INSTANCE_CHECK(packet);
        MEDIA_PACKET_NULL_ARG_CHECK(stride_width);
-       if (plane_idx < 0) {
-               LOGE("Invalid plane_idx : %d, must not be negative number", plane_idx);
-               return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
-       }
-
-       handle = (media_packet_s *)packet;
 
-       media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
-       if (has_tbm) {
-               tbm_surface_info_s surface_info;
-               int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
-               if (err == TBM_SURFACE_ERROR_NONE) {
-
-                       if (surface_info.num_planes > plane_idx) {
-                               *stride_width = surface_info.planes[plane_idx].stride;
-                       } else {
-                               LOGE("the plane_idx is invalid, The number of planes = %lu", surface_info.num_planes);
-                               *stride_width = 0;
-                               ret = MEDIA_PACKET_ERROR_INVALID_PARAMETER;
-                       }
-               } else {
-                       *stride_width = 0;
-                       LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
-                       ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-               }
-       } else {
-               LOGE("The packet handle doesn't have tbm_surface buffer type");
-               *stride_width = 0;
-               ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-       }
-
-       return ret;
+       return __pkt_get_tbm_surface_info((media_packet_s *)packet, plane_idx, NULL, stride_width, NULL, NULL);
 }
 
 int media_packet_get_video_stride_height(media_packet_h packet, int plane_idx, int *stride_height)
 {
-       media_packet_s *handle;
-       int ret = MEDIA_PACKET_ERROR_NONE;
-       bool has_tbm;
-
-       MEDIA_PACKET_INSTANCE_CHECK(packet);
        MEDIA_PACKET_NULL_ARG_CHECK(stride_height);
-       if (plane_idx < 0) {
-               LOGE("Invalid plane_idx : %d, must not be negative number", plane_idx); //LCOV_EXCL_LINE
-               return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
-       }
-
-       handle = (media_packet_s *)packet;
-
-       media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
-       if (has_tbm) {
-               tbm_surface_info_s surface_info;
-               int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
-               if (err == TBM_SURFACE_ERROR_NONE) {
-                       if (surface_info.num_planes > plane_idx) {
-                               *stride_height = surface_info.planes[plane_idx].size / surface_info.planes[plane_idx].stride;
-                       } else {
-                               LOGE("the plane_idx is invalid, The number of planes = %lu", surface_info.num_planes);  //LCOV_EXCL_LINE
-                               *stride_height = 0;
-                               ret = MEDIA_PACKET_ERROR_INVALID_PARAMETER;
-                       }
-               } else {
-                       *stride_height = 0;
-                       LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
-                       ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-               }
-       } else {
-               LOGE("The packet handle doesn't have tbm_surface buffer type");
-               *stride_height = 0;
-               ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-       }
-
-       return ret;
 
+       return __pkt_get_tbm_surface_info((media_packet_s *)packet, plane_idx, NULL, NULL, stride_height, NULL);
 }
 
 int media_packet_get_video_plane_data_ptr(media_packet_h packet, int plane_idx, void **plane_data_ptr)
 {
-       media_packet_s *handle;
-       int ret = MEDIA_PACKET_ERROR_NONE;
-       bool has_tbm;
-
-       MEDIA_PACKET_INSTANCE_CHECK(packet);
        MEDIA_PACKET_NULL_ARG_CHECK(plane_data_ptr);
-       if (plane_idx < 0) {
-               LOGE("Invalid plane_idx : %d, must not be negative number", plane_idx); //LCOV_EXCL_LINE
-               return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
-       }
-
-       handle = (media_packet_s *)packet;
-
-       media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
-       if (has_tbm) {
-               tbm_surface_info_s surface_info;
-               int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
-               if (err == TBM_SURFACE_ERROR_NONE) {
-                       if (surface_info.num_planes > plane_idx) {
-                               *plane_data_ptr = surface_info.planes[plane_idx].ptr;
-                               LOGD("the tbm_surface_info.planes[%d].ptr = %p", plane_idx, surface_info.planes[plane_idx].ptr);
-                       } else {
-                               LOGE("the plane_idx is invalid, The number of planes = %lu", surface_info.num_planes);  //LCOV_EXCL_LINE
-                               *plane_data_ptr = NULL;
-                               ret = MEDIA_PACKET_ERROR_INVALID_PARAMETER;
-                       }
-               } else {
-                       LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
-                       *plane_data_ptr = NULL;
-                       ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-               }
-       } else {
-               LOGI("The packet handle doesn't have tbm_surface buffer type");
-               *plane_data_ptr = NULL;
-               ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-       }
 
-       return ret;
+       return __pkt_get_tbm_surface_info((media_packet_s *)packet, plane_idx, NULL, NULL, NULL, plane_data_ptr);
 }
 
 int media_packet_get_codec_data(media_packet_h packet, void **codec_data, unsigned int *codec_data_size)