diff src/libaudtag/wma/wma_fmt.h @ 4887:0ddbd0025174 default tip

added libaudtag. (not used yet.)
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Wed, 05 May 2010 18:26:06 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/libaudtag/wma/wma_fmt.h	Wed May 05 18:26:06 2010 +0900
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2009 Paula Stanciu
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, version 3 of the License.
+ *
+ * Audacious 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef _WMA_FMT_H
+#define _WMA_FMT_H
+
+#include "guid.h"
+
+
+#define ASF_HEADER_OBJECT_GUID				"75B22630-668E-11CF-A6D900AA0062CE6C"
+#define ASF_FILE_PROPERTIES_OBJECT_GUID			"8CABDCA1-A947-11CF-8EE400C00C205365"
+#define ASF_STREAM_PROPERTIES_OBJECT_GUID		"B7DC0791-A9B7-11CF-8EE600C00C205365"
+#define ASF_HEADER_EXTENSION_OBJECT_GUID		"5FBF03B5-A92E-11CF-8EE300C00C205365"
+#define ASF_CODEC_LIST_OBJECT_GUID			"86D15240-311D-11D0-A3A400A0C90348F6"
+#define ASF_SCRIPT_COMMAND_OBJECT_GUID			"1EFB1A30-0B62-11D0-A39B00A0C90348F6"
+#define ASF_MARKER_OBJECT_GUID				"F487CD01-A951-11CF-8EE600C00C205365"
+#define ASF_BITRATE_MUTUAL_EXCLUSION_OBJECT_GUID	"D6E229DC-35DA-11D1-903400A0C90349BE"
+#define ASF_ERROR_CORRECTION_OBJECT_GUID		"75B22635-668E-11CF-A6D900AA0062CE6C"
+#define ASF_CONTENT_DESCRIPTION_OBJECT_GUID		"75B22633-668E-11CF-A6D900AA0062CE6C"
+#define ASF_EXTENDED_CONTENT_DESCRIPTION_OBJECT_GUID	"D2D0A440-E307-11D2-97F000A0C95EA850"
+#define ASF_CONTENT_BRANDING_OBJECT_GUID		"2211B3FA-BD23-11D2-B4B700A0C955FC6E"
+#define ASF_STREAM_BITRATE_PROPERTIES_OBJECT_GUID	"7BF875CE-468D-11D1-8D82006097C9A2B2"
+#define ASF_CONTENT_ENCRYPTION_OBJECT_GUID		"2211B3FB-BD23-11D2-B4B700A0C955FC6E"
+#define ASF_EXTENDED_CONTENT_ENCRYPTION_OBJECT_GUID	"298AE614-2622-4C17-B935DAE07EE9289C"
+#define ASF_DIGITAL_SIGNATURE_OBJECT_GUID		"2211B3FC-BD23-11D2-B4B700A0C955FC6E"
+#define ASF_PADDING_OBJECT_GUID				"1806D474-CADF-4509-A4BA9AABCB96AAE8"
+
+typedef enum {
+    ASF_HEADER_OBJECT = 0,
+    ASF_FILE_PROPERTIES_OBJECT, /*              1 */
+    ASF_STREAM_PROPERTIES_OBJECT,
+    ASF_HEADER_EXTENSION_OBJECT,
+    ASF_CODEC_LIST_OBJECT,
+    ASF_SCRIPT_COMMAND_OBJECT, /*               5 */
+    ASF_MARKER_OBJECT,
+    ASF_BITRATE_MUTUAL_EXCLUSION_OBJECT,
+    ASF_ERROR_CORRECTION_OBJECT,
+    ASF_CONTENT_DESCRIPTION_OBJECT,
+    ASF_EXTENDED_CONTENT_DESCRIPTION_OBJECT, /* 10*/
+    ASF_CONTENT_BRANDING_OBJECT,
+    ASF_STREAM_BITRATE_PROPERTIES_OBJECT,
+    ASF_CONTENT_ENCRYPTION_OBJECT,
+    ASF_EXTENDED_CONTENT_ENCRYPTION_OBJECT,
+    ASF_DIGITAL_SIGNATURE_OBJECT, /*            15 */
+    ASF_PADDING_OBJECT,
+    ASF_OBJECT_LAST /*                          dummy */
+} ObjectType;
+
+#define DESC_ALBUM_STR "WM/AlbumTitle"
+#define DESC_YEAR_STR "WM/Year"
+#define DESC_GENRE_STR "WM/Genre"
+#define DESC_TRACK_STR "WM/TrackNumber"
+
+typedef enum {
+    DESC_ALBUM = 0,
+    DESC_YEAR,
+    DESC_GENRE,
+    DESC_TRACK,
+    DESC_LAST
+} DescrIndexes;
+
+/*
+ * this should be fine for all headers whose content is irrelevant,
+ * but the size is needed so that we can skip it
+ */
+typedef struct _generic_header {
+    GUID *guid;
+    guint64 size;
+    gchar *data;
+} GenericHeader;
+
+typedef struct _header_object {
+    GUID *guid;
+    guint64 size;
+    guint32 objectsNr;
+    guint8 res1;
+    guint8 res2;
+} HeaderObj;
+
+/*
+ * this is special, its size does not include the size of the ext_data
+ */
+typedef struct _header_extension_object {
+    GUID *guid;
+    guint64 size;
+    guint32 objects_count;
+    guint8 res1;
+    guint8 res2;
+    guint32 ext_data_size;
+    gchar *ext_data;
+} HeaderExtensionObject;
+
+typedef struct _file_properties_header {
+    GUID *guid;
+    guint64 size;
+    gchar dontcare1[16];
+    guint64 duration; //expressed as the count of 100ns intervals
+    gchar dontcare2[32];
+} FilePropertiesHeader;
+
+typedef struct _content_description_object {
+    GUID *guid;
+    guint64 size;
+    guint16 title_length;
+    guint16 author_length;
+    guint16 copyright_length; /* dontcare*/
+    guint16 desc_length;
+    guint16 rating_length; /* dontcare*/
+    gunichar2 *title;
+    gunichar2 *author;
+    gunichar2 *copyright; /* dontcare*/
+    gunichar2 *description;
+    gunichar2 *rating; /* dontcare*/
+} ContentDescrObj;
+
+/* descr_val_type's meaning
+ * Value  Type           length
+ * 0x0000 Unicode string varies
+ * 0x0001 BYTE array     varies
+ * 0x0002 BOOL           32
+ * 0x0003 DWORD          32
+ * 0x0004 QWORD          64
+ * 0x0005 WORD           16
+ */
+typedef struct _content_descriptor {
+    guint16 name_len;
+    gunichar2 *name;
+    guint16 val_type;
+    guint16 val_len;
+    gchar * val;
+} ContentDescriptor;
+
+typedef struct _extended_content_description_object {
+    GUID *guid;
+    guint64 size;
+    guint16 content_desc_count;
+    ContentDescriptor **descriptors;
+} ExtContentDescrObj;
+
+typedef struct _content_field {
+    guint16 size;
+    gunichar2 *strValue;
+} ContentField;
+
+#endif /* _WMA_FMT_H */