Merge "secmem: support sideband and AV1 [1/1]" into buildroot-gstdrmplugin1.x
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 84f7135..d00242f 100644
--- a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
+++ b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
@@ -131,6 +131,19 @@
return NULL;
}
+gint gst_secmem_check_free_buf_size(GstAllocator * allocator)
+{
+ uint32_t available = 0;
+ g_return_val_if_fail(GST_IS_SECMEM_ALLOCATOR (allocator), -1);
+ GstSecmemAllocator *self = GST_SECMEM_ALLOCATOR (allocator);
+ g_return_val_if_fail(self->sess != NULL, NULL);
+ g_mutex_lock (&self->mutex);
+ g_return_val_if_fail(Secure_V2_GetSecmemSize(self->sess, NULL, &available) == 0, -1);
+ g_mutex_unlock (&self->mutex);
+ return available;
+}
+
+
void
gst_secmem_mem_free(GstAllocator *allocator, GstMemory *memory)
{
@@ -180,7 +193,7 @@
}
GstAllocator *
-gst_secmem_allocator_new (gboolean is_4k, gboolean is_vp9)
+gst_secmem_allocator_new (gboolean is_4k, uint8_t decoder_format)
{
unsigned int ret;
uint32_t flag;
@@ -192,15 +205,20 @@
GstSecmemAllocator *self = GST_SECMEM_ALLOCATOR (alloc);
self->is_4k = is_4k;
- self->is_vp9 = is_vp9;
+ self->is_vp9 = decoder_format == SECMEM_DECODER_VP9 ? TRUE: FALSE;
+ self->is_av1 = decoder_format == SECMEM_DECODER_AV1 ? TRUE : FALSE;
ret = Secure_V2_SessionCreate(&self->sess);
g_return_val_if_fail(ret == 0, alloc);
flag = is_4k ? 2 : 1;
- if (is_vp9) {
+ if (self->is_vp9) {
flag |= 0x09 << 4;
}
+ else if (self->is_av1)
+ {
+ flag |= 0x0A << 4;
+ }
ret = Secure_V2_Init(self->sess, 1, flag, 0, 0);
g_return_val_if_fail(ret == 0, alloc);
GST_INFO("init success");
@@ -306,6 +324,23 @@
return TRUE;
}
+gboolean
+gst_secmem_parse_av1(GstMemory *mem)
+{
+ uint32_t ret;
+ uint32_t handle;
+ uint32_t header_size;
+
+ handle = gst_secmem_memory_get_handle(mem);
+ g_return_val_if_fail(handle != 0, FALSE);
+
+ GstSecmemAllocator *self = GST_SECMEM_ALLOCATOR (mem->allocator);
+ ret = Secure_V2_Parse(self->sess, STREAM_TYPE_AV1, handle, NULL, 0, &header_size);
+ g_return_val_if_fail(ret == 0, FALSE);
+ mem->size += header_size;
+ return TRUE;
+}
+
secmem_handle_t gst_secmem_memory_get_handle (GstMemory *mem)
{
g_return_val_if_fail(mem != NULL, 0);
@@ -388,3 +423,18 @@
gst_buffer_unmap(src, &map);
return ret;
}
+
+gboolean gst_buffer_sideband_secmem(GstBuffer *dst)
+{
+ unsigned int ret;
+ GstMapInfo map;
+ GstMemory *mem;
+ uint32_t handle;
+ mem = gst_buffer_peek_memory(dst, 0);
+ g_return_val_if_fail(gst_is_secmem_memory(mem), FALSE);
+ handle = gst_secmem_memory_get_handle(mem);
+ g_return_val_if_fail(handle != 0, FALSE);
+ ret = Secure_SetHandle(handle);
+ g_return_val_if_fail(ret == 0, FALSE);
+ return TRUE;
+}
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 cfe05ac..1a29749 100644
--- a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
+++ b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
@@ -42,6 +42,7 @@
void *sess;
gboolean is_4k;
gboolean is_vp9;
+ gboolean is_av1;
gsize counter;
GCond cond;
GMutex mutex;
@@ -52,8 +53,17 @@
GstDmaBufAllocatorClass parent_class;
};
+/*Sec decoder definition */
+enum {
+ SECMEM_DECODER_DEFAULT = 0,
+ SECMEM_DECODER_VP9,
+ SECMEM_DECODER_AV1,
+ SECMEM_DECODER_AUDIO,
+ SECMEM_MAX_CODEC_NUM,
+};
+
GType gst_secmem_allocator_get_type (void);
-GstAllocator * gst_secmem_allocator_new (gboolean is_4k, gboolean is_vp9);
+GstAllocator * gst_secmem_allocator_new (gboolean is_4k, uint8_t decoder_format);
gboolean gst_is_secmem_memory (GstMemory *mem);
gboolean gst_secmem_fill(GstMemory *mem, uint32_t offset, uint8_t *buffer, uint32_t length);
gboolean gst_secmem_store_csd(GstMemory *mem, uint8_t *buffer, uint32_t length);
@@ -61,6 +71,8 @@
gboolean gst_secmem_parse_avcc(GstMemory *mem, uint8_t *buffer, uint32_t length);
gboolean gst_secmem_parse_avc2nalu(GstMemory *mem, uint32_t *flag);
gboolean gst_secmem_parse_vp9(GstMemory *mem);
+gboolean gst_secmem_parse_av1(GstMemory *mem);
+gint gst_secmem_check_free_buf_size(GstAllocator * allocator);
gint gst_secmem_get_free_buf_num(GstMemory *mem);
gint gst_secmem_get_free_buf_size(GstMemory *mem);
secmem_handle_t gst_secmem_memory_get_handle (GstMemory *mem);
@@ -68,6 +80,8 @@
secmem_handle_t gst_buffer_get_secmem_handle(GstBuffer *buffer);
secmem_paddr_t gst_buffer_get_secmem_paddr(GstBuffer *buffer);
gboolean gst_buffer_copy_to_secmem(GstBuffer *dst, GstBuffer *src);
+gboolean gst_buffer_sideband_secmem(GstBuffer *dst);
+
G_END_DECLS