Initialize Tizen 2.3
[framework/multimedia/gst-plugins-ext0.10.git] / wearable / avsystem / src / gstavsysaudiosink.h
1 /*
2  * avsystem
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>
7  *
8  * This library is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU Lesser General Public License as published by the
10  * Free Software Foundation; either version 2.1 of the License, or (at your option)
11  * any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but WITHOUT ANY
14  * WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16  * License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this library; if not, write to the Free Software Foundation, Inc., 51
20  * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  *
22  */
23
24
25 #ifndef __GST_AVSYSAUDIOSINK_H__
26 #define __GST_AVSYSAUDIOSINK_H__
27
28 #include <gst/gst.h>
29 #include <gst/base/gstbasesink.h>
30 #include <gst/audio/gstaudiosink.h>
31 #include <gst/audio/multichannel.h>
32
33 #include <avsys-audio.h>
34
35 G_BEGIN_DECLS
36
37 #define GST_TYPE_AVSYS_AUDIO_SINK             (gst_avsysaudiosink_get_type())
38 #define GST_AVSYS_AUDIO_SINK(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AVSYS_AUDIO_SINK,GstAvsysAudioSink))
39 #define GST_AVSYS_AUDIO_SINK_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AVSYS_AUDIO_SINK,GstAvsysAudioSinkClass))
40 #define GST_IS_AVSYS_AUDIO_SINK(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AVSYS_AUDIO_SINK))
41 #define GST_IS_AVSYS_AUDIO_SINK_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVSYS_AUDIO_SINK))
42 //#define GST_AVSYS_AUDIO_SINK_CAST(obj)        ((GstAvsysAudioSink *) (obj))
43
44 typedef struct _GstAvsysAudioSink      GstAvsysAudioSink;
45 typedef struct _GstAvsysAudioSinkClass GstAvsysAudioSinkClass;
46
47 #define GST_AVSYS_AUDIO_SINK_GET_LOCK(obj) (GST_AVSYS_AUDIO_SINK (obj)->avsys_audio_lock)
48 #define GST_AVSYS_AUDIO_SINK_LOCK(obj)     (g_mutex_lock (GST_AVSYS_AUDIO_SINK_GET_LOCK(obj)))
49 #define GST_AVSYS_AUDIO_SINK_UNLOCK(obj)   (g_mutex_unlock (GST_AVSYS_AUDIO_SINK_GET_LOCK(obj)))
50
51 #define GST_AVSYS_AUDIO_SINK_GET_RESET_LOCK(obj) (GST_AVSYS_AUDIO_SINK (obj)->avsys_audio_reset_lock)
52 #define GST_AVSYS_AUDIO_SINK_RESET_LOCK(obj)     (g_mutex_lock (GST_AVSYS_AUDIO_SINK_GET_RESET_LOCK(obj)))
53 #define GST_AVSYS_AUDIO_SINK_RESET_UNLOCK(obj)   (g_mutex_unlock (GST_AVSYS_AUDIO_SINK_GET_RESET_LOCK(obj)))
54
55 #define GST_AVSYS_AUDIO_SINK_GET_DELAY_LOCK(obj) (GST_AVSYS_AUDIO_SINK (obj)->avsys_audio_delay_lock)
56 #define GST_AVSYS_AUDIO_SINK_DELAY_LOCK(obj)     (g_mutex_lock (GST_AVSYS_AUDIO_SINK_GET_DELAY_LOCK(obj)))
57 #define GST_AVSYS_AUDIO_SINK_DELAY_UNLOCK(obj)   (g_mutex_unlock (GST_AVSYS_AUDIO_SINK_GET_DELAY_LOCK(obj)))
58
59 typedef enum  {
60         AVSYSAUDIOSINK_AUDIO_UNMUTE = 0,
61         AVSYSAUDIOSINK_AUDIO_MUTE,
62         AVSYSAUDIOSINK_AUDIO_MUTE_WITH_FADEDOWN_EFFECT,
63 }GstAvsysAudioSinkAudioMute;
64
65
66 typedef enum  {
67         AVSYSAUDIOSINK_AUDIOROUTE_USE_EXTERNAL_SETTING = -1,
68         AVSYSAUDIOSINK_AUDIOROUTE_PLAYBACK_NORMAL,
69         AVSYSAUDIOSINK_AUDIOROUTE_PLAYBACK_ALERT,
70         AVSYSAUDIOSINK_AUDIOROUTE_PLAYBACK_HEADSET_ONLY
71 }GstAvsysAudioSinkAudioRoutePolicy;
72
73
74 typedef enum  {
75         AVSYSAUDIOSINK_USERROUTE_AUTO = 0,
76         AVSYSAUDIOSINK_USERROUTE_PHONE,
77         AVSYSAUDIOSINK_USERROUTE_ALL
78 }GstAvsysAudioSinkUserRoutePolicy;
79
80 typedef enum {
81         AVSYSAUDIOSINK_LATENCY_LOW = 0,
82         AVSYSAUDIOSINK_LATENCY_MID,
83         AVSYSAUDIOSINK_LATENCY_HIGH,
84 }GstAvsysAudioSinkLatency;
85
86 #define GST_AVSYS_AUDIO_SINK_USER_ROUTE                 (gst_avsysaudiosink_user_route_get_type ())
87 #define GST_AVSYS_AUDIO_SINK_AUDIO_ROUTE        (gst_avsysaudiosink_audio_route_get_type ())
88 #define GST_AVSYS_AUDIO_SINK_MUTE                       (gst_avsysaudiosink_audio_mute_get_type())
89 #define GST_AVSYS_AUDIO_SINK_LATENCY_TYPE       (gst_avsysaudiosink_latency_get_type ())
90
91 //this define if for debugging
92 //#define LPCM_DUMP_SUPPORT
93 #define USE_PA_AUDIO_FILTER
94 #ifdef USE_PA_AUDIO_FILTER
95 #define CUSTOM_EQ_BAND_MAX                              9
96 enum {
97         CUSTOM_EXT_3D_LEVEL,
98         CUSTOM_EXT_BASS_LEVEL,
99         CUSTOM_EXT_CONCERT_HALL_VOLUME,
100         CUSTOM_EXT_CONCERT_HALL_LEVEL,
101         CUSTOM_EXT_CLARITY_LEVEL,
102         CUSTOM_EXT_PARAM_MAX
103 };
104 #endif
105 struct _GstAvsysAudioSink {
106     GstAudioSink                                sink;
107
108         avsys_handle_t                          audio_handle;
109         avsys_audio_param_t             audio_param;
110         gint                            avsys_size;
111         gint                                            mute;
112         gint                                            use_fadeup_volume;
113         gint                                            close_handle_on_prepare;
114         gint                                            audio_route_policy;
115         gint                                            user_route_policy;
116         gint                                            latency;
117
118         GstCaps                                         *cached_caps;
119
120         GMutex                                          *avsys_audio_lock;
121         GMutex                                          *avsys_audio_reset_lock;
122         GMutex                                          *avsys_audio_delay_lock;
123         gint                                            volume_type;
124         gint                                            sound_priority;
125         gint                                            bytes_per_sample;
126
127         gboolean                                        first_write;
128
129         gpointer                         cbHandle;
130         gboolean (*audio_stream_cb) (void *stream, int stream_size, void *user_param);
131
132 #ifdef USE_PA_AUDIO_FILTER
133         guint           filter_action;
134         guint           filter_output_mode;
135         guint           preset_mode;
136         gint            custom_eq[CUSTOM_EQ_BAND_MAX];
137         gint            custom_ext[CUSTOM_EXT_PARAM_MAX];
138         guint           custom_eq_band_num;
139         gint            custom_eq_band_freq[CUSTOM_EQ_BAND_MAX];
140         gint            custom_eq_band_width[CUSTOM_EQ_BAND_MAX];
141         float           playback_rate;
142 #endif
143 };
144
145
146 struct _GstAvsysAudioSinkClass {
147         GstAudioSinkClass    parent_class;
148 };
149
150 GType gst_avsysaudiosink_get_type (void);
151 GType gst_avsysaudiosink_audio_route_get_type (void);
152 GType gst_avsysaudiosink_audio_mute_get_type(void);
153 GType gst_avsysaudiosink_latency_get_type (void);
154
155 G_END_DECLS
156
157 #endif /* __GST_AVSYSAUDIOSINK_H__ */