📄 reader.c
字号:
#include "pmfplayer.h"
#include <stdio.h>
#define printf pspDebugScreenPrintf
int T_Reader(SceSize _args, void *_argp)
{
ReaderThreadData* D = *((ReaderThreadData**)_argp);
SceInt32 iTotalBytes = 0;
SceInt32 iFreePackets = 0;
SceInt32 iReadPackets = 0;
SceInt32 iPackets = 0;
for(;;)
{
printf("in T_Reader thread\n");
iPackets = 0;
if(D->m_Status == READER_ABORT)
break;
iFreePackets = sceMpegRingbufferAvailableSize(D->m_Ringbuffer);
if(iFreePackets > 0)
{
iReadPackets = iFreePackets;
if(iTotalBytes < D->m_StreamSize)
{
if( iReadPackets > 32 )
iReadPackets = 32;
int iPacketsLeft = (D->m_StreamSize - iTotalBytes) / 2048;
if( iPacketsLeft < iReadPackets )
iReadPackets = iPacketsLeft;
iPackets = sceMpegRingbufferPut(D->m_Ringbuffer, iReadPackets, iFreePackets);
if(iPackets < 0)
{
sprintf(D->m_LastError, "sceMpegRingbufferPut() failed: 0x%08X", (int)iPackets);
D->m_Status = READER_ABORT;
break;
}
}
}
sceKernelSignalSema(D->m_Semaphore, 1);
if(iPackets > 0) iTotalBytes += iPackets * 2048;
if(iTotalBytes >= D->m_StreamSize && D->m_Status != READER_ABORT)
{
D->m_Status = READER_EOF;
}
}
sceKernelSignalSema(D->m_Semaphore, 1);
sceKernelExitThread(0);
return 0;
}
SceInt32 InitReader(PMFPLAYER_STRUCT *p)
{
p->Reader.m_ThreadID = sceKernelCreateThread("reader_thread", T_Reader, 0x41, 0x10000, PSP_THREAD_ATTR_USER, NULL);
printf("p->Reader.m_ThreadID:%d\n", p->Reader.m_ThreadID);
if(p->Reader.m_ThreadID < 0)
{
return -1;
}
p->Reader.m_Semaphore = sceKernelCreateSema("reader_sema", 0, 0, 1, NULL);
if(p->Reader.m_Semaphore < 0)
{
sceKernelDeleteSema(p->Reader.m_Semaphore);
return -1;
}
p->Reader.m_StreamSize = p->m_MpegStreamSize;
p->Reader.m_Ringbuffer = &p->m_Ringbuffer;
p->Reader.m_RingbufferPackets = p->m_RingbufferPackets;
p->Reader.m_Status = 0;
p->Reader.m_LastError = p->m_LastError;
printf("InitReader ok\n");
return 0;
}
SceInt32 ShutdownReader(PMFPLAYER_STRUCT *p)
{
sceKernelDeleteThread(p->Reader.m_ThreadID);
sceKernelDeleteSema(p->Reader.m_Semaphore);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -