#include <glib.h>
#include <gst/gst.h>
+#include <gst/base/gstbytewriter.h>
G_BEGIN_DECLS
(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_EBML_WRITE, GstEbmlWriteClass))
#define GST_IS_EBML_WRITE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_EBML_WRITE))
-#define GST_IS_EBML_WRITE_CLASS(obj) \
+#define GST_IS_EBML_WRITE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_EBML_WRITE))
#define GST_EBML_WRITE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_EBML_WRITE, GstEbmlWriteClass))
guint64 pos;
GstClockTime timestamp;
- GstBuffer *cache;
- guint cache_size;
- guint handled;
+ GstByteWriter *cache;
+ guint64 cache_pos;
GstFlowReturn last_write_result;
- /*< private >*/
- gpointer _gst_reserved[GST_PADDING];
+ gboolean need_newsegment;
+
+ gboolean writing_streamheader;
+ GstByteWriter *streamheader;
+ guint64 streamheader_pos;
} GstEbmlWrite;
typedef struct _GstEbmlWriteClass {
GstObjectClass parent;
-
- /*< private >*/
- gpointer _gst_reserved[GST_PADDING];
} GstEbmlWriteClass;
GType gst_ebml_write_get_type (void);
GstFlowReturn gst_ebml_last_write_result (GstEbmlWrite *ebml);
+/* Used to create streamheaders */
+void gst_ebml_start_streamheader (GstEbmlWrite *ebml);
+GstBuffer* gst_ebml_stop_streamheader (GstEbmlWrite *ebml);
+
/*
* Caching means that we do not push one buffer for
* each element, but fill this one until a flush.
*/
void gst_ebml_write_set_cache (GstEbmlWrite *ebml,
- guint size);
+ guint size);
void gst_ebml_write_flush_cache (GstEbmlWrite *ebml);
/*
* Seeking.
*/
void gst_ebml_write_seek (GstEbmlWrite *ebml,
- guint64 pos);
+ guint64 pos);
/*
* Data writing.
*/
void gst_ebml_write_uint (GstEbmlWrite *ebml,
- guint32 id,
- guint64 num);
+ guint32 id,
+ guint64 num);
void gst_ebml_write_sint (GstEbmlWrite *ebml,
- guint32 id,
- gint64 num);
+ guint32 id,
+ gint64 num);
void gst_ebml_write_float (GstEbmlWrite *ebml,
- guint32 id,
- gdouble num);
+ guint32 id,
+ gdouble num);
void gst_ebml_write_ascii (GstEbmlWrite *ebml,
- guint32 id,
- const gchar *str);
+ guint32 id,
+ const gchar *str);
void gst_ebml_write_utf8 (GstEbmlWrite *ebml,
- guint32 id,
- const gchar *str);
+ guint32 id,
+ const gchar *str);
void gst_ebml_write_date (GstEbmlWrite *ebml,
- guint32 id,
- gint64 date);
+ guint32 id,
+ gint64 date);
guint64 gst_ebml_write_master_start (GstEbmlWrite *ebml,
- guint32 id);
+ guint32 id);
void gst_ebml_write_master_finish (GstEbmlWrite *ebml,
- guint64 startpos);
+ guint64 startpos);
+void gst_ebml_write_master_finish_full (GstEbmlWrite * ebml,
+ guint64 startpos,
+ guint64 extra_size);
void gst_ebml_write_binary (GstEbmlWrite *ebml,
- guint32 id,
- guchar *binary,
- guint64 length);
+ guint32 id,
+ guchar *binary,
+ guint64 length);
void gst_ebml_write_header (GstEbmlWrite *ebml,
- gchar *doctype,
- guint version);
+ const gchar *doctype,
+ guint version);
/*
* Note: this is supposed to be used only for media data.
*/
void gst_ebml_write_buffer_header (GstEbmlWrite *ebml,
- guint32 id,
- guint64 length);
+ guint32 id,
+ guint64 length);
void gst_ebml_write_buffer (GstEbmlWrite *ebml,
- GstBuffer *data);
+ GstBuffer *data);
/*
* A hack, basically... See matroska-mux.c. I should actually
* works for now.
*/
void gst_ebml_replace_uint (GstEbmlWrite *ebml,
- guint64 pos,
- guint64 num);
+ guint64 pos,
+ guint64 num);
G_END_DECLS