Changeset 2569 for trunk/src/platform/ps3
- Timestamp:
- Mar 8, 2013, 2:20:50 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/platform/ps3/ps3app.cpp
r2506 r2569 19 19 # include <cell/sysmodule.h> 20 20 # include <PSGL/psgl.h> 21 22 # include <cell/mstream.h> /* multistream */ 23 24 # include <cell/spurs/control.h> /* SPURS */ 25 # include <cell/spurs/task.h> 26 # include <cell/spurs/event_flag.h> 21 27 #endif 22 28 … … 33 39 */ 34 40 41 /* FIXME: this shouldn't be a global */ 42 static unsigned int port_num; 43 35 44 class Ps3AppData 36 45 { … … 44 53 Ticker::Shutdown(); 45 54 } 55 56 static void MultiStreamThread(uint64_t param) 57 { 58 Timer t; 59 cellAudioPortStart(port_num); 60 /* FIXME: quit gracefully if needed */ 61 while (true) 62 { 63 if (!cellMSSystemSignalSPU()) 64 { 65 t.Get(); 66 t.Wait(1.f / 60.f / 32); 67 } 68 69 cellMSSystemGenerateCallbacks(); 70 } 71 cellAudioPortStop(port_num); 72 sys_ppu_thread_exit(0); 73 } 74 75 CellSpurs m_spurs __attribute__((aligned (128))); 46 76 #endif 47 77 }; … … 134 164 psglResetCurrentContext(); 135 165 166 /* Create audio device */ 167 cellSysmoduleLoadModule(CELL_SYSMODULE_IO); 168 cellSysmoduleLoadModule(CELL_SYSMODULE_AUDIO); 169 cellSysmoduleLoadModule(CELL_SYSMODULE_RESC); 170 cellSysmoduleLoadModule(CELL_SYSMODULE_SPURS); 171 172 int ret = cellMSSystemConfigureSysUtilEx(CELL_MS_AUDIOMODESELECT_SUPPORTSLPCM 173 | CELL_MS_AUDIOMODESELECT_SUPPORTSDOLBY 174 | CELL_MS_AUDIOMODESELECT_SUPPORTSDTS 175 | CELL_MS_AUDIOMODESELECT_PREFERDOLBY); 176 int num_chans = ret & 0xf; 177 int has_dolby = (ret & 0x10) >> 4; 178 int has_dts = (ret & 0x20) >> 5; 179 180 Log::Debug("audio channels %d, dolby %d, DTS %d\n", 181 num_chans, has_dolby, has_dts); 182 ret = cellAudioInit(); 183 184 CellAudioPortParam ap; 185 memset(&ap, 0, sizeof(ap)); 186 ap.nChannel = CELL_AUDIO_PORT_8CH; 187 ap.nBlock = CELL_AUDIO_BLOCK_8; 188 ret = cellAudioPortOpen(&ap, &port_num); 189 Log::Debug("audio port %d\n", port_num); 190 191 CellAudioPortConfig pc; 192 ret = cellAudioGetPortConfig(port_num, &pc); 193 194 cellMSSystemConfigureLibAudio(&ap, &pc); 195 196 CellMSSystemConfig cfg; 197 cfg.channelCount = 400; /* Maximum number of streams */ 198 cfg.subCount = 31; /* ? */ 199 cfg.dspPageCount = 5; 200 cfg.flags = CELL_MS_NOFLAGS; 201 202 uint8_t const prios[8] = { 1, 0, 0, 0, 0, 0, 0, 0 }; 203 int mem_needed = cellMSSystemGetNeededMemorySize(&cfg); 204 void *ms_mem = memalign(128, mem_needed); 205 sys_ppu_thread_t tid; 206 sys_ppu_thread_get_id(&tid); 207 int tprio; 208 sys_ppu_thread_get_priority(tid, &tprio); 209 cellSpursInitialize(&data->m_spurs, 1, 250 /* thread group priority */, 210 tprio - 1, false); 211 cellMSSystemInitSPURS(ms_mem, &cfg, &data->m_spurs, &prios[0]); 212 213 float const bus_vols[64] = 214 { 215 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 216 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 217 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, 218 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 219 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 220 0.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 221 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 222 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 1.f, 223 }; 224 225 sys_ppu_thread_t thread; 226 ret = sys_ppu_thread_create(&thread, Ps3AppData::MultiStreamThread, 227 NULL, 0 /* Server prio */, 228 0x4000 /* 16 KiB stack */, 229 SYS_PPU_THREAD_CREATE_JOINABLE, 230 "Audio Thread"); 231 232 cellMSCoreSetVolume64(CELL_MS_SUBBUS_1, CELL_MS_DRY, bus_vols); 233 cellMSCoreSetVolume64(CELL_MS_MASTER_BUS, CELL_MS_DRY, bus_vols); 234 136 235 /* Initialise everything */ 137 236 Ticker::Setup(fps); … … 166 265 #if defined __CELLOS_LV2__ 167 266 glFinish(); 267 268 /* Unload audio modules */ 269 cellSysmoduleUnloadModule(CELL_SYSMODULE_IO); 270 cellSysmoduleUnloadModule(CELL_SYSMODULE_AUDIO); 271 cellSysmoduleUnloadModule(CELL_SYSMODULE_RESC); 272 cellSysmoduleUnloadModule(CELL_SYSMODULE_SPURS); 168 273 #endif 169 274 delete data;
Note: See TracChangeset
for help on using the changeset viewer.