summaryrefslogtreecommitdiff
path: root/libs/JSystem/JAudio2/JAIStreamMgr.cpp
blob: f5f49ccec1dd9e200a3d8013013d7e6449430c74 (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
//
// Generated By: dol2asm
// Translation Unit: JAIStreamMgr
//

#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"

//
// Forward References:
//

extern "C" void __ct__12JAIStreamMgrFb();
extern "C" void func_802A3C3C();
extern "C" void freeDeadStream___12JAIStreamMgrFv();
extern "C" void func_802A3E68(void* _this);
extern "C" void calc__12JAIStreamMgrFv();
extern "C" void stop__12JAIStreamMgrFv();
extern "C" void stop__12JAIStreamMgrFUl();
extern "C" void stopSoundID__12JAIStreamMgrF10JAISoundID();
extern "C" void mixOut__12JAIStreamMgrFv();
extern "C" void newStream___12JAIStreamMgrFv();

//
// External References:
//

extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void func_802A3104();
extern "C" void func_802A319C();
extern "C" void JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAIStreamMgr_calc___9JAIStreamFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_25();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__9JAIStream[12];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451328[8];
extern "C" extern u8 __OSReport_disable;

//
// Declarations:
//

/* ############################################################################################## */
/* 80455800-80455804 003E00 0004+00 1/1 0/0 0/0 .sdata2          @653 */
SECTION_SDATA2 static f32 lit_653 = 1.0f;

/* 80455804-80455808 003E04 0004+00 1/1 0/0 0/0 .sdata2          @654 */
SECTION_SDATA2 static u8 lit_654[4] = {
    0x00,
    0x00,
    0x00,
    0x00,
};

/* 80455808-80455810 003E08 0004+04 1/1 0/0 0/0 .sdata2          @655 */
SECTION_SDATA2 static f32 lit_655[1 + 1 /* padding */] = {
    0.5f,
    /* padding */
    0.0f,
};

/* 802A3B68-802A3C3C 29E4A8 00D4+00 0/0 1/1 0/0 .text            __ct__12JAIStreamMgrFb */
// Matches with literals
#ifdef NONMATCHING
JAIStreamMgr::JAIStreamMgr(bool param_0) : JASGlobalInstance<JAIStreamMgr>(param_0) {
    streamDataMgr_ = NULL;
    mStreamAramMgr = NULL;
    field_0x6c = NULL;
    field_0x54 = NULL;
    mParams.init();
    mActivity.init();
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JAIStreamMgr::JAIStreamMgr(bool param_0) {
    nofralloc
#include "asm/JSystem/JAudio2/JAIStreamMgr/__ct__12JAIStreamMgrFb.s"
}
#pragma pop
#endif

/* 802A3C3C-802A3D70 29E57C 0134+00 0/0 1/1 0/0 .text
 * startSound__12JAIStreamMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAIStreamMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
                              JGeometry::TVec3<f32> const* param_3) {
    JUT_ASSERT(37, streamDataMgr_);
    if (param_2 != NULL && *param_2) {
        (*param_2)->stop();
    }
    s32 streamFileEntry = streamDataMgr_->getStreamFileEntry(param_1);
    if (streamFileEntry < 0) {
        JUT_WARN("Cannot find the stream file entry for ID:%08x\n", param_1)
        return false;
    } 
    JAIStream* stream = newStream_();
    JAISoundInfo* piVar5 = JASGlobalInstance<JAISoundInfo>::getInstance();
    int iVar2 = -1;
    if (piVar5 != NULL) {
        iVar2 = piVar5->getCategory(param_1);
    }
    if (stream == NULL) {
        return false;
    }
    stream->JAIStreamMgr_startID_(param_1, streamFileEntry, param_3, field_0x54, iVar2);
    if (piVar5 != NULL) {
        piVar5->getStreamInfo(param_1, stream);
    }
    if (param_2 != NULL) {
        stream->attachHandle(param_2);
    }
    return false;
}

/* ############################################################################################## */
/* 804340F0-804340FC 060E10 000C+00 2/2 0/0 0/0 .bss             @745 */
static u8 lit_745[12];

/* 804340FC-80434110 060E1C 0010+04 2/2 1/1 0/0 .bss
 * memPool_$localstatic3$getMemPool___30JASPoolAllocObject<9JAIStream>Fv */
extern u8 data_804340FC[16 + 4 /* padding */];
u8 data_804340FC[16 + 4 /* padding */];

/* 802A3D70-802A3E68 29E6B0 00F8+00 1/1 0/0 0/0 .text            freeDeadStream___12JAIStreamMgrFv
 */
// I think this will match when all references to data_80451328 (init$localstatic4$getMemPool__30JASPoolAllocObject<9JAIStream>Fv) are not in asm 
#ifdef NONMATCHING
void JAIStreamMgr::freeDeadStream_() {
    JSULink<JAIStream>* link = mStreamList.getFirst();
    while (link != NULL) {
        JAIStream* stream = link->getObject();
        JSULink<JAIStream>* next = link->getNext();
        if (stream->status_.isDead()) {
            mStreamList.remove(link);
            void* aramAddr = stream->JAIStreamMgr_getAramAddr_();
            if (aramAddr != NULL) {
                mStreamAramMgr->deleteStreamAram((u32)aramAddr);
            }
            
            delete stream;
        }
        link = next;
    }
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JAIStreamMgr::freeDeadStream_() {
    nofralloc
#include "asm/JSystem/JAudio2/JAIStreamMgr/freeDeadStream___12JAIStreamMgrFv.s"
}
#pragma pop
#endif

/* 802A3E68-802A3EBC 29E7A8 0054+00 2/2 1/1 0/0 .text            __dt__22JASMemPool<9JAIStream>Fv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void func_802A3E68(void* _this) {
    nofralloc
#include "asm/JSystem/JAudio2/JAIStreamMgr/func_802A3E68.s"
}
#pragma pop

/* 802A3EBC-802A4028 29E7FC 016C+00 0/0 1/1 0/0 .text            calc__12JAIStreamMgrFv */
void JAIStreamMgr::calc() {
    mParams.calc();
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->JAIStreamMgr_calc_();
    }
    freeDeadStream_();
}

/* 802A4028-802A4068 29E968 0040+00 0/0 1/1 0/0 .text            stop__12JAIStreamMgrFv */
void JAIStreamMgr::stop() {
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->stop();
    }
}

/* 802A4068-802A40B8 29E9A8 0050+00 0/0 2/2 0/0 .text            stop__12JAIStreamMgrFUl */
void JAIStreamMgr::stop(u32 param_0) {
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->stop(param_0);
    }
}

