Skip to content

Commit 7580914

Browse files
committed
ajm m4aac
1 parent aa227ca commit 7580914

File tree

14 files changed

+546
-28
lines changed

14 files changed

+546
-28
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,6 @@
120120
[submodule "externals/miniz"]
121121
path = externals/miniz
122122
url = https://github.com/richgel999/miniz
123+
[submodule "externals/fdk-aac"]
124+
path = externals/fdk-aac
125+
url = https://github.com/mstorsjo/fdk-aac.git

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ include_directories(src)
262262

263263
set(AJM_LIB src/core/libraries/ajm/ajm.cpp
264264
src/core/libraries/ajm/ajm.h
265+
src/core/libraries/ajm/ajm_aac.cpp
266+
src/core/libraries/ajm/ajm_aac.h
265267
src/core/libraries/ajm/ajm_at9.cpp
266268
src/core/libraries/ajm/ajm_at9.h
267269
src/core/libraries/ajm/ajm_batch.cpp
@@ -1085,7 +1087,7 @@ create_target_directory_groups(shadps4)
10851087

10861088
target_link_libraries(shadps4 PRIVATE magic_enum::magic_enum fmt::fmt toml11::toml11 tsl::robin_map xbyak::xbyak Tracy::TracyClient RenderDoc::API FFmpeg::ffmpeg Dear_ImGui gcn half::half ZLIB::ZLIB PNG::PNG)
10871089
target_link_libraries(shadps4 PRIVATE Boost::headers GPUOpen::VulkanMemoryAllocator LibAtrac9 sirit Vulkan::Headers xxHash::xxhash Zydis::Zydis glslang::glslang SDL3::SDL3 SDL3_mixer::SDL3_mixer pugixml::pugixml)
1088-
target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz)
1090+
target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz fdk-aac)
10891091

10901092
target_compile_definitions(shadps4 PRIVATE IMGUI_USER_CONFIG="imgui/imgui_config.h")
10911093
target_compile_definitions(Dear_ImGui PRIVATE IMGUI_USER_CONFIG="${PROJECT_SOURCE_DIR}/src/imgui/imgui_config.h")

externals/CMakeLists.txt

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,240 @@ if (WIN32)
258258
add_subdirectory(ext-wepoll)
259259
endif()
260260

