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
