[vlc-commits] stream: add vlc_stream_AttachmentNew

Thomas Guillem git at videolan.org
Fri Jul 20 17:23:09 CEST 2018


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Fri Jul 20 16:26:49 2018 +0200| [02ec20713089d52f2565e6752c7498d6d52d90a0] | committer: Thomas Guillem

stream: add vlc_stream_AttachmentNew

Like vlc_stream_MemoryNew but with an attachment, that is released on stream
destroy.

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

 src/input/stream.h        |  3 +++
 src/input/stream_memory.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/src/input/stream.h b/src/input/stream.h
index 025d7e1795..60f0b0bd1b 100644
--- a/src/input/stream.h
+++ b/src/input/stream.h
@@ -36,6 +36,9 @@ void *vlc_stream_Private(stream_t *stream);
 /* */
 void stream_CommonDelete( stream_t *s );
 
+stream_t *vlc_stream_AttachmentNew(vlc_object_t *p_this,
+                                   input_attachment_t *attachement);
+
 /**
  * This function creates a raw stream_t from an URL.
  */
diff --git a/src/input/stream_memory.c b/src/input/stream_memory.c
index f9a3df117c..e1b23531e3 100644
--- a/src/input/stream_memory.c
+++ b/src/input/stream_memory.c
@@ -25,6 +25,7 @@
 # include "config.h"
 #endif
 
+#include <vlc_input.h>
 #include "stream.h"
 
 struct vlc_stream_memory_private
@@ -34,6 +35,12 @@ struct vlc_stream_memory_private
     uint8_t  *p_buffer;
 };
 
+struct vlc_stream_attachment_private
+{
+    struct vlc_stream_memory_private memory;
+    input_attachment_t *attachment;
+};
+
 static ssize_t Read( stream_t *, void *p_read, size_t i_read );
 static int Seek( stream_t *, uint64_t );
 static int  Control( stream_t *, int i_query, va_list );
@@ -50,6 +57,14 @@ static void stream_MemoryDelete(stream_t *s)
     free(sys->p_buffer);
 }
 
+static void stream_AttachmentDelete(stream_t *s)
+{
+    struct vlc_stream_attachment_private *sys = vlc_stream_Private(s);
+
+    vlc_input_attachment_Delete(sys->attachment);
+    free(s->psz_name);
+}
+
 stream_t *(vlc_stream_MemoryNew)(vlc_object_t *p_this, uint8_t *p_buffer,
                                  size_t i_size, bool preserve)
 {
@@ -73,6 +88,35 @@ stream_t *(vlc_stream_MemoryNew)(vlc_object_t *p_this, uint8_t *p_buffer,
     return s;
 }
 
+stream_t *vlc_stream_AttachmentNew(vlc_object_t *p_this,
+                                   input_attachment_t *attachment)
+{
+    struct vlc_stream_attachment_private *p_sys;
+    stream_t *s = vlc_stream_CustomNew(p_this, stream_AttachmentDelete,
+                                       sizeof (*p_sys), "stream");
+    if (unlikely(s == NULL))
+        return NULL;
+
+    s->psz_name = strdup("attachment");
+    if (unlikely(s->psz_name == NULL))
+    {
+        stream_CommonDelete(s);
+        return NULL;
+    }
+
+    p_sys = vlc_stream_Private(s);
+    p_sys->memory.i_pos = 0;
+    p_sys->memory.i_size = attachment->i_data;
+    p_sys->memory.p_buffer = attachment->p_data;
+    p_sys->attachment = attachment;
+
+    s->pf_read    = Read;
+    s->pf_seek    = Seek;
+    s->pf_control = Control;
+
+    return s;
+}
+
 /****************************************************************************
  * AStreamControl:
  ****************************************************************************/



More information about the vlc-commits mailing list