261+
if (NOT TARGET fdk-aac)
262+
set(AACDEC_SRC
263+
fdk-aac/libAACdec/src/FDK_delay.cpp
264+
fdk-aac/libAACdec/src/aac_ram.cpp
265+
fdk-aac/libAACdec/src/aac_rom.cpp
266+
fdk-aac/libAACdec/src/aacdec_drc.cpp
267+
fdk-aac/libAACdec/src/aacdec_hcr.cpp
268+
fdk-aac/libAACdec/src/aacdec_hcr_bit.cpp
269+
fdk-aac/libAACdec/src/aacdec_hcrs.cpp
270+
fdk-aac/libAACdec/src/aacdec_pns.cpp
271+
fdk-aac/libAACdec/src/aacdec_tns.cpp
272+
fdk-aac/libAACdec/src/aacdecoder.cpp
273+
fdk-aac/libAACdec/src/aacdecoder_lib.cpp
274+
fdk-aac/libAACdec/src/block.cpp
275+
fdk-aac/libAACdec/src/channel.cpp
276+
fdk-aac/libAACdec/src/channelinfo.cpp
277+
fdk-aac/libAACdec/src/conceal.cpp
278+
fdk-aac/libAACdec/src/ldfiltbank.cpp
279+
fdk-aac/libAACdec/src/pulsedata.cpp
280+
fdk-aac/libAACdec/src/rvlc.cpp
281+
fdk-aac/libAACdec/src/rvlcbit.cpp
282+
fdk-aac/libAACdec/src/rvlcconceal.cpp
283+
fdk-aac/libAACdec/src/stereo.cpp
284+
fdk-aac/libAACdec/src/usacdec_ace_d4t64.cpp
285+
fdk-aac/libAACdec/src/usacdec_ace_ltp.cpp
286+
fdk-aac/libAACdec/src/usacdec_acelp.cpp
287+
fdk-aac/libAACdec/src/usacdec_fac.cpp
288+
fdk-aac/libAACdec/src/usacdec_lpc.cpp
289+
fdk-aac/libAACdec/src/usacdec_lpd.cpp
290+
fdk-aac/libAACdec/src/usacdec_rom.cpp
291+
fdk-aac/libAACdec/src/aac_ram.h
292+
fdk-aac/libAACdec/src/aac_rom.h
293+
fdk-aac/libAACdec/src/aacdec_drc.h
294+
fdk-aac/libAACdec/src/aacdec_drc_types.h
295+
fdk-aac/libAACdec/src/aacdec_hcr.h
296+
fdk-aac/libAACdec/src/aacdec_hcr_bit.h
297+
fdk-aac/libAACdec/src/aacdec_hcr_types.h
298+
fdk-aac/libAACdec/src/aacdec_hcrs.h
299+
fdk-aac/libAACdec/src/aacdec_pns.h
300+
fdk-aac/libAACdec/src/aacdec_tns.h
301+
fdk-aac/libAACdec/src/aacdecoder.h
302+
fdk-aac/libAACdec/src/block.h
303+
fdk-aac/libAACdec/src/channel.h
304+
fdk-aac/libAACdec/src/channelinfo.h
305+
fdk-aac/libAACdec/src/conceal.h
306+
fdk-aac/libAACdec/src/conceal_types.h
307+
fdk-aac/libAACdec/src/FDK_delay.h
308+
fdk-aac/libAACdec/src/ldfiltbank.h
309+
fdk-aac/libAACdec/src/overlapadd.h
310+
fdk-aac/libAACdec/src/pulsedata.h
311+
fdk-aac/libAACdec/src/rvlc.h
312+
fdk-aac/libAACdec/src/rvlc_info.h
313+
fdk-aac/libAACdec/src/rvlcbit.h
314+
fdk-aac/libAACdec/src/rvlcconceal.h
315+
fdk-aac/libAACdec/src/stereo.h
316+
fdk-aac/libAACdec/src/usacdec_ace_d4t64.h
317+
fdk-aac/libAACdec/src/usacdec_ace_ltp.h
318+
fdk-aac/libAACdec/src/usacdec_acelp.h
319+
fdk-aac/libAACdec/src/usacdec_const.h
320+
fdk-aac/libAACdec/src/usacdec_fac.h
321+
fdk-aac/libAACdec/src/usacdec_lpc.h
322+
fdk-aac/libAACdec/src/usacdec_lpd.h
323+
fdk-aac/libAACdec/src/usacdec_rom.h
324+
)
325+
326+
set(FDK_SRC
327+
fdk-aac/libFDK/src/FDK_bitbuffer.cpp
328+
fdk-aac/libFDK/src/FDK_core.cpp
329+
fdk-aac/libFDK/src/FDK_crc.cpp
330+
fdk-aac/libFDK/src/FDK_decorrelate.cpp
331+
fdk-aac/libFDK/src/FDK_hybrid.cpp
332+
fdk-aac/libFDK/src/FDK_lpc.cpp
333+
fdk-aac/libFDK/src/FDK_matrixCalloc.cpp
334+
fdk-aac/libFDK/src/FDK_qmf_domain.cpp
335+
fdk-aac/libFDK/src/FDK_tools_rom.cpp
336+
fdk-aac/libFDK/src/FDK_trigFcts.cpp
337+
fdk-aac/libFDK/src/autocorr2nd.cpp
338+
fdk-aac/libFDK/src/dct.cpp
339+
fdk-aac/libFDK/src/fft.cpp
340+
fdk-aac/libFDK/src/fft_rad2.cpp
341+
fdk-aac/libFDK/src/fixpoint_math.cpp
342+
fdk-aac/libFDK/src/huff_nodes.cpp
343+
fdk-aac/libFDK/src/mdct.cpp
344+
fdk-aac/libFDK/src/nlc_dec.cpp
345+
fdk-aac/libFDK/src/qmf.cpp
346+
fdk-aac/libFDK/src/scale.cpp
347+
)
348+
349+
set(SYS_SRC
350+
fdk-aac/libSYS/src/genericStds.cpp
351+
fdk-aac/libSYS/src/syslib_channelMapDescr.cpp
352+
)
353+
354+
set(ARITHCODING_SRC
355+
fdk-aac/libArithCoding/src/ac_arith_coder.cpp
356+
)
357+
358+
set(MPEGTPDEC_SRC
359+
fdk-aac/libMpegTPDec/src/tpdec_adif.cpp
360+
fdk-aac/libMpegTPDec/src/tpdec_adts.cpp
361+
fdk-aac/libMpegTPDec/src/tpdec_asc.cpp
362+
fdk-aac/libMpegTPDec/src/tpdec_drm.cpp
363+
fdk-aac/libMpegTPDec/src/tpdec_latm.cpp
364+
fdk-aac/libMpegTPDec/src/tpdec_lib.cpp
365+
fdk-aac/libMpegTPDec/src/tp_version.h
366+
fdk-aac/libMpegTPDec/src/tpdec_adif.h
367+
fdk-aac/libMpegTPDec/src/tpdec_adts.h
368+
fdk-aac/libMpegTPDec/src/tpdec_drm.h
369+
fdk-aac/libMpegTPDec/src/tpdec_latm.h
370+
)
371+
372+
set(SBRDEC_SRC
373+
fdk-aac/libSBRdec/src/HFgen_preFlat.cpp
374+
fdk-aac/libSBRdec/src/env_calc.cpp
375+
fdk-aac/libSBRdec/src/env_dec.cpp
376+
fdk-aac/libSBRdec/src/env_extr.cpp
377+
fdk-aac/libSBRdec/src/hbe.cpp
378+
fdk-aac/libSBRdec/src/huff_dec.cpp
379+
fdk-aac/libSBRdec/src/lpp_tran.cpp
380+
fdk-aac/libSBRdec/src/psbitdec.cpp
381+
fdk-aac/libSBRdec/src/psdec.cpp
382+
fdk-aac/libSBRdec/src/psdec_drm.cpp
383+
fdk-aac/libSBRdec/src/psdecrom_drm.cpp
384+
fdk-aac/libSBRdec/src/pvc_dec.cpp
385+
fdk-aac/libSBRdec/src/sbr_deb.cpp
386+
fdk-aac/libSBRdec/src/sbr_dec.cpp
387+
fdk-aac/libSBRdec/src/sbr_ram.cpp
388+
fdk-aac/libSBRdec/src/sbr_rom.cpp
389+
fdk-aac/libSBRdec/src/sbrdec_drc.cpp
390+
fdk-aac/libSBRdec/src/sbrdec_freq_sca.cpp
391+
fdk-aac/libSBRdec/src/sbrdecoder.cpp
392+
fdk-aac/libSBRdec/src/env_calc.h
393+
fdk-aac/libSBRdec/src/env_dec.h
394+
fdk-aac/libSBRdec/src/env_extr.h
395+
fdk-aac/libSBRdec/src/hbe.h
396+
fdk-aac/libSBRdec/src/HFgen_preFlat.h
397+
fdk-aac/libSBRdec/src/huff_dec.h
398+
fdk-aac/libSBRdec/src/lpp_tran.h
399+
fdk-aac/libSBRdec/src/psbitdec.h
400+
fdk-aac/libSBRdec/src/psdec.h
401+
fdk-aac/libSBRdec/src/psdec_drm.h
402+
fdk-aac/libSBRdec/src/pvc_dec.h
403+
fdk-aac/libSBRdec/src/sbr_deb.h
404+
fdk-aac/libSBRdec/src/sbr_dec.h
405+
fdk-aac/libSBRdec/src/sbr_ram.h
406+
fdk-aac/libSBRdec/src/sbr_rom.h
407+
fdk-aac/libSBRdec/src/sbrdec_drc.h
408+
fdk-aac/libSBRdec/src/sbrdec_freq_sca.h
409+
fdk-aac/libSBRdec/src/transcendent.h
410+
)
411+
412+
set(PCMUTILS_SRC
413+
fdk-aac/libPCMutils/src/limiter.cpp
414+
fdk-aac/libPCMutils/src/pcm_utils.cpp
415+
fdk-aac/libPCMutils/src/pcmdmx_lib.cpp
416+
fdk-aac/libPCMutils/src/version.h
417+
)
418+
419+
set(DRCDEC_SRC
420+
fdk-aac/libDRCdec/src/FDK_drcDecLib.cpp
421+
fdk-aac/libDRCdec/src/drcDec_gainDecoder.cpp
422+
fdk-aac/libDRCdec/src/drcDec_reader.cpp
423+
fdk-aac/libDRCdec/src/drcDec_rom.cpp
424+
fdk-aac/libDRCdec/src/drcDec_selectionProcess.cpp
425+
fdk-aac/libDRCdec/src/drcDec_tools.cpp
426+
fdk-aac/libDRCdec/src/drcGainDec_init.cpp
427+
fdk-aac/libDRCdec/src/drcGainDec_preprocess.cpp
428+
fdk-aac/libDRCdec/src/drcGainDec_process.cpp
429+
fdk-aac/libDRCdec/src/drcDec_gainDecoder.h
430+
fdk-aac/libDRCdec/src/drcDec_reader.h
431+
fdk-aac/libDRCdec/src/drcDec_rom.h
432+
fdk-aac/libDRCdec/src/drcDec_selectionProcess.h
433+
fdk-aac/libDRCdec/src/drcDec_tools.h
434+
fdk-aac/libDRCdec/src/drcDec_types.h
435+
fdk-aac/libDRCdec/src/drcDecoder.h
436+
fdk-aac/libDRCdec/src/drcGainDec_init.h
437+
fdk-aac/libDRCdec/src/drcGainDec_preprocess.h
438+
fdk-aac/libDRCdec/src/drcGainDec_process.h
439+
)
440+
441+
set(SACDEC_SRC
442+
fdk-aac/libSACdec/src/sac_bitdec.cpp
443+
fdk-aac/libSACdec/src/sac_calcM1andM2.cpp
444+
fdk-aac/libSACdec/src/sac_dec.cpp
445+
fdk-aac/libSACdec/src/sac_dec_conceal.cpp
446+
fdk-aac/libSACdec/src/sac_dec_lib.cpp
447+
fdk-aac/libSACdec/src/sac_process.cpp
448+
fdk-aac/libSACdec/src/sac_qmf.cpp
449+
fdk-aac/libSACdec/src/sac_reshapeBBEnv.cpp
450+
fdk-aac/libSACdec/src/sac_rom.cpp
451+
fdk-aac/libSACdec/src/sac_smoothing.cpp
452+
fdk-aac/libSACdec/src/sac_stp.cpp
453+
fdk-aac/libSACdec/src/sac_tsd.cpp
454+
fdk-aac/libSACdec/src/sac_bitdec.h
455+
fdk-aac/libSACdec/src/sac_calcM1andM2.h
456+
fdk-aac/libSACdec/src/sac_dec.h
457+
fdk-aac/libSACdec/src/sac_dec_conceal.h
458+
fdk-aac/libSACdec/src/sac_dec_interface.h
459+
fdk-aac/libSACdec/src/sac_dec_ssc_struct.h
460+
fdk-aac/libSACdec/src/sac_process.h
461+
fdk-aac/libSACdec/src/sac_qmf.h
462+
fdk-aac/libSACdec/src/sac_reshapeBBEnv.h
463+
fdk-aac/libSACdec/src/sac_rom.h
464+
fdk-aac/libSACdec/src/sac_smoothing.h
465+
fdk-aac/libSACdec/src/sac_stp.h
466+
fdk-aac/libSACdec/src/sac_tsd.h
467+
)
468+
469+
add_library(fdk-aac
470+
${AACDEC_SRC}
471+
${FDK_SRC}
472+
${SYS_SRC}
473+
${ARITHCODING_SRC}
474+
${MPEGTPDEC_SRC}
475+
${SBRDEC_SRC}
476+
${PCMUTILS_SRC}
477+
${DRCDEC_SRC}
478+
${SACDEC_SRC}
479+
)
480+
481+
target_include_directories(fdk-aac
482+
PUBLIC
483+
fdk-aac/libAACdec/include
484+
fdk-aac/libFDK/include
485+
fdk-aac/libSYS/include
486+
fdk-aac/libArithCoding/include
487+
fdk-aac/libMpegTPDec/include
488+
fdk-aac/libSBRdec/include
489+
fdk-aac/libPCMutils/include
490+
fdk-aac/libDRCdec/include
491+
fdk-aac/libSACdec/include
492+
)
493+
endif()
494+
261495
#nlohmann json
262496
set(JSON_BuildTests OFF CACHE INTERNAL "")
263497
add_subdirectory(json)

