4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>
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)
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.
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
25 #ifndef __GST_AVSYSAUDIOSINK_H__
26 #define __GST_AVSYSAUDIOSINK_H__
29 #include <gst/base/gstbasesink.h>
30 #include <gst/audio/gstaudiosink.h>
31 #include <gst/audio/multichannel.h>
33 #include <avsys-audio.h>
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))
44 typedef struct _GstAvsysAudioSink GstAvsysAudioSink;
45 typedef struct _GstAvsysAudioSinkClass GstAvsysAudioSinkClass;
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)))
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)))
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)))
60 AVSYSAUDIOSINK_AUDIO_UNMUTE = 0,
61 AVSYSAUDIOSINK_AUDIO_MUTE,
62 AVSYSAUDIOSINK_AUDIO_MUTE_WITH_FADEDOWN_EFFECT,
63 }GstAvsysAudioSinkAudioMute;
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;
75 AVSYSAUDIOSINK_USERROUTE_AUTO = 0,
76 AVSYSAUDIOSINK_USERROUTE_PHONE,
77 AVSYSAUDIOSINK_USERROUTE_ALL
78 }GstAvsysAudioSinkUserRoutePolicy;
81 AVSYSAUDIOSINK_LATENCY_LOW = 0,
82 AVSYSAUDIOSINK_LATENCY_MID,
83 AVSYSAUDIOSINK_LATENCY_HIGH,
84 }GstAvsysAudioSinkLatency;
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 ())
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
98 CUSTOM_EXT_BASS_LEVEL,
99 CUSTOM_EXT_CONCERT_HALL_VOLUME,
100 CUSTOM_EXT_CONCERT_HALL_LEVEL,
101 CUSTOM_EXT_CLARITY_LEVEL,
105 struct _GstAvsysAudioSink {
108 avsys_handle_t audio_handle;
109 avsys_audio_param_t audio_param;
112 gint use_fadeup_volume;
113 gint close_handle_on_prepare;
114 gint audio_route_policy;
115 gint user_route_policy;
118 GstCaps *cached_caps;
120 GMutex *avsys_audio_lock;
121 GMutex *avsys_audio_reset_lock;
122 GMutex *avsys_audio_delay_lock;
125 gint bytes_per_sample;
127 gboolean first_write;
130 gboolean (*audio_stream_cb) (void *stream, int stream_size, void *user_param);
132 #ifdef USE_PA_AUDIO_FILTER
134 guint filter_output_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];
146 struct _GstAvsysAudioSinkClass {
147 GstAudioSinkClass parent_class;
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);
157 #endif /* __GST_AVSYSAUDIOSINK_H__ */