| // Provides data structures for additional details for metrics events. |
| syntax = "proto2"; |
| |
| message RecordDetails { |
| reserved 1 to 11, 14 to 18; |
| // Additional details about an unexpected exit of a child process within |
| // the emulator. |
| optional EmulatorChildProcessExitDetails emulator_child_process_exit_details = |
| 12; |
| // Additional details about wave formats from the Window's host system. |
| optional WaveFormatDetails wave_format_details = 13; |
| optional EmulatorDllDetails emulator_dll_details = 19; |
| } |
| |
| message WaveFormatDetails { |
| // Format requested by WASAPI `GetMixFormat` system call. |
| optional WaveFormat requested = 1; |
| // Originally the requested wave format that's modified by the emulator. Only |
| // populated if the emulator decides the requested wave format should not be |
| // used. |
| optional WaveFormat modified = 2; |
| // Format that is valid and closest matching to the modified format, if the |
| // modified was rejected. Should only be populated if modified is also |
| // non-null and was rejected by WASAPI `IsFormatSupported` system call. |
| optional WaveFormat closest_matched = 3; |
| } |
| |
| // Defines the format of waveformat audio data. This information is used by |
| // WASAPI to determine how to process the audio playback data coming from the |
| // emulator. |
| // |
| // The fields in the structure come from WAVEFORMATEXTENSIBLE of win32 api. |
| // https://docs.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatextensible |
| message WaveFormat { |
| // Ex. 65534 (Maps to WAVE_FORMAT_EXTENSIBLE) |
| optional int32 format_tag = 1; |
| // Number of channels. |
| optional int32 channels = 2; |
| // Sample rate in Hz. Ex: 48000 |
| optional int32 samples_per_sec = 3; |
| // Required average data-transfer rate for the format tag. Usually this will |
| // be samples_per_sec * block_align, since the format tag is usually |
| // WAVE_FORMAT_IEEE_FLOAT or it's extensible and SubFormat is |
| // KSDATAFORMAT_SUBTYPE_IEEE_FLOAT. |
| optional int32 avg_bytes_per_sec = 4; |
| // Minimum atomic unit of data based on the format_tag. Usually this will |
| // just be bits_per_samples * channels. |
| optional int32 block_align = 5; |
| // Bits used per sample. Must be a multiple of 8. |
| optional int32 bits_per_sample = 6; |
| // Size in bytes of extra information appended to WAVEFORMATEX struct. |
| optional int32 size_bytes = 7; |
| |
| // The next fields are part of the WAVEFORMATEXTENSIBLE struct. They will only |
| // be non-null if format_tag is WAVE_FORMAT_EXTENSIBLE. |
| |
| // Bit depth. Can be any value. Ex. bits_per_sample is 24, |
| // but samples is 20. Note: This value is a union, so it could mean something |
| // slightly different, but most likely won't. Refer to doc for more info. |
| optional int32 samples = 8; |
| // Bitmask mapping channels in stream to speaker positions. |
| // Ex. 3 ( SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT ) |
| optional int64 channel_mask = 9; |
| // Similar to format_tag, but for WAVEFORMATEXTENSIBLE structs. |
| optional WaveFormatSubFormat sub_format = 10; |
| |
| // Subformat GUID mapping: |
| // https://github.com/retep998/winapi-rs/blob/2f76bdea3a79817ccfab496fbd1786d5a697387b/src/shared/ksmedia.rs |
| enum WaveFormatSubFormat { |
| KSDATAFORMAT_SUBTYPE_INVALID = 0; |
| KSDATAFORMAT_SUBTYPE_ANALOG = 1; |
| KSDATAFORMAT_SUBTYPE_PCM = 2; |
| KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = 3; |
| KSDATAFORMAT_SUBTYPE_DRM = 4; |
| KSDATAFORMAT_SUBTYPE_ALAW = 5; |
| KSDATAFORMAT_SUBTYPE_MULAW = 6; |
| KSDATAFORMAT_SUBTYPE_ADPCM = 7; |
| KSDATAFORMAT_SUBTYPE_MPEG = 8; |
| } |
| } |
| |
| enum EmulatorProcessType { |
| PROCESS_TYPE_UNKNOWN = 0; |
| PROCESS_TYPE_MAIN = 1; |
| PROCESS_TYPE_BLOCK = 2; |
| PROCESS_TYPE_METRICS = 3; |
| PROCESS_TYPE_NET = 4; |
| PROCESS_TYPE_SLIRP = 5; |
| PROCESS_TYPE_GPU = 6; |
| PROCESS_TYPE_SOUND = 7; |
| PROCESS_TYPE_BROKER = 8; |
| PROCESS_TYPE_SPU = 9; |
| } |
| |
| message EmulatorChildProcessExitDetails { |
| // The Windows exit code of the child process |
| optional uint32 exit_code = 1; |
| // The process identifier, as defined by the ProcessType enum in the |
| // emulator code. |
| optional EmulatorProcessType process_type = 2; |
| } |
| |
| message EmulatorDllDetails { |
| optional string dll_base_name = 1; |
| } |