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

📄 pcm.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
#ifndef __SOUND_PCM_H#define __SOUND_PCM_H/* *  Digital Audio (PCM) abstract layer *  Copyright (c) by Jaroslav Kysela <perex@perex.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/mm.h>#include <linux/bitops.h>#define snd_pcm_substream_chip(substream) ((substream)->private_data)#define snd_pcm_chip(pcm) ((pcm)->private_data)#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)#include "pcm_oss.h"#endif/* *  Hardware (lowlevel) section */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 */};struct snd_pcm_substream;struct snd_pcm_ops {	int (*open)(struct snd_pcm_substream *substream);	int (*close)(struct snd_pcm_substream *substream);	int (*ioctl)(struct snd_pcm_substream * substream,		     unsigned int cmd, void *arg);	int (*hw_params)(struct snd_pcm_substream *substream,			 struct snd_pcm_hw_params *params);	int (*hw_free)(struct snd_pcm_substream *substream);	int (*prepare)(struct snd_pcm_substream *substream);	int (*trigger)(struct snd_pcm_substream *substream, int cmd);	snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *substream);	int (*copy)(struct snd_pcm_substream *substream, int channel,		    snd_pcm_uframes_t pos,		    void __user *buf, snd_pcm_uframes_t count);	int (*silence)(struct snd_pcm_substream *substream, int channel, 		       snd_pcm_uframes_t pos, snd_pcm_uframes_t count);	struct page *(*page)(struct snd_pcm_substream *substream,			     unsigned long offset);	int (*mmap)(struct snd_pcm_substream *substream, struct vm_area_struct *vma);	int (*ack)(struct snd_pcm_substream *substream);};/* * */#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 {	struct snd_pcm_substream *substream;	int no_compat_mmap;};struct snd_pcm_hw_rule;typedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *params,				      struct snd_pcm_hw_rule *rule);struct snd_pcm_hw_rule {	unsigned int cond;	snd_pcm_hw_rule_func_t func;	int var;	int deps[4];	void *private;};struct snd_pcm_hw_constraints {	struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 			 SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];	struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -			     SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];	unsigned int rules_num;	unsigned int rules_all;	struct snd_pcm_hw_rule *rules;};static inline struct snd_mask *constrs_mask(struct snd_pcm_hw_constraints *constrs,					    snd_pcm_hw_param_t var){	return &constrs->masks[var - SNDRV_PCM_HW_PARAM_FIRST_MASK];}static inline struct snd_interval *constrs_interval(struct snd_pcm_hw_constraints *constrs,						    snd_pcm_hw_param_t var){	return &constrs->intervals[var - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL];}struct snd_ratnum {	unsigned int num;	unsigned int den_min, den_max, den_step;};struct snd_ratden {	unsigned int num_min, num_max, num_step;	unsigned int den;};struct snd_pcm_hw_constraint_ratnums {	int nrats;	struct snd_ratnum *rats;};struct snd_pcm_hw_constraint_ratdens {	int nrats;	struct snd_ratden *rats;};struct snd_pcm_hw_constraint_list {	unsigned int count;	unsigned int *list;	unsigned int mask;};struct snd_pcm_runtime {	/* -- Status -- */	struct snd_pcm_substream *trigger_master;	struct timespec 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_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 */	union snd_pcm_sync_id sync;	/* hardware synchronization ID */	/* -- mmap -- */	struct snd_pcm_mmap_status *status;	struct snd_pcm_mmap_control *control;	/* -- locking / scheduling -- */	wait_queue_head_t sleep;	struct timer_list tick_timer;	struct fasync_struct *fasync;	/* -- private section -- */	void *private_data;	void (*private_free)(struct snd_pcm_runtime *runtime);	/* -- hardware description -- */	struct snd_pcm_hardware hw;	struct snd_pcm_hw_constraints hw_constraints;	/* -- interrupt callbacks -- */	void (*transfer_ack_begin)(struct snd_pcm_substream *substream);	void (*transfer_ack_end)(struct snd_pcm_substream *substream);	/* -- timer -- */	unsigned int timer_resolution;	/* timer resolution */	/* -- DMA -- */           	unsigned char *dma_area;	/* DMA area */	dma_addr_t dma_addr;		/* physical bus address (not accessible from main CPU) */	size_t dma_bytes;		/* size of DMA area */	struct snd_dma_buffer *dma_buffer_p;	/* allocated buffer */#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)	/* -- OSS things -- */	struct snd_pcm_oss_runtime oss;#endif};

⌨️ 快捷键说明

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