dummydrm: CF1 support playersinkbin playback [1/1]

PD#OTT-40282

Problem:
need to use secure buffer to support playersinkbin playback.

Solution:
add property stream mode.

Verify:
S905X4+RDK

Signed-off-by: yanting.zhou <yanting.zhou@amlogic.com>
Change-Id: I33959de2b6682de9c7b5319d909f2dc5c6a07290
diff --git a/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.c b/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.c
index 585007a..3a28697 100644
--- a/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.c
+++ b/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.c
@@ -40,6 +40,12 @@
 static GstFlowReturn    gst_dummydrm_prepare_output_buffer(GstBaseTransform * trans, GstBuffer *input, GstBuffer **outbuf);
 static GstFlowReturn    gst_dummydrm_transform(GstBaseTransform *trans, GstBuffer *inbuf, GstBuffer *outbuf);
 
+enum
+{
+    PROP_0,
+    PROP_IS_4K,
+    PROP_STREAM_MODE,
+};
 
 static void
 gst_dummydrm_class_init (GstDummyDrmClass * klass)
@@ -58,6 +64,17 @@
     base_class->passthrough_on_same_caps = FALSE;
     base_class->transform_ip_on_passthrough = FALSE;
 
+    g_object_class_install_property(gobject_class, PROP_IS_4K,
+                                    g_param_spec_boolean("is-4k", "is-4k",
+                                                         "is 4k stream",
+                                                         FALSE,
+                                                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+    g_object_class_install_property(gobject_class, PROP_STREAM_MODE,
+                                    g_param_spec_boolean("stream-mode", "stream-mode",
+                                                         "secmem stream mode",
+                                                         FALSE,
+                                                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
     gst_element_class_add_pad_template (element_class,
             gst_static_pad_template_get (&sinktemplate));
     gst_element_class_add_pad_template (element_class,
@@ -78,19 +95,56 @@
 
     plugin->allocator = NULL;
     plugin->outcaps = NULL;
-
+    plugin->is_4k = FALSE;
+    plugin->stream_mode = FALSE;
 }
 
 void
 gst_dummydrm_set_property(GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec)
 {
-    //TODO
+    GstDummyDrm *plugin = GST_DUMMYDRM(object);
+    switch (prop_id)
+    {
+    case PROP_IS_4K:
+    {
+        plugin->is_4k = g_value_get_boolean(value);
+        GST_DEBUG_OBJECT(plugin, "set PROP_IS_4K:%d", plugin->is_4k);
+        break;
+    }
+    case PROP_STREAM_MODE:
+    {
+        plugin->stream_mode = g_value_get_boolean(value);
+        GST_DEBUG_OBJECT(plugin, "set PROP_STREAM_MODE:%d", plugin->stream_mode);
+        break;
+    }
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        break;
+    }
 }
 
 void
 gst_dummydrm_get_property(GObject * object, guint prop_id, GValue * value, GParamSpec * pspec)
 {
-    //TODO
+    GstDummyDrm *plugin = GST_DUMMYDRM(object);
+    switch (prop_id)
+    {
+    case PROP_IS_4K:
+    {
+        g_value_set_boolean(value, plugin->is_4k);
+        GST_DEBUG_OBJECT(plugin, "get PROP_IS_4K:%d", plugin->is_4k);
+        break;
+    }
+    case PROP_STREAM_MODE:
+    {
+        g_value_set_boolean(value, plugin->stream_mode);
+        GST_DEBUG_OBJECT(plugin, "get PROP_STREAM_MODE:%d", plugin->stream_mode);
+        break;
+    }
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        break;
+    }
 }
 
 gboolean
@@ -144,11 +198,18 @@
                     find = true;
                     gst_caps_set_features(ret, i,
                             gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_SECMEM_MEMORY));
+                    if (g_str_has_suffix (gst_structure_get_name (structure), "/mpegts")) {
+                        plugin->stream_mode = TRUE;
+                        GST_DEBUG_OBJECT (plugin, "source suffix is mpegts, config streammode is true.");
+                    }
                 }
             }
             if (find) {
                 if (!plugin->allocator) {
-                    plugin->allocator = gst_secmem_allocator_new(false, false);
+                    uint32_t flag = (plugin->is_4k ? 2 : 1);
+                    if (plugin->stream_mode)
+                        flag |= (1<<8);
+                    plugin->allocator = gst_secmem_allocator_new_ex(false, flag);
                 }
                 if (plugin->outcaps) {
                     gst_caps_unref(plugin->outcaps);
diff --git a/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.h b/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.h
index 6f2fd2b..5ffce7f 100644
--- a/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.h
+++ b/gst-aml-drm-plugins-1.0/src/dummy/gstdummydrm.h
@@ -39,7 +39,8 @@
     GstCaps                *outcaps;
     GstAllocator           *allocator;
 
-
+    gboolean                is_4k;
+    gboolean                stream_mode;
 };
 
 struct _GstDummyDrmClass {
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 b7b9833..6084b3a 100644
--- a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
+++ b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.c
@@ -186,7 +186,7 @@
 }
 
 GstAllocator *
-gst_secmem_allocator_new_ex (uint8_t decoder_format, uint8_t reserved) {
+gst_secmem_allocator_new_ex (uint8_t decoder_format, uint32_t reserved) {
     unsigned int ret;
     uint32_t flag;
     GstAllocator *alloc;
@@ -216,9 +216,10 @@
     setsize = CEIL_POS(((uint32_t)(capacity >> 20) + 1) * 0.75);
     if(setsize > 12)
         setsize = 12;
+    flag |= reserved;
     ret = Secure_V2_Init(self->sess, 1, flag, 0, setsize);
     g_return_val_if_fail(ret == 0, alloc);
-    GST_INFO("secmem init return %d, flag %x", ret, flag);
+    GST_INFO("secmem init return %d, flag 0x%x", ret, flag);
 
     return alloc;
 }
diff --git a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
old mode 100755
new mode 100644
index 728a6f6..592f426
--- a/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
+++ b/gst-aml-drm-plugins-1.0/src/secmem/gstsecmemallocator.h
@@ -72,7 +72,7 @@
 
 GType           gst_secmem_allocator_get_type (void);
 GstAllocator *  gst_secmem_allocator_new (gboolean is_4k, uint8_t decoder_format);
-GstAllocator *  gst_secmem_allocator_new_ex (uint8_t decoder_format, uint8_t reserved);
+GstAllocator *  gst_secmem_allocator_new_ex (uint8_t decoder_format, uint32_t reserved);
 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_copybyhandle(GstMemory *mem, uint32_t dst_handle, uint32_t range, uint32_t dst_offset[], uint32_t src_offset[], uint32_t size[]);