本文整理汇总了C++中snd_pcm_stop函数的典型用法代码示例。如果您正苦于以下问题:C++ snd_pcm_stop函数的具体用法?C++ snd_pcm_stop怎么用?C++ snd_pcm_stop使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了snd_pcm_stop函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: uni_reader_irq_handler
/*
* uni_reader_irq_handler
* In case of error audio stream is stopped; stop action is protected via PCM
* stream lock to avoid race condition with trigger callback.
*/
static irqreturn_t uni_reader_irq_handler(int irq, void *dev_id)
{
irqreturn_t ret = IRQ_NONE;
struct uniperif *reader = dev_id;
unsigned int status;
if (reader->state == UNIPERIF_STATE_STOPPED) {
/* Unexpected IRQ: do nothing */
dev_warn(reader->dev, "unexpected IRQ ");
return IRQ_HANDLED;
}
/* Get interrupt status & clear them immediately */
status = GET_UNIPERIF_ITS(reader);
SET_UNIPERIF_ITS_BCLR(reader, status);
/* Check for fifo overflow error */
if (unlikely(status & UNIPERIF_ITS_FIFO_ERROR_MASK(reader))) {
dev_err(reader->dev, "FIFO error detected");
snd_pcm_stream_lock(reader->substream);
snd_pcm_stop(reader->substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock(reader->substream);
return IRQ_HANDLED;
}
return ret;
}
开发者ID:aejsmith,项目名称:linux,代码行数:34,代码来源:uniperif_reader.c
示例2: snd_atiixp_xrun_dma
/*
* XRUN detected, and stop the PCM substream
*/
static void snd_atiixp_xrun_dma(atiixp_t *chip, atiixp_dma_t *dma)
{
if (! dma->substream || ! dma->running)
return;
snd_printdd("atiixp: XRUN detected (DMA %d)\n", dma->ops->type);
snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN);
}
开发者ID:idtek,项目名称:linux-2.6.11,代码行数:10,代码来源:atiixp.c
示例3: pcm_disconnect_substream
/*
Stop substream if still running.
*/
static void pcm_disconnect_substream(struct snd_pcm_substream *substream)
{
if (substream->runtime && snd_pcm_running(substream)) {
snd_pcm_stream_lock_irq(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_DISCONNECTED);
snd_pcm_stream_unlock_irq(substream);
}
}
开发者ID:Cool-Joe,项目名称:imx23-audio,代码行数:11,代码来源:pcm.c
示例4: snd_atiixp_xrun_dma
/*
* XRUN detected, and stop the PCM substream
*/
static void snd_atiixp_xrun_dma(struct atiixp *chip, struct atiixp_dma *dma)
{
if (! dma->substream || ! dma->running)
return;
dev_dbg(chip->card->dev, "XRUN detected (DMA %d)\n", dma->ops->type);
snd_pcm_stream_lock(dma->substream);
snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock(dma->substream);
}
开发者ID:3null,项目名称:linux,代码行数:12,代码来源:atiixp.c
示例5: abort_alsa_playback
static void abort_alsa_playback(struct ua101 *ua)
{
unsigned long flags;
if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states)) {
snd_pcm_stream_lock_irqsave(ua->playback.substream, flags);
snd_pcm_stop(ua->playback.substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock_irqrestore(ua->playback.substream, flags);
}
}
开发者ID:AeroGirl,项目名称:VAR-SOM-AM33-SDK7-Kernel,代码行数:10,代码来源:ua101.c
示例6: bcm947xx_dma_abort
static void bcm947xx_dma_abort(struct snd_pcm_substream *substream)
{
if (snd_pcm_running(substream)) {
unsigned long flags;
DBG("%s XRUN\n", __FUNCTION__);
snd_pcm_stream_lock_irqsave(substream, flags);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock_irqrestore(substream, flags);
}
}
开发者ID:Antares84,项目名称:asuswrt-merlin,代码行数:10,代码来源:bcm947xx-pcm.c
示例7: snd_atiixp_xrun_dma
/*
* XRUN detected, and stop the PCM substream
*/
static void snd_atiixp_xrun_dma(struct atiixp_modem *chip,
struct atiixp_dma *dma)
{
if (! dma->substream || ! dma->running)
return;
snd_printdd("atiixp-modem: XRUN detected (DMA %d)\n", dma->ops->type);
snd_pcm_stream_lock(dma->substream);
snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock(dma->substream);
}
开发者ID:AeroGirl,项目名称:VAR-SOM-AM33-SDK7-Kernel,代码行数:13,代码来源:atiixp_modem.c
示例8: abort_alsa_capture
static void abort_alsa_capture(struct ua101 *ua)
{
unsigned long flags;
if (test_bit(ALSA_CAPTURE_RUNNING, &ua->states)) {
snd_pcm_stream_lock_irqsave(ua->capture.substream, flags);
snd_pcm_stop(ua->capture.substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock_irqrestore(ua->capture.substream, flags);
}
}
开发者ID:AeroGirl,项目名称:VAR-SOM-AM33-SDK7-Kernel,代码行数:10,代码来源:ua101.c
示例9: hdmi_audio_abort_stream
static void hdmi_audio_abort_stream(struct snd_pcm_substream *substream)
{
unsigned long flags;
snd_pcm_stream_lock_irqsave(substream, flags);
if (snd_pcm_running(substream))
snd_pcm_stop(substream, SNDRV_PCM_STATE_DISCONNECTED);
snd_pcm_stream_unlock_irqrestore(substream, flags);
}
开发者ID:develersrl,项目名称:winmate-kernel,代码行数:11,代码来源:mxc-hdmi-core.c
示例10: pcm_timeout_func
static void pcm_timeout_func(unsigned long data)
{
struct tegra_runtime_data *prtd = (struct tegra_runtime_data*)data;
struct snd_pcm_substream *substream = prtd->substream;
struct snd_pcm_runtime *runtime = substream->runtime;
unsigned long current_tick = jiffies;
if( jiffies_to_msecs(current_tick - prtd->pcm_timeout_tick) >= (runtime->period_size/(runtime->rate/1000))*runtime->periods*2){
dev_err(substream->pcm->dev, "pcm_timeout_func!!! time : %d\n", jiffies_to_msecs(current_tick - prtd->pcm_timeout_tick));
snd_pcm_stop(prtd->substream, SNDRV_PCM_STATE_XRUN);
}
}
开发者ID:ARMP,项目名称:android_kernel_lge_x3,代码行数:12,代码来源:tegra_pcm.c
示例11: stm32_sai_isr
static irqreturn_t stm32_sai_isr(int irq, void *devid)
{
struct stm32_sai_sub_data *sai = (struct stm32_sai_sub_data *)devid;
struct snd_pcm_substream *substream = sai->substream;
struct platform_device *pdev = sai->pdev;
unsigned int sr, imr, flags;
snd_pcm_state_t status = SNDRV_PCM_STATE_RUNNING;
regmap_read(sai->regmap, STM_SAI_IMR_REGX, &imr);
regmap_read(sai->regmap, STM_SAI_SR_REGX, &sr);
flags = sr & imr;
if (!flags)
return IRQ_NONE;
regmap_update_bits(sai->regmap, STM_SAI_CLRFR_REGX, SAI_XCLRFR_MASK,
SAI_XCLRFR_MASK);
if (flags & SAI_XIMR_OVRUDRIE) {
dev_err(&pdev->dev, "IT %s\n",
STM_SAI_IS_PLAYBACK(sai) ? "underrun" : "overrun");
status = SNDRV_PCM_STATE_XRUN;
}
if (flags & SAI_XIMR_MUTEDETIE)
dev_dbg(&pdev->dev, "IT mute detected\n");
if (flags & SAI_XIMR_WCKCFGIE) {
dev_err(&pdev->dev, "IT wrong clock configuration\n");
status = SNDRV_PCM_STATE_DISCONNECTED;
}
if (flags & SAI_XIMR_CNRDYIE)
dev_warn(&pdev->dev, "IT Codec not ready\n");
if (flags & SAI_XIMR_AFSDETIE) {
dev_warn(&pdev->dev, "IT Anticipated frame synchro\n");
status = SNDRV_PCM_STATE_XRUN;
}
if (flags & SAI_XIMR_LFSDETIE) {
dev_warn(&pdev->dev, "IT Late frame synchro\n");
status = SNDRV_PCM_STATE_XRUN;
}
if (status != SNDRV_PCM_STATE_RUNNING) {
snd_pcm_stream_lock(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock(substream);
}
return IRQ_HANDLED;
}
开发者ID:asmalldev,项目名称:linux,代码行数:53,代码来源:stm32_sai_sub.c
示例12: hdmi_dai_abort
static void hdmi_dai_abort(struct device *dev)
{
struct hdmi_audio_data *ad = dev_get_drvdata(dev);
mutex_lock(&ad->current_stream_lock);
if (ad->current_stream && ad->current_stream->runtime &&
snd_pcm_running(ad->current_stream)) {
dev_err(dev, "HDMI display disabled, aborting playback\n");
snd_pcm_stream_lock_irq(ad->current_stream);
snd_pcm_stop(ad->current_stream, SNDRV_PCM_STATE_DISCONNECTED);
snd_pcm_stream_unlock_irq(ad->current_stream);
}
mutex_unlock(&ad->current_stream_lock);
}
开发者ID:Chong-Li,项目名称:cse522,代码行数:14,代码来源:omap-hdmi-audio.c
示例13: ipq_mi2s_irq
static irqreturn_t ipq_mi2s_irq(int intrsrc, void *data)
{
int dma_ch;
uint32_t ret = IRQ_NONE;
uint32_t has_xrun, pending;
struct snd_pcm_substream *substream = data;
struct snd_pcm_runtime *runtime = substream->runtime;
struct ipq_lpass_runtime_data_t *prtd =
(struct ipq_lpass_runtime_data_t *)runtime->private_data;
if (prtd)
dma_ch = prtd->lpaif_info.dma_ch;
else
return IRQ_NONE;
pending = (intrsrc
& (UNDER_CH(dma_ch) | PER_CH(dma_ch) | ERR_CH(dma_ch)));
has_xrun = (pending & UNDER_CH(dma_ch));
if (unlikely(has_xrun) && substream->runtime &&
snd_pcm_running(substream)) {
pr_debug("%s %d: xrun warning\n", __func__, __LINE__);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
pending &= ~UNDER_CH(dma_ch);
ret = IRQ_HANDLED;
}
if (pending & PER_CH(dma_ch)) {
if (++prtd->pcm_stream_info.period_index >= runtime->periods)
prtd->pcm_stream_info.period_index = 0;
snd_pcm_period_elapsed(substream);
pending &= ~PER_CH(dma_ch);
ret = IRQ_HANDLED;
}
if (pending & UNDER_CH(dma_ch)) {
snd_pcm_period_elapsed(substream);
pr_debug("%s %d: xrun warning\n", __func__, __LINE__);
ret = IRQ_HANDLED;
}
if (pending & ERR_CH(dma_ch)) {
pr_debug("%s %d: Bus access warning\n", __func__, __LINE__);
ret = IRQ_HANDLED;
}
return ret;
}
开发者ID:darcyg,项目名称:ap_project_v2,代码行数:50,代码来源:ipq-pcm-mi2s.c
示例14: loopback_check_format
static int loopback_check_format(struct loopback_cable *cable, int stream)
{
struct snd_pcm_runtime *runtime, *cruntime;
struct loopback_setup *setup;
struct snd_card *card;
int check;
if (cable->valid != CABLE_VALID_BOTH) {
if (stream == SNDRV_PCM_STREAM_PLAYBACK)
goto __notify;
return 0;
}
runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->
substream->runtime;
cruntime = cable->streams[SNDRV_PCM_STREAM_CAPTURE]->
substream->runtime;
check = runtime->format != cruntime->format ||
runtime->rate != cruntime->rate ||
runtime->channels != cruntime->channels;
if (!check)
return 0;
if (stream == SNDRV_PCM_STREAM_CAPTURE) {
return -EIO;
} else {
snd_pcm_stop(cable->streams[SNDRV_PCM_STREAM_CAPTURE]->
substream, SNDRV_PCM_STATE_DRAINING);
__notify:
runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->
substream->runtime;
setup = get_setup(cable->streams[SNDRV_PCM_STREAM_PLAYBACK]);
card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card;
if (setup->format != runtime->format) {
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
&setup->format_id);
setup->format = runtime->format;
}
if (setup->rate != runtime->rate) {
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
&setup->rate_id);
setup->rate = runtime->rate;
}
if (setup->channels != runtime->channels) {
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
&setup->channels_id);
setup->channels = runtime->channels;
}
}
return 0;
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:49,代码来源:aloop.c
示例15: had_process_hot_unplug
int had_process_hot_unplug(struct snd_intelhad *intelhaddata)
{
int caps, retval = 0;
enum intel_had_aud_buf_type buf_id;
struct had_pvt_data *had_stream;
unsigned long flag_irqs;
pr_debug("Enter:%s", __func__);
had_stream = intelhaddata->private_data;
buf_id = intelhaddata->curr_buf;
spin_lock_irqsave(&intelhaddata->had_spinlock, flag_irqs);
if (intelhaddata->drv_status == HAD_DRV_DISCONNECTED) {
pr_debug("Device already disconnected\n");
spin_unlock_irqrestore(&intelhaddata->had_spinlock, flag_irqs);
return retval;
} else {
/* Disable Audio */
caps = HDMI_AUDIO_BUFFER_DONE;
retval = had_set_caps(HAD_SET_DISABLE_AUDIO_INT, &caps);
retval = had_set_caps(HAD_SET_DISABLE_AUDIO, NULL);
intelhaddata->ops->enable_audio(intelhaddata->stream_info.had_substream, 0);
}
intelhaddata->drv_status = HAD_DRV_DISCONNECTED;
/* Report to above ALSA layer */
if (intelhaddata->stream_info.had_substream != NULL) {
spin_unlock_irqrestore(&intelhaddata->had_spinlock, flag_irqs);
pr_debug("%s: unlock -> sending pcm_stop -> lock\n", __func__);
mutex_lock(&had_mutex);
if (intelhaddata->stream_info.had_substream != NULL)
snd_pcm_stop(intelhaddata->stream_info.had_substream,
SNDRV_PCM_STATE_DISCONNECTED);
mutex_unlock(&had_mutex);
spin_lock_irqsave(&intelhaddata->had_spinlock, flag_irqs);
}
had_stream->stream_type = HAD_INIT;
spin_unlock_irqrestore(&intelhaddata->had_spinlock, flag_irqs);
kfree(intelhaddata->chmap->chmap);
intelhaddata->chmap->chmap = NULL;
pr_debug("%s: unlocked -> returned\n", __func__);
return retval;
}
开发者ID:Druboo666,项目名称:android_kernel_asus_moorefield,代码行数:46,代码来源:intel_mid_hdmi_audio_if.c
示例16: pxa2xx_pcm_dma_irq
void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id)
{
struct snd_pcm_substream *substream = dev_id;
struct pxa2xx_runtime_data *rtd = substream->runtime->private_data;
int dcsr;
dcsr = DCSR(dma_ch);
DCSR(dma_ch) = dcsr & ~DCSR_STOPIRQEN;
if (dcsr & DCSR_ENDINTR) {
snd_pcm_period_elapsed(substream);
} else {
printk(KERN_ERR "%s: DMA error on channel %d (DCSR=%#x)\n",
rtd->params->name, dma_ch, dcsr);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
}
}
开发者ID:antonywcl,项目名称:AR-5315u_PLD,代码行数:17,代码来源:pxa2xx-pcm-lib.c
示例17: snd_stm_pcm_player_irq_handler
static irqreturn_t snd_stm_pcm_player_irq_handler(int irq, void *dev_id)
{
irqreturn_t result = IRQ_NONE;
struct snd_stm_pcm_player *pcm_player = dev_id;
unsigned int status;
snd_stm_printd(2, "snd_stm_pcm_player_irq_handler(irq=%d, "
"dev_id=0x%p)\n", irq, dev_id);
BUG_ON(!pcm_player);
BUG_ON(!snd_stm_magic_valid(pcm_player));
/* Get interrupt status & clear them immediately */
preempt_disable();
status = get__AUD_PCMOUT_ITS(pcm_player);
set__AUD_PCMOUT_ITS_CLR(pcm_player, status);
preempt_enable();
/* Underflow? */
if (unlikely(status & mask__AUD_PCMOUT_ITS__UNF__PENDING(pcm_player))) {
snd_stm_printe("Underflow detected in PCM player '%s'!\n",
dev_name(pcm_player->device));
snd_pcm_stop(pcm_player->substream, SNDRV_PCM_STATE_XRUN);
result = IRQ_HANDLED;
} else if (likely(status &
mask__AUD_PCMOUT_ITS__NSAMPLE__PENDING(pcm_player))) {
/* Period successfully played */
do {
BUG_ON(!pcm_player->substream);
snd_stm_printd(2, "Period elapsed ('%s')\n",
dev_name(pcm_player->device));
snd_pcm_period_elapsed(pcm_player->substream);
result = IRQ_HANDLED;
} while (0);
}
/* Some alien interrupt??? */
BUG_ON(result != IRQ_HANDLED);
return result;
}
开发者ID:coolshou,项目名称:kernel-pdk7105,代码行数:45,代码来源:pcm_player.c
示例18: pxa2xx_pcm_dma_irq
void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id)
{
struct snd_pcm_substream *substream = dev_id;
int dcsr;
dcsr = DCSR(dma_ch);
DCSR(dma_ch) = dcsr & ~DCSR_STOPIRQEN;
if (dcsr & DCSR_ENDINTR) {
snd_pcm_period_elapsed(substream);
} else {
printk(KERN_ERR "DMA error on channel %d (DCSR=%#x)\n",
dma_ch, dcsr);
snd_pcm_stream_lock(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
snd_pcm_stream_unlock(substream);
}
}
开发者ID:3null,项目名称:linux,代码行数:18,代码来源:pxa2xx-pcm-lib.c
示例19: had_process_hot_plug
int had_process_hot_plug(struct snd_intelhad *intelhaddata)
{
int retval = 0;
enum intel_had_aud_buf_type buf_id;
struct snd_pcm_substream *substream;
struct had_pvt_data *had_stream;
unsigned long flag_irqs;
pr_debug("Enter:%s", __func__);
substream = intelhaddata->stream_info.had_substream;
had_stream = intelhaddata->private_data;
spin_lock_irqsave(&intelhaddata->had_spinlock, flag_irqs);
if (intelhaddata->drv_status == HAD_DRV_CONNECTED) {
pr_debug("Device already connected\n");
spin_unlock_irqrestore(&intelhaddata->had_spinlock, flag_irqs);
return retval;
}
buf_id = intelhaddata->curr_buf;
intelhaddata->buff_done = buf_id;
intelhaddata->drv_status = HAD_DRV_CONNECTED;
spin_unlock_irqrestore(&intelhaddata->had_spinlock, flag_irqs);
pr_debug("Processing HOT_PLUG, buf_id = %d\n", buf_id);
/* Safety check */
if (substream) {
pr_debug("There should not be active PB from ALSA\n");
pr_debug("Signifies, cable is plugged-in even before\n");
pr_debug("processing snd_pcm_disconnect\n");
/* Set runtime->state to hw_params done */
snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP);
}
had_build_channel_allocation_map(intelhaddata);
return retval;
}
开发者ID:Druboo666,项目名称:android_kernel_asus_moorefield,代码行数:39,代码来源:intel_mid_hdmi_audio_if.c
示例20: pcm_afe_process_rx_pkt
static void pcm_afe_process_rx_pkt(uint32_t opcode,
uint32_t token, uint32_t *payload,
void *priv)
{
struct pcm_afe_info *prtd = priv;
unsigned long dsp_flags;
struct snd_pcm_substream *substream = NULL;
struct snd_pcm_runtime *runtime = NULL;
uint16_t event;
if (prtd == NULL)
return;
substream = prtd->substream;
runtime = substream->runtime;
pr_debug("%s\n", __func__);
spin_lock_irqsave(&prtd->dsp_lock, dsp_flags);
switch (opcode) {
case AFE_EVENT_RT_PROXY_PORT_STATUS: {
event = (uint16_t)((0xFFFF0000 & payload[0]) >> 0x10);
switch (event) {
case AFE_EVENT_RTPORT_START: {
prtd->dsp_cnt = 0;
prtd->poll_time = ((unsigned long)((
snd_pcm_lib_period_bytes(prtd->substream)
* 1000 * 1000)/(runtime->rate
* runtime->channels * 2)));
pr_debug("prtd->poll_time : %d", prtd->poll_time);
break;
}
case AFE_EVENT_RTPORT_STOP:
pr_debug("%s: event!=0\n", __func__);
prtd->start = 0;
snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP);
break;
case AFE_EVENT_RTPORT_LOW_WM:
pr_debug("%s: Underrun\n", __func__);
break;
case AFE_EVENT_RTPORT_HI_WM:
pr_debug("%s: Overrun\n", __func__);
break;
default:
break;
}
break;
}
case APR_BASIC_RSP_RESULT: {
switch (payload[0]) {
case AFE_SERVICE_CMD_RTPORT_RD:
pr_debug("Read done\n");
prtd->pcm_irq_pos += snd_pcm_lib_period_bytes
(prtd->substream);
snd_pcm_period_elapsed(prtd->substream);
break;
default:
break;
}
break;
}
default:
break;
}
spin_unlock_irqrestore(&prtd->dsp_lock, dsp_flags);
}
开发者ID:98416,项目名称:Z7Max_NX505J_H129_kernel,代码行数:63,代码来源:msm-pcm-afe.c
注:本文中的snd_pcm_stop函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论