gstsecmem: fix create secmem session wait issue [1/1]
PD#SWPL-151451
Problem:
Optimize the gst secmem session creation strategy
Solution:
Optimize the gst secmem session creation strategy
Verify:
Yocto + bp201
Change-Id: I08935520af49d35fc8f6841f7e85cf3e7e2e9afd
Signed-off-by: bo.li6 <bo.li6@amlogic.com>
diff --git a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
index 45b265e..23271ae 100644
--- a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
+++ b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
@@ -205,7 +205,7 @@
self->is_av1 = decoder_format == SECMEM_DECODER_AV1 ? TRUE : FALSE;
//custom set sec size
- if (flags & GST_SECMEM_ALLOC_FLAGS_KB_UNIT)
+ if (flags & GST_SECMEM_ALLOC_FLAGS_B_UNIT)
flag = 4; //256KB align
else
flag = 3; //1M align
@@ -219,14 +219,13 @@
g_mutex_lock (&self->mutex);
do {
- Secure_GetResourceAvail(&resource_free, &resource_avail);
- GST_INFO("secmem resource free %d avail %d setsize %d flags %x",
- resource_free, resource_avail, setsize, flags);
- if (resource_avail >= setsize)
- break;
- else
- GST_INFO("insufficient secmem resource retry..");
+ ret = Secure_V2_SessionCreate(&self->sess);
+ g_return_val_if_fail(ret == 0, alloc);
+ ret = Secure_V2_Init(self->sess, 1, flag, 0, setsize);
+ if (ret != SECMEM_ERROR_OUT_OF_MEMORY) break;
+
+ GST_INFO("insufficient secmem resource retry..");
g_get_current_time(&end_time);
end_time.tv_sec += 2;
g_cond_timed_wait (&self->cond, &self->mutex, &end_time);
@@ -234,10 +233,6 @@
} while (max_retry);
g_mutex_unlock (&self->mutex);
- ret = Secure_V2_SessionCreate(&self->sess);
- g_return_val_if_fail(ret == 0, alloc);
-
- ret = Secure_V2_Init(self->sess, 1, flag, 0, setsize);
g_return_val_if_fail(ret == 0, alloc);
GST_INFO("secmem init return %d, flags 0x%x flag 0x%x", ret, flags, flag);
diff --git a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
index 859193f..d88653c 100644
--- a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
+++ b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
@@ -71,7 +71,7 @@
SECMEM_MAX_CODEC_NUM,
};
-#define GST_SECMEM_ALLOC_FLAGS_KB_UNIT 1
+#define GST_SECMEM_ALLOC_FLAGS_B_UNIT 1
GType gst_secmem_allocator_get_type (void);
GstAllocator * gst_secmem_allocator_new (gboolean is_4k, uint8_t decoder_format);