summaryrefslogtreecommitdiffstats
path: root/gst/asfmux/gstasfobjects.h
diff options
context:
space:
mode:
Diffstat (limited to 'gst/asfmux/gstasfobjects.h')
-rw-r--r--gst/asfmux/gstasfobjects.h190
1 files changed, 190 insertions, 0 deletions
diff --git a/gst/asfmux/gstasfobjects.h b/gst/asfmux/gstasfobjects.h
new file mode 100644
index 00000000..f91e1e11
--- /dev/null
+++ b/gst/asfmux/gstasfobjects.h
@@ -0,0 +1,190 @@
+/* ASF muxer plugin for GStreamer
+ * Copyright (C) 2009 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+ *
+ * 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 __GST_ASF_OBJECTS_H__
+#define __GST_ASF_OBJECTS_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+#include <gst/base/gstbytereader.h>
+#include <gst/base/gstcollectpads.h>
+
+#define ASF_PAYLOAD_IS_KEYFRAME(pay) ((pay->stream_number & 0x80) != 0)
+#define ASF_MILI_TO_100NANO(v) (v * 10000)
+#define ASF_GUID_SIZE 16
+#define ASF_GUID_OBJSIZE_SIZE 24
+
+typedef struct _Guid
+{
+ guint32 v1;
+ guint16 v2;
+ guint16 v3;
+ guint64 v4;
+} Guid;
+
+typedef struct _GstAsfFileInfo
+{
+ guint64 packets_count;
+ guint32 packet_size;
+ gboolean broadcast;
+} GstAsfFileInfo;
+
+typedef struct _GstAsfPacketInfo
+{
+ guint32 packet_size;
+ guint32 padding;
+ guint32 send_time;
+ guint16 duration;
+ gboolean has_keyframe;
+} GstAsfPacketInfo;
+
+typedef struct _SimpleIndexEntry
+{
+ guint32 packet_number;
+ guint16 packet_count;
+} SimpleIndexEntry;
+
+typedef struct _AsfPayload
+{
+ guint8 stream_number;
+ guint8 media_obj_num;
+ guint32 offset_in_media_obj;
+ guint8 replicated_data_length;
+ guint32 media_object_size;
+ guint32 presentation_time;
+ GstBuffer *data;
+
+ GstCollectData *pad;
+
+ /* simple index info */
+ gboolean has_packet_info;
+ guint32 packet_number;
+ guint16 packet_count;
+} AsfPayload;
+
+Guid gst_asf_generate_file_id ();
+
+gboolean gst_byte_reader_get_asf_var_size_field (GstByteReader * reader,
+ guint8 field_type, guint32 * var);
+guint32 gst_asf_read_var_size_field (guint8 * data, guint8 field_type);
+guint gst_asf_get_var_size_field_len (guint8 field_type);
+
+GstAsfFileInfo *gst_asf_file_info_new ();
+void gst_asf_file_info_reset (GstAsfFileInfo * info);
+void gst_asf_file_info_free (GstAsfFileInfo * info);
+
+guint32 gst_asf_payload_get_size (AsfPayload * payload);
+void gst_asf_payload_free (AsfPayload * payload);
+
+guint64 gst_asf_get_current_time ();
+
+gboolean gst_asf_match_guid (const guint8 * data, const Guid * g);
+
+void gst_asf_put_i32 (guint8 * buf, gint32 data);
+void gst_asf_put_time (guint8 * buf, guint64 time);
+void gst_asf_put_guid (guint8 * buf, Guid guid);
+void gst_asf_put_payload (guint8 * buf, AsfPayload * payload);
+guint16 gst_asf_put_subpayload (guint8 * buf, AsfPayload * payload,
+ guint16 size);
+
+gboolean gst_asf_parse_packet (GstBuffer * buffer, GstAsfPacketInfo * packet,
+ gboolean trust_delta_flag);
+guint64 gst_asf_match_and_peek_obj_size (const guint8 * data,
+ const Guid * guid);
+gboolean gst_asf_parse_headers (GstBuffer * buffer, GstAsfFileInfo * file_info);
+
+/* ASF tags
+ * found at http://msdn.microsoft.com/en-us/library/dd562330(VS.85).aspx
+ */
+
+#define ASF_TAG_TITLE "Title\0"
+#define ASF_TAG_TITLE_SORTNAME "TitleSortOrder\0"
+
+/* FIXME asf has no artist tag other than AlbumArtist, but it has Author
+ * What to use here? */
+#define ASF_TAG_ARTIST "WM/AlbumArtist\0"
+#define ASF_TAG_ARTIST_SORTNAME "AlbumArtistSortOrder\0"
+
+#define ASF_TAG_ALBUM_TITLE "WM/AlbumTitle\0"
+#define ASF_TAG_ALBUM_TITLE_SORTNAME "AlbumTitleSortOrder\0"
+
+#define ASF_TAG_GENRE "WM/Genre\0"
+#define ASF_TAG_COMMENT "Comment\0"
+#define ASF_TAG_TRACK_NUMBER "WM/TrackNumber\0"
+#define ASF_TAG_COPYRIGHT "Copyright\0"
+#define ASF_TAG_COMPOSER "WM/Composer\0"
+
+const gchar *gst_asf_get_asf_tag (const gchar * gsttag);
+guint gst_asf_get_tag_field_type (GValue * value);
+gboolean gst_asf_tag_present_in_content_description (const gchar * tag);
+
+/* ASF Objects Sizes */
+#define ASF_HEADER_OBJECT_SIZE 30
+#define ASF_FILE_PROPERTIES_OBJECT_SIZE 104
+#define ASF_STREAM_PROPERTIES_OBJECT_SIZE 78
+#define ASF_HEADER_EXTENSION_OBJECT_SIZE 46
+#define ASF_AUDIO_SPECIFIC_DATA_SIZE 18
+#define ASF_VIDEO_SPECIFIC_DATA_SIZE 51
+#define ASF_DATA_OBJECT_SIZE 50
+#define ASF_PAYLOAD_PARSING_INFO_SIZE 16
+#define ASF_SINGLE_PAYLOAD_HEADER_SIZE 15
+#define ASF_MULTIPLE_PAYLOAD_HEADER_SIZE 17
+#define ASF_EXTENDED_STREAM_PROPERTIES_OBJECT_SIZE 88
+#define ASF_CONTENT_DESCRIPTION_OBJECT_SIZE 34
+#define ASF_EXT_CONTENT_DESCRIPTION_OBJECT_SIZE 26
+#define ASF_SIMPLE_INDEX_OBJECT_SIZE 56
+#define ASF_SIMPLE_INDEX_ENTRY_SIZE 6
+#define ASF_METADATA_OBJECT_SIZE 26
+#define ASF_PADDING_OBJECT_SIZE 24
+
+/* Field types for data object payload description */
+#define ASF_FIELD_TYPE_NONE 0
+#define ASF_FIELD_TYPE_BYTE 1
+#define ASF_FIELD_TYPE_WORD 2
+#define ASF_FIELD_TYPE_DWORD 3
+
+/* tag types */
+#define ASF_TAG_TYPE_UNICODE_STR 0
+#define ASF_TAG_TYPE_BYTES 1
+#define ASF_TAG_TYPE_BOOL 2
+#define ASF_TAG_TYPE_DWORD 3
+#define ASF_TAG_TYPE_QWORD 4
+#define ASF_TAG_TYPE_WORD 5
+
+/* GUID objects */
+
+#define ASF_HEADER_OBJECT_INDEX 0
+#define ASF_FILE_PROPERTIES_OBJECT_INDEX 1
+#define ASF_STREAM_PROPERTIES_OBJECT_INDEX 2
+#define ASF_AUDIO_MEDIA_INDEX 3
+#define ASF_NO_ERROR_CORRECTION_INDEX 4
+#define ASF_AUDIO_SPREAD_INDEX 5
+#define ASF_HEADER_EXTENSION_OBJECT_INDEX 6
+#define ASF_RESERVED_1_INDEX 7
+#define ASF_DATA_OBJECT_INDEX 8
+#define ASF_EXTENDED_STREAM_PROPERTIES_OBJECT_INDEX 9
+#define ASF_VIDEO_MEDIA_INDEX 10
+#define ASF_SIMPLE_INDEX_OBJECT_INDEX 11
+#define ASF_CONTENT_DESCRIPTION_INDEX 12
+#define ASF_EXT_CONTENT_DESCRIPTION_INDEX 13
+#define ASF_METADATA_OBJECT_INDEX 14
+#define ASF_PADDING_OBJECT_INDEX 15
+
+extern const Guid guids[];
+
+#endif