externals/fdk-aac

Submodule fdk-aac added at d8e6b1a

src/core/libraries/ajm/ajm.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ constexpr int ORBIS_AJM_CHANNELMASK_QUAD = 0x0033;
1919
constexpr int ORBIS_AJM_CHANNELMASK_5POINT1 = 0x060F;
2020
constexpr int ORBIS_AJM_CHANNELMASK_7POINT1 = 0x063F;
2121

22+
constexpr int INSTANCE_ID_MASK = 0x3FFF;
23+
2224
static std::unordered_map<u32, std::unique_ptr<AjmContext>> contexts{};
2325

2426
u32 GetChannelMask(u32 num_channels) {
@@ -34,7 +36,7 @@ u32 GetChannelMask(u32 num_channels) {
3436
case 8:
3537
return ORBIS_AJM_CHANNELMASK_7POINT1;
3638
default:
37-
UNREACHABLE();
39+
return 0;
3840
}
3941
}
4042

@@ -59,9 +61,9 @@ void* PS4_SYSV_ABI sceAjmBatchJobControlBufferRa(void* p_buffer, u32 instance_id
5961
void* p_sideband_output,
6062
size_t sideband_output_size,
6163
void* p_return_address) {
62-
return BatchJobControlBufferRa(p_buffer, instance_id, flags, p_sideband_input,
63-
sideband_input_size, p_sideband_output, sideband_output_size,
64-
p_return_address);
64+
return BatchJobControlBufferRa(p_buffer, instance_id & INSTANCE_ID_MASK, flags,
65+
p_sideband_input, sideband_input_size, p_sideband_output,
66+
sideband_output_size, p_return_address);
6567
}
6668