/* 802A40B8-802A4118 29E9F8 0060+00 0/0 1/1 0/0 .text stopSoundID__12JAIStreamMgrF10JAISoundID */
void JAIStreamMgr::stopSoundID(JAISoundID param_0) {
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        if ((u32)link->getObject()->getID() == (u32)param_0) {
            link->getObject()->stop();
        }
    }
}

/* 802A4118-802A4174 29EA58 005C+00 0/0 1/1 0/0 .text            mixOut__12JAIStreamMgrFv */
void JAIStreamMgr::mixOut() {
     for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->JAIStreamMgr_mixOut_(mParams.mParams, mActivity);
    }
}

/* 802A4174-802A4244 29EAB4 00D0+00 1/1 0/0 0/0 .text            newStream___12JAIStreamMgrFv */
// Matches with data_80451328
#ifdef NONMATCHING
JAIStream* JAIStreamMgr::newStream_() {
    if (mStreamAramMgr == NULL) {
        JUT_WARN(229, "JAIStreamAramMgr must be set.\n");
        return NULL;
    } 
    JAIStream* stream = new JAIStream(this, field_0x6c);
    if (stream == NULL) {
        JUT_WARN(235, "JASPoolAllocObject::<JAIStream>::operator new failed .\n");
        return NULL;
    }

    mStreamList.append(stream);
    return stream;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JAIStream* JAIStreamMgr::newStream_() {
    nofralloc
#include "asm/JSystem/JAudio2/JAIStreamMgr/newStream___12JAIStreamMgrFv.s"
}
#pragma pop
#endif