📄 main.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 + -