mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 16:32:39 +00:00
148 lines
4.8 KiB
C++
148 lines
4.8 KiB
C++
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "common/bit_field.h"
|
|
#include "common/enum.h"
|
|
#include "common/types.h"
|
|
|
|
namespace Core::Loader {
|
|
class SymbolsResolver;
|
|
}
|
|
|
|
namespace Libraries::Ajm {
|
|
|
|
struct AjmBatchInfo {
|
|
void* pBuffer;
|
|
u64 offset;
|
|
u64 size;
|
|
};
|
|
|
|
struct AjmBatchError {
|
|
int error_code;
|
|
const void* job_addr;
|
|
u32 cmd_offset;
|
|
const void* job_ra;
|
|
};
|
|
|
|
struct AjmBuffer {
|
|
u8* p_address;
|
|
u64 size;
|
|
};
|
|
|
|
enum Identifier : u8 {
|
|
AjmIdentJob = 0,
|
|
AjmIdentInputRunBuf = 1,
|
|
AjmIdentInputControlBuf = 2,
|
|
AjmIdentControlFlags = 3,
|
|
AjmIdentRunFlags = 4,
|
|
AjmIdentReturnAddressBuf = 6,
|
|
AjmIdentInlineBuf = 7,
|
|
AjmIdentOutputRunBuf = 17,
|
|
AjmIdentOutputControlBuf = 18,
|
|
};
|
|
|
|
struct AjmChunkHeader {
|
|
u32 ident : 6;
|
|
u32 payload : 20;
|
|
u32 reserved : 6;
|
|
u32 size;
|
|
};
|
|
|
|
struct AjmChunkBuffer {
|
|
AjmChunkHeader header;
|
|
void* p_address;
|
|
};
|
|
|
|
enum class AjmJobControlFlags : u64 {
|
|
Reset = 1 << 0,
|
|
Initialize = 1 << 1,
|
|
Resample = 1 << 2,
|
|
};
|
|
DECLARE_ENUM_FLAG_OPERATORS(AjmJobControlFlags)
|
|
|
|
enum class AjmJobRunFlags : u64 {
|
|
GetCodecInfo = 1 << 0,
|
|
MultipleFrames = 1 << 1,
|
|
};
|
|
DECLARE_ENUM_FLAG_OPERATORS(AjmJobRunFlags)
|
|
|
|
enum class AjmJobSidebandFlags : u64 {
|
|
GaplessDecode = 1 << 0,
|
|
Format = 1 << 1,
|
|
Stream = 1 << 2,
|
|
};
|
|
DECLARE_ENUM_FLAG_OPERATORS(AjmJobSidebandFlags)
|
|
|
|
union AjmJobFlags {
|
|
u64 raw;
|
|
struct {
|
|
u64 version : 3;
|
|
u64 codec : 8;
|
|
AjmJobRunFlags run_flags : 2;
|
|
AjmJobControlFlags control_flags : 3;
|
|
u64 reserved : 29;
|
|
AjmJobSidebandFlags sideband_flags : 3;
|
|
};
|
|
};
|
|
|
|
union AjmInstanceFlags {
|
|
u64 raw;
|
|
struct {
|
|
u64 version : 3;
|
|
u64 channels : 4;
|
|
u64 format : 3;
|
|
u64 pad : 22;
|
|
u64 codec : 28;
|
|
};
|
|
};
|
|
|
|
struct AjmDecMp3ParseFrame;
|
|
enum class AjmCodecType : u32;
|
|
|
|
int PS4_SYSV_ABI sceAjmBatchCancel();
|
|
int PS4_SYSV_ABI sceAjmBatchErrorDump();
|
|
void* PS4_SYSV_ABI sceAjmBatchJobControlBufferRa(void* p_buffer, u32 instance_id, u64 flags,
|
|
void* p_sideband_input, size_t sideband_input_size,
|
|
void* p_sideband_output,
|
|
size_t sideband_output_size,
|
|
void* p_return_address);
|
|
void* PS4_SYSV_ABI sceAjmBatchJobInlineBuffer(void* p_buffer, const void* p_data_input,
|
|
size_t data_input_size,
|
|
const void** pp_batch_address);
|
|
void* PS4_SYSV_ABI sceAjmBatchJobRunBufferRa(void* p_buffer, u32 instance_id, u64 flags,
|
|
void* p_data_input, size_t data_input_size,
|
|
void* p_data_output, size_t data_output_size,
|
|
void* p_sideband_output, size_t sideband_output_size,
|
|
void* p_return_address);
|
|
void* PS4_SYSV_ABI sceAjmBatchJobRunSplitBufferRa(
|
|
void* p_buffer, u32 instance_id, u64 flags, const AjmBuffer* p_data_input_buffers,
|
|
size_t num_data_input_buffers, const AjmBuffer* p_data_output_buffers,
|
|
size_t num_data_output_buffers, void* p_sideband_output, size_t sideband_output_size,
|
|
void* p_return_address);
|
|
int PS4_SYSV_ABI sceAjmBatchStartBuffer(u32 context, const u8* batch, u32 batch_size,
|
|
const int priority, AjmBatchError* batch_error,
|
|
u32* out_batch_id);
|
|
int PS4_SYSV_ABI sceAjmBatchWait(const u32 context, const u32 batch_id, const u32 timeout,
|
|
AjmBatchError* const batch_error);
|
|
int PS4_SYSV_ABI sceAjmDecAt9ParseConfigData();
|
|
int PS4_SYSV_ABI sceAjmDecMp3ParseFrame(const u8* stream, u32 stream_size, int parse_ofl,
|
|
AjmDecMp3ParseFrame* frame);
|
|
int PS4_SYSV_ABI sceAjmFinalize();
|
|
int PS4_SYSV_ABI sceAjmInitialize(s64 reserved, u32* out_context);
|
|
int PS4_SYSV_ABI sceAjmInstanceCodecType();
|
|
int PS4_SYSV_ABI sceAjmInstanceCreate(u32 context, AjmCodecType codec_type, AjmInstanceFlags flags,
|
|
u32* instance);
|
|
int PS4_SYSV_ABI sceAjmInstanceDestroy(u32 context, u32 instance);
|
|
int PS4_SYSV_ABI sceAjmInstanceExtend();
|
|
int PS4_SYSV_ABI sceAjmInstanceSwitch();
|
|
int PS4_SYSV_ABI sceAjmMemoryRegister();
|
|
int PS4_SYSV_ABI sceAjmMemoryUnregister();
|
|
int PS4_SYSV_ABI sceAjmModuleRegister(u32 context, AjmCodecType codec_type, s64 reserved);
|
|
int PS4_SYSV_ABI sceAjmModuleUnregister();
|
|
int PS4_SYSV_ABI sceAjmStrError();
|
|
|
|
void RegisterlibSceAjm(Core::Loader::SymbolsResolver* sym);
|
|
} // namespace Libraries::Ajm
|