vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Fri Apr  6 
20:05:21 2018 +0300| [c89e49dedef2be48abce864bcd70a2605f4e2f1b] | committer: 
Rémi Denis-Courmont

input: add vlc_stream_CustomNew() and vlc_stream_Private()

These two functions allow setting the object type name for the stream
object, and allocating type-specific private data.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c89e49dedef2be48abce864bcd70a2605f4e2f1b
---

 src/input/stream.c | 22 +++++++++++++++++++---
 src/input/stream.h |  5 +++++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/src/input/stream.c b/src/input/stream.c
index e79a752d7d..6b1d69eadd 100644
--- a/src/input/stream.c
+++ b/src/input/stream.c
@@ -27,6 +27,7 @@
 #endif
 
 #include <assert.h>
+#include <stdalign.h>
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
@@ -58,15 +59,19 @@ typedef struct stream_priv_t
         unsigned char char_width;
         bool          little_endian;
     } text;
+
+    max_align_t private_data[];
 } stream_priv_t;
 
 /**
  * Allocates a VLC stream object
  */
-stream_t *vlc_stream_CommonNew(vlc_object_t *parent,
-                               void (*destroy)(stream_t *))
+stream_t *vlc_stream_CustomNew(vlc_object_t *parent,
+                               void (*destroy)(stream_t *), size_t size,
+                               const char *type_name)
 {
-    stream_priv_t *priv = vlc_custom_create(parent, sizeof (*priv), "stream");
+    stream_priv_t *priv = vlc_custom_create(parent, sizeof (*priv) + size,
+                                            type_name);
     if (unlikely(priv == NULL))
         return NULL;
 
@@ -97,6 +102,17 @@ stream_t *vlc_stream_CommonNew(vlc_object_t *parent,
     return s;
 }
 
+void *vlc_stream_Private(stream_t *stream)
+{
+    return ((stream_priv_t *)stream)->private_data;
+}
+
+stream_t *vlc_stream_CommonNew(vlc_object_t *parent,
+                               void (*destroy)(stream_t *))
+{
+    return vlc_stream_CustomNew(parent, destroy, 0, "stream");
+}
+
 void stream_CommonDelete(stream_t *s)
 {
     stream_priv_t *priv = (stream_priv_t *)s;
diff --git a/src/input/stream.h b/src/input/stream.h
index 0ea78b8c00..025d7e1795 100644
--- a/src/input/stream.h
+++ b/src/input/stream.h
@@ -28,6 +28,11 @@
 #include <vlc_common.h>
 #include <vlc_stream.h>
 
+stream_t *vlc_stream_CustomNew(vlc_object_t *parent,
+                               void (*destroy)(stream_t *), size_t extra_size,
+                               const char *type_name);
+void *vlc_stream_Private(stream_t *stream);
+
 /* */
 void stream_CommonDelete( stream_t *s );
 

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to