source: trunk/third/gstreamer/gst/gstformat.c @ 21005

Revision 21005, 4.5 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r21004, which included commits to RCS files with non-trunk default branches.
Line 
1/* GStreamer
2 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
3 *                    2000 Wim Taymans <wim.taymans@chello.be>
4 *
5 * gstformat.c: GstFormat registration
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
21 */
22
23#include <string.h>
24
25#include "gst_private.h"
26#include "gstformat.h"
27
28static GList *_gst_formats = NULL;
29static GHashTable *_nick_to_format = NULL;
30static GHashTable *_format_to_nick = NULL;
31static gint _n_values = 1;      /* we start from 1 because 0 reserved for UNDEFINED */
32
33static GstFormatDefinition standard_definitions[] = {
34  {GST_FORMAT_DEFAULT, "default", "Default format for the media type"},
35  {GST_FORMAT_BYTES, "bytes", "Bytes"},
36  {GST_FORMAT_TIME, "time", "Time"},
37  {GST_FORMAT_BUFFERS, "buffers", "Buffers"},
38  {GST_FORMAT_PERCENT, "percent", "Percent"},
39  {0, NULL, NULL}
40};
41
42void
43_gst_format_initialize (void)
44{
45  GstFormatDefinition *standards = standard_definitions;
46
47  if (_nick_to_format == NULL) {
48    _nick_to_format = g_hash_table_new (g_str_hash, g_str_equal);
49    _format_to_nick = g_hash_table_new (NULL, NULL);
50  }
51
52  while (standards->nick) {
53    g_hash_table_insert (_nick_to_format, standards->nick, standards);
54    g_hash_table_insert (_format_to_nick, GINT_TO_POINTER (standards->value),
55        standards);
56
57    _gst_formats = g_list_append (_gst_formats, standards);
58    standards++;
59    _n_values++;
60  }
61}
62
63/**
64 * gst_format_register:
65 * @nick: The nick of the new format
66 * @description: The description of the new format
67 *
68 * Create a new GstFormat based on the nick or return an
69 * allrady registered format with that nick
70 *
71 * Returns: A new GstFormat or an already registered format
72 * with the same nick.
73 */
74GstFormat
75gst_format_register (const gchar * nick, const gchar * description)
76{
77  GstFormatDefinition *format;
78  GstFormat query;
79
80  g_return_val_if_fail (nick != NULL, 0);
81  g_return_val_if_fail (description != NULL, 0);
82
83  query = gst_format_get_by_nick (nick);
84  if (query != GST_FORMAT_UNDEFINED)
85    return query;
86
87  format = g_new0 (GstFormatDefinition, 1);
88  format->value = _n_values;
89  format->nick = g_strdup (nick);
90  format->description = g_strdup (description);
91
92  g_hash_table_insert (_nick_to_format, format->nick, format);
93  g_hash_table_insert (_format_to_nick, GINT_TO_POINTER (format->value),
94      format);
95  _gst_formats = g_list_append (_gst_formats, format);
96  _n_values++;
97
98  return format->value;
99}
100
101/**
102 * gst_format_get_by_nick:
103 * @nick: The nick of the format
104 *
105 * Return the format registered with the given nick.
106 *
107 * Returns: The format with @nick or GST_FORMAT_UNDEFINED
108 * if the format was not registered.
109 */
110GstFormat
111gst_format_get_by_nick (const gchar * nick)
112{
113  GstFormatDefinition *format;
114
115  g_return_val_if_fail (nick != NULL, 0);
116
117  format = g_hash_table_lookup (_nick_to_format, nick);
118
119  if (format != NULL)
120    return format->value;
121  else
122    return GST_FORMAT_UNDEFINED;
123}
124
125/**
126 * gst_formats_contains:
127 * @formats: The format array to search
128 * @format: the format to find
129 *
130 * See if the given format is inside the format array.
131 *
132 * Returns: TRUE if the format is found inside the array
133 */
134gboolean
135gst_formats_contains (const GstFormat * formats, GstFormat format)
136{
137  if (!formats)
138    return FALSE;
139
140  while (*formats) {
141    if (*formats == format)
142      return TRUE;
143
144    formats++;
145  }
146  return FALSE;
147}
148
149
150/**
151 * gst_format_get_details:
152 * @format: The format to get details of
153 *
154 * Get details about the given format.
155 *
156 * Returns: The #GstFormatDefinition for @format or NULL on failure.
157 */
158const GstFormatDefinition *
159gst_format_get_details (GstFormat format)
160{
161  return g_hash_table_lookup (_format_to_nick, GINT_TO_POINTER (format));
162}
163
164/**
165 * gst_format_get_definitions:
166 *
167 * Get a list of all the registered formats.
168 *
169 * Returns: A GList of #GstFormatDefinition.
170 */
171const GList *
172gst_format_get_definitions (void)
173{
174  return _gst_formats;
175}
Note: See TracBrowser for help on using the repository browser.