flvmux: add some comments and defines to clarify code.
authorJan Schmidt <thaytan@noraisin.net>
Wed, 26 Oct 2011 13:37:03 +0000 (00:37 +1100)
committerJan Schmidt <thaytan@noraisin.net>
Wed, 26 Oct 2011 13:41:29 +0000 (00:41 +1100)
gst/flv/amfdefs.h [new file with mode: 0644]
gst/flv/gstflvmux.c

diff --git a/gst/flv/amfdefs.h b/gst/flv/amfdefs.h
new file mode 100644 (file)
index 0000000..6c14f3f
--- /dev/null
@@ -0,0 +1,44 @@
+/* GStreamer
+ *
+ * Copyright (c) 2011 Jan Schmidt <thaytan@noraisin.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __AMFDEFS_H__
+#define __AMFDEFS_H__
+
+#include <glib.h>
+
+#define AMF0_NUMBER_MARKER 0x0
+#define AMF0_BOOLEAN_MARKER 0x1
+#define AMF0_STRING_MARKER 0x2
+#define AMF0_OBJECT_MARKER 0x3
+#define AMF0_MOVIECLIP_MARKER 0x4 // Reserved, not supported
+#define AMF0_NULL_MARKER 0x5
+#define AMF0_UNDEFINED_MARKER 0x6
+#define AMF0_REFERENCE_MARKER 0x7
+#define AMF0_ECMA_ARRAY_MARKER 0x8
+#define AMF0_OBJECT_END_MARKER 0x9
+#define AMF0_STRICT_ARRAY_MARKER 0xA
+#define AMF0_DATE_MARKER 0xB
+#define AMF0_LONG_STRING_MARKER 0xC
+#define AMF0_UNSUPPORTED_MARKER 0xD
+#define AMF0_RECORDSET_MARKER 0xE // Reserved, not supported
+#define AMF0_XML_DOCUMENT_MARKER 0xF
+#define AMF0_TYPED_OBJECT_MARKER 0x10
+
+#endif
index 4b0e56b58e109868314dcadeacf8ca433bd417f6..47d5ba956976d1316845f08ae45e0caa433d7373 100644 (file)
@@ -39,6 +39,7 @@
 #include <string.h>
 
 #include "gstflvmux.h"
+#include "amfdefs.h"
 
 GST_DEBUG_CATEGORY_STATIC (flvmux_debug);
 #define GST_CAT_DEFAULT flvmux_debug
@@ -624,7 +625,7 @@ gst_flv_mux_preallocate_index (GstFlvMux * mux)
   /* prefill the space with a gstfiller: <spaces> script tag variable */
   GST_WRITE_UINT16_BE (data, 9);        /* 9 characters */
   memcpy (data + 2, "gstfiller", 9);
-  GST_WRITE_UINT8 (data + 11, 2);       /* a string value */
+  GST_WRITE_UINT8 (data + 11, AMF0_STRING_MARKER);      /* a string value */
   GST_WRITE_UINT16_BE (data + 12, preallocate_size - 14);
   memset (data + 14, ' ', preallocate_size - 14);       /* the rest is spaces */
   return tmp;
@@ -635,11 +636,14 @@ gst_flv_mux_create_number_script_value (const gchar * name, gdouble value)
 {
   GstBuffer *tmp = gst_buffer_new_and_alloc (2 + strlen (name) + 1 + 8);
   guint8 *data = GST_BUFFER_DATA (tmp);
+  gsize len = strlen (name);
 
-  GST_WRITE_UINT16_BE (data, strlen (name));    /* name length */
-  memcpy (&data[2], name, strlen (name));
-  data[2 + strlen (name)] = 0;  /* double */
-  GST_WRITE_DOUBLE_BE (data + 2 + strlen (name) + 1, value);
+  GST_WRITE_UINT16_BE (data, len);
+  data += 2;                    /* name length */
+  memcpy (data, name, len);
+  data += len;
+  *data++ = AMF0_NUMBER_MARKER; /* double type */
+  GST_WRITE_DOUBLE_BE (data, value);
 
   return tmp;
 }
@@ -674,7 +678,7 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
 
   tmp = gst_buffer_new_and_alloc (13);
   data = GST_BUFFER_DATA (tmp);
-  data[0] = 2;                  /* string */
+  data[0] = AMF0_STRING_MARKER; /* string */
   data[1] = 0;
   data[2] = 10;                 /* length 10 */
   memcpy (&data[3], "onMetaData", 10);
@@ -694,17 +698,14 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
     tmp = gst_flv_mux_create_number_script_value ("duration", 86400);
     script_tag = gst_buffer_join (script_tag, tmp);
     tags_written++;
-  }
 
-  /* Sometimes the information about the total file size is useful for the
-     player. It will be filled later, after getting EOS */
-  if (!mux->streamable) {
+    /* Sometimes the information about the total file size is useful for the
+       player. It will be filled later, after getting EOS */
     tmp = gst_flv_mux_create_number_script_value ("filesize", 0);
     script_tag = gst_buffer_join (script_tag, tmp);
     tags_written++;
-  }
 
-  if (!mux->streamable) {
+    /* Preallocate space for the index to be written at EOS */
     tmp = gst_flv_mux_preallocate_index (mux);
     script_tag = gst_buffer_join (script_tag, tmp);
   } else {