← Back to team overview

desktop-packages team mailing list archive

[Bug 996906]

 

as pulseaudio use snd_pcm_rewind() which require the sound card report
accurate hwptr position than those sound card which report hwptr
position at period bounary when interrupt occur


the difference between hda-intel and your ca0106 is the granularity of the pointer callback 


https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/include/linux/dmaengine.h


/**
 * enum dma_residue_granularity - Granularity of the reported transfer residue
 * @DMA_RESIDUE_GRANULARITY_DESCRIPTOR: Residue reporting is not support. The
 *  DMA channel is only able to tell whether a descriptor has been completed or
 *  not, which means residue reporting is not supported by this channel. The
 *  residue field of the dma_tx_state field will always be 0.
 * @DMA_RESIDUE_GRANULARITY_SEGMENT: Residue is updated after each successfully
 *  completed segment of the transfer (For cyclic transfers this is after each
 *  period). This is typically implemented by having the hardware generate an
 *  interrupt after each transferred segment and then the drivers updates the
 *  outstanding residue by the size of the segment. Another possibility is if
 *  the hardware supports scatter-gather and the segment descriptor has a field
 *  which gets set after the segment has been completed. The driver then counts
 *  the number of segments without the flag set to compute the residue.
 * @DMA_RESIDUE_GRANULARITY_BURST: Residue is updated after each transferred
 *  burst. This is typically only supported if the hardware has a progress
 *  register of some sort (E.g. a register with the current read/write address
 *  or a register with the amount of bursts/beats/bytes that have been
 *  transferred or still need to be transferred).
 */

hda-intel  can report DMA_RESIDUE_GRANULARITY_BURST

seem both read hwptr from hardware register

can your ca0106 report DMA_RESIDUE_GRANULARITY_SEGMENT or
DMA_RESIDUE_GRANULARITY_BURST ?


https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/ca0106/ca0106_main.c


static snd_pcm_uframes_t
snd_ca0106_pcm_pointer_playback(struct snd_pcm_substream *substream)
{
	struct snd_ca0106 *emu = snd_pcm_substream_chip(substream);
	struct snd_pcm_runtime *runtime = substream->runtime;
	struct snd_ca0106_pcm *epcm = runtime->private_data;
	unsigned int ptr, prev_ptr;
	int channel = epcm->channel_id;
	int timeout = 10;

	if (!epcm->running)
		return 0;

	prev_ptr = -1;
	do {
		ptr = snd_ca0106_ptr_read(emu, PLAYBACK_LIST_PTR, channel);
		ptr = (ptr >> 3) * runtime->period_size;
		ptr += bytes_to_frames(runtime,
			snd_ca0106_ptr_read(emu, PLAYBACK_POINTER, channel));
		if (ptr >= runtime->buffer_size)
			ptr -= runtime->buffer_size;
		if (prev_ptr == ptr)
			return ptr;
		prev_ptr = ptr;
	} while (--timeout);
	dev_warn(emu->card->dev, "ca0106: unstable DMA pointer!\n");
	return 0;
}


https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/hda/hda_controller.c

static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
{
	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
	struct azx *chip = apcm->chip;
	struct azx_dev *azx_dev = get_azx_dev(substream);
	return bytes_to_frames(substream->runtime,
			       azx_get_position(chip, azx_dev));
}

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to pulseaudio in Ubuntu.
https://bugs.launchpad.net/bugs/996906

Title:
  periodic audio skips with Intel HDA

Status in PulseAudio sound server:
  Confirmed
Status in pulseaudio package in Ubuntu:
  Confirmed

