Ejemplo n.º 1
0
void pmp_play_close(struct pmp_play_struct *p, int usePos, int pspType)
	{
	if (!(p->audio_reserved < 0)) {
		while(sceAudioGetChannelRestLen(0) > 0 );
		sceAudioChRelease(0);
	}
	cooleyesAudioSetFrequency(sceKernelDevkitVersion(), 44100);

	if (!(p->semaphore_can_get   < 0)) sceKernelDeleteSema(p->semaphore_can_get);
	if (!(p->semaphore_can_put   < 0)) sceKernelDeleteSema(p->semaphore_can_put);
	if (!(p->semaphore_can_show  < 0)) sceKernelDeleteSema(p->semaphore_can_show);
	if (!(p->semaphore_show_done < 0)) sceKernelDeleteSema(p->semaphore_show_done);

	if (!(p->output_thread < 0)) sceKernelDeleteThread(p->output_thread);
	if (!(p->show_thread   < 0)) sceKernelDeleteThread(p->show_thread);

	pmp_decode_close(&p->decoder, pspType);

	int i = 0;
	for (i=0; i<p->subtitle_count; i++)
		subtitle_parse_close( &subtitle_parser[i] );
	
	//if (usePos) pmp_stat_save( p );
	pmp_stat_save( p );
	
	pmp_play_safe_constructor(p);
	}
