Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct SceDmacPlusCscParams {
- uint16_t ctm[3][3]; /* 10-bit fixed point? */
- uint8_t unk1;
- uint8_t padding;
- uint16_t unk2;
- } SceDmacPlusCscParams;
- typedef struct SceMpegYCrCbBuffer {
- SceInt32 iFrameBufferHeight16;
- SceInt32 iFrameBufferWidth16;
- SceInt32 iUnknown; // Set to 0
- SceInt32 iUnknown2; // Set to 1
- ScePVoid pYBuffer; // pointer to YBuffer (in VME EDRAM?)
- ScePVoid pYBuffer2; // pointer to YBuffer + framebufferwidth*(frameheight/32)
- ScePVoid pCrBuffer; // pointer to CrBuffer (in VME EDRAM?)
- ScePVoid pCbBuffer; // pointer to CbBuffer (in VME EDRAM?)
- ScePVoid pCrBuffer2; // pointer to CrBuffer + (framebufferwidth/2)*(frameheight/64)
- ScePVoid pCbBuffer2; // pointer to CbBuffer + (framebufferwidth/2)*(frameheight/64)
- SceInt32 iFrameHeight;
- SceInt32 iFrameWidth;
- SceInt32 iFrameBufferWidth;
- SceInt32 iUnknown3[11];
- } __attribute__((aligned(64))) SceMpegYCrCbBuffer;
- uint sceDmacplus_driver_0xB269EAC9_csc_params(int colorfmt, int stride, SceDmacPlusCscParams *cscparams)
- {
- uint ret;
- ret = sceKernelCpuSuspendIntr();
- if ((g_dmac_status & 2) == 0) {
- g_csc_matrix0 =
- (cscparams->ctm[2] & 0x3ff) << 0x14 | (cscparams->ctm[1] & 0x3ff) << 10 |
- cscparams->ctm[0] & 0x3ff;
- g_csc_matrix1 =
- (cscparams->ctm[1][2] & 0x3ff) << 0x14 | (cscparams->ctm[1][1] & 0x3ff) << 10 |
- cscparams->ctm[1][0] & 0x3ff;
- g_csc_matrix2 =
- (cscparams->ctm[2][2] & 0x3ff) << 0x14 | (cscparams->ctm[2][1] & 0x3ff) << 10 |
- cscparams->ctm[2][0] & 0x3ff;
- g_csc_params = (cscparams->unk2 & 1) << 8 | (uint)cscparams->unk1;
- write_volatile_4(DAT_bc800150,g_csc_matrix0);
- write_volatile_4(DAT_bc800154,g_csc_matrix1);
- write_volatile_4(DAT_bc800158,g_csc_matrix2);
- write_volatile_4(DAT_bc80015c,g_csc_params);
- g_csc_stride = stride;
- g_csc_colorfmt = colorfmt;
- sceKernelCpuResumeIntr(ret);
- ret = 0;
- }
- else {
- sceKernelCpuResumeIntr(ret);
- ret = 0x80000021;
- }
- return ret;
- }
- int sceDmacplus_driver_0x9C492B9B_csc_vme(void *pRGBbuffer, void *pRGBbuffer2, SceMpegYCrCbBuffer *pYCrCbBuffer)
- {
- uint ret;
- uint flags;
- uint param;
- ushort unk;
- ret = 0x80000103;
- if (pRGBbuffer != NULL) {
- flags = sceKernelCpuSuspendIntr();
- unk = 0x1a;
- if ((pYCrCbBuffer->iFrameBufferWidth16 & 7U | g_csc_colorfmt) == 0) {
- unk = 10;
- }
- if ((g_dmac_status & unk) == 0) {
- write_volatile_4(DAT_bc800120,pYCrCbBuffer->pYBuffer);
- write_volatile_4(DAT_bc800128,pYCrCbBuffer->pYBuffer2);
- write_volatile_4(DAT_bc800130,pYCrCbBuffer->pCrBuffer);
- write_volatile_4(DAT_bc800134,pYCrCbBuffer->pCbBuffer);
- write_volatile_4(DAT_bc800138,pYCrCbBuffer->pCrBuffer2);
- write_volatile_4(DAT_bc80013c,pYCrCbBuffer->pCbBuffer2);
- write_volatile_4(DAT_bc800144,pRGBbuffer);
- write_volatile_4(DAT_bc800148,pRGBbuffer2);
- if (pRGBbuffer2 == NULL) {
- param = g_csc_stride << 8 | g_csc_colorfmt << 1;
- }
- else {
- param = g_csc_stride << 8 | g_csc_colorfmt << 1 | 1;
- }
- write_volatile_4(DAT_bc80014c,param);
- write_volatile_4(DAT_bc800140,
- (pYCrCbBuffer->iFrameBufferHeight16 & 0x3fU) << 0x10 |
- (pYCrCbBuffer->iFrameBufferWidth16 & 0x3fU) << 8 |
- (pYCrCbBuffer->iUnknown & 1U) << 2 | (pYCrCbBuffer->iUnknown2 & 1U) << 1 |1)
- ;
- write_volatile_4(DAT_bc800160,0xd);
- g_dmac_status = g_dmac_status | 0x8002;
- sceKernelClearEventFlag(g_SceDmacplusAvc_evflag,0xfffffffc);
- sceKernelCpuResumeIntrWithSync(flags);
- ret = 0;
- }
- else {
- sceKernelCpuResumeIntr(flags);
- ret = 0x80000021;
- }
- }
- return ret;
- }
- int sceDmacplus_driver_0xD126494B_csc_avc(void *pRGBbuffer, void *pRGBbuffer2, SceMpegYCrCbBuffer *pYCrCbBuffer)
- {
- uint ret;
- uint flags;
- uint param;
- ushort tmp;
- ret = 0x80000103;
- if (pRGBbuffer != NULL) {
- flags = sceKernelCpuSuspendIntr();
- tmp = 0x1a;
- if (g_csc_colorfmt == 0) {
- tmp = 10;
- }
- if ((g_dmac_status & tmp) == 0) {
- tmp = g_dmac_status | 0x8002;
- g_dmac_status = g_dmac_status | 2;
- if (g_csc_colorfmt != 0) {
- g_dmac_status = tmp;
- }
- write_volatile_4(DAT_bc800120,pYCrCbBuffer->pYBuffer);
- write_volatile_4(DAT_bc800124,pYCrCbBuffer->pYBuffer2);
- write_volatile_4(DAT_bc800128,pYCrCbBuffer->pCrBuffer);
- write_volatile_4(DAT_bc80012c,pYCrCbBuffer->pCbBuffer);
- write_volatile_4(DAT_bc800130,pYCrCbBuffer->pCrBuffer2);
- write_volatile_4(DAT_bc800134,pYCrCbBuffer->pCbBuffer2);
- write_volatile_4(DAT_bc800138,pYCrCbBuffer->iFrameHeight);
- write_volatile_4(DAT_bc80013c,pYCrCbBuffer->iFrameWidth);
- write_volatile_4(DAT_bc800144,pRGBbuffer);
- write_volatile_4(DAT_bc800148,pRGBbuffer2);
- if (pRGBbuffer2 == NULL) {
- param = g_csc_stride << 8 | g_csc_colorfmt << 1;
- }
- else {
- param = g_csc_stride << 8 | g_csc_colorfmt << 1 | 1;
- }
- write_volatile_4(DAT_bc80014c,param);
- write_volatile_4(DAT_bc800140,
- (pYCrCbBuffer->iFrameBufferHeight16 & 0x3fU) << 0x10 |
- (pYCrCbBuffer->iFrameBufferWidth16 & 0x3fU) << 8 |
- (pYCrCbBuffer->iUnknown & 1U) << 2 | (pYCrCbBuffer->iUnknown2 & 1U) << 1);
- write_volatile_4(DAT_bc800160,0xd);
- sceKernelClearEventFlag(g_SceDmacplusAvc_evflag,0xfffffffc);
- sceKernelCpuResumeIntrWithSync(flags);
- ret = 0;
- }
- else {
- sceKernelCpuResumeIntr(flags);
- ret = 0x80000021;
- }
- }
- return ret;
- }
- /*
- * sceMpegBaseCscVme calls sceDmacplus_driver_0xB269EAC9_csc_params and then sceDmacplus_driver_0x9C492B9B_csc_vme.
- */
Add Comment
Please, Sign In to add comment