6769
void* PS4_SYSV_ABI sceAjmBatchJobInlineBuffer(void* p_buffer, const void* p_data_input,
@@ -75,8 +77,8 @@ void* PS4_SYSV_ABI sceAjmBatchJobRunBufferRa(void* p_buffer, u32 instance_id, u6
7577
void* p_data_output, size_t data_output_size,
7678
void* p_sideband_output, size_t sideband_output_size,
7779
void* p_return_address) {
78-
return BatchJobRunBufferRa(p_buffer, instance_id, flags, p_data_input, data_input_size,
79-
p_data_output, data_output_size, p_sideband_output,
80+
return BatchJobRunBufferRa(p_buffer, instance_id & INSTANCE_ID_MASK, flags, p_data_input,
81+
data_input_size, p_data_output, data_output_size, p_sideband_output,
8082
sideband_output_size, p_return_address);
8183
}
8284

@@ -85,10 +87,10 @@ void* PS4_SYSV_ABI sceAjmBatchJobRunSplitBufferRa(
8587
size_t num_data_input_buffers, const AjmBuffer* p_data_output_buffers,
8688
size_t num_data_output_buffers, void* p_sideband_output, size_t sideband_output_size,
8789
void* p_return_address) {
88-
return BatchJobRunSplitBufferRa(p_buffer, instance_id, flags, p_data_input_buffers,
89-
num_data_input_buffers, p_data_output_buffers,
90-
num_data_output_buffers, p_sideband_output,
91-
sideband_output_size, p_return_address);
90+
return BatchJobRunSplitBufferRa(p_buffer, instance_id & INSTANCE_ID_MASK, flags,
91+
p_data_input_buffers, num_data_input_buffers,
92+
p_data_output_buffers, num_data_output_buffers,
93+
p_sideband_output, sideband_output_size, p_return_address);
9294
}
9395

9496
int PS4_SYSV_ABI sceAjmBatchStartBuffer(u32 context_id, u8* p_batch, u32 batch_size,
@@ -144,9 +146,8 @@ int PS4_SYSV_ABI sceAjmInitialize(s64 reserved, u32* p_context_id) {
144146
return ORBIS_OK;
145147
}
146148

147-
int PS4_SYSV_ABI sceAjmInstanceCodecType() {
148-
LOG_ERROR(Lib_Ajm, "(STUBBED) called");
149-
return ORBIS_OK;
149+
AjmCodecType PS4_SYSV_ABI sceAjmInstanceCodecType(u32 instance_id) {
150+
return static_cast<AjmCodecType>((instance_id >> 14) & 0x1F);
150151
}
151152

152153
int PS4_SYSV_ABI sceAjmInstanceCreate(u32 context_id, AjmCodecType codec_type,
@@ -170,7 +171,7 @@ int PS4_SYSV_ABI sceAjmInstanceDestroy(u32 context_id, u32 instance_id) {
170171
return ORBIS_AJM_ERROR_INVALID_CONTEXT;
171172
}
172173

173-
return it->second->InstanceDestroy(instance_id);
174+
return it->second->InstanceDestroy(instance_id & INSTANCE_ID_MASK);
174175
}
175176

176177
int PS4_SYSV_ABI sceAjmInstanceExtend() {

src/core/libraries/ajm/ajm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ int PS4_SYSV_ABI sceAjmDecMp3ParseFrame(const u8* stream, u32 stream_size, int p
217217
AjmDecMp3ParseFrame* frame);
218218
int PS4_SYSV_ABI sceAjmFinalize();
219219
int PS4_SYSV_ABI sceAjmInitialize(s64 reserved, u32* out_context);
220-
int PS4_SYSV_ABI sceAjmInstanceCodecType();
220+
AjmCodecType PS4_SYSV_ABI sceAjmInstanceCodecType(u32 instance_id);
221221
int PS4_SYSV_ABI sceAjmInstanceCreate(u32 context, AjmCodecType codec_type, AjmInstanceFlags flags,
222222
u32* instance);
223223
int PS4_SYSV_ABI sceAjmInstanceDestroy(u32 context, u32 instance);

0 commit comments

Comments
 (0)