00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CSL_PCM_H__
00020 #define __CSL_PCM_H__
00021
00022
00023 #include <csl/csldefs.h>
00024 #include <csl/cslmain.h>
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00035
00036
00042 typedef struct _CslPcmStream CslPcmStream;
00043
00049 typedef struct _CslPcmStatus CslPcmStatus;
00050
00059 typedef enum
00060 {
00062 CSL_PCM_FORMAT_SIZE_8 = 0x0008,
00063 CSL_PCM_FORMAT_SIZE_16 = 0x0010,
00064 CSL_PCM_FORMAT_SIZE_32 = 0x0020,
00065 CSL_PCM_FORMAT_SIZE_MASK = 0x00FF,
00066
00068 CSL_PCM_FORMAT_ENDIAN_LE = 0x0100,
00069 CSL_PCM_FORMAT_ENDIAN_BE = 0x0200,
00070 CSL_PCM_FORMAT_ENDIAN_MASK = 0x0F00,
00071
00073 CSL_PCM_FORMAT_ENCODING_LINEAR_SIGNED = 0x1000,
00074 CSL_PCM_FORMAT_ENCODING_LINEAR_UNSIGNED = 0x2000,
00075 CSL_PCM_FORMAT_ENCODING_FLOAT = 0x3000,
00076 CSL_PCM_FORMAT_ENCODING_MASK = 0xF000,
00077
00079 CSL_PCM_FORMAT_U8 = 0x2008,
00080 CSL_PCM_FORMAT_S16_LE = 0x1110,
00081 CSL_PCM_FORMAT_S16_BE = 0x1210,
00082 CSL_PCM_FORMAT_FLOAT_LE = 0x3120,
00083 CSL_PCM_FORMAT_FLOAT_BE = 0x3220,
00084 } CslPcmFormatType;
00085
00086
00087 #if CSL_BYTE_ORDER == CSL_LITTLE_ENDIAN
00088 #define CSL_PCM_FORMAT_S16_HE CSL_PCM_FORMAT_S16_LE
00089 #define CSL_PCM_FORMAT_FLOAT_HE CSL_PCM_FORMAT_FLOAT_LE
00090 #else
00091 #define CSL_PCM_FORMAT_S16_HE CSL_PCM_FORMAT_S16_BE
00092 #define CSL_PCM_FORMAT_FLOAT_HE CSL_PCM_FORMAT_FLOAT_BE
00093 #endif
00094
00101 struct _CslPcmStatus
00102 {
00104 unsigned int rate;
00106 unsigned int n_channels;
00108 unsigned int n_bits;
00109 CslPcmFormatType format;
00111 unsigned int buffer_size;
00113 unsigned int n_bytes_available;
00114 unsigned int packet_size;
00115 unsigned int n_buffer_packets;
00117 unsigned int n_packets_available;
00118 unsigned int padding[128];
00119
00120
00121
00122 float server_latency;
00123 };
00124
00125 CslErrorType csl_pcm_open_output (CslDriver *driver,
00126 const char *role,
00127 unsigned int rate,
00128 unsigned int n_channels,
00129 CslPcmFormatType format,
00130 CslPcmStream **stream_p);
00131 CslErrorType csl_pcm_open_input (CslDriver *driver,
00132 const char *role,
00133 unsigned int rate,
00134 unsigned int n_channels,
00135 CslPcmFormatType format,
00136 CslPcmStream **stream_p);
00137
00138
00139
00140
00141
00142
00143
00144 CslPcmFormatType csl_pcm_get_format (CslPcmStream *stream);
00145 void csl_pcm_close (CslPcmStream *stream);
00146
00147
00148 int csl_pcm_read (CslPcmStream *stream,
00149 unsigned int n_bytes,
00150 void *bytes);
00151 int csl_pcm_write (CslPcmStream *stream,
00152 unsigned int n_bytes,
00153 void *bytes);
00154
00155 CslErrorType csl_pcm_get_status (CslPcmStream *stream,
00156 CslPcmStatus *status);
00157 CslErrorType csl_pcm_flush (CslPcmStream *stream);
00158 CslErrorType csl_pcm_sync (CslPcmStream *stream);
00159
00160
00161
00162
00163 CslErrorType csl_pcm_set_title (CslPcmStream *stream,
00164 const char *title);
00165 char* csl_pcm_dup_title (CslPcmStream *stream);
00166 CslErrorType csl_pcm_set_stream_mode (CslPcmStream *stream,
00167 unsigned int buffer_size,
00168 unsigned int byte_watermark);
00169 void csl_pcm_get_stream_settings (CslPcmStream *stream,
00170 unsigned int *buffer_size_p,
00171 unsigned int *byte_watermark_p);
00172 CslErrorType csl_pcm_set_packet_mode (CslPcmStream *stream,
00173 unsigned int n_packets,
00174 unsigned int packet_size,
00175 unsigned int packet_watermark);
00176 void csl_pcm_get_packet_settings (CslPcmStream *stream,
00177 unsigned int *n_packets_p,
00178 unsigned int *packet_size_p,
00179 unsigned int *packet_watermark_p);
00180
00181
00182
00183 #define CSL_PCM_CHANNEL_FRONT_LEFT "<front-left>"
00184 #define CSL_PCM_CHANNEL_FRONT_RIGHT "<front-right>"
00185 #define CSL_PCM_CHANNEL_CENTER "<center>"
00186 #define CSL_PCM_CHANNEL_REAR_LEFT "<rear-left>"
00187 #define CSL_PCM_CHANNEL_REAR_RIGHT "<rear-right>"
00188 #define CSL_PCM_CHANNEL_SUB_WOOFER "<sub-woofer>"
00189 #if 0
00190
00200 CslErrorType csl_pcm_set_channel_mapping (CslPcmStream *stream,
00201 unsigned int channel,
00202 const char *mapping);
00203 char* csl_pcm_dup_channel_mapping (CslPcmStream *stream,
00204 unsigned int channel);
00205 char** csl_pcm_list_channel_mappings (CslDriver *driver,
00206 unsigned int *n_maps_p);
00207 #endif
00208
00209 #ifdef __cplusplus
00210 }
00211 #endif
00212
00213 #endif