[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/10] hw/audio/virtio-sound: add placeholder for buffer write po
From: |
Volker Rümelin |
Subject: |
[PATCH 10/10] hw/audio/virtio-sound: add placeholder for buffer write position |
Date: |
Thu, 4 Jan 2024 21:34:22 +0100 |
When a running audio stream is migrated, on average half of a
recording stream buffer is lost or half of a playback stream
buffer is played twice. Add a placeholder for the write position
of the current stream buffer to the migrated data. Additional
program code is required to resolve the above issues. However,
the placeholder makes it possible to add code in a backwards and
forwards compatible way.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/virtio-snd.c | 2 ++
include/hw/audio/virtio-snd.h | 2 ++
2 files changed, 4 insertions(+)
diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c
index 328ee54808..71281967bf 100644
--- a/hw/audio/virtio-snd.c
+++ b/hw/audio/virtio-snd.c
@@ -83,6 +83,7 @@ static const VMStateDescription vmstate_virtio_snd_stream = {
.name = "virtio-sound-stream",
.fields = (const VMStateField[]) {
VMSTATE_UINT32(state, VirtIOSoundPCMStream),
+ VMSTATE_UINT32(buf_wpos, VirtIOSoundPCMStream),
VMSTATE_UINT32(info.hdr.hda_fn_nid, VirtIOSoundPCMStream),
VMSTATE_UINT32(info.features, VirtIOSoundPCMStream),
VMSTATE_UINT64(info.formats, VirtIOSoundPCMStream),
@@ -1434,6 +1435,7 @@ static int virtio_snd_post_load(VirtIODevice *vdev)
virtio_snd_pcm_set_active(stream, true);
}
}
+ stream->buf_wpos = 0;
}
for (i = 0; i < VIRTIO_SND_VQ_MAX; i++) {
diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h
index 141e60e23c..d46204967a 100644
--- a/include/hw/audio/virtio-snd.h
+++ b/include/hw/audio/virtio-snd.h
@@ -127,6 +127,8 @@ struct VirtIOSoundPCMStream {
virtio_snd_pcm_set_params params;
uint32_t id;
uint32_t state;
+ /* placeholder: write position in current VirtIOSoundPCMBuffer */
+ uint32_t buf_wpos;
/* channel position values (VIRTIO_SND_CHMAP_XXX) */
uint8_t positions[VIRTIO_SND_CHMAP_MAX_SIZE];
VirtIOSound *s;
--
2.35.3
- Re: [PATCH 02/10] hw/audio/virtio-sound: allocate all streams in advance, (continued)
- [PATCH 06/10] hw/audio/virtio-sound: introduce virtio_snd_pcm_open(), Volker Rümelin, 2024/01/04
- [PATCH 05/10] hw/audio/virtio-sound: return correct command response size, Volker Rümelin, 2024/01/04
- [PATCH 04/10] hw/audio/virtio-sound: add stream state variable, Volker Rümelin, 2024/01/04
- [PATCH 07/10] hw/audio/virtio-sound: introduce virtio_snd_set_active(), Volker Rümelin, 2024/01/04
- [PATCH 08/10] hw/audio/virtio-sound: fix segmentation fault in tx/rx xfer handler, Volker Rümelin, 2024/01/04
- [PATCH 10/10] hw/audio/virtio-sound: add placeholder for buffer write position,
Volker Rümelin <=
- [PATCH 09/10] hw/audio/virtio-sound: add missing vmstate fields, Volker Rümelin, 2024/01/04