Psp2Audio::~Psp2Audio() {

	// Just to be sure to clean up before exiting
	SE_Stop();
	BGM_Stop();

	// Closing BGM streaming thread
	termStream = true;
	sceKernelWaitThreadEnd(BGM_Thread, NULL, NULL);
	if (BGM != NULL){
		free(BGM->audiobuf);
		audio_decoder.reset();
		free(BGM);
	}

	// Starting exit procedure for sfx threads
	mustExit = true;
	sceKernelSignalSema(SFX_Mutex, 1);
	for (int i=0;i<AUDIO_CHANNELS;i++){
		sceKernelWaitThreadEnd(sfx_threads[i], NULL, NULL);
	}
	sfx_exited = 0;

	// Deleting mutexs
	sceKernelDeleteSema(BGM_Mutex);
	sceKernelDeleteSema(SFX_Mutex);
	sceKernelDeleteSema(SFX_Mutex_ID);
}
Ejemplo n.º 3
0
void checkSema(int doDispatch) {
	SceUID sema = sceKernelCreateSema("sema", 0, 0, 1, NULL);
	dispatchCheckpoint("sceKernelCreateSema: %08x", sema >= 0 ? 1 : sema);
	dispatchCheckpoint("sceKernelSignalSema: %08x", sceKernelSignalSema(sema, 1));
	dispatchCheckpoint("sceKernelWaitSema: %08x", sceKernelWaitSema(sema, 1, NULL));
	dispatchCheckpoint("sceKernelWaitSema too much: %08x", sceKernelWaitSema(sema, 9, NULL));
	dispatchCheckpoint("sceKernelDeleteSema: %08x", sceKernelDeleteSema(sema));
	sema = sceKernelCreateSema("test", 0, 1, 2, NULL);
	dispatchCheckpoint("sceKernelCreateSema: %08x", sema >= 0 ? 1 : sema);
	startLockThreadSema(sema);
	int state;
	if (doDispatch) {
		++ignoreResched;
		state = sceKernelSuspendDispatchThread();
		dispatchCheckpoint("sceKernelSuspendDispatchThread: %08x", state);
	}
	SceUInt timeout = 300;
	dispatchCheckpoint("sceKernelWaitSema: %08x", sceKernelWaitSema(sema, 1, &timeout));
	dispatchCheckpoint("sceKernelSignalSema: %08x", sceKernelSignalSema(sema, 1));
	if (doDispatch) {
		dispatchCheckpoint("sceKernelResumeDispatchThread: %08x", sceKernelResumeDispatchThread(state));
		--ignoreResched;
	}
	endLockThreadSema(sema);
	dispatchCheckpoint("sceKernelPollSema: %08x", sceKernelPollSema(sema, 1));
	dispatchCheckpoint("sceKernelDeleteSema: %08x", sceKernelDeleteSema(sema));
}
Ejemplo n.º 4
0
int main(int argc, char **argv) {
	int result;
	int check_not_update_value = 7;
	SceKernelSemaInfo info;
	
	sema = sceKernelCreateSema("sema1", 0, 0, 2, NULL);
	
	sceKernelReferSemaStatus(sema, &info);
	PRINT_SEMAPHORE(sema, info);
	
	threads[0] = sceKernelCreateThread("Thread-0", (void *)&threadFunction, 0x12, 0x10000, 0, NULL);
	threads[1] = sceKernelCreateThread("Thread-1", (void *)&threadFunction, 0x12, 0x10000, 0, NULL);
	threads[2] = sceKernelCreateThread("Thread-2", (void *)&threadFunction, 0x12, 0x10000, 0, NULL);
	threads[3] = sceKernelCreateThread("Thread-3", (void *)&threadFunction, 0x12, 0x10000, 0, NULL);
	threads[4] = sceKernelCreateThread("Thread-4", (void *)&threadFunction2, 0x12, 0x10000, 0, NULL);
	
	schedf("VALUE-INVARIANT:%d\n", check_not_update_value);
	
	sceKernelStartThread(threads[0], 1, (void*)&test[1]);
	sceKernelStartThread(threads[1], 2, NULL);
	sceKernelStartThread(threads[2], 0, (void*)&test[0]);
	sceKernelStartThread(threads[3], sizeof(int), (void*)&test[4]);
	sceKernelStartThread(threads[4], sizeof(int), &check_not_update_value);

	sceKernelDelayThread(10 * 1000);
	
	schedf("---\n");
	sceKernelReferSemaStatus(sema, &info);
	PRINT_SEMAPHORE(sema, info);
	schedf("---\n");
	sceKernelSignalSema(sema, 1);
	
	sceKernelDelayThread(10 * 1000);

	schedf("---\n");
	sceKernelReferSemaStatus(sema, &info);
	PRINT_SEMAPHORE(sema, info);
	schedf("---\n");

	sceKernelSignalSema(sema, 1);
	
	sceKernelDelayThread(10 * 1000);

	schedf("---\n");
	sceKernelReferSemaStatus(sema, &info);
	PRINT_SEMAPHORE(sema, info);
	schedf("---\n");
	
	result = sceKernelDeleteSema(sema);
	schedf("%08X\n", result);
	result = sceKernelDeleteSema(sema);
	schedf("%08X\n", result);
	
	schedf("VALUE-INVARIANT:%d\n", check_not_update_value);
	flushschedf();
	
	return 0;
}
Ejemplo n.º 5
0
void CDAudio_Shutdown(void)
{	
	mustExit = true;
	sceKernelSignalSema(Audio_Mutex, 1);
	sceKernelWaitThreadEnd(thread, NULL, NULL);
	sceKernelDeleteSema(Audio_Mutex);
	sceKernelDeleteSema(Talk_Mutex);
	sceKernelDeleteThread(thread);
}
Ejemplo n.º 6
0
SceInt32 CPMFPlayer::ShutdownAudio()
{
	
	sceAudioChRelease(Audio.m_AudioChannel); //Human-Behind
	sceKernelDeleteThread(Audio.m_ThreadID);

	sceKernelDeleteSema(Audio.m_SemaphoreStart);
	sceKernelDeleteSema(Audio.m_SemaphoreLock);

	for(int i = 0; i < Audio.m_iNumBuffers; i++)
		free(Audio.m_pAudioBuffer[i]);

	return 0;
}
Ejemplo n.º 7
0
Psp2Ui::~Psp2Ui() {
	sceKernelWaitSema(GPU_Cleanup_Mutex, 1, NULL);
	for (int i = 0; i < SHADERS_NUM; i++){
		vita2d_free_shader(shaders[i]);
	}
	vita2d_free_texture(main_texture);
	main_texture = NULL;
	sceKernelSignalSema(GPU_Cleanup_Mutex, 1);
	sceKernelWaitThreadEnd(GPU_Thread, NULL, NULL);
	vita2d_free_texture(next_texture);
	vita2d_free_texture(gpu_texture);
	sceKernelDeleteSema(GPU_Mutex);
	sceKernelDeleteSema(GPU_Cleanup_Mutex);
	vita2d_fini();
}
Ejemplo n.º 8
0
// Exit callback
int exit_callback(int arg1, int arg2, void *common) {
	int x;
	StopApp();
	for (x=0; x < MAX_BALLS; x++) { if (_activeBalls[x] != 0) free(_activeBalls[x]); } // Free memory used by active balls
	if (_pauseSem) sceKernelDeleteSema(_pauseSem); // Destroy the pause semaphoresceKernelExitGame();
	return 0;
}
Ejemplo n.º 9
0
int vpbp_init(void)
{
    if (g_sema >= 0) {
        sceKernelDeleteSema(g_sema);
    }

    g_sema = sceKernelCreateSema("VPBPSema", 0, 1, 1, NULL);

    if (g_caches != NULL) {
        oe_free(g_caches);
        g_caches_cnt = 0;
    }

    g_caches_cnt = CACHE_MAX_SIZE;
    g_caches = oe_malloc(sizeof(g_caches[0]) * g_caches_cnt);

    if (g_caches == NULL) {
        g_caches_cnt = 0;
        printk("%s: g_cache cannot allocate\n", __func__);

        return -27;
    }

    memset(g_caches, 0, sizeof(g_caches[0]) * g_caches_cnt);

    return 0;
}
Ejemplo n.º 10
0
int sock_thread( SceSize args, void *argp )
{
	unsigned char buffer[block_size], running = 1;
	SocketOpts * opts = ( SocketOpts * )( *( unsigned int * )argp );
	opts->buf = ( int * )buffer;
	opts->sema = sceKernelCreateSema( "sock_sema", 0, 0, 1, NULL );
	while( running )
	{
		sceKernelSleepThread();
		switch ( opts->operation )
		{
			case S_SEND:
				opts->res = sceNetInetSend( opts->server, opts->buf, opts->length, 0 );
				log( "sent %d res %08x\n", opts->length, opts->res );
				break;
			case S_RECV:
				opts->res = sceNetInetRecv( opts->server, opts->buf, opts->length, 0 );
				break;
			case S_TERM:
				running = 0;
				break;
		}
		sceKernelSignalSema( opts->sema, 1 );
	}
	sceKernelDeleteSema( opts->sema );
	opts->sema = -1;
	opts->thid = -1;
	opts->buf = NULL;
	return sceKernelExitDeleteThread( 0 );
}
Ejemplo n.º 11
0
int main(int argc, char **argv) {
	SceUID sema = sceKernelCreateSema("wait1", 0, 1, 1, NULL);

	WAIT_TEST_SIMPLE("Signaled", sema, 1);
	WAIT_TEST_SIMPLE("Greater than max", sema, 100);
	WAIT_TEST_SIMPLE("Negative", sema, -1);

	sceKernelSignalSema(sema, 1);
	WAIT_TEST_SIMPLE_TIMEOUT("Signaled", sema, 1, 500);
	WAIT_TEST_SIMPLE_TIMEOUT("Never signaled", sema, 1, 500);
	WAIT_TEST_SIMPLE_TIMEOUT("Greater than max", sema, 100, 500);
	WAIT_TEST_SIMPLE_TIMEOUT("Zero", sema, 0, 500);
	WAIT_TEST_SIMPLE_TIMEOUT("Negative", sema, -1, 500);
	WAIT_TEST_SIMPLE_TIMEOUT("Zero timeout", sema, 1, 0);
	
	// Signaled off thread.
	printf("Wait timeout: ");
	schedulingPlacement = 1;
	SCHED_LOG(A, 1);
	SceUInt timeout = 5000;
	SceUID thread = sceKernelCreateThread("waitTest", (void *)&waitTestFunc, 0x12, 0x10000, 0, NULL);
	sceKernelStartThread(thread, sizeof(int), &sema);
	SCHED_LOG(B, 1);
	int result = sceKernelWaitSema(sema, 1, &timeout);
	SCHED_LOG(E, 1);
	schedf(" (thread=%08X, main=%08X, remaining=%d)\n", schedulingResult, result, timeout / 1000);
	flushschedf();

	sceKernelDeleteSema(sema);

	SceUID deleteThread = CREATE_SIMPLE_THREAD(deleteMeFunc);
	sema = sceKernelCreateSema("wait1", 0, 0, 1, NULL);
	sceKernelStartThread(deleteThread, sizeof(int), &sema);
	sceKernelDelayThread(500);
	sceKernelDeleteSema(sema);
	flushschedf();

	WAIT_TEST_SIMPLE("NULL", 0, 1);
	WAIT_TEST_SIMPLE("Invalid", 0xDEADBEEF, 1);
	WAIT_TEST_SIMPLE("Deleted", sema, 1);
	
	BASIC_SCHED_TEST("NULL",
		result = sceKernelWaitSema(0, 1, NULL);
	);
Ejemplo n.º 12
0
/* Free the semaphore */
void SDL_DestroySemaphore(SDL_sem *sem)
{
    if (sem != NULL) {
        if (sem->semid > 0) {
            sceKernelDeleteSema(sem->semid);
            sem->semid = 0;
        }

        free(sem);
    }
}
Ejemplo n.º 13
0
int main(int argc, char **argv) {
	SceUID sema = sceKernelCreateSema("signal", 0, 0, 1, NULL);
	PRINT_SEMAPHORE(sema);

	SIGNAL_TEST("Basic +2", sema, 2);
	SIGNAL_TEST("Basic +1", sema, 1);
	SIGNAL_TEST("Negative - 1", sema, -1);
	SIGNAL_TEST("Negative - 2", sema, -2);
	SIGNAL_TEST("Zero", sema, 0);

	sceKernelDeleteSema(sema);

	sema = sceKernelCreateSema("signal", 0, -3, 3, NULL);
	PRINT_SEMAPHORE(sema);
	SIGNAL_TEST("Start negative", sema, 1);
	sceKernelDeleteSema(sema);

	SIGNAL_TEST("NULL", 0, 1);
	SIGNAL_TEST("Invalid", 0xDEADBEEF, 1);
	SIGNAL_TEST("Deleted", sema, 1);

	TWO_STEP_SCHED_TEST("Signal other then same", 0, 0,
		result = sceKernelSignalSema(sema2, 1);
	,
Ejemplo n.º 14
0
extern "C" int main(int argc, char **argv) {
	SceUID th1 = sceKernelCreateThread("thread1", &thread1, 0x21, 0x1000, 0, NULL);
	SceUID th2 = sceKernelCreateThread("thread2", &thread2, 0x21, 0x1000, 0, NULL);
	sema = sceKernelCreateSema("vpl", 0, 0, 10, NULL);
	sceKernelSignalSema(sema, 1);
	checkpoint("starting");
	sceKernelStartThread(th1, 0, NULL);
	sceKernelStartThread(th2, 0, NULL);
	checkpoint("waiting");
	sceKernelDelayThread(10000);
	checkpoint("deleting");
	sceKernelDeleteSema(sema);
	checkpoint("done, waiting");
	sceKernelDelayThread(10000);

	return 0;
}
Ejemplo n.º 15
0
int main(int argc, char **argv) {
	SceUID sema = sceKernelCreateSema("cancel", 0, 0, 1, NULL);

	CANCEL_TEST("Normal", sema, 1);
	CANCEL_TEST("Greater than max", sema, 3);
	CANCEL_TEST("Zero", sema, 0);
	CANCEL_TEST("Negative -3", sema, -3);
	CANCEL_TEST("Negative -1", sema, -1);

	CANCEL_TEST_WITH_WAIT("Normal", sema, 1);
	CANCEL_TEST_WITH_WAIT("Greater than max", sema, 3);
	CANCEL_TEST_WITH_WAIT("Zero", sema, 0);
	CANCEL_TEST_WITH_WAIT("Negative -3", sema, -3);
	CANCEL_TEST_WITH_WAIT("Negative -1", sema, -1);

	sceKernelDeleteSema(sema);

	TWO_STEP_SCHED_TEST("Cancel waited 0 then 1", 0, 1,
		result = 0;
		CANCEL_TEST_WITH_WAIT("To 0", sema1, 0);
	,
Ejemplo n.º 16
0
/*----------------------------------------------------------------------
|       NPT_PSPMutex::~NPT_PSPMutex
+---------------------------------------------------------------------*/
NPT_PSPMutex::~NPT_PSPMutex()
{
    sceKernelDeleteSema(m_semaphore);
}
Ejemplo n.º 17
0
SceInt32 CPMFPlayer::InitAudio()
{
	int i = 0, fail = 0;

	Audio.m_AudioChannel = sceAudioChReserve(-1, 512, PSP_AUDIO_FORMAT_STEREO);
	if(Audio.m_AudioChannel < 0)
	{
		sprintf(m_LastError, "sceAudioChReserve() failed: 0x%08X", (int)Audio.m_AudioChannel);
		return -1;
	}

	sceAudioSetChannelDataLen(Audio.m_AudioChannel, m_MpegAtracOutSize / 4);

	Audio.m_ThreadID = sceKernelCreateThread("audio_thread", T_Audio, 0x3D, 0x10000, PSP_THREAD_ATTR_USER, NULL);
	if(Audio.m_ThreadID < 0)
	{
		sprintf(m_LastError, "sceKernelCreateThread() failed: 0x%08X", (int)Audio.m_ThreadID);
		goto exit0;
	}

	Audio.m_SemaphoreStart = sceKernelCreateSema("audio_start_sema",  0, 0, 1, NULL);
	if(Audio.m_SemaphoreStart < 0)
	{
		sprintf(m_LastError, "sceKernelCreateSema() failed: 0x%08X", (int)Audio.m_SemaphoreStart);
		goto exit1;
	}

	Audio.m_SemaphoreLock = sceKernelCreateSema("audio_lock_sema",  0, 1, 1, NULL);
	if(Audio.m_SemaphoreLock	< 0 )
	{
		sprintf(m_LastError, "sceKernelCreateSema() failed: 0x%08X", (int)Audio.m_SemaphoreLock);
		goto exit2;
	}

	Audio.m_iNumBuffers			= 4;
	Audio.m_iFullBuffers		= 0;
	Audio.m_iPlayBuffer			= 1;
	Audio.m_iDecodeBuffer		= 0;
	Audio.m_iAbort				= 0;
	Audio.m_LastError			= m_LastError;

	for(i = 0; i < Audio.m_iNumBuffers; i++)
	{
		Audio.m_pAudioBuffer[i] = NULL;
		Audio.m_iBufferTimeStamp[i] = 0;
	}

	for(i = 0; i < Audio.m_iNumBuffers; i++)
	{
		Audio.m_pAudioBuffer[i] = memalign(64, m_MpegAtracOutSize);
		if(Audio.m_pAudioBuffer[i] < 0) fail++;
	}

	if(fail > 0)
	{
		for(i = 0; i < Audio.m_iNumBuffers; i++)
		{
			if(Audio.m_pAudioBuffer[i] != NULL)
				free(Audio.m_pAudioBuffer[i]);
		}

		sprintf(m_LastError, "malloc() failed!");
		goto exit3;
	}

	return 0;

exit3:
	sceKernelDeleteSema(Audio.m_SemaphoreLock);
exit2:
	sceKernelDeleteSema(Audio.m_SemaphoreStart);
exit1:
	sceKernelDeleteThread(Audio.m_ThreadID);
exit0:
	sceAudioChRelease(Audio.m_AudioChannel);

	return -1;
}
Ejemplo n.º 18
0
Archivo: libmpeg.c Proyecto: yne/js-psp
int deleteSema(sema){
	return sceKernelDeleteSema(sema) ? 0x80000041:0;
}
Ejemplo n.º 19
0
	~eSimpleMutex()
	{
		sceKernelDeleteSema(handle);
	}