⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcm.h

📁 Linux Kernel 2.6.9 for OMAP1710
💻 H
📖 第 1 页 / 共 3 页
字号:
#ifndef __SOUND_PCM_H#define __SOUND_PCM_H/* *  Digital Audio (PCM) abstract layer *  Copyright (c) by Jaroslav Kysela <perex@suse.cz> *                   Abramo Bagnara <abramo@alsa-project.org> * * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA * */#include <sound/asound.h>#include <sound/memalloc.h>#include <linux/poll.h>#include <linux/bitops.h>typedef sndrv_pcm_uframes_t snd_pcm_uframes_t;typedef sndrv_pcm_sframes_t snd_pcm_sframes_t;typedef enum sndrv_pcm_class snd_pcm_class_t;typedef enum sndrv_pcm_subclass snd_pcm_subclass_t;typedef enum sndrv_pcm_stream snd_pcm_stream_t;typedef enum sndrv_pcm_access snd_pcm_access_t;typedef enum sndrv_pcm_format snd_pcm_format_t;typedef enum sndrv_pcm_subformat snd_pcm_subformat_t;typedef enum sndrv_pcm_state snd_pcm_state_t;typedef union sndrv_pcm_sync_id snd_pcm_sync_id_t;typedef struct sndrv_pcm_info snd_pcm_info_t;typedef enum sndrv_pcm_hw_param snd_pcm_hw_param_t;typedef struct sndrv_pcm_hw_params snd_pcm_hw_params_t;typedef enum sndrv_pcm_start snd_pcm_start_t;typedef enum sndrv_pcm_xrun snd_pcm_xrun_t;typedef enum sndrv_pcm_tstamp snd_pcm_tstamp_t;typedef struct sndrv_pcm_sw_params snd_pcm_sw_params_t;typedef struct sndrv_pcm_channel_info snd_pcm_channel_info_t;typedef struct sndrv_pcm_status snd_pcm_status_t;typedef struct sndrv_pcm_mmap_status snd_pcm_mmap_status_t;typedef struct sndrv_pcm_mmap_control snd_pcm_mmap_control_t;typedef struct sndrv_mask snd_mask_t;typedef struct snd_sg_buf snd_pcm_sgbuf_t;#define snd_pcm_substream_chip(substream) ((substream)->private_data)#define snd_pcm_chip(pcm) ((pcm)->private_data)typedef struct _snd_pcm_file snd_pcm_file_t;typedef struct _snd_pcm_runtime snd_pcm_runtime_t;#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)#include "pcm_oss.h"#endif/* *  Hardware (lowlevel) section */typedef struct _snd_pcm_hardware {	unsigned int info;		/* SNDRV_PCM_INFO_* */	u64 formats;			/* SNDRV_PCM_FMTBIT_* */	unsigned int rates;		/* SNDRV_PCM_RATE_* */	unsigned int rate_min;		/* min rate */	unsigned int rate_max;		/* max rate */	unsigned int channels_min;	/* min channels */	unsigned int channels_max;	/* max channels */	size_t buffer_bytes_max;	/* max buffer size */	size_t period_bytes_min;	/* min period size */	size_t period_bytes_max;	/* max period size */	unsigned int periods_min;	/* min # of periods */	unsigned int periods_max;	/* max # of periods */	size_t fifo_size;		/* fifo size in bytes */} snd_pcm_hardware_t;typedef struct _snd_pcm_ops {	int (*open)(snd_pcm_substream_t *substream);	int (*close)(snd_pcm_substream_t *substream);	int (*ioctl)(snd_pcm_substream_t * substream,		     unsigned int cmd, void *arg);	int (*hw_params)(snd_pcm_substream_t * substream, snd_pcm_hw_params_t * params);	int (*hw_free)(snd_pcm_substream_t *substream);	int (*prepare)(snd_pcm_substream_t * substream);	int (*trigger)(snd_pcm_substream_t * substream, int cmd);	snd_pcm_uframes_t (*pointer)(snd_pcm_substream_t * substream);	int (*copy)(snd_pcm_substream_t *substream, int channel, snd_pcm_uframes_t pos,		    void __user *buf, snd_pcm_uframes_t count);	int (*silence)(snd_pcm_substream_t *substream, int channel, 		       snd_pcm_uframes_t pos, snd_pcm_uframes_t count);	struct page *(*page)(snd_pcm_substream_t *substream, unsigned long offset);	int (*mmap)(snd_pcm_substream_t *substream, struct vm_area_struct *vma);	int (*ack)(snd_pcm_substream_t *substream);} snd_pcm_ops_t;/* * */#define SNDRV_PCM_DEVICES		8#define SNDRV_PCM_IOCTL1_FALSE		((void *)0)#define SNDRV_PCM_IOCTL1_TRUE		((void *)1)#define SNDRV_PCM_IOCTL1_RESET		0#define SNDRV_PCM_IOCTL1_INFO		1#define SNDRV_PCM_IOCTL1_CHANNEL_INFO	2#define SNDRV_PCM_IOCTL1_GSTATE		3#define SNDRV_PCM_TRIGGER_STOP		0#define SNDRV_PCM_TRIGGER_START		1#define SNDRV_PCM_TRIGGER_PAUSE_PUSH	3#define SNDRV_PCM_TRIGGER_PAUSE_RELEASE	4#define SNDRV_PCM_TRIGGER_SUSPEND	5#define SNDRV_PCM_TRIGGER_RESUME	6#define SNDRV_PCM_POS_XRUN		((snd_pcm_uframes_t)-1)/* If you change this don't forget to change rates[] table in pcm_native.c */#define SNDRV_PCM_RATE_5512		(1<<0)		/* 5512Hz */#define SNDRV_PCM_RATE_8000		(1<<1)		/* 8000Hz */#define SNDRV_PCM_RATE_11025		(1<<2)		/* 11025Hz */#define SNDRV_PCM_RATE_16000		(1<<3)		/* 16000Hz */#define SNDRV_PCM_RATE_22050		(1<<4)		/* 22050Hz */#define SNDRV_PCM_RATE_32000		(1<<5)		/* 32000Hz */#define SNDRV_PCM_RATE_44100		(1<<6)		/* 44100Hz */#define SNDRV_PCM_RATE_48000		(1<<7)		/* 48000Hz */#define SNDRV_PCM_RATE_64000		(1<<8)		/* 64000Hz */#define SNDRV_PCM_RATE_88200		(1<<9)		/* 88200Hz */#define SNDRV_PCM_RATE_96000		(1<<10)		/* 96000Hz */#define SNDRV_PCM_RATE_176400		(1<<11)		/* 176400Hz */#define SNDRV_PCM_RATE_192000		(1<<12)		/* 192000Hz */#define SNDRV_PCM_RATE_CONTINUOUS	(1<<30)		/* continuous range */#define SNDRV_PCM_RATE_KNOT		(1<<31)		/* supports more non-continuos rates */#define SNDRV_PCM_RATE_8000_44100	(SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_11025|\					 SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_22050|\					 SNDRV_PCM_RATE_32000|SNDRV_PCM_RATE_44100)#define SNDRV_PCM_RATE_8000_48000	(SNDRV_PCM_RATE_8000_44100|SNDRV_PCM_RATE_48000)#define SNDRV_PCM_RATE_8000_96000	(SNDRV_PCM_RATE_8000_48000|SNDRV_PCM_RATE_64000|\					 SNDRV_PCM_RATE_88200|SNDRV_PCM_RATE_96000)#define SNDRV_PCM_RATE_8000_192000	(SNDRV_PCM_RATE_8000_96000|SNDRV_PCM_RATE_176400|\					 SNDRV_PCM_RATE_192000)#define SNDRV_PCM_FMTBIT_S8		(1ULL << SNDRV_PCM_FORMAT_S8)#define SNDRV_PCM_FMTBIT_U8		(1ULL << SNDRV_PCM_FORMAT_U8)#define SNDRV_PCM_FMTBIT_S16_LE		(1ULL << SNDRV_PCM_FORMAT_S16_LE)#define SNDRV_PCM_FMTBIT_S16_BE		(1ULL << SNDRV_PCM_FORMAT_S16_BE)#define SNDRV_PCM_FMTBIT_U16_LE		(1ULL << SNDRV_PCM_FORMAT_U16_LE)#define SNDRV_PCM_FMTBIT_U16_BE		(1ULL << SNDRV_PCM_FORMAT_U16_BE)#define SNDRV_PCM_FMTBIT_S24_LE		(1ULL << SNDRV_PCM_FORMAT_S24_LE)#define SNDRV_PCM_FMTBIT_S24_BE		(1ULL << SNDRV_PCM_FORMAT_S24_BE)#define SNDRV_PCM_FMTBIT_U24_LE		(1ULL << SNDRV_PCM_FORMAT_U24_LE)#define SNDRV_PCM_FMTBIT_U24_BE		(1ULL << SNDRV_PCM_FORMAT_U24_BE)#define SNDRV_PCM_FMTBIT_S32_LE		(1ULL << SNDRV_PCM_FORMAT_S32_LE)#define SNDRV_PCM_FMTBIT_S32_BE		(1ULL << SNDRV_PCM_FORMAT_S32_BE)#define SNDRV_PCM_FMTBIT_U32_LE		(1ULL << SNDRV_PCM_FORMAT_U32_LE)#define SNDRV_PCM_FMTBIT_U32_BE		(1ULL << SNDRV_PCM_FORMAT_U32_BE)#define SNDRV_PCM_FMTBIT_FLOAT_LE	(1ULL << SNDRV_PCM_FORMAT_FLOAT_LE)#define SNDRV_PCM_FMTBIT_FLOAT_BE	(1ULL << SNDRV_PCM_FORMAT_FLOAT_BE)#define SNDRV_PCM_FMTBIT_FLOAT64_LE	(1ULL << SNDRV_PCM_FORMAT_FLOAT64_LE)#define SNDRV_PCM_FMTBIT_FLOAT64_BE	(1ULL << SNDRV_PCM_FORMAT_FLOAT64_BE)#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE (1ULL << SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE)#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE (1ULL << SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE)#define SNDRV_PCM_FMTBIT_MU_LAW		(1ULL << SNDRV_PCM_FORMAT_MU_LAW)#define SNDRV_PCM_FMTBIT_A_LAW		(1ULL << SNDRV_PCM_FORMAT_A_LAW)#define SNDRV_PCM_FMTBIT_IMA_ADPCM	(1ULL << SNDRV_PCM_FORMAT_IMA_ADPCM)#define SNDRV_PCM_FMTBIT_MPEG		(1ULL << SNDRV_PCM_FORMAT_MPEG)#define SNDRV_PCM_FMTBIT_GSM		(1ULL << SNDRV_PCM_FORMAT_GSM)#define SNDRV_PCM_FMTBIT_SPECIAL	(1ULL << SNDRV_PCM_FORMAT_SPECIAL)#define SNDRV_PCM_FMTBIT_S24_3LE	(1ULL << SNDRV_PCM_FORMAT_S24_3LE)#define SNDRV_PCM_FMTBIT_U24_3LE	(1ULL << SNDRV_PCM_FORMAT_U24_3LE)#define SNDRV_PCM_FMTBIT_S24_3BE	(1ULL << SNDRV_PCM_FORMAT_S24_3BE)#define SNDRV_PCM_FMTBIT_U24_3BE	(1ULL << SNDRV_PCM_FORMAT_U24_3BE)#define SNDRV_PCM_FMTBIT_S20_3LE	(1ULL << SNDRV_PCM_FORMAT_S20_3LE)#define SNDRV_PCM_FMTBIT_U20_3LE	(1ULL << SNDRV_PCM_FORMAT_U20_3LE)#define SNDRV_PCM_FMTBIT_S20_3BE	(1ULL << SNDRV_PCM_FORMAT_S20_3BE)#define SNDRV_PCM_FMTBIT_U20_3BE	(1ULL << SNDRV_PCM_FORMAT_U20_3BE)#define SNDRV_PCM_FMTBIT_S18_3LE	(1ULL << SNDRV_PCM_FORMAT_S18_3LE)#define SNDRV_PCM_FMTBIT_U18_3LE	(1ULL << SNDRV_PCM_FORMAT_U18_3LE)#define SNDRV_PCM_FMTBIT_S18_3BE	(1ULL << SNDRV_PCM_FORMAT_S18_3BE)#define SNDRV_PCM_FMTBIT_U18_3BE	(1ULL << SNDRV_PCM_FORMAT_U18_3BE)#ifdef SNDRV_LITTLE_ENDIAN#define SNDRV_PCM_FMTBIT_S16		SNDRV_PCM_FMTBIT_S16_LE#define SNDRV_PCM_FMTBIT_U16		SNDRV_PCM_FMTBIT_U16_LE#define SNDRV_PCM_FMTBIT_S24		SNDRV_PCM_FMTBIT_S24_LE#define SNDRV_PCM_FMTBIT_U24		SNDRV_PCM_FMTBIT_U24_LE#define SNDRV_PCM_FMTBIT_S32		SNDRV_PCM_FMTBIT_S32_LE#define SNDRV_PCM_FMTBIT_U32		SNDRV_PCM_FMTBIT_U32_LE#define SNDRV_PCM_FMTBIT_FLOAT		SNDRV_PCM_FMTBIT_FLOAT_LE#define SNDRV_PCM_FMTBIT_FLOAT64	SNDRV_PCM_FMTBIT_FLOAT64_LE#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE#endif#ifdef SNDRV_BIG_ENDIAN#define SNDRV_PCM_FMTBIT_S16		SNDRV_PCM_FMTBIT_S16_BE#define SNDRV_PCM_FMTBIT_U16		SNDRV_PCM_FMTBIT_U16_BE#define SNDRV_PCM_FMTBIT_S24		SNDRV_PCM_FMTBIT_S24_BE#define SNDRV_PCM_FMTBIT_U24		SNDRV_PCM_FMTBIT_U24_BE#define SNDRV_PCM_FMTBIT_S32		SNDRV_PCM_FMTBIT_S32_BE#define SNDRV_PCM_FMTBIT_U32		SNDRV_PCM_FMTBIT_U32_BE#define SNDRV_PCM_FMTBIT_FLOAT		SNDRV_PCM_FMTBIT_FLOAT_BE#define SNDRV_PCM_FMTBIT_FLOAT64	SNDRV_PCM_FMTBIT_FLOAT64_BE#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE#endifstruct _snd_pcm_file {	snd_pcm_substream_t * substream;	struct _snd_pcm_file * next;};typedef struct _snd_pcm_hw_rule snd_pcm_hw_rule_t;typedef int (*snd_pcm_hw_rule_func_t)(snd_pcm_hw_params_t *params,				      snd_pcm_hw_rule_t *rule);struct _snd_pcm_hw_rule {	unsigned int cond;	snd_pcm_hw_rule_func_t func;	int var;	int deps[4];	void *private;};typedef struct _snd_pcm_hw_constraints {	snd_mask_t masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 			 SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];	snd_interval_t intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -			     SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];	unsigned int rules_num;	unsigned int rules_all;	snd_pcm_hw_rule_t *rules;} snd_pcm_hw_constraints_t;static inline snd_mask_t *constrs_mask(snd_pcm_hw_constraints_t *constrs,				       snd_pcm_hw_param_t var){	return &constrs->masks[var - SNDRV_PCM_HW_PARAM_FIRST_MASK];}static inline snd_interval_t *constrs_interval(snd_pcm_hw_constraints_t *constrs,					  snd_pcm_hw_param_t var){	return &constrs->intervals[var - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL];}typedef struct {	unsigned int num;	unsigned int den_min, den_max, den_step;} ratnum_t;typedef struct {	unsigned int num_min, num_max, num_step;	unsigned int den;} ratden_t;typedef struct {	int nrats;	ratnum_t *rats;} snd_pcm_hw_constraint_ratnums_t;typedef struct {	int nrats;	ratden_t *rats;} snd_pcm_hw_constraint_ratdens_t;typedef struct {	unsigned int count;	unsigned int *list;	unsigned int mask;} snd_pcm_hw_constraint_list_t;struct _snd_pcm_runtime {	/* -- Status -- */	snd_pcm_substream_t *trigger_master;	snd_timestamp_t trigger_tstamp;	/* trigger timestamp */	int overrange;	snd_pcm_uframes_t avail_max;	snd_pcm_uframes_t hw_ptr_base;	/* Position at buffer restart */	snd_pcm_uframes_t hw_ptr_interrupt; /* Position at interrupt time*/	/* -- HW params -- */	snd_pcm_access_t access;	/* access mode */	snd_pcm_format_t format;	/* SNDRV_PCM_FORMAT_* */	snd_pcm_subformat_t subformat;	/* subformat */	unsigned int rate;		/* rate in Hz */	unsigned int channels;		/* channels */	snd_pcm_uframes_t period_size;	/* period size */	unsigned int periods;		/* periods */	snd_pcm_uframes_t buffer_size;	/* buffer size */	unsigned int tick_time;		/* tick time */	snd_pcm_uframes_t min_align;	/* Min alignment for the format */	size_t byte_align;	unsigned int frame_bits;	unsigned int sample_bits;	unsigned int info;	unsigned int rate_num;	unsigned int rate_den;	/* -- SW params -- */	int tstamp_timespec;		/* use timeval (0) or timespec (1) */	snd_pcm_tstamp_t tstamp_mode;	/* mmap timestamp is updated */  	unsigned int period_step;	unsigned int sleep_min;		/* min ticks to sleep */	snd_pcm_uframes_t xfer_align;	/* xfer size need to be a multiple */	snd_pcm_uframes_t start_threshold;	snd_pcm_uframes_t stop_threshold;	snd_pcm_uframes_t silence_threshold; /* Silence filling happens when						noise is nearest than this */	snd_pcm_uframes_t silence_size;	/* Silence filling size */	snd_pcm_uframes_t boundary;	/* pointers wrap point */	snd_pcm_uframes_t silence_start; /* starting pointer to silence area */	snd_pcm_uframes_t silence_filled; /* size filled with silence */	snd_pcm_sync_id_t sync;		/* hardware synchronization ID */	/* -- mmap -- */	volatile snd_pcm_mmap_status_t *status;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -