Hi

On Mon, Oct 24, 2022 at 9:28 AM Volker Rümelin <[email protected]> wrote:

> Test if the audio subsystem can handle extreme up- and down-
> sampling ratios like 44100/1 and 1/44100. For some time these
> used to trigger QEMU aborts. The test was taken from
> https://gitlab.com/qemu-project/qemu/-/issues/71 where it was
> used to demonstrate a very different issue.
>
> Suggested-by: Marc-André Lureau <[email protected]>
> Signed-off-by: Volker Rümelin <[email protected]>
>

Thanks for working on this

It seems to show something different though:
"
A bug was just triggered in audio_calloc
Save all your work and restart without audio
I am sorry
"

AUD_open_out() is called with audsettings: {freq = 1, nchannels = 2, fmt =
AUDIO_FORMAT_S16, endianness = 0}

And that's it. Any idea?


---
>  tests/qtest/ac97-test.c | 40 +++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/tests/qtest/ac97-test.c b/tests/qtest/ac97-test.c
> index 74103efdfa..ce25f1d588 100644
> --- a/tests/qtest/ac97-test.c
> +++ b/tests/qtest/ac97-test.c
> @@ -42,16 +42,54 @@ static void *ac97_create(void *pci_bus,
> QGuestAllocator *alloc, void *addr)
>      return &ac97->obj;
>  }
>
> +/*
> + * This is rather a test of the audio subsystem and not an AC97 test.
> Test if
> + * the audio subsystem can handle a 44100/1 upsample ratio. With an audio
> + * mixing buffer size of 1024 audio frames, the audio subsystem should
> either
> + * generate 1024 output frames from 0.0232 input frames or silently give
> up.
> + */
> +static void ac97_playback_upsample(void *obj, void *data, QGuestAllocator
> *alloc)
> +{
> +    QAC97 *ac97 = obj;
> +    QPCIDevice *dev = &ac97->dev;
> +    QPCIBar bar0;
> +
> +    qpci_device_enable(dev);
> +    bar0 = qpci_iomap(dev, 0, NULL);
> +    qpci_io_writew(dev, bar0, 0x2c, 0x1);
> +}
> +
> +/*
> + * This test is similar to the playback upsample test. This time the audio
> + * subsystem should either generate 0.0232 audio frames from 1024 input
> frames
> + * or silently give up.
> + */
> +static void ac97_record_downsample(void *obj, void *data, QGuestAllocator
> *alloc)
> +{
> +    QAC97 *ac97 = obj;
> +    QPCIDevice *dev = &ac97->dev;
> +    QPCIBar bar0;
> +
> +    qpci_device_enable(dev);
> +    bar0 = qpci_iomap(dev, 0, NULL);
> +    qpci_io_writew(dev, bar0, 0x32, 0x1);
> +}
> +
>  static void ac97_register_nodes(void)
>  {
>      QOSGraphEdgeOptions opts = {
> -        .extra_device_opts = "addr=04.0",
> +        .extra_device_opts = "addr=04.0,audiodev=snd0",
> +        .after_cmd_line = "-audiodev none,id=snd0"
> +                          ",out.frequency=44100,in.frequency=44100",
>      };
>      add_qpci_address(&opts, &(QPCIAddress) { .devfn = QPCI_DEVFN(4, 0) });
>
>      qos_node_create_driver("AC97", ac97_create);
>      qos_node_produces("AC97", "pci-device");
>      qos_node_consumes("AC97", "pci-bus", &opts);
> +
> +    qos_add_test("playback_upsample", "AC97", ac97_playback_upsample,
> NULL);
> +    qos_add_test("record_downsample", "AC97", ac97_record_downsample,
> NULL);
>  }
>
>  libqos_init(ac97_register_nodes);
> --
> 2.35.3
>
>
>

-- 
Marc-André Lureau

Reply via email to