4f0211ed2d1e8cbc77aae68b8b798242838ebf20
[framework/multimedia/gst-plugins-ext0.10.git] / 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/audio/gstaudiosink.h>
30
31 #include <avsys-audio.h>
32
33 G_BEGIN_DECLS
34
35 #define GST_TYPE_AVSYS_AUDIO_SINK             (gst_avsysaudiosink_get_type())
36 #define GST_AVSYS_AUDIO_SINK(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AVSYS_AUDIO_SINK,GstAvsysAudioSink))
37 #define GST_AVSYS_AUDIO_SINK_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AVSYS_AUDIO_SINK,GstAvsysAudioSinkClass))
38 #define GST_IS_AVSYS_AUDIO_SINK(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AVSYS_AUDIO_SINK))
39 #define GST_IS_AVSYS_AUDIO_SINK_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVSYS_AUDIO_SINK))
40 //#define GST_AVSYS_AUDIO_SINK_CAST(obj)        ((GstAvsysAudioSink *) (obj))
41
42 typedef struct _GstAvsysAudioSink      GstAvsysAudioSink;
43 typedef struct _GstAvsysAudioSinkClass GstAvsysAudioSinkClass;
44
45 #define GST_AVSYS_AUDIO_SINK_GET_LOCK(obj) (GST_AVSYS_AUDIO_SINK (obj)->avsys_audio_lock)
46 #define GST_AVSYS_AUDIO_SINK_LOCK(obj)     (g_mutex_lock (GST_AVSYS_AUDIO_SINK_GET_LOCK(obj)))
47 #define GST_AVSYS_AUDIO_SINK_UNLOCK(obj)   (g_mutex_unlock (GST_AVSYS_AUDIO_SINK_GET_LOCK(obj)))
48
49 #define GST_AVSYS_AUDIO_SINK_GET_RESET_LOCK(obj) (GST_AVSYS_AUDIO_SINK (obj)->avsys_audio_reset_lock)
50 #define GST_AVSYS_AUDIO_SINK_RESET_LOCK(obj)     (g_mutex_lock (GST_AVSYS_AUDIO_SINK_GET_RESET_LOCK(obj)))
51 #define GST_AVSYS_AUDIO_SINK_RESET_UNLOCK(obj)   (g_mutex_unlock (GST_AVSYS_AUDIO_SINK_GET_RESET_LOCK(obj)))
52
53
54 typedef enum  {
55         AVSYSAUDIOSINK_AUDIO_UNMUTE = 0,
56         AVSYSAUDIOSINK_AUDIO_MUTE,
57         AVSYSAUDIOSINK_AUDIO_MUTE_WITH_FADEDOWN_EFFECT,
58 }GstAvsysAudioSinkAudioMute;
59
60
61 typedef enum  {
62         AVSYSAUDIOSINK_AUDIOROUTE_USE_EXTERNAL_SETTING = -1,
63         AVSYSAUDIOSINK_AUDIOROUTE_PLAYBACK_NORMAL,
64         AVSYSAUDIOSINK_AUDIOROUTE_PLAYBACK_ALERT,
65         AVSYSAUDIOSINK_AUDIOROUTE_PLAYBACK_HEADSET_ONLY
66 }GstAvsysAudioSinkAudioRoutePolicy;
67
68
69 typedef enum  {
70         AVSYSAUDIOSINK_USERROUTE_AUTO = 0,
71         AVSYSAUDIOSINK_USERROUTE_PHONE  
72 }GstAvsysAudioSinkUserRoutePolicy;
73
74 typedef enum {
75         AVSYSAUDIOSINK_LATENCY_LOW = 0,
76         AVSYSAUDIOSINK_LATENCY_MID,
77         AVSYSAUDIOSINK_LATENCY_HIGH,
78 }GstAvsysAudioSinkLatency;
79
80 #define GST_AVSYS_AUDIO_SINK_USER_ROUTE                 (gst_avsysaudiosink_user_route_get_type ())
81 #define GST_AVSYS_AUDIO_SINK_AUDIO_ROUTE        (gst_avsysaudiosink_audio_route_get_type ())
82 #define GST_AVSYS_AUDIO_SINK_VOLUME_TABLE       (gst_avsysaudiosink_volume_table_get_type ())
83 #define GST_AVSYS_AUDIO_SINK_VOLUME_TYPE                (gst_avsysaudiosink_volume_table_get_type ())
84 #define GST_AVSYS_AUDIO_SINK_MUTE                       (gst_avsysaudiosink_audio_mute_get_type())
85 #define GST_AVSYS_AUDIO_SINK_LATENCY_TYPE       (gst_avsysaudiosink_latency_get_type ())
86
87 //this define if for debugging
88 //#define LPCM_DUMP_SUPPORT
89 struct _GstAvsysAudioSink {
90     GstAudioSink                                sink;
91
92         avsys_handle_t                          audio_handle;
93         avsys_audio_param_t             audio_param;
94         gint                            avsys_size;
95         gint                                            mute;
96         gint                                            use_fadeup_volume;
97         gint                                            audio_route_policy;
98         gint                                            user_route_policy;
99         gint                                            latency;
100
101         GstCaps                                         *cached_caps;
102
103         GMutex                                          *avsys_audio_lock;
104         GMutex                                          *avsys_audio_reset_lock;
105         gint                                            volume_type;
106         gint                                            sound_priority;
107         gpointer                                        pcm_buffer;
108         gint                                            bytes_per_sample;
109
110         gpointer                         cbHandle;
111         gboolean (*audio_stream_cb) (void *stream, int stream_size, void *user_param);
112 };
113
114
115 struct _GstAvsysAudioSinkClass {
116         GstAudioSinkClass    parent_class;
117 };
118
119 GType gst_avsysaudiosink_get_type (void);
120 GType gst_avsysaudiosink_audio_route_get_type (void);
121 GType gst_avsysaudiosink_volume_table_get_type (void);
122 GType gst_avsysaudiosink_audio_mute_get_type(void);
123 GType gst_avsysaudiosink_latency_get_type (void);
124
125 G_END_DECLS
126
127 #endif /* __GST_AVSYSAUDIOSINK_H__ */