media_packet: Add ref/unref code for external tbm surface 61/291061/2
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 7 Apr 2023 07:02:35 +0000 (16:02 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 10 Apr 2023 22:58:59 +0000 (07:58 +0900)
[Version] 0.1.57
[Issue Type] Improvement

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

index 5a47ac2f9a7e682ea4744074a81a65c0b0de47ca..538d5c38164acc5ee9ff4daac4f00345e5f72857 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-tool
 Summary:    A Core API media tool library in Tizen Native API
-Version:    0.1.56
+Version:    0.1.57
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 8a1f8b9251d182a48107b98c4ad803ce4158562f..3134a11562c1a0ee3215010c43c47879fc2c2bf3 100644 (file)
@@ -22,6 +22,7 @@
 #include <media_format.h>
 #include <media_packet.h>
 #include <media_packet_private.h>
+#include <tbm_surface_internal.h>
 
 static int  __pkt_init(media_buffer_type_e type, media_format_h fmt, void *cb, void *cb_data, bool is_from_new, media_packet_s **handle);
 static void __pkt_deinit(media_packet_s *handle);
@@ -158,6 +159,8 @@ static int __pkt_create_from_tbm_surface(media_format_h fmt, tbm_surface_h surfa
                return ret;
        }
 
+       tbm_surface_internal_ref(surface);
+
        handle->surface_data = (void *)surface;
        handle->data = surface_info.planes[0].ptr;
        handle->size = (uint64_t)surface_info.size;
@@ -476,10 +479,10 @@ static int __pkt_dealloc_buffer(media_packet_s *handle)
 
        switch (handle->type) {
        case MEDIA_BUFFER_TYPE_TBM_SURFACE:
-               if (handle->surface_data) {
-                       tbm_surface_destroy((tbm_surface_h)handle->surface_data);
-                       handle->surface_data = NULL;
-               }
+               /* fall through */
+       case MEDIA_BUFFER_TYPE_EXTERNAL_TBM_SURFACE:
+               tbm_surface_internal_unref((tbm_surface_h)handle->surface_data);
+               handle->surface_data = NULL;
                break;
        case MEDIA_BUFFER_TYPE_NORMAL:
                if (handle->data) {
@@ -487,8 +490,6 @@ static int __pkt_dealloc_buffer(media_packet_s *handle)
                        handle->data = NULL;
                }
                break;
-       case MEDIA_BUFFER_TYPE_EXTERNAL_TBM_SURFACE:
-                /* fall through */
        case MEDIA_BUFFER_TYPE_EXTERNAL_MEMORY:
                /* there is nothing to do, Do not free the buffer which is created by external module. */
                break;