replay: Use Linux key codes
QemuInputEvent now stores Linux key codes for key events. Use those codes directly instead of translating between internal key code representations. Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260520-input-v3-16-7c9e4c7abe34@rsg.ci.i.u-tokyo.ac.jp> [ Marc-André - update replay-dump.py ] Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Akihiko Odaki committed
May 20, 2026 at 15:47 UTC
44a4d0623d6d28b10a4d34fc99b3146ebc60767c
3 files changed
+11
-19
replay/replay-input.c
+3
-17
@@ -23,8 +23,7 @@ void replay_save_input_event(QemuInputEvent *evt)
23
24
switch (evt->type) {
25
case INPUT_EVENT_KIND_KEY:
26
- replay_put_dword(KEY_VALUE_KIND_QCODE);
27
- replay_put_dword(qemu_input_linux_to_qcode(evt->key.key));
26
+ replay_put_dword(evt->key.key);
27
replay_put_byte(evt->key.down);
28
break;
29
case INPUT_EVENT_KIND_BTN:
@@ -55,25 +54,12 @@ void replay_save_input_event(QemuInputEvent *evt)
54
QemuInputEvent *replay_read_input_event(void)
55
{
56
QemuInputEvent *evt = g_new(QemuInputEvent, 1);
58
- int qcode;
57
58
evt->type = replay_get_dword();
59
switch (evt->type) {
60
case INPUT_EVENT_KIND_KEY:
63
- switch (replay_get_dword()) {
64
- case KEY_VALUE_KIND_NUMBER:
65
- qcode = qemu_input_key_number_to_qcode(replay_get_qword());
66
- evt->key.down = replay_get_byte();
67
- break;
68
- case KEY_VALUE_KIND_QCODE:
69
- qcode = (QKeyCode)replay_get_dword();
70
- evt->key.down = replay_get_byte();
71
- break;
72
- default:
73
- g_assert_not_reached();
74
- }
75
- evt->key.key = qcode < qemu_input_map_qcode_to_linux_len ?
76
- qemu_input_map_qcode_to_linux[qcode] : 0;
61
+ evt->key.key = replay_get_dword();
62
+ evt->key.down = replay_get_byte();
63
break;
64
case INPUT_EVENT_KIND_BTN:
65
evt->btn.button = (InputButton)replay_get_dword();
replay/replay.c
+1
-1
@@ -22,7 +22,7 @@
22
23
/* Current version of the replay mechanism.
24
Increase it when file format changes. */
25
-#define REPLAY_VERSION 0xe0200d
25
+#define REPLAY_VERSION 0xe0200e
26
/* Size of replay log header */
27
#define HEADER_SIZE (sizeof(uint32_t) + sizeof(uint64_t))
28
scripts/replay-dump.py
+7
-1
@@ -398,6 +398,9 @@ v12_event_table = [Decoder(0, "EVENT_INSTRUCTION", decode_instruction),
398
# EVENT_AUDIO_IN has changed
399
v13_event_table = v12_event_table
400
401
+# EVENT_ASYNC_INPUT has changed
402
+v14_event_table = v13_event_table
403
+
404
def parse_arguments():
405
"Grab arguments for script"
406
parser = argparse.ArgumentParser()
@@ -416,7 +419,10 @@ def decode_file(filename):
419
# see REPLAY_VERSION
420
print("HEADER: version 0x%x" % (version))
421
419
- if version == 0xe0200d:
422
+ if version == 0xe0200e:
423
+ event_decode_table = v14_event_table
424
+ replay_state.checkpoint_start = 30
425
+ elif version == 0xe0200d:
426
event_decode_table = v13_event_table
427
replay_state.checkpoint_start = 30
428
elif version == 0xe0200c: