diff options
author | Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru> | 2017-02-02 08:50:54 +0300 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2017-03-01 15:11:44 +0100 |
commit | 3d4d16f4dc101e16f643acc44dfffdbaf2a8f01c (patch) | |
tree | d30418f9f9aef197aae8e79f4e29948edb1b98b3 /audio/audio.c | |
parent | e7c83a885f865128ae3cf1946f8cb538b63cbfba (diff) | |
download | qemu-3d4d16f4dc101e16f643acc44dfffdbaf2a8f01c.zip qemu-3d4d16f4dc101e16f643acc44dfffdbaf2a8f01c.tar.gz qemu-3d4d16f4dc101e16f643acc44dfffdbaf2a8f01c.tar.bz2 |
replay: add record/replay for audio passthrough
This patch adds recording and replaying audio data. Is saves synchronization
information for audio out and inputs from the microphone.
v2: removed unneeded whitespace change
Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
Message-id: 20170202055054.4848.94901.stgit@PASHA-ISP.lan02.inno
[ kraxel: add qemu/error-report.h include to fix osx build failure ]
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'audio/audio.c')
-rw-r--r-- | audio/audio.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/audio/audio.c b/audio/audio.c index c845a44..21f7b0b 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -28,6 +28,7 @@ #include "qemu/timer.h" #include "sysemu/sysemu.h" #include "qemu/cutils.h" +#include "sysemu/replay.h" #define AUDIO_CAP "audio" #include "audio_int.h" @@ -1387,6 +1388,7 @@ static void audio_run_out (AudioState *s) prev_rpos = hw->rpos; played = hw->pcm_ops->run_out (hw, live); + replay_audio_out(&played); if (audio_bug (AUDIO_FUNC, hw->rpos >= hw->samples)) { dolog ("hw->rpos=%d hw->samples=%d played=%d\n", hw->rpos, hw->samples, played); @@ -1450,9 +1452,12 @@ static void audio_run_in (AudioState *s) while ((hw = audio_pcm_hw_find_any_enabled_in (hw))) { SWVoiceIn *sw; - int captured, min; + int captured = 0, min; - captured = hw->pcm_ops->run_in (hw); + if (replay_mode != REPLAY_MODE_PLAY) { + captured = hw->pcm_ops->run_in(hw); + } + replay_audio_in(&captured, hw->conv_buf, &hw->wpos, hw->samples); min = audio_pcm_hw_find_min_in (hw); hw->total_samples_captured += captured - min; |