Blame axfer/xfer-libasound.h

Packit Service a9274b
// SPDX-License-Identifier: GPL-2.0
Packit Service a9274b
//
Packit Service a9274b
// xfer-libasound.h - a header for receiver/transmitter of frames by alsa-lib.
Packit Service a9274b
//
Packit Service a9274b
// Copyright (c) 2018 Takashi Sakamoto <o-takashi@sakamocchi.jp>
Packit Service a9274b
//
Packit Service a9274b
// Licensed under the terms of the GNU General Public License, version 2.
Packit Service a9274b
Packit Service a9274b
#ifndef __ALSA_UTILS_AXFER_XFER_LIBASOUND__H_
Packit Service a9274b
#define __ALSA_UTILS_AXFER_XFER_LIBASOUND__H_
Packit Service a9274b
Packit Service a9274b
#include "xfer.h"
Packit Service a9274b
#include "waiter.h"
Packit Service a9274b
Packit Service a9274b
#define logging(state, ...) \
Packit Service a9274b
	snd_output_printf(state->log, __VA_ARGS__)
Packit Service a9274b
Packit Service a9274b
enum sched_model {
Packit Service a9274b
	SCHED_MODEL_IRQ = 0,
Packit Service a9274b
	SCHED_MODEL_TIMER,
Packit Service a9274b
	SCHED_MODEL_COUNT,
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
struct xfer_libasound_ops;
Packit Service a9274b
Packit Service a9274b
struct libasound_state {
Packit Service a9274b
	snd_pcm_t *handle;
Packit Service a9274b
Packit Service a9274b
	snd_output_t *log;
Packit Service a9274b
	snd_pcm_hw_params_t *hw_params;
Packit Service a9274b
	snd_pcm_sw_params_t *sw_params;
Packit Service a9274b
Packit Service a9274b
	const struct xfer_libasound_ops *ops;
Packit Service a9274b
	void *private_data;
Packit Service a9274b
Packit Service a9274b
	bool verbose;
Packit Service a9274b
Packit Service a9274b
	char *node_literal;
Packit Service a9274b
	char *waiter_type_literal;
Packit Service a9274b
	char *sched_model_literal;
Packit Service a9274b
Packit Service a9274b
	unsigned int msec_per_period;
Packit Service a9274b
	unsigned int msec_per_buffer;
Packit Service a9274b
	unsigned int frames_per_period;
Packit Service a9274b
	unsigned int frames_per_buffer;
Packit Service a9274b
Packit Service a9274b
	unsigned int msec_for_avail_min;
Packit Service a9274b
	unsigned int msec_for_start_threshold;
Packit Service a9274b
	unsigned int msec_for_stop_threshold;
Packit Service a9274b
Packit Service a9274b
	bool finish_at_xrun:1;
Packit Service a9274b
	bool nonblock:1;
Packit Service a9274b
	bool mmap:1;
Packit Service a9274b
	bool test_nowait:1;
Packit Service a9274b
	bool no_auto_resample:1;
Packit Service a9274b
	bool no_auto_channels:1;
Packit Service a9274b
	bool no_auto_format:1;
Packit Service a9274b
	bool no_softvol:1;
Packit Service a9274b
Packit Service a9274b
	bool use_waiter:1;
Packit Service a9274b
Packit Service a9274b
	enum waiter_type waiter_type;
Packit Service a9274b
	struct waiter_context *waiter;
Packit Service a9274b
Packit Service a9274b
	// For scheduling type.
Packit Service a9274b
	enum sched_model sched_model;
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
// For internal use in 'libasound' module.
Packit Service a9274b
Packit Service a9274b
struct xfer_libasound_ops {
Packit Service a9274b
	int (*pre_process)(struct libasound_state *state);
Packit Service a9274b
	int (*process_frames)(struct libasound_state *state,
Packit Service a9274b
			      unsigned int *frame_count,
Packit Service a9274b
			      struct mapper_context *mapper,
Packit Service a9274b
			      struct container_context *cntrs);
Packit Service a9274b
	void (*post_process)(struct libasound_state *state);
Packit Service a9274b
	unsigned int private_size;
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
int xfer_libasound_wait_event(struct libasound_state *state, int timeout_msec,
Packit Service a9274b
			      unsigned short *revents);
Packit Service a9274b
Packit Service a9274b
extern const struct xfer_libasound_ops xfer_libasound_irq_rw_ops;
Packit Service a9274b
Packit Service a9274b
extern const struct xfer_libasound_ops xfer_libasound_irq_mmap_r_ops;
Packit Service a9274b
extern const struct xfer_libasound_ops xfer_libasound_irq_mmap_w_ops;
Packit Service a9274b
Packit Service a9274b
extern const struct xfer_libasound_ops xfer_libasound_timer_mmap_w_ops;
Packit Service a9274b
extern const struct xfer_libasound_ops xfer_libasound_timer_mmap_r_ops;
Packit Service a9274b
Packit Service a9274b
#endif