summaryrefslogtreecommitdiff
path: root/libs/JSystem/src/JAudio2/JAUInitializer.cpp
blob: f95db823591f338f6edf99c8d5d363f5d1d39675 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "JSystem/JSystem.h" // IWYU pragma: keep

#include "JSystem/JAudio2/JAUInitializer.h"
#include "JSystem/JAudio2/JAISe.h"
#include "JSystem/JAudio2/JAISeq.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JAIStream.h"
#include "JSystem/JAudio2/JASAramStream.h"
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTrack.h"
#include "JSystem/JAudio2/JASWaveArcLoader.h"
#include "JSystem/JKernel/JKRAram.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JKernel/JKRThread.h"

JAU_JASInitializer::JAU_JASInitializer() {
    audioMemory_ = 0;
    audioMemSize_ = 0;
    dvdThreadId_ = -1;
    audioThreadId_ = -1;
    heapSize_ = 0x1000;
    dvdThreadPriority_ = 3;
    audioThreadPriority_ = 2;
    mJasTrackPoolSize = 0x80;
    dspLevel_ = 1.0f;
    aramBlockSize_ = 0x2760;
    aramChannelNum_ = 2;
    field_0x20 = 0;
    waveArcDir_ = NULL;
}

// NONMATCHING JASPoolAllocObject_MultiThreaded<_> locations
void JAU_JASInitializer::initJASystem(JKRSolidHeap* heap) {
    if (JASAudioThread::getThreadPointer()) {
        JUT_WARN(48, "%s", "Though initialized JASAudioThread, called JAU_JASInitializer::initJASystem()\n");
    } else if (JASDvd::getThreadPointer()) {
        JUT_WARN(52, "%s", "Though initialized JASDvd, called JAU_JASInitializer::initJASystem()\n");
    } else {
        JASKernel::setupRootHeap(heap, heapSize_);

        if (audioMemory_ == 0) {
            audioMemory_ = JKRAram::getManager()->getAudioMemory();
        }

        if (audioMemSize_ == 0) {
            audioMemSize_ = JKRAram::getManager()->getAudioMemSize();
        }

        JASKernel::setupAramHeap(audioMemory_, audioMemSize_);

        JASTrack::newMemPool(mJasTrackPoolSize);
        if (field_0x20 > 0) {
            JASTrack::TChannelMgr::newMemPool(field_0x20);
        }

        JASDvd::createThread(dvdThreadPriority_, 0x80, 0x1000);
        JASAudioThread::create(audioThreadPriority_);
        JKRThreadSwitch* threadSwitch = JKRThreadSwitch::getManager();
        if (threadSwitch) {
            if (dvdThreadId_ >= 0) {
                threadSwitch->enter(JASDvd::getThreadPointer(), dvdThreadId_);
            }
            if (audioThreadId_ >= 0) {
                threadSwitch->enter(JASAudioThread::getThreadPointer(), audioThreadId_);
            }
        }

        JASDriver::setDSPLevel(dspLevel_);
        JASAramStream::initSystem(aramBlockSize_, aramChannelNum_);
    }

    if (waveArcDir_) {
        JASWaveArcLoader::setCurrentDir(waveArcDir_);
    }

    #if PLATFORM_SHIELD
    JASDriver::setOutputMode(JAS_OUTPUT_STEREO);
    #else
    switch (OSGetSoundMode()) {
    case OS_SOUND_MODE_MONO:
        JASDriver::setOutputMode(JAS_OUTPUT_MONO);
        break;
    case OS_SOUND_MODE_STEREO:
        JASDriver::setOutputMode(JAS_OUTPUT_STEREO);
        break;
    }
    #endif
}

JAU_JAIInitializer::JAU_JAIInitializer() {
    mJaiSePoolSize = 100;
    mJaiSeqPoolSize = 4;
    mJaiStreamPoolSize = 2;
    mJaiSoundChildPoolSize = 16;
}

// NONMATCHING JASPoolAllocObject<_> locations
void JAU_JAIInitializer::initJAInterface() {
    s32 r30 = JASDram->getFreeSize();
    JAIStream::newMemPool(mJaiStreamPoolSize);
    JAISeq::newMemPool(mJaiSeqPoolSize);
    JAISe::newMemPool(mJaiSePoolSize);
    JAISoundChild::newMemPool(mJaiSoundChildPoolSize);
    s32 r29 = JASDram->getFreeSize();
    OS_REPORT("JAU_JAIInitializer uses %d bytes\n", r30 - r29);
}