#ifndef EMULATOR_INCLUDE_EMULATOR_AUDIO_H_ #define EMULATOR_INCLUDE_EMULATOR_AUDIO_H_ #include "common/abi.h" #include "common/common.h" namespace Libs::Audio { void Initialize(); void Shutdown(); struct Lifecycle { static constexpr const char* name = "Audio"; static constexpr auto initialize = Libs::Audio::Initialize; static constexpr auto shutdown = Libs::Audio::Shutdown; }; namespace AudioOut { struct AudioOutOutputParam; struct AudioOutPortState; int KYTY_SYSV_ABI AudioOutInit(); int KYTY_SYSV_ABI AudioOutOpen(int user_id, int type, int index, uint32_t len, uint32_t freq, uint32_t param); int KYTY_SYSV_ABI AudioOutSetVolume(int handle, uint32_t flag, int* vol); int KYTY_SYSV_ABI AudioOutOutputs(AudioOutOutputParam* param, uint32_t num); int KYTY_SYSV_ABI AudioOutOutput(int handle, const void* ptr); int KYTY_SYSV_ABI AudioOutClose(int handle); int KYTY_SYSV_ABI AudioOutGetPortState(int handle, AudioOutPortState* state); } // namespace AudioOut namespace AudioOut2 { struct AudioOut2ContextParam; struct AudioOut2PortParam; struct AudioOut2Attribute; struct AudioOut2PortState; struct AudioOut2SystemState; struct AudioOut2Position; struct AudioOut2SpeakerInfo; struct AudioOut2SystemDebugStateParam; struct AudioOut2MasteringParamsHeader; struct AudioOut2MasteringStatesHeader; using AudioOut2ContextHandle = uint64_t; using AudioOut2PortHandle = uint64_t; using AudioOut2UserHandle = uintptr_t; using AudioOut2SpeakerArrayHandle = void*; int KYTY_SYSV_ABI AudioOut2Initialize(); int KYTY_SYSV_ABI AudioOut2ContextQueryMemory(const AudioOut2ContextParam* params, size_t* memory_size); int KYTY_SYSV_ABI AudioOut2ContextResetParam(AudioOut2ContextParam* params); int KYTY_SYSV_ABI AudioOut2ContextCreate(const AudioOut2ContextParam* params, void* buffer, size_t buffer_size, AudioOut2ContextHandle* ctx); int KYTY_SYSV_ABI AudioOut2ContextDestroy(AudioOut2ContextHandle ctx); int KYTY_SYSV_ABI AudioOut2ContextSetAttributes(AudioOut2ContextHandle ctx, const AudioOut2Attribute* attributes, uint32_t num); int KYTY_SYSV_ABI AudioOut2ContextAdvance(AudioOut2ContextHandle ctx); int KYTY_SYSV_ABI AudioOut2ContextPush(AudioOut2ContextHandle ctx, uint32_t blocking); int KYTY_SYSV_ABI AudioOut2ContextGetQueueLevel(AudioOut2ContextHandle ctx, uint32_t* queue_level, uint32_t* available_queues); int KYTY_SYSV_ABI AudioOut2PortCreate(AudioOut2ContextHandle ctx, const AudioOut2PortParam* params, AudioOut2PortHandle* port); int KYTY_SYSV_ABI AudioOut2PortDestroy(AudioOut2PortHandle port); int KYTY_SYSV_ABI AudioOut2PortSetAttributes(AudioOut2PortHandle port, const AudioOut2Attribute* attributes, uint32_t num); int KYTY_SYSV_ABI AudioOut2PortGetState(AudioOut2PortHandle port, AudioOut2PortState* state); int KYTY_SYSV_ABI AudioOut2GetSystemState(AudioOut2SystemState* state); int KYTY_SYSV_ABI AudioOut2UserCreate(uint32_t user_id, AudioOut2UserHandle* handle); int KYTY_SYSV_ABI AudioOut2UserDestroy(AudioOut2UserHandle handle); size_t KYTY_SYSV_ABI AudioOut2GetSpeakerArrayMemorySize(uint32_t num_speakers, uint8_t is_3d, uint8_t is_ambisonics); int KYTY_SYSV_ABI AudioOut2SpeakerArrayCreate(AudioOut2SpeakerArrayHandle* handle, const void* vbap_params, const void* ambi_params); int KYTY_SYSV_ABI AudioOut2SpeakerArrayDestroy(AudioOut2SpeakerArrayHandle handle); int KYTY_SYSV_ABI AudioOut2GetSpeakerArrayCoefficients( AudioOut2SpeakerArrayHandle handle, AudioOut2Position pos, float spread, float* coefficients, uint32_t num_coefficients, uint8_t height_aware, float downmix_spread_radius); int KYTY_SYSV_ABI AudioOut2GetSpeakerArrayAmbisonicsCoefficients(AudioOut2SpeakerArrayHandle handle, uint32_t ambisonics_channel, float* coefficients, uint32_t num_coefficients); int KYTY_SYSV_ABI AudioOut2GetSpeakerInfo(AudioOut2SpeakerInfo* info, uint32_t flags); int KYTY_SYSV_ABI AudioOut2SetSystemDebugState(const AudioOut2SystemDebugStateParam* param); int KYTY_SYSV_ABI AudioOut2Set3DLatency(uint32_t user_id, uint32_t output, uint32_t latency_us); int KYTY_SYSV_ABI AudioOut2MasteringInit(uint32_t flags); int KYTY_SYSV_ABI AudioOut2MasteringSetParam(const AudioOut2MasteringParamsHeader* param, uint32_t output, uint32_t flags); int KYTY_SYSV_ABI AudioOut2MasteringGetState(AudioOut2MasteringStatesHeader* state, uint32_t output, AudioOut2UserHandle user); int KYTY_SYSV_ABI AudioOut2MasteringTerm(); } // namespace AudioOut2 namespace AudioIn { int KYTY_SYSV_ABI AudioInOpen(int user_id, int type, int index, uint32_t len, uint32_t freq, uint32_t param); int KYTY_SYSV_ABI AudioInHqOpen(int user_id, int type, int index, uint32_t len, uint32_t freq, uint32_t param); int KYTY_SYSV_ABI AudioInClose(int handle); int KYTY_SYSV_ABI AudioInInput(int handle, void* dest); int KYTY_SYSV_ABI AudioInGetSilentState(int handle); } // namespace AudioIn namespace VoiceQoS { int KYTY_SYSV_ABI VoiceQoSInit(void* mem_block, uint32_t mem_size, int32_t app_type); } // namespace VoiceQoS namespace Ajm { struct AjmBatchInfo; struct AjmBatchError; struct AjmBuffer; struct AjmDecAt9ConfigDataInfo { uint32_t channels; uint32_t sample_rate; uint32_t frame_samples_per_channel; uint32_t superframe_samples_per_channel; uint32_t superframe_size; }; int KYTY_SYSV_ABI AjmInitialize(int64_t reserved, uint32_t* context); int KYTY_SYSV_ABI AjmModuleRegister(uint32_t context, uint32_t codec, int64_t reserved); int KYTY_SYSV_ABI AjmModuleUnregister(uint32_t context, uint32_t codec); int KYTY_SYSV_ABI AjmFinalize(uint32_t context); int KYTY_SYSV_ABI AjmInstanceCreate(uint32_t context, uint32_t codec, uint64_t flags, uint32_t* instance); int KYTY_SYSV_ABI AjmInstanceDestroy(uint32_t context, uint32_t instance); int KYTY_SYSV_ABI AjmMemoryRegister(uint32_t context, void* ptr, size_t pages); int KYTY_SYSV_ABI AjmMemoryUnregister(uint32_t context, void* ptr); int KYTY_SYSV_ABI AjmBatchInitialize(void* buffer, size_t size, AjmBatchInfo* info); int KYTY_SYSV_ABI AjmBatchStart(uint32_t context, const AjmBatchInfo* info, int priority, AjmBatchError* error, uint32_t* batch); int KYTY_SYSV_ABI AjmBatchWait(uint32_t context, uint32_t batch, uint32_t timeout, AjmBatchError* error); int KYTY_SYSV_ABI AjmBatchCancel(uint32_t context, uint32_t batch); int KYTY_SYSV_ABI AjmBatchErrorDump(const AjmBatchInfo* info, AjmBatchError* error); int KYTY_SYSV_ABI AjmBatchJobInitialize(AjmBatchInfo* info, uint32_t instance, const void* codec_parameters, size_t codec_parameters_size, void* result); int KYTY_SYSV_ABI AjmBatchJobClearContext(AjmBatchInfo* info, uint32_t instance, void* result); int KYTY_SYSV_ABI AjmBatchJobDecode(AjmBatchInfo* info, uint32_t instance, const void* bitstream_input, size_t bitstream_input_size, void* pcm_output, size_t pcm_output_size, void* result); int KYTY_SYSV_ABI AjmBatchJobDecodeSingle(AjmBatchInfo* info, uint32_t instance, const void* bitstream_input, size_t bitstream_input_size, void* pcm_output, size_t pcm_output_size, void* result); int KYTY_SYSV_ABI AjmBatchJobDecodeSplit(AjmBatchInfo* info, uint32_t instance, const AjmBuffer* input_buffers, size_t input_buffers_num, const AjmBuffer* output_buffers, size_t output_buffers_num, void* result); int KYTY_SYSV_ABI AjmBatchJobEncode(AjmBatchInfo* info, uint32_t instance, const void* pcm_input, size_t pcm_input_size, void* bitstream_output, size_t bitstream_output_size, void* result); int KYTY_SYSV_ABI AjmBatchJobGetInfo(AjmBatchInfo* info, uint32_t instance, void* result); int KYTY_SYSV_ABI AjmBatchJobGetCodecInfo(AjmBatchInfo* info, uint32_t instance, void* result, size_t result_size); int KYTY_SYSV_ABI AjmBatchJobSetGaplessDecode(AjmBatchInfo* info, uint32_t instance, const void* gapless_decode, int reset, void* result); int KYTY_SYSV_ABI AjmBatchJobGetGaplessDecode(AjmBatchInfo* info, uint32_t instance, void* result); int KYTY_SYSV_ABI AjmBatchJobSetResampleParameters(AjmBatchInfo* info, uint32_t instance, float ratio, uint32_t flags, void* result); int KYTY_SYSV_ABI AjmBatchJobSetResampleParametersEx(AjmBatchInfo* info, uint32_t instance, float ratio_start, float ratio_change_per_sample, uint32_t flags, void* result); int KYTY_SYSV_ABI AjmBatchJobGetResampleInfo(AjmBatchInfo* info, uint32_t instance, void* result); int KYTY_SYSV_ABI AjmBatchJobGetStatistics(AjmBatchInfo* info, float interval, void* result); int KYTY_SYSV_ABI AjmBatchJobControl(AjmBatchInfo* info, uint32_t instance, uint64_t flags, const void* sideband_input, size_t sideband_input_size, void* sideband_output, size_t sideband_output_size); int KYTY_SYSV_ABI AjmBatchJobRun(AjmBatchInfo* info, uint32_t instance, uint64_t flags, const void* data_input, size_t data_input_size, void* data_output, size_t data_output_size, void* sideband_output, size_t sideband_output_size); int KYTY_SYSV_ABI AjmBatchJobRunSplit(AjmBatchInfo* info, uint32_t instance, uint64_t flags, const AjmBuffer* input_buffers, size_t input_buffers_num, const AjmBuffer* output_buffers, size_t output_buffers_num, void* sideband_output, size_t sideband_output_size); int KYTY_SYSV_ABI AjmDecAt9ParseConfigData(const void* config_data, AjmDecAt9ConfigDataInfo* config_info); const char* KYTY_SYSV_ABI AjmStrError(int error); } // namespace Ajm namespace AvPlayer { struct AvPlayerInitData; struct AvPlayerFrameInfoEx; struct AvPlayerFrameInfo; struct AvPlayerInternal; using Bool = uint8_t; AvPlayerInternal* KYTY_SYSV_ABI AvPlayerInit(AvPlayerInitData* init); int KYTY_SYSV_ABI AvPlayerInitEx(const void* init_ex, AvPlayerInternal** handle); int KYTY_SYSV_ABI AvPlayerPostInit(AvPlayerInternal* h, const void* post_init); int KYTY_SYSV_ABI AvPlayerAddSource(AvPlayerInternal* h, const char* filename); int KYTY_SYSV_ABI AvPlayerAddSourceEx(AvPlayerInternal* h, uint32_t uri_type, const void* source_details); int KYTY_SYSV_ABI AvPlayerStreamCount(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerGetStreamInfo(AvPlayerInternal* h, uint32_t stream_id, void* info); int KYTY_SYSV_ABI AvPlayerGetStreamInfoEx(AvPlayerInternal* h, uint32_t stream_id, void* info); int KYTY_SYSV_ABI AvPlayerEnableStream(AvPlayerInternal* h, uint32_t stream_id); int KYTY_SYSV_ABI AvPlayerDisableStream(AvPlayerInternal* h, uint32_t stream_id); int KYTY_SYSV_ABI AvPlayerChangeStream(AvPlayerInternal* h, uint32_t old_stream_id, uint32_t new_stream_id); int KYTY_SYSV_ABI AvPlayerStart(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerStartEx(AvPlayerInternal* h, const void* start_info_ex); int KYTY_SYSV_ABI AvPlayerStop(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerPause(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerResume(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerSetLooping(AvPlayerInternal* h, Bool loop); int KYTY_SYSV_ABI AvPlayerSetTrickSpeed(AvPlayerInternal* h, int32_t trick_speed); int KYTY_SYSV_ABI AvPlayerSetAvSyncMode(AvPlayerInternal* h, uint32_t sync_mode); int KYTY_SYSV_ABI AvPlayerSetAvailableBandwidth(AvPlayerInternal* h, uint32_t start_bandwidth, uint32_t minimum_bandwidth, uint32_t maximum_bandwidth); Bool KYTY_SYSV_ABI AvPlayerGetVideoData(AvPlayerInternal* h, AvPlayerFrameInfo* video_info); Bool KYTY_SYSV_ABI AvPlayerGetVideoDataEx(AvPlayerInternal* h, AvPlayerFrameInfoEx* video_info); Bool KYTY_SYSV_ABI AvPlayerGetAudioData(AvPlayerInternal* h, AvPlayerFrameInfo* audio_info); Bool KYTY_SYSV_ABI AvPlayerIsActive(AvPlayerInternal* h); uint64_t KYTY_SYSV_ABI AvPlayerCurrentTime(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerJumpToTime(AvPlayerInternal* h, uint64_t time_ms); int KYTY_SYSV_ABI AvPlayerClose(AvPlayerInternal* h); int KYTY_SYSV_ABI AvPlayerSetLogCallback(void* callback, void* user_data); } // namespace AvPlayer } // namespace Libs::Audio #endif /* EMULATOR_INCLUDE_EMULATOR_AUDIO_H_ */