Bug description:
  When running PulseAudio, if I'm playing music via any source (Exaile, Totem,
  Flash in Firefox or Chromium, VLC, etc.) every few minutes the audio will skip
  once or twice.  top doesn't show any process eating CPU any more when it
  happens.  dmesg doesn't show anything.  Nothing else seems to be affected.  It
  doesn't seem to happen regularly.

  I just installed Ubuntu 12.04 from scratch (with pulseaudio 1:1.1-0ubuntu15),
  but the same thing happened in 10.04 on the same hardware.  Uninstalling the
  PulseAudio packages and going back to ALSA gives me no issues whatsoever, which
  is how I know the issue is with PulseAudio.  I'm using my onboard audio device:

  $ lspci | grep Audio
  00:14.2 Audio device: Advanced Micro Devices [AMD] nee ATI SBx00 Azalia (Intel
  HDA)

  Following mailing list instructions, pulseaudio -vvvv --log-time shows during a
  skip:

  ( 684.030|   5.000) I: [alsa-sink] alsa-sink.c: Underrun!
  ( 684.030|   0.000) I: [alsa-sink] alsa-sink.c: Increasing minimal latency to
  26.00 ms
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 26.00ms
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=60952
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15944
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 26.00ms
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=60952
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15944
  ( 684.031|   0.000) D: [alsa-sink] protocol-native.c: Underrun on 'ALSA
  Playback', 0 bytes in queue.
  ( 684.036|   0.004) D: [alsa-sink] protocol-native.c: Requesting rewind due to
  end of underrun.
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: Requested to rewind 10940
  bytes.
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: Limited to 3320 bytes.
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: before: 830
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: after: 830
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: Rewound 3320 bytes.
  ( 684.036|   0.000) D: [alsa-sink] sink.c: Processing rewind...
  ( 684.036|   0.000) D: [alsa-sink] sink.c: latency = 1337
  ( 684.036|   0.000) D: [alsa-sink] sink-input.c: Have to rewind 3320 bytes on
  render memblockq.
  ( 684.036|   0.000) D: [alsa-sink] source.c: Processing rewind...
  ( 696.234|  12.197) I: [alsa-sink] alsa-sink.c: Underrun!
  ( 696.234|   0.000) I: [alsa-sink] alsa-sink.c: Increasing wakeup watermark to
  15.99 ms
  ( 702.033|   5.799) I: [alsa-sink] alsa-sink.c: Underrun!
  ( 702.033|   0.000) I: [alsa-sink] alsa-sink.c: Increasing minimal latency to
  36.00 ms
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 36.00ms
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=59188
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15680
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 36.00ms
  ( 702.034|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=59188
  ( 702.034|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15680
  ( 702.034|   0.000) D: [alsa-sink] protocol-native.c: Underrun on 'ALSA
  Playback', 0 bytes in queue.

  ...and it goes on.

  The "Underrun!" messages alone happened a few times before, but it
  didn't skip.

  I'd like to use PulseAudio, but it's pretty annoying having audio skip all the
  time.

  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: pulseaudio 1:1.1-0ubuntu15
  ProcVersionSignature: Ubuntu 3.2.0-24.37-generic 3.2.14
  Uname: Linux 3.2.0-24-generic x86_64
  NonfreeKernelModules: nvidia
  AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.24.
  ApportVersion: 2.0.1-0ubuntu7
  Architecture: amd64
  AudioDevicesInUse:
   USER        PID ACCESS COMMAND
   /dev/snd/controlC0:  toxite     2136 F.... pulseaudio
   /dev/snd/pcmC0D0p:   toxite     2136 F...m pulseaudio
  Card0.Amixer.info:
   Card hw:0 'SB'/'HDA ATI SB at 0xfe024000 irq 16'
     Mixer name	: 'Realtek ALC889'
     Components	: 'HDA:10ec0889,1458a102,00100004'
     Controls      : 48
     Simple ctrls  : 22
  Date: Tue May  8 21:45:17 2012
  InstallationMedia: Ubuntu 12.04 LTS "Precise Pangolin" - Release amd64 (20120425)
  ProcEnviron:
   TERM=xterm
   PATH=(custom, user)
   LANG=en_US.UTF-8
   SHELL=/bin/bash
  SourcePackage: pulseaudio
  UpgradeStatus: No upgrade log present (probably fresh install)
  dmi.bios.date: 12/03/2009
  dmi.bios.vendor: Award Software International, Inc.
  dmi.bios.version: F2
  dmi.board.name: GA-790FXTA-UD5
  dmi.board.vendor: Gigabyte Technology Co., Ltd.
  dmi.board.version: x.x
  dmi.chassis.type: 3
  dmi.chassis.vendor: Gigabyte Technology Co., Ltd.
  dmi.modalias: dmi:bvnAwardSoftwareInternational,Inc.:bvrF2:bd12/03/2009:svnGigabyteTechnologyCo.,Ltd.:pnGA-790FXTA-UD5:pvr:rvnGigabyteTechnologyCo.,Ltd.:rnGA-790FXTA-UD5:rvrx.x:cvnGigabyteTechnologyCo.,Ltd.:ct3:cvr:
  dmi.product.name: GA-790FXTA-UD5
  dmi.sys.vendor: Gigabyte Technology Co., Ltd.

To manage notifications about this bug go to:
https://bugs.launchpad.net/pulseaudio/+bug/996906/+subscriptions