Comment 8 for bug 1188425

Revision history for this message
Artur de Araújo (artur-stat) wrote :

Thanks for giving attention to my problem.

The hardware decoder is integrated in the logitech Z-5500 speakers. I don't have knowledge of any specific limit on the amount of data. There is however information regarding a maximum hw buffer size on the pulseaudio logs:

D: [pulseaudio] alsa-util.c: Trying a52:0 with SND_PCM_NO_AUTO_FORMAT ...
D: [pulseaudio] alsa-util.c: Managed to open a52:0
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 32 bit Little Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 32 bit Big Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Float 32 bit Little Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Float 32 bit Big Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 32 bit Little Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 32 bit Big Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 24 bit Little Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 24 bit Big Endian) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 24 bit Little Endian in 3bytes) failed: Invalid argument
D: [pulseaudio] alsa-util.c: snd_pcm_hw_params_set_format(Signed 24 bit Big Endian in 3bytes) failed: Invalid argument
D: [pulseaudio] alsa-util.c: Maximum hw buffer size is 320 ms
D: [pulseaudio] alsa-util.c: Set buffer size first (to 3840 samples), period size second (to 480 samples).
I: [pulseaudio] alsa-util.c: Device a52:0 doesn't support sample format s32le, changed to s16le.
I: [pulseaudio] alsa-sink.c: Successfully opened device a52:0.
I: [pulseaudio] alsa-sink.c: Selected mapping 'Digital Surround 5.1 (IEC958/AC3)' (iec958-ac3-surround-51).
I: [pulseaudio] alsa-sink.c: Cannot enable timer-based scheduling, falling back to sound IRQ scheduling.
I: [pulseaudio] alsa-sink.c: Successfully enabled mmap() mode.
I: [pulseaudio] (alsa-lib)control.c: Invalid CTL a52:0
I: [pulseaudio] alsa-util.c: Unable to attach to mixer a52:0: No such file or directory
I: [pulseaudio] alsa-sink.c: Failed to find a working mixer device.

The dca plugin reports the same number of samples. Here is what I get from the dca plugin (heavier cpu usage):

D: [pulseaudio] reserve-wrap.c: Successfully create reservation lock monitor for device 'Audio0'
D: [pulseaudio] alsa-util.c: Trying dca:0 with SND_PCM_NO_AUTO_FORMAT ...
D: [pulseaudio] alsa-util.c: Managed to open dca:0
I: [pulseaudio] alsa-util.c: Trying to disable ALSA period wakeups, using timers only
D: [pulseaudio] alsa-util.c: Maximum hw buffer size is 341 ms
D: [pulseaudio] alsa-util.c: Set buffer size first (to 96000 samples), period size second (to 96000 samples).
I: [pulseaudio] alsa-util.c: ALSA period wakeups disabled
I: [pulseaudio] alsa-sink.c: Successfully opened device dca:0.
I: [pulseaudio] alsa-sink.c: Selected mapping 'Digital Surround 5.1 (IEC958/DTS)' (iec958-dts-surround-51).
I: [pulseaudio] alsa-sink.c: Successfully enabled mmap() mode.
I: [pulseaudio] alsa-sink.c: Successfully enabled timer-based scheduling mode.
I: [pulseaudio] (alsa-lib)control.c: Invalid CTL dca:0
I: [pulseaudio] alsa-util.c: Unable to attach to mixer dca:0: No such file or directory
I: [pulseaudio] alsa-util.c: Successfully attached to mixer 'hw:0'

Note that the dca plugin finds mixer 'hw:0' while the a52 plugin doesn't. The dca.conf file is also a lot different from the a52.conf file. Here is the dca.conf:

defaults.pcm.dca.aes0 0x06
defaults.pcm.dca.aes1 0x82
defaults.pcm.dca.aes2 0x00
defaults.pcm.dca.aes3 0x02

pcm.!dca {
    @args [ CARD DEV AES0 AES1 AES2 AES3 ]

    @args.CARD {
        type string
        default {
            @func getenv
            vars [
                ALSA_IEC958_CARD
                ALSA_PCM_CARD
                ALSA_CARD
            ]
            default {
                @func refer
                name defaults.pcm.iec958.card
            }
        }
    }

    @args.DEV {
        type integer
        default {
            @func igetenv
            vars [
                ALSA_IEC958_DEVICE
            ]
            default {
                @func refer
                name defaults.pcm.iec958.device
            }
        }
    }

    @args.AES0 {
        type integer
 default {
     @func refer
     name defaults.pcm.dca.aes0
 }
    }

    @args.AES1 {
        type integer
 default {
     @func refer
     name defaults.pcm.dca.aes1
 }
    }

    @args.AES2 {
        type integer
 default {
     @func refer
     name defaults.pcm.dca.aes2
 }
    }

    @args.AES3 {
        type integer
 default {
     @func refer
     name defaults.pcm.dca.aes3
 }
    }

    type dca
    slave.pcm {
        @func refer
        name {
            @func concat
            strings [
                "cards."
                {
                    @func card_driver
                    card $CARD
                }
                ".pcm.iec958." $DEV ":"
                "CARD=" $CARD ","
                "AES0=" $AES0 ","
  "AES1=" $AES1 ","
  "AES2=" $AES2 ","
  "AES3=" $AES3
            ]
        }
    }

    hint {
        show {
            @func refer
            name defaults.namehint.basic
        }
        description "DTS Encoding through IEC958 (S/PDIF)"
        device $DEV
    }
}

I haven't written these files. The developers did.

I could try an a52.conf file identical to this one. But it might not work. It will depend of what the a52 plugin accepts. Anyway I will try it. I will keep you posted.

Thanks again.