@samitouri / QOSamiQemu / commits / 44a4d0623d

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: