Skip to contentSkip to conversation

es1968: fix jitter on some maestro cards

PATCH In review Andreas Mueller 3 participants 4 messages Mar 29, 2008 – Apr 14, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 es1968: fix jitter on some maestro cards

This patch suppresses jitter on several Maestro cards in stereo mode (ALSA of course).

The patch is also incorporated in the *BSD drivers where I "ported" it from. I am barely used to driver-development so please take a look (esp. the channel parameters), nevertheless it completely works for me.

Without this patch most of the stereo audio gets out of sync and really distorted (oss-emulation with mplayer at 48000khz worked somehow).

CCed to those listed in the .c file.

Yours sincerely,
Andreas Mueller.

pci/es1968.c renamed from pci/es1968.c.old +21 -1
@@ -1816,7 +1816,24 @@
 
 	return 0;
 }
+/*
+ * suppress jitter on some maestros when playing stereo
+ */
+static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
+{
+	unsigned int cp1;
+	unsigned int cp2;
+	unsigned int diff;
 
+	cp1 = __apu_get_register(chip, 0, 5);
+	cp2 = __apu_get_register(chip, 1, 5);
+	diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
+	
+	if (diff > 1) {
+		__maestro_write(chip, IDR0_DATA_PORT, cp1);
+	}
+}
+	
 /*
  * update pointer
  */
@@ -1937,8 +1954,11 @@
 		struct esschan *es;
 		spin_lock(&chip->substream_lock);
 		list_for_each_entry(es, &chip->substream_list, list) {
-			if (es->running)
+			if (es->running) {
 				snd_es1968_update_pcm(chip, es);
+				if (es->fmt & ESS_FMT_STEREO)
+					snd_es1968_suppress_jitter(chip, es);
+			}
 		}
 		spin_unlock(&chip->substream_lock);
 		if (chip->in_measurement) {
#1 lore raw
Quoted 11 lines · Andreas Mueller

This patch suppresses jitter on several Maestro cards in stereo mode (ALSA of course).

The patch is also incorporated in the *BSD drivers where I "ported" it from. I am barely used to driver-development so please take a look (esp. the channel parameters), nevertheless it completely works for me.

Without this patch most of the stereo audio gets out of sync and really distorted (oss-emulation with mplayer at 48000khz worked somehow).

CCed to those listed in the .c file.

Added the alsa-devel list (and re-attached the patch). My TerraTec DMX (ESS Canyon3D, ES1970MS-3D) doesn't need this but doesn't seem to suffer from it either. Otherwise no idea about this.

Rene.

pci/es1968.c renamed from pci/es1968.c.old +21 -1
@@ -1816,7 +1816,24 @@
 
 	return 0;
 }
+/*
+ * suppress jitter on some maestros when playing stereo
+ */
+static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
+{
+	unsigned int cp1;
+	unsigned int cp2;
+	unsigned int diff;
 
+	cp1 = __apu_get_register(chip, 0, 5);
+	cp2 = __apu_get_register(chip, 1, 5);
+	diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
+	
+	if (diff > 1) {
+		__maestro_write(chip, IDR0_DATA_PORT, cp1);
+	}
+}
+	
 /*
  * update pointer
  */
@@ -1937,8 +1954,11 @@
 		struct esschan *es;
 		spin_lock(&chip->substream_lock);
 		list_for_each_entry(es, &chip->substream_list, list) {
-			if (es->running)
+			if (es->running) {
 				snd_es1968_update_pcm(chip, es);
+				if (es->fmt & ESS_FMT_STEREO)
+					snd_es1968_suppress_jitter(chip, es);
+			}
 		}
 		spin_unlock(&chip->substream_lock);
 		if (chip->in_measurement) {

_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

#2 lore raw

At Tue, 01 Apr 2008 00:24:43 +0200,

Quoted 10 lines · Rene Herman
Quoted 7 lines · Andreas Mueller

This patch suppresses jitter on several Maestro cards in stereo mode (ALSA of course).

The patch is also incorporated in the *BSD drivers where I "ported" it from. I am barely used to driver-development so please take a look (esp. the channel parameters), nevertheless it completely works for me.

Quoted 8 lines
Quoted 4 lines

Without this patch most of the stereo audio gets out of sync and really distorted (oss-emulation with mplayer at 48000khz worked somehow).

CCed to those listed in the .c file.

Added the alsa-devel list (and re-attached the patch). My TerraTec DMX (ESS Canyon3D, ES1970MS-3D) doesn't need this but doesn't seem to suffer from it either. Otherwise no idea about this.

This should depend on the sample rate you use. 48k would work without the patch.

Anyway, I applied it to ALSA tree now. Thanks.

Takashi

Quoted 43 lines

Rene.
[2 es1968_jitter.patch <text/plain (7bit)>]

pci/es1968.c renamed from pci/es1968.c.old +21 -1
@@ -1816,7 +1816,24 @@
 
 	return 0;
 }
+/*
+ * suppress jitter on some maestros when playing stereo
+ */
+static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
+{
+	unsigned int cp1;
+	unsigned int cp2;
+	unsigned int diff;
 
+	cp1 = __apu_get_register(chip, 0, 5);
+	cp2 = __apu_get_register(chip, 1, 5);
+	diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
+	
+	if (diff > 1) {
+		__maestro_write(chip, IDR0_DATA_PORT, cp1);
+	}
+}
+	
 /*
  * update pointer
  */
@@ -1937,8 +1954,11 @@
 		struct esschan *es;
 		spin_lock(&chip->substream_lock);
 		list_for_each_entry(es, &chip->substream_list, list) {
-			if (es->running)
+			if (es->running) {
 				snd_es1968_update_pcm(chip, es);
+				if (es->fmt & ESS_FMT_STEREO)
+					snd_es1968_suppress_jitter(chip, es);
+			}
 		}
 		spin_unlock(&chip->substream_lock);
 		if (chip->in_measurement) {
#3 lore raw
Quoted 14 lines · Takashi Iwai

At Tue, 01 Apr 2008 00:24:43 +0200,

Quoted 12 lines · Rene Herman
Quoted 10 lines · Andreas Mueller

This patch suppresses jitter on several Maestro cards in stereo mode (ALSA of course).

The patch is also incorporated in the *BSD drivers where I "ported" it from. I am barely used to driver-development so please take a look (esp. the channel parameters), nevertheless it completely works for me.

Without this patch most of the stereo audio gets out of sync and really distorted (oss-emulation with mplayer at 48000khz worked somehow).

Quoted 7 lines
Quoted 4 lines
Quoted 1 line

CCed to those listed in the .c file.

Added the alsa-devel list (and re-attached the patch). My TerraTec DMX (ESS Canyon3D, ES1970MS-3D) doesn't need this but doesn't seem to suffer from it either. Otherwise no idea about this.

This should depend on the sample rate you use. 48k would work without the patch.

Just to be clear archive-wise -- on this Canyon3D, so does 44100.

Quoted 1 line

Anyway, I applied it to ALSA tree now. Thanks.

Rene.