source: roaraudio/include/libroar/vs.h @ 4204:79a5aeb80b85

Last change on this file since 4204:79a5aeb80b85 was 4204:79a5aeb80b85, checked in by phi, 14 years ago

write comments about the functions

File size: 8.0 KB
Line 
1//vs.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2010
5 *
6 *  This file is part of libroar a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  libroar is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
23 *
24 *  NOTE for everyone want's to change something and send patches:
25 *  read README and HACKING! There a addition information on
26 *  the license of this document you need to read before you send
27 *  any patches.
28 *
29 *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
30 *  or libpulse*:
31 *  The libs libroaresd, libroararts and libroarpulse link this lib
32 *  and are therefore GPL. Because of this it may be illigal to use
33 *  them with any software that uses libesd, libartsc or libpulse*.
34 */
35
36#ifndef _LIBROARVS_H_
37#define _LIBROARVS_H_
38
39#include "libroar.h"
40
41struct roar_vs;
42
43typedef struct roar_vs roar_vs_t;
44
45/* return readable string descriping the problem */
46const char * roar_vs_strerr(int error);
47
48/* create a new VS object from normal RoarAudio connection object
49 * The connection must not be closed caller before roar_vs_close() is called.
50 * The connection is not closed by roar_vs_close().
51 */
52roar_vs_t * roar_vs_new_from_con(struct roar_connection * con, int * error);
53
54/* create a new VS object with a new connection */
55roar_vs_t * roar_vs_new(const char * server, const char * name, int * error);
56
57/* start a the stream in the VS object */
58int roar_vs_stream(roar_vs_t * vss, const struct roar_audio_info * info, int dir, int * error);
59
60/* connect to server and start stream in once
61 * this is basicly roar_vs_new() and roar_vs_stream() in one function.
62 */
63roar_vs_t * roar_vs_new_simple(const char * server, const char * name, int rate, int channels, int codec, int bits, int dir, int * error);
64
65/* create a VS object for playback.
66 * This is roar_vs_new_simple() with direction set to 'playback' (wave form data)
67 */
68#define roar_vs_new_playback(s,n,r,c,e,b,error) roar_vs_new_simple((s), (n), (r), (c), (e), (b), ROAR_DIR_PLAY, (error))
69
70/* Boolean TRUE for VS functions */
71#define ROAR_VS_TRUE     1
72/* Boolean FALSE for VS functions */
73#define ROAR_VS_FALSE    0
74/* Boolean TOGGLE for VS functions */
75#define ROAR_VS_TOGGLE  -1
76/* Boolean value used to ask for a value, do not change the value only ask for current value */
77#define ROAR_VS_ASK     -2
78
79/* close and free the VS object
80 * This does all needed cleanup.
81 * If server connection was made by VS it is closed, too.
82 * If server connectionw as provided by caller it is untouched.
83 */
84int roar_vs_close(roar_vs_t * vss, int killit, int * error);
85
86/* write data to a stream
87 * This function writes some data to the stream.
88 * return is number of bytes written or -1 on error.
89 * return value can be zero to intercate no data can be written but no error.
90 * this may be the case with non-blocking streams.
91 * retruned value can be less then requested value. indecates a short write.
92 * you should wait some (short!) time (for example one main loop interation) and try again.
93 */
94ssize_t roar_vs_write(roar_vs_t * vss, const void * buf, size_t len, int * error);
95
96/* read data from a stream
97 * This function reads some data from the stream.
98 * return is number of bytes read or -1 on error.
99 * return value can be zero to intercate no data can be read but no error.
100 * this may be the case with non-blocking streams.
101 * retruned value can be less then requested value. indecates a short read.
102 * you should wait some (short!) time (for example one main loop interation) and try again.
103 */
104ssize_t roar_vs_read (roar_vs_t * vss,       void * buf, size_t len, int * error);
105
106/* wait value for waiting */
107#define ROAR_VS_WAIT   1
108/* wait value for no waiting */
109#define ROAR_VS_NOWAIT 0
110
111/* sync a stream with the server (flush buffers)
112 * Returns 0 on no error and -1 on error.
113 */
114int     roar_vs_sync (roar_vs_t * vss, int wait, int * error);
115
116/* set blocking mode of stream
117 * returns old blocking state
118 */
119int     roar_vs_blocking (roar_vs_t * vss, int val, int * error);
120
121/* TODO: document this */
122#define ROAR_VS_BACKEND_DEFAULT ROAR_VS_BACKEND_FIRST
123#define ROAR_VS_BACKEND_NONE    -1
124#define ROAR_VS_BACKEND_FIRST   -2
125#define ROAR_VS_BACKEND_MEAN    -3
126
127ssize_t roar_vs_latency(roar_vs_t * vss, int backend, int * error);
128
129/* set pause flag
130 * The pause flag should be set whenever the user presses the pause button or simular.
131 * The stream may be come blocking after the pause flag has been set.
132 * returns old pause setting (usefull with ROAR_VS_TOGGLE)
133 */
134int     roar_vs_pause(roar_vs_t * vss, int val, int * error);
135
136/* set the mute flag of the stream
137 * Thie pause flag should be set wehnever the user mutes the stream in some way.
138 * This flag is used so the volume is not changed and can be restored by the server
139 * while unmuting.
140 * It is very recommended to use this flag and not just set the volume to zero
141 * returns old mute setting (usefull with ROAR_VS_TOGGLE)
142 */
143int     roar_vs_mute (roar_vs_t * vss, int val, int * error);
144
145/* set volume of stream (all channels to the same value)
146 * volume c is float from 0 ('muted', see above) to 1 (full volume).
147 * Returns 0 on no error and -1 on error.
148 */
149int     roar_vs_volume_mono   (roar_vs_t * vss, float c, int * error);
150/* set volume of stream (like volume + ballance, stereo mode)
151 * volume l and r are floats from 0 ('muted', see above) to 1 (full volume).
152 * Returns 0 on no error and -1 on error.
153 */
154int     roar_vs_volume_stereo (roar_vs_t * vss, float l, float r, int * error);
155
156/* get volume from stream (like volume + ballance, stereo mode)
157 * volume pinters l and r are floats from 0 ('muted', see above) to 1 (full volume).
158 * Returns 0 on no error and -1 on error.
159 * NOTE: if you want a 'mono' volume (like roar_vs_volume_mono() takes)
160 * you can just use: c = (*l + *r)/2
161 */
162int     roar_vs_volume_get    (roar_vs_t * vss, float * l, float * r, int * error);
163
164/* set an array of meta data for the stream
165 * This sets an array of meta data stored in kv of length len for
166 * the stream.
167 * This should be called before streaming is started using read or write functions
168 * but may be called at any time (for example to updata meta data).
169 * Returns 0 on no error and -1 on error.
170 * Example:
171 * struct roar_keyval kv = {.key = "TITLE", .value = "Some artist"};
172 * ret = roar_vs_meta(vss, &kv, 1, &err);
173 */
174int     roar_vs_meta          (roar_vs_t * vss, struct roar_keyval * kv, size_t len, int * error);
175
176/* Get used connection object
177 * This may be usefull if you want to use functions from the main API.
178 * Returns used connection object or NULL on error.
179 */
180struct roar_connection * roar_vs_connection_obj(roar_vs_t * vss, int * error);
181
182/* Get used stream object
183 * This may be usefull if you want to use functions from the main API.
184 * Returns used stream object or NULL on error.
185 */
186struct roar_stream     * roar_vs_stream_obj    (roar_vs_t * vss, int * error);
187
188/* Get used VIO object
189 * This may be usefull if you want to use functions from the main API.
190 * For example this can be used in non-blocking mode
191 * to test if we can read or write. To test that use roar_vio_select().
192 * Returns used VIO object or NULL on error.
193 */
194struct roar_vio_calls  * roar_vs_vio_obj       (roar_vs_t * vss, int * error);
195
196/* send NOOP command to server
197 * This can be used to ping the server.
198 * This is of no use normaly.
199 * Returns 0 on no error and -1 on error.
200 */
201#define roar_vs_noop(v, error) roar_noop(roar_vs_connection_obj((v), (error)))
202
203#endif
204
205//ll
Note: See TracBrowser for help on using the repository browser.