00001
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __ALSA_PCM_H
00030 #define __ALSA_PCM_H
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00043 #define SND_PCM_DLSYM_VERSION _dlsym_pcm_001
00044
00046 typedef struct _snd_pcm_info snd_pcm_info_t;
00048 typedef struct _snd_pcm_hw_params snd_pcm_hw_params_t;
00050 typedef struct _snd_pcm_sw_params snd_pcm_sw_params_t;
00052 typedef struct _snd_pcm_status snd_pcm_status_t;
00054 typedef struct _snd_pcm_access_mask snd_pcm_access_mask_t;
00056 typedef struct _snd_pcm_format_mask snd_pcm_format_mask_t;
00058 typedef struct _snd_pcm_subformat_mask snd_pcm_subformat_mask_t;
00059
00061 typedef enum _snd_pcm_class {
00064 SND_PCM_CLASS_GENERIC = 0,
00066 SND_PCM_CLASS_MULTI,
00068 SND_PCM_CLASS_MODEM,
00070 SND_PCM_CLASS_DIGITIZER,
00071 SND_PCM_CLASS_LAST = SND_PCM_CLASS_DIGITIZER
00072 } snd_pcm_class_t;
00073
00075 typedef enum _snd_pcm_subclass {
00077 SND_PCM_SUBCLASS_GENERIC_MIX = 0,
00079 SND_PCM_SUBCLASS_MULTI_MIX,
00080 SND_PCM_SUBCLASS_LAST = SND_PCM_SUBCLASS_MULTI_MIX
00081 } snd_pcm_subclass_t;
00082
00084 typedef enum _snd_pcm_stream {
00086 SND_PCM_STREAM_PLAYBACK = 0,
00088 SND_PCM_STREAM_CAPTURE,
00089 SND_PCM_STREAM_LAST = SND_PCM_STREAM_CAPTURE
00090 } snd_pcm_stream_t;
00091
00093 typedef enum _snd_pcm_access {
00095 SND_PCM_ACCESS_MMAP_INTERLEAVED = 0,
00097 SND_PCM_ACCESS_MMAP_NONINTERLEAVED,
00099 SND_PCM_ACCESS_MMAP_COMPLEX,
00101 SND_PCM_ACCESS_RW_INTERLEAVED,
00103 SND_PCM_ACCESS_RW_NONINTERLEAVED,
00104 SND_PCM_ACCESS_LAST = SND_PCM_ACCESS_RW_NONINTERLEAVED
00105 } snd_pcm_access_t;
00106
00108 typedef enum _snd_pcm_format {
00110 SND_PCM_FORMAT_UNKNOWN = -1,
00112 SND_PCM_FORMAT_S8 = 0,
00114 SND_PCM_FORMAT_U8,
00116 SND_PCM_FORMAT_S16_LE,
00118 SND_PCM_FORMAT_S16_BE,
00120 SND_PCM_FORMAT_U16_LE,
00122 SND_PCM_FORMAT_U16_BE,
00124 SND_PCM_FORMAT_S24_LE,
00126 SND_PCM_FORMAT_S24_BE,
00128 SND_PCM_FORMAT_U24_LE,
00130 SND_PCM_FORMAT_U24_BE,
00132 SND_PCM_FORMAT_S32_LE,
00134 SND_PCM_FORMAT_S32_BE,
00136 SND_PCM_FORMAT_U32_LE,
00138 SND_PCM_FORMAT_U32_BE,
00140 SND_PCM_FORMAT_FLOAT_LE,
00142 SND_PCM_FORMAT_FLOAT_BE,
00144 SND_PCM_FORMAT_FLOAT64_LE,
00146 SND_PCM_FORMAT_FLOAT64_BE,
00148 SND_PCM_FORMAT_IEC958_SUBFRAME_LE,
00150 SND_PCM_FORMAT_IEC958_SUBFRAME_BE,
00152 SND_PCM_FORMAT_MU_LAW,
00154 SND_PCM_FORMAT_A_LAW,
00156 SND_PCM_FORMAT_IMA_ADPCM,
00158 SND_PCM_FORMAT_MPEG,
00160 SND_PCM_FORMAT_GSM,
00162 SND_PCM_FORMAT_SPECIAL = 31,
00164 SND_PCM_FORMAT_S24_3LE = 32,
00166 SND_PCM_FORMAT_S24_3BE,
00168 SND_PCM_FORMAT_U24_3LE,
00170 SND_PCM_FORMAT_U24_3BE,
00172 SND_PCM_FORMAT_S20_3LE,
00174 SND_PCM_FORMAT_S20_3BE,
00176 SND_PCM_FORMAT_U20_3LE,
00178 SND_PCM_FORMAT_U20_3BE,
00180 SND_PCM_FORMAT_S18_3LE,
00182 SND_PCM_FORMAT_S18_3BE,
00184 SND_PCM_FORMAT_U18_3LE,
00186 SND_PCM_FORMAT_U18_3BE,
00187 SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_U18_3BE,
00188
00189 #if __BYTE_ORDER == __LITTLE_ENDIAN
00190
00191 SND_PCM_FORMAT_S16 = SND_PCM_FORMAT_S16_LE,
00193 SND_PCM_FORMAT_U16 = SND_PCM_FORMAT_U16_LE,
00195 SND_PCM_FORMAT_S24 = SND_PCM_FORMAT_S24_LE,
00197 SND_PCM_FORMAT_U24 = SND_PCM_FORMAT_U24_LE,
00199 SND_PCM_FORMAT_S32 = SND_PCM_FORMAT_S32_LE,
00201 SND_PCM_FORMAT_U32 = SND_PCM_FORMAT_U32_LE,
00203 SND_PCM_FORMAT_FLOAT = SND_PCM_FORMAT_FLOAT_LE,
00205 SND_PCM_FORMAT_FLOAT64 = SND_PCM_FORMAT_FLOAT64_LE,
00207 SND_PCM_FORMAT_IEC958_SUBFRAME = SND_PCM_FORMAT_IEC958_SUBFRAME_LE
00208 #elif __BYTE_ORDER == __BIG_ENDIAN
00209
00210 SND_PCM_FORMAT_S16 = SND_PCM_FORMAT_S16_BE,
00212 SND_PCM_FORMAT_U16 = SND_PCM_FORMAT_U16_BE,
00214 SND_PCM_FORMAT_S24 = SND_PCM_FORMAT_S24_BE,
00216 SND_PCM_FORMAT_U24 = SND_PCM_FORMAT_U24_BE,
00218 SND_PCM_FORMAT_S32 = SND_PCM_FORMAT_S32_BE,
00220 SND_PCM_FORMAT_U32 = SND_PCM_FORMAT_U32_BE,
00222 SND_PCM_FORMAT_FLOAT = SND_PCM_FORMAT_FLOAT_BE,
00224 SND_PCM_FORMAT_FLOAT64 = SND_PCM_FORMAT_FLOAT64_BE,
00226 SND_PCM_FORMAT_IEC958_SUBFRAME = SND_PCM_FORMAT_IEC958_SUBFRAME_BE
00227 #else
00228 #error "Unknown endian"
00229 #endif
00230 } snd_pcm_format_t;
00231
00233 typedef enum _snd_pcm_subformat {
00235 SND_PCM_SUBFORMAT_STD = 0,
00236 SND_PCM_SUBFORMAT_LAST = SND_PCM_SUBFORMAT_STD
00237 } snd_pcm_subformat_t;
00238
00240 typedef enum _snd_pcm_state {
00242 SND_PCM_STATE_OPEN = 0,
00244 SND_PCM_STATE_SETUP,
00246 SND_PCM_STATE_PREPARED,
00248 SND_PCM_STATE_RUNNING,
00250 SND_PCM_STATE_XRUN,
00252 SND_PCM_STATE_DRAINING,
00254 SND_PCM_STATE_PAUSED,
00256 SND_PCM_STATE_SUSPENDED,
00258 SND_PCM_STATE_DISCONNECTED,
00259 SND_PCM_STATE_LAST = SND_PCM_STATE_DISCONNECTED
00260 } snd_pcm_state_t;
00261
00263 typedef enum _snd_pcm_start {
00265 SND_PCM_START_DATA = 0,
00267 SND_PCM_START_EXPLICIT,
00268 SND_PCM_START_LAST = SND_PCM_START_EXPLICIT
00269 } snd_pcm_start_t;
00270
00272 typedef enum _snd_pcm_xrun {
00274 SND_PCM_XRUN_NONE = 0,
00276 SND_PCM_XRUN_STOP,
00277 SND_PCM_XRUN_LAST = SND_PCM_XRUN_STOP
00278 } snd_pcm_xrun_t;
00279
00281 typedef enum _snd_pcm_tstamp {
00283 SND_PCM_TSTAMP_NONE = 0,
00285 SND_PCM_TSTAMP_ENABLE,
00289 SND_PCM_TSTAMP_MMAP = SND_PCM_TSTAMP_ENABLE,
00290 SND_PCM_TSTAMP_LAST = SND_PCM_TSTAMP_ENABLE
00291 } snd_pcm_tstamp_t;
00292
00294 typedef unsigned long snd_pcm_uframes_t;
00296 typedef long snd_pcm_sframes_t;
00297
00299 #define SND_PCM_NONBLOCK 0x00000001
00300
00301 #define SND_PCM_ASYNC 0x00000002
00302
00303 #define SND_PCM_NO_AUTO_RESAMPLE 0x00010000
00304
00305 #define SND_PCM_NO_AUTO_CHANNELS 0x00020000
00306
00307 #define SND_PCM_NO_AUTO_FORMAT 0x00040000
00308
00309 #define SND_PCM_NO_SOFTVOL 0x00080000
00310
00312 typedef struct _snd_pcm snd_pcm_t;
00313
00315 enum _snd_pcm_type {
00317 SND_PCM_TYPE_HW = 0,
00319 SND_PCM_TYPE_HOOKS,
00322 SND_PCM_TYPE_MULTI,
00324 SND_PCM_TYPE_FILE,
00326 SND_PCM_TYPE_NULL,
00328 SND_PCM_TYPE_SHM,
00330 SND_PCM_TYPE_INET,
00332 SND_PCM_TYPE_COPY,
00334 SND_PCM_TYPE_LINEAR,
00336 SND_PCM_TYPE_ALAW,
00338 SND_PCM_TYPE_MULAW,
00340 SND_PCM_TYPE_ADPCM,
00342 SND_PCM_TYPE_RATE,
00344 SND_PCM_TYPE_ROUTE,
00346 SND_PCM_TYPE_PLUG,
00348 SND_PCM_TYPE_SHARE,
00350 SND_PCM_TYPE_METER,
00352 SND_PCM_TYPE_MIX,
00354 SND_PCM_TYPE_DROUTE,
00356 SND_PCM_TYPE_LBSERVER,
00358 SND_PCM_TYPE_LINEAR_FLOAT,
00360 SND_PCM_TYPE_LADSPA,
00362 SND_PCM_TYPE_DMIX,
00364 SND_PCM_TYPE_JACK,
00366 SND_PCM_TYPE_DSNOOP,
00368 SND_PCM_TYPE_DSHARE,
00370 SND_PCM_TYPE_IEC958,
00372 SND_PCM_TYPE_SOFTVOL,
00374 SND_PCM_TYPE_IOPLUG,
00376 SND_PCM_TYPE_EXTPLUG,
00378 SND_PCM_TYPE_MMAP_EMUL,
00379 SND_PCM_TYPE_LAST = SND_PCM_TYPE_MMAP_EMUL
00380 };
00381
00383 typedef enum _snd_pcm_type snd_pcm_type_t;
00384
00386 typedef struct _snd_pcm_channel_area {
00388 void *addr;
00390 unsigned int first;
00392 unsigned int step;
00393 } snd_pcm_channel_area_t;
00394
00396 typedef union _snd_pcm_sync_id {
00398 unsigned char id[16];
00400 unsigned short id16[8];
00402 unsigned int id32[4];
00403 } snd_pcm_sync_id_t;
00404
00406 typedef struct _snd_pcm_scope snd_pcm_scope_t;
00407
00408 int snd_pcm_open(snd_pcm_t **pcm, const char *name,
00409 snd_pcm_stream_t stream, int mode);
00410 int snd_pcm_open_lconf(snd_pcm_t **pcm, const char *name,
00411 snd_pcm_stream_t stream, int mode,
00412 snd_config_t *lconf);
00413
00414 int snd_pcm_close(snd_pcm_t *pcm);
00415 const char *snd_pcm_name(snd_pcm_t *pcm);
00416 snd_pcm_type_t snd_pcm_type(snd_pcm_t *pcm);
00417 snd_pcm_stream_t snd_pcm_stream(snd_pcm_t *pcm);
00418 int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm);
00419 int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
00420 int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
00421 int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock);
00422 int snd_async_add_pcm_handler(snd_async_handler_t **handler, snd_pcm_t *pcm,
00423 snd_async_callback_t callback, void *private_data);
00424 snd_pcm_t *snd_async_handler_get_pcm(snd_async_handler_t *handler);
00425 int snd_pcm_info(snd_pcm_t *pcm, snd_pcm_info_t *info);
00426 int snd_pcm_hw_params_current(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
00427 int snd_pcm_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
00428 int snd_pcm_hw_free(snd_pcm_t *pcm);
00429 int snd_pcm_sw_params_current(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
00430 int snd_pcm_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
00431 int snd_pcm_prepare(snd_pcm_t *pcm);
00432 int snd_pcm_reset(snd_pcm_t *pcm);
00433 int snd_pcm_status(snd_pcm_t *pcm, snd_pcm_status_t *status);
00434 int snd_pcm_start(snd_pcm_t *pcm);
00435 int snd_pcm_drop(snd_pcm_t *pcm);
00436 int snd_pcm_drain(snd_pcm_t *pcm);
00437 int snd_pcm_pause(snd_pcm_t *pcm, int enable);
00438 snd_pcm_state_t snd_pcm_state(snd_pcm_t *pcm);
00439 int snd_pcm_hwsync(snd_pcm_t *pcm);
00440 int snd_pcm_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp);
00441 int snd_pcm_resume(snd_pcm_t *pcm);
00442 int snd_pcm_htimestamp(snd_pcm_t *pcm, snd_pcm_uframes_t *avail, snd_htimestamp_t *tstamp);
00443 snd_pcm_sframes_t snd_pcm_avail(snd_pcm_t *pcm);
00444 snd_pcm_sframes_t snd_pcm_avail_update(snd_pcm_t *pcm);
00445 int snd_pcm_avail_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *availp, snd_pcm_sframes_t *delayp);
00446 snd_pcm_sframes_t snd_pcm_rewindable(snd_pcm_t *pcm);
00447 snd_pcm_sframes_t snd_pcm_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames);
00448 snd_pcm_sframes_t snd_pcm_forwardable(snd_pcm_t *pcm);
00449 snd_pcm_sframes_t snd_pcm_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames);
00450 snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
00451 snd_pcm_sframes_t snd_pcm_readi(snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size);
00452 snd_pcm_sframes_t snd_pcm_writen(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);
00453 snd_pcm_sframes_t snd_pcm_readn(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);
00454 int snd_pcm_wait(snd_pcm_t *pcm, int timeout);
00455
00456 int snd_pcm_link(snd_pcm_t *pcm1, snd_pcm_t *pcm2);
00457 int snd_pcm_unlink(snd_pcm_t *pcm);
00458
00459
00460
00461
00462
00463
00464
00465
00466 int snd_pcm_recover(snd_pcm_t *pcm, int err, int silent);
00467 int snd_pcm_set_params(snd_pcm_t *pcm,
00468 snd_pcm_format_t format,
00469 snd_pcm_access_t access,
00470 unsigned int channels,
00471 unsigned int rate,
00472 int soft_resample,
00473 unsigned int latency);
00474 int snd_pcm_get_params(snd_pcm_t *pcm,
00475 snd_pcm_uframes_t *buffer_size,
00476 snd_pcm_uframes_t *period_size);
00477
00487 size_t snd_pcm_info_sizeof(void);
00492 #define snd_pcm_info_alloca(ptr) __snd_alloca(ptr, snd_pcm_info)
00493 int snd_pcm_info_malloc(snd_pcm_info_t **ptr);
00494 void snd_pcm_info_free(snd_pcm_info_t *obj);
00495 void snd_pcm_info_copy(snd_pcm_info_t *dst, const snd_pcm_info_t *src);
00496 unsigned int snd_pcm_info_get_device(const snd_pcm_info_t *obj);
00497 unsigned int snd_pcm_info_get_subdevice(const snd_pcm_info_t *obj);
00498 snd_pcm_stream_t snd_pcm_info_get_stream(const snd_pcm_info_t *obj);
00499 int snd_pcm_info_get_card(const snd_pcm_info_t *obj);
00500 const char *snd_pcm_info_get_id(const snd_pcm_info_t *obj);
00501 const char *snd_pcm_info_get_name(const snd_pcm_info_t *obj);
00502 const char *snd_pcm_info_get_subdevice_name(const snd_pcm_info_t *obj);
00503 snd_pcm_class_t snd_pcm_info_get_class(const snd_pcm_info_t *obj);
00504 snd_pcm_subclass_t snd_pcm_info_get_subclass(const snd_pcm_info_t *obj);
00505 unsigned int snd_pcm_info_get_subdevices_count(const snd_pcm_info_t *obj);
00506 unsigned int snd_pcm_info_get_subdevices_avail(const snd_pcm_info_t *obj);
00507 snd_pcm_sync_id_t snd_pcm_info_get_sync(const snd_pcm_info_t *obj);
00508 void snd_pcm_info_set_device(snd_pcm_info_t *obj, unsigned int val);
00509 void snd_pcm_info_set_subdevice(snd_pcm_info_t *obj, unsigned int val);
00510 void snd_pcm_info_set_stream(snd_pcm_info_t *obj, snd_pcm_stream_t val);
00511
00521 int snd_pcm_hw_params_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
00522
00523 int snd_pcm_hw_params_can_mmap_sample_resolution(const snd_pcm_hw_params_t *params);
00524 int snd_pcm_hw_params_is_double(const snd_pcm_hw_params_t *params);
00525 int snd_pcm_hw_params_is_batch(const snd_pcm_hw_params_t *params);
00526 int snd_pcm_hw_params_is_block_transfer(const snd_pcm_hw_params_t *params);
00527 int snd_pcm_hw_params_is_monotonic(const snd_pcm_hw_params_t *params);
00528 int snd_pcm_hw_params_can_overrange(const snd_pcm_hw_params_t *params);
00529 int snd_pcm_hw_params_can_pause(const snd_pcm_hw_params_t *params);
00530 int snd_pcm_hw_params_can_resume(const snd_pcm_hw_params_t *params);
00531 int snd_pcm_hw_params_is_half_duplex(const snd_pcm_hw_params_t *params);
00532 int snd_pcm_hw_params_is_joint_duplex(const snd_pcm_hw_params_t *params);
00533 int snd_pcm_hw_params_can_sync_start(const snd_pcm_hw_params_t *params);
00534 int snd_pcm_hw_params_get_rate_numden(const snd_pcm_hw_params_t *params,
00535 unsigned int *rate_num,
00536 unsigned int *rate_den);
00537 int snd_pcm_hw_params_get_sbits(const snd_pcm_hw_params_t *params);
00538 int snd_pcm_hw_params_get_fifo_size(const snd_pcm_hw_params_t *params);
00539
00540 #if 0
00541 typedef struct _snd_pcm_hw_strategy snd_pcm_hw_strategy_t;
00542
00543
00544 typedef struct _snd_pcm_hw_strategy_simple_choices_list {
00545 unsigned int value;
00546 unsigned int badness;
00547 } snd_pcm_hw_strategy_simple_choices_list_t;
00548
00549 int snd_pcm_hw_params_strategy(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
00550 const snd_pcm_hw_strategy_t *strategy,
00551 unsigned int badness_min,
00552 unsigned int badness_max);
00553
00554 void snd_pcm_hw_strategy_free(snd_pcm_hw_strategy_t *strategy);
00555 int snd_pcm_hw_strategy_simple(snd_pcm_hw_strategy_t **strategyp,
00556 unsigned int badness_min,
00557 unsigned int badness_max);
00558 int snd_pcm_hw_params_try_explain_failure(snd_pcm_t *pcm,
00559 snd_pcm_hw_params_t *fail,
00560 snd_pcm_hw_params_t *success,
00561 unsigned int depth,
00562 snd_output_t *out);
00563
00564 #endif
00565
00566 size_t snd_pcm_hw_params_sizeof(void);
00571 #define snd_pcm_hw_params_alloca(ptr) __snd_alloca(ptr, snd_pcm_hw_params)
00572 int snd_pcm_hw_params_malloc(snd_pcm_hw_params_t **ptr);
00573 void snd_pcm_hw_params_free(snd_pcm_hw_params_t *obj);
00574 void snd_pcm_hw_params_copy(snd_pcm_hw_params_t *dst, const snd_pcm_hw_params_t *src);
00575
00576 #if !defined(ALSA_LIBRARY_BUILD) && !defined(ALSA_PCM_OLD_HW_PARAMS_API)
00577
00578 int snd_pcm_hw_params_get_access(const snd_pcm_hw_params_t *params, snd_pcm_access_t *_access);
00579 int snd_pcm_hw_params_test_access(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t _access);
00580 int snd_pcm_hw_params_set_access(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t _access);
00581 int snd_pcm_hw_params_set_access_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t *_access);
00582 int snd_pcm_hw_params_set_access_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t *_access);
00583 int snd_pcm_hw_params_set_access_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_mask_t *mask);
00584 int snd_pcm_hw_params_get_access_mask(snd_pcm_hw_params_t *params, snd_pcm_access_mask_t *mask);
00585
00586 int snd_pcm_hw_params_get_format(const snd_pcm_hw_params_t *params, snd_pcm_format_t *val);
00587 int snd_pcm_hw_params_test_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
00588 int snd_pcm_hw_params_set_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
00589 int snd_pcm_hw_params_set_format_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t *format);
00590 int snd_pcm_hw_params_set_format_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t *format);
00591 int snd_pcm_hw_params_set_format_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_mask_t *mask);
00592 void snd_pcm_hw_params_get_format_mask(snd_pcm_hw_params_t *params, snd_pcm_format_mask_t *mask);
00593
00594 int snd_pcm_hw_params_get_subformat(const snd_pcm_hw_params_t *params, snd_pcm_subformat_t *subformat);
00595 int snd_pcm_hw_params_test_subformat(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t subformat);
00596 int snd_pcm_hw_params_set_subformat(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t subformat);
00597 int snd_pcm_hw_params_set_subformat_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t *subformat);
00598 int snd_pcm_hw_params_set_subformat_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t *subformat);
00599 int snd_pcm_hw_params_set_subformat_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_mask_t *mask);
00600 void snd_pcm_hw_params_get_subformat_mask(snd_pcm_hw_params_t *params, snd_pcm_subformat_mask_t *mask);
00601
00602 int snd_pcm_hw_params_get_channels(const snd_pcm_hw_params_t *params, unsigned int *val);
00603 int snd_pcm_hw_params_get_channels_min(const snd_pcm_hw_params_t *params, unsigned int *val);
00604 int snd_pcm_hw_params_get_channels_max(const snd_pcm_hw_params_t *params, unsigned int *val);
00605 int snd_pcm_hw_params_test_channels(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
00606 int snd_pcm_hw_params_set_channels(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
00607 int snd_pcm_hw_params_set_channels_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00608 int snd_pcm_hw_params_set_channels_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00609 int snd_pcm_hw_params_set_channels_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, unsigned int *max);
00610 int snd_pcm_hw_params_set_channels_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00611 int snd_pcm_hw_params_set_channels_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00612 int snd_pcm_hw_params_set_channels_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00613
00614 int snd_pcm_hw_params_get_rate(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00615 int snd_pcm_hw_params_get_rate_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00616 int snd_pcm_hw_params_get_rate_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00617 int snd_pcm_hw_params_test_rate(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00618 int snd_pcm_hw_params_set_rate(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00619 int snd_pcm_hw_params_set_rate_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00620 int snd_pcm_hw_params_set_rate_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00621 int snd_pcm_hw_params_set_rate_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
00622 int snd_pcm_hw_params_set_rate_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00623 int snd_pcm_hw_params_set_rate_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00624 int snd_pcm_hw_params_set_rate_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00625 int snd_pcm_hw_params_set_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
00626 int snd_pcm_hw_params_get_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00627 int snd_pcm_hw_params_set_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
00628 int snd_pcm_hw_params_get_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
00629
00630 int snd_pcm_hw_params_get_period_time(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00631 int snd_pcm_hw_params_get_period_time_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00632 int snd_pcm_hw_params_get_period_time_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00633 int snd_pcm_hw_params_test_period_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00634 int snd_pcm_hw_params_set_period_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00635 int snd_pcm_hw_params_set_period_time_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00636 int snd_pcm_hw_params_set_period_time_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00637 int snd_pcm_hw_params_set_period_time_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
00638 int snd_pcm_hw_params_set_period_time_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00639 int snd_pcm_hw_params_set_period_time_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00640 int snd_pcm_hw_params_set_period_time_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00641
00642 int snd_pcm_hw_params_get_period_size(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
00643 int snd_pcm_hw_params_get_period_size_min(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
00644 int snd_pcm_hw_params_get_period_size_max(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
00645 int snd_pcm_hw_params_test_period_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val, int dir);
00646 int snd_pcm_hw_params_set_period_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val, int dir);
00647 int snd_pcm_hw_params_set_period_size_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
00648 int snd_pcm_hw_params_set_period_size_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
00649 int snd_pcm_hw_params_set_period_size_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *min, int *mindir, snd_pcm_uframes_t *max, int *maxdir);
00650 int snd_pcm_hw_params_set_period_size_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
00651 int snd_pcm_hw_params_set_period_size_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
00652 int snd_pcm_hw_params_set_period_size_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
00653 int snd_pcm_hw_params_set_period_size_integer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
00654
00655 int snd_pcm_hw_params_get_periods(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00656 int snd_pcm_hw_params_get_periods_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00657 int snd_pcm_hw_params_get_periods_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00658 int snd_pcm_hw_params_test_periods(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00659 int snd_pcm_hw_params_set_periods(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00660 int snd_pcm_hw_params_set_periods_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00661 int snd_pcm_hw_params_set_periods_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00662 int snd_pcm_hw_params_set_periods_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
00663 int snd_pcm_hw_params_set_periods_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00664 int snd_pcm_hw_params_set_periods_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00665 int snd_pcm_hw_params_set_periods_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00666 int snd_pcm_hw_params_set_periods_integer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
00667
00668 int snd_pcm_hw_params_get_buffer_time(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00669 int snd_pcm_hw_params_get_buffer_time_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00670 int snd_pcm_hw_params_get_buffer_time_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00671 int snd_pcm_hw_params_test_buffer_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00672 int snd_pcm_hw_params_set_buffer_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
00673 int snd_pcm_hw_params_set_buffer_time_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00674 int snd_pcm_hw_params_set_buffer_time_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00675 int snd_pcm_hw_params_set_buffer_time_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
00676 int snd_pcm_hw_params_set_buffer_time_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00677 int snd_pcm_hw_params_set_buffer_time_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00678 int snd_pcm_hw_params_set_buffer_time_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
00679
00680 int snd_pcm_hw_params_get_buffer_size(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00681 int snd_pcm_hw_params_get_buffer_size_min(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00682 int snd_pcm_hw_params_get_buffer_size_max(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00683 int snd_pcm_hw_params_test_buffer_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val);
00684 int snd_pcm_hw_params_set_buffer_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val);
00685 int snd_pcm_hw_params_set_buffer_size_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00686 int snd_pcm_hw_params_set_buffer_size_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00687 int snd_pcm_hw_params_set_buffer_size_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *min, snd_pcm_uframes_t *max);
00688 int snd_pcm_hw_params_set_buffer_size_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00689 int snd_pcm_hw_params_set_buffer_size_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00690 int snd_pcm_hw_params_set_buffer_size_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00691
00692 #endif
00693
00694 int snd_pcm_hw_params_get_min_align(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
00695
00705 size_t snd_pcm_sw_params_sizeof(void);
00710 #define snd_pcm_sw_params_alloca(ptr) __snd_alloca(ptr, snd_pcm_sw_params)
00711 int snd_pcm_sw_params_malloc(snd_pcm_sw_params_t **ptr);
00712 void snd_pcm_sw_params_free(snd_pcm_sw_params_t *obj);
00713 void snd_pcm_sw_params_copy(snd_pcm_sw_params_t *dst, const snd_pcm_sw_params_t *src);
00714 int snd_pcm_sw_params_get_boundary(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
00715
00716 #if !defined(ALSA_LIBRARY_BUILD) && !defined(ALSA_PCM_OLD_SW_PARAMS_API)
00717
00718 int snd_pcm_sw_params_set_tstamp_mode(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_tstamp_t val);
00719 int snd_pcm_sw_params_get_tstamp_mode(const snd_pcm_sw_params_t *params, snd_pcm_tstamp_t *val);
00720 int snd_pcm_sw_params_set_avail_min(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
00721 int snd_pcm_sw_params_get_avail_min(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
00722 int snd_pcm_sw_params_set_period_event(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, int val);
00723 int snd_pcm_sw_params_get_period_event(const snd_pcm_sw_params_t *params, int *val);
00724 int snd_pcm_sw_params_set_start_threshold(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
00725 int snd_pcm_sw_params_get_start_threshold(const snd_pcm_sw_params_t *paramsm, snd_pcm_uframes_t *val);
00726 int snd_pcm_sw_params_set_stop_threshold(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
00727 int snd_pcm_sw_params_get_stop_threshold(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
00728 int snd_pcm_sw_params_set_silence_threshold(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
00729 int snd_pcm_sw_params_get_silence_threshold(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
00730 int snd_pcm_sw_params_set_silence_size(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
00731 int snd_pcm_sw_params_get_silence_size(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
00732
00733 #endif
00734
00737
00738 #ifndef ALSA_LIBRARY_BUILD
00739 #if defined(ALSA_PCM_OLD_HW_PARAMS_API) || defined(ALSA_PCM_OLD_SW_PARAMS_API)
00740 #include "pcm_old.h"
00741 #endif
00742 #endif
00743
00751 size_t snd_pcm_access_mask_sizeof(void);
00756 #define snd_pcm_access_mask_alloca(ptr) __snd_alloca(ptr, snd_pcm_access_mask)
00757 int snd_pcm_access_mask_malloc(snd_pcm_access_mask_t **ptr);
00758 void snd_pcm_access_mask_free(snd_pcm_access_mask_t *obj);
00759 void snd_pcm_access_mask_copy(snd_pcm_access_mask_t *dst, const snd_pcm_access_mask_t *src);
00760 void snd_pcm_access_mask_none(snd_pcm_access_mask_t *mask);
00761 void snd_pcm_access_mask_any(snd_pcm_access_mask_t *mask);
00762 int snd_pcm_access_mask_test(const snd_pcm_access_mask_t *mask, snd_pcm_access_t val);
00763 int snd_pcm_access_mask_empty(const snd_pcm_access_mask_t *mask);
00764 void snd_pcm_access_mask_set(snd_pcm_access_mask_t *mask, snd_pcm_access_t val);
00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void 00765 void