⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 psp下pmf文件播放器源码
💻 C
字号:
#include <pspsdk.h>
#include <pspkernel.h>
#include <pspdebug.h>
//AHMAN
#include <pspctrl.h>

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <malloc.h>

#include "common/callbacks.h"
#include "pmfplayer.h"
#include "reader.h"
#include "audio.h"
#include "video.h"

PSP_MODULE_INFO("pmfPlayer_test", 0x1000, 1, 1);
PSP_MAIN_THREAD_ATTR(0);

static struct pmfplayer_struct pmfplayer;

#define printf pspDebugScreenPrintf

int main_thread(SceSize _argc, void* _argp)
{
	
	struct pmfplayer_struct *ptr = &pmfplayer;
//	PMFPLAYER_STRUCT* ptr = malloc(sizeof(PMFPLAYER_STRUCT));
//	memset(ptr, 0, sizeof(PMFPLAYER_STRUCT));
	
	int result;
	
	printf("file :%s\n", (char *)_argp);
	printf("loading module audiocodec.prx\n");
	if(pspSdkLoadStartModule("flash0:/kd/audiocodec.prx", PSP_MEMORY_PARTITION_KERNEL) < 0)
	{
		printf("Error loading module audiocodec.prx\n");
		sceKernelDelayThread(5000000);
		return -1;
	}
	printf("loading module videocodec.prx\n");
	if(pspSdkLoadStartModule("flash0:/kd/videocodec.prx", PSP_MEMORY_PARTITION_KERNEL) < 0)
	{
		printf("Error loading module videocodec.prx\n");
		sceKernelDelayThread(5000000);
		return -1;
	}
	printf("loading module mpegbase.prx\n");
	if(pspSdkLoadStartModule("flash0:/kd/mpegbase.prx", PSP_MEMORY_PARTITION_KERNEL) < 0)
	{
		printf("Error loading module mpegbase.prx\n");
		sceKernelDelayThread(5000000);
		return -1;
	}
	printf("loading module mpeg_vsh.prx\n");	
	result = pspSdkLoadStartModule("flash0:/kd/mpeg_vsh.prx", PSP_MEMORY_PARTITION_USER);
	if(result < 0)
	{
		printf("Error loading module mpeg_vsh.prx\n");
		sceKernelDelayThread(5000000);
		return -1;
	}
	pspSdkFixupImports(result);					///////////////////
	printf("all module loaded\n");

	sceKernelDelayThread(5000000);

	if(pmfplayer_initialize(ptr, 0x3C0) < 0)
	{
		printf("pmfplayer_initialize,pmfplayer_GetLastError : %s\n", pmfplayer_GetLastError(ptr));
		sceKernelDelayThread(5000000);
		return -1;
	}
	printf("pmfplayer_initialize done\n");

	if(pmfplaer_load(ptr, (char*)_argp) < 0)
	{
		printf("pmfplaer_load,pmfplayer_GetLastError : %s\n", pmfplayer_GetLastError(ptr));
		sceKernelDelayThread(5000000);
		return -1;
	}
	printf("pmfplaer_load done\n");

	if(pmfplayer_Play(ptr) < 0)
	{
		printf("pmfplayer_Play,pmfplayer_GetLastError : %s\n", pmfplayer_GetLastError(ptr));
		sceKernelDelayThread(5000000);
		return -1;
	}
	printf("pmfplayer_Play done\n");

	pmfplayer_Shutdown(ptr);

	return 0;
}

int getpad(void)
{
        SceCtrlData paddata;
        unsigned int buttons;

        sceCtrlReadBufferPositive(&paddata, 1);

        buttons = paddata.Buttons & 0xFFFF;

        return(buttons);
}

int main(int _argc, char** _argp)
{
	
	pspDebugScreenInit();
	setupCallbacks();
		
//	char* arg = _argp + strlen(_argp) + 1;	
	char* file = "ms0:/movie.pmf";

//	SceUID T = sceKernelCreateThread("pmfplayer_thread", main_thread, 0x20, 0xFA0, THREAD_ATTR_USER, NULL);

//	sceKernelStartThread(T, strlen(file)+1, file);
#if 0	
	SceUID thread = sceKernelCreateThread("pmfplayer_thread", main_thread, 0x20, 0x10000, 0, NULL);

	if (thread >= 0)
		sceKernelStartThread(thread, sizeof(char*), file);
		
		sceKernelDelayThread(5000000);
		sceKernelExitGame();

#else

	if (main_thread(0, file) < 0)
	{
		printf("main_thread() return error\n");
		sceKernelDelayThread(5000000);
		sceKernelExitGame();
	}
#endif

	dump_threadstatus();
#if 0	
//	SceUID pmfThreadId=0;
	SceUID readerThreadId=0;
	SceUID decoderThreadId=0;
	SceUID videoThreadId=0;
	SceUID audioThreadId=0;
	SceKernelThreadInfo pInfo;
	
	sceKernelDelayThread(1000000);
//	memset(&pInfo, 0, sizeof(pInfo));
//	pspSdkReferThreadStatusByName("pmfplayer_thread", &pmfThreadId, &pInfo);
	memset(&pInfo, 0, sizeof(pInfo));
	pspSdkReferThreadStatusByName("reader_thread", &readerThreadId, &pInfo);
	memset(&pInfo, 0, sizeof(pInfo));
	pspSdkReferThreadStatusByName("decoder_thread", &decoderThreadId, &pInfo);
	memset(&pInfo, 0, sizeof(pInfo));
	pspSdkReferThreadStatusByName("video_thread", &videoThreadId, &pInfo);
	memset(&pInfo, 0, sizeof(pInfo));
	pspSdkReferThreadStatusByName("audio_thread", &audioThreadId, &pInfo);
#endif
	SceUID readerThreadId = pmfplayer.Reader.m_ThreadID;
	SceUID decoderThreadId = pmfplayer.Decoder.m_ThreadID;
	SceUID videoThreadId = pmfplayer.Video.m_ThreadID;
	SceUID audioThreadId = pmfplayer.Audio.m_ThreadID;

	int pad;
	int suspend=0;

	while (running()) {
		pad = getpad();
		if (pad & PSP_CTRL_TRIANGLE) {
			sceKernelExitGame();
			break;
		} else if (pad & PSP_CTRL_CROSS) {
//			sceKernelDelayThread(100000);
			if (suspend) {
				suspend = 0;
				sceKernelResumeThread(readerThreadId);
				sceKernelResumeThread(decoderThreadId);
				sceKernelResumeThread(videoThreadId);
				sceKernelResumeThread(audioThreadId);
			} else {
				suspend = 1;
				sceKernelSuspendThread(readerThreadId);
				sceKernelSuspendThread(decoderThreadId);
				sceKernelSuspendThread(videoThreadId);
				sceKernelSuspendThread(audioThreadId);
			}
		}
	}
	
	sceKernelExitGame();
	return 0;
	
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -