* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wim.taymans@chello.be>
*
- * gstformat.h: Header for GstFormat types of offset
+ * gstformat.h: Header for GstFormat types used in queries and
+ * seeking.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <glib.h>
+#include <gst/gstiterator.h>
+
G_BEGIN_DECLS
+/**
+ * GstFormat:
+ * @GST_FORMAT_UNDEFINED: undefined format
+ * @GST_FORMAT_DEFAULT: the default format of the pad/element. This can be
+ * samples for raw audio, frames/fields for raw video (some, but not all,
+ * elements support this; use @GST_FORMAT_TIME if you don't have a good
+ * reason to query for samples/frames)
+ * @GST_FORMAT_BYTES: bytes
+ * @GST_FORMAT_TIME: time in nanoseconds
+ * @GST_FORMAT_BUFFERS: buffers (few, if any, elements implement this as of
+ * May 2009)
+ * @GST_FORMAT_PERCENT: percentage of stream (few, if any, elements implement
+ * this as of May 2009)
+ *
+ * Standard predefined formats
+ */
+/* NOTE: don't forget to update the table in gstformat.c when changing
+ * this enum */
typedef enum {
- GST_FORMAT_NONE = 0,
- GST_FORMAT_DEFAULT = 1,
- GST_FORMAT_BYTES = 2,
- GST_FORMAT_TIME = 6,
- GST_FORMAT_BUFFERS = 7,
- GST_FORMAT_PERCENT = 8,
-
- /* audio related */
- GST_FORMAT_SAMPLES = 3,
-
- /* video related */
- GST_FORMAT_FRAMES = 4, /* can also be used for compressed audio */
- GST_FORMAT_FIELDS = 5,
+ GST_FORMAT_UNDEFINED = 0, /* must be first in list */
+ GST_FORMAT_DEFAULT = 1,
+ GST_FORMAT_BYTES = 2,
+ GST_FORMAT_TIME = 3,
+ GST_FORMAT_BUFFERS = 4,
+ GST_FORMAT_PERCENT = 5
} GstFormat;
+/* a percentage is always relative to 1000000 */
+/**
+ * GST_FORMAT_PERCENT_MAX:
+ *
+ * The PERCENT format is between 0 and this value
+ */
+#define GST_FORMAT_PERCENT_MAX G_GINT64_CONSTANT (1000000)
+/**
+ * GST_FORMAT_PERCENT_SCALE:
+ *
+ * The value used to scale down the reported PERCENT format value to
+ * its real value.
+ */
+#define GST_FORMAT_PERCENT_SCALE G_GINT64_CONSTANT (10000)
+
+typedef struct _GstFormatDefinition GstFormatDefinition;
+
+/**
+ * GstFormatDefinition:
+ * @value: The unique id of this format
+ * @nick: A short nick of the format
+ * @description: A longer description of the format
+ * @quark: A quark for the nick
+ *
+ * A format definition
+ */
+struct _GstFormatDefinition
+{
+ GstFormat value;
+ const gchar *nick;
+ const gchar *description;
+ GQuark quark;
+};
+
+const gchar* gst_format_get_name (GstFormat format);
+GQuark gst_format_to_quark (GstFormat format);
+
+/* register a new format */
+GstFormat gst_format_register (const gchar *nick,
+ const gchar *description);
+GstFormat gst_format_get_by_nick (const gchar *nick);
+
+/* check if a format is in an array of formats */
+gboolean gst_formats_contains (const GstFormat *formats, GstFormat format);
+
+/* query for format details */
+const GstFormatDefinition*
+ gst_format_get_details (GstFormat format);
+GstIterator* gst_format_iterate_definitions (void);
+
G_END_DECLS
#endif /* __GST_FORMAT_H__ */