es1968: fix jitter on some maestro cards
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) {
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
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) {
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.