3ce84a2cc6a037a0231c32e12287bd95e9b2cbdd
[platform/upstream/gst-plugins-good.git] / sys / oss / gstosselement.h
1 /* GStreamer
2  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
3  *                    2000 Wim Taymans <wim.taymans@chello.be>
4  *
5  * gstosselement.h: 
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 #ifndef __GST_OSS_ELEMENT_H__
24 #define __GST_OSS_ELEMENT_H__
25
26 #include <gst/gst.h>
27
28 /* debugging category */
29 GST_DEBUG_CATEGORY_EXTERN (oss_debug);
30 #define GST_CAT_DEFAULT oss_debug
31
32 G_BEGIN_DECLS
33
34 #define GST_TYPE_OSSELEMENT \
35   (gst_osselement_get_type())
36 #define GST_OSSELEMENT(obj) \
37   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OSSELEMENT,GstOssElement))
38 #define GST_OSSELEMENT_CLASS(klass) \
39   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OSSELEMENT,GstOssElementClass))
40 #define GST_IS_OSSELEMENT(obj) \
41   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OSSELEMENT))
42 #define GST_IS_OSSELEMENT_CLASS(obj) \
43   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OSSELEMENT))
44 #define GST_OSSELEMENT_GET_CLASS(obj) \
45   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_OSSELEMENT, GstOssElementClass))
46
47 typedef struct _GstOssElement GstOssElement;
48 typedef struct _GstOssElementClass GstOssElementClass;
49
50 typedef enum {
51   GST_OSSELEMENT_READ,
52   GST_OSSELEMENT_WRITE,
53 } GstOssOpenMode;
54
55 typedef struct _GstOssDeviceCombination {
56   gchar *dsp, *mixer;
57   dev_t dev;
58 } GstOssDeviceCombination;
59
60 struct _GstOssElement
61 {
62   /* yes, we're a gstelement too */
63   GstElement     parent;
64
65   gchar         *device,
66                 *mixer_dev;
67
68   /* device state */
69   int            fd;
70   int            caps; /* the capabilities */
71   gint           format;
72   gint           fragment;
73   guint64        fragment_time;
74   gint           fragment_size;
75   GstOssOpenMode mode;
76
77   /* stats bytes per *second* */
78   guint          bps;
79
80   /* parameters */
81   gint           law;
82   gint           endianness;
83   gboolean       sign;
84   gint           width;
85   gint           depth;
86   gint           channels;
87   gint           rate;
88
89   /* mixer stuff */
90   GList         *tracklist;
91   guint32        stereomask,
92                  recdevs,
93                  recmask,
94                  mixcaps;
95   gint           mixer_fd;
96   gchar         *device_name;
97 };
98
99 struct _GstOssElementClass {
100   GstElementClass klass;
101
102   GList         *device_combinations;
103 };
104
105 GType           gst_osselement_get_type         (void);
106
107 /* some useful functions */
108 gboolean        gst_osselement_parse_caps       (GstOssElement *oss,
109                                                  const GstCaps      *caps);
110 gboolean        gst_osselement_merge_fixed_caps (GstOssElement *oss,
111                                                  GstCaps      *caps);
112         
113 gboolean        gst_osselement_sync_parms       (GstOssElement *oss);
114 void            gst_osselement_reset            (GstOssElement *oss);
115
116 gboolean        gst_osselement_convert          (GstOssElement *oss, 
117                                                  GstFormat      src_format,
118                                                  gint64         src_value,
119                                                  GstFormat     *dest_format,
120                                                  gint64        *dest_value);
121
122 G_END_DECLS
123
124 #endif /* __GST_OSS_ELEMENT_H__ */