SHOW:
|
|
- or go back to the newest paste.
| 1 | int sceMpegBaseCscVme(ScePVoid pRGBbuffer, ScePVoid pRGBbuffer2, SceInt32 width, SceMpegYCrCbBuffer *pYCrCbBuffer) | |
| 2 | {
| |
| 3 | uint uVar1; | |
| 4 | int ret; | |
| 5 | uint uVar2; | |
| 6 | uint uVar3; | |
| 7 | uint width1; | |
| 8 | int in_k1; | |
| 9 | ||
| 10 | uVar1 = in_k1 << 0xb; | |
| 11 | if (-1 < (int)(((uint)&pYCrCbBuffer->iFrameHeight | (uint)pYCrCbBuffer) & uVar1)) {
| |
| 12 | ret = pYCrCbBuffer->iFrameBufferWidth16; | |
| 13 | uVar3 = pYCrCbBuffer->iFrameBufferHeight16 * ret * 0x80; | |
| 14 | uVar2 = uVar3 >> 2; | |
| 15 | width1 = width; | |
| 16 | if (width == 0) {
| |
| 17 | width1 = DAT_000006e8; | |
| 18 | } | |
| 19 | if (width1 < (uint)(ret << 4)) {
| |
| 20 | return -0x7ffffe02; | |
| 21 | } | |
| 22 | width1 = width1 * ret * 4; | |
| 23 | if ((((((-1 < (int)(uVar1 & ((uint)((int)pYCrCbBuffer->pYBuffer + uVar3) | | |
| 24 | (uint)pYCrCbBuffer->pYBuffer | uVar3))) && | |
| 25 | (-1 < (int)(uVar1 & ((uint)((int)pYCrCbBuffer->pYBuffer2 + uVar3) | | |
| 26 | (uint)pYCrCbBuffer->pYBuffer2 | uVar3)))) && | |
| 27 | (-1 < (int)(((int)pYCrCbBuffer->pCrBuffer + uVar2 | (uint)pYCrCbBuffer->pCrBuffer) & | |
| 28 | uVar1))) && | |
| 29 | ((-1 < (int)(((int)pYCrCbBuffer->pCbBuffer + uVar2 | (uint)pYCrCbBuffer->pCbBuffer) & | |
| 30 | uVar1) && | |
| 31 | (-1 < (int)(((int)pYCrCbBuffer->pCrBuffer2 + uVar2 | (uint)pYCrCbBuffer->pCrBuffer2) & | |
| 32 | uVar1))))) && | |
| 33 | ((-1 < (int)(((int)pYCrCbBuffer->pCbBuffer2 + uVar2 | (uint)pYCrCbBuffer->pCbBuffer2) & | |
| 34 | uVar1) && | |
| 35 | (-1 < (int)(uVar1 & ((uint)((int)pRGBbuffer + width1) | (uint)pRGBbuffer | width1)))))) | |
| 36 | && ((pRGBbuffer2 == (ScePVoid)0x0 || | |
| 37 | (-1 < (int)(uVar1 & ((uint)((int)pRGBbuffer2 + width1) | (uint)pRGBbuffer2 | width1)) | |
| 38 | )))) {
| |
| 39 | ret = trigger_dmacplus_memcpy4((int)DAT_000006e6,width,0); | |
| 40 | if (ret == 0) {
| |
| 41 | ret = trigger_dmacplus_memcpy3(pRGBbuffer,pRGBbuffer2,pYCrCbBuffer); | |
| 42 | } | |
| 43 | sceKernelUnlockMutex(g_SceMpegBaseCSC_mutex,1); | |
| 44 | return ret; | |
| 45 | } | |
| 46 | } | |
| 47 | return -0x7fffffdd; | |
| 48 | } | |
| 49 | ||
| 50 | void trigger_dmacplus_memcpy4(int param_1,int param_2,int param_3) | |
| 51 | {
| |
| 52 | uint ret; | |
| 53 | ||
| 54 | if (param_2 == 0) {
| |
| 55 | param_2 = DAT_000006e8; | |
| 56 | } | |
| 57 | if (param_3 == 0) {
| |
| 58 | param_3 = 0x6d0; | |
| 59 | } | |
| 60 | sceKernelLockMutex(g_SceMpegBaseCSC_mutex,1,0); | |
| 61 | while (ret = sceDmacplus_driver_0xB269EAC9_memcpy4(param_1,param_2,param_3), ret == 0x80000021) | |
| 62 | {
| |
| 63 | sceDmacplus_driver_0xBF0DB45E_sceDmacplusAvcSync(0, 0); | |
| 64 | - | sceDmacplus_driver_0xBF0DB45E_sceDmacplusAvcSync(); |
| 64 | + | |
| 65 | return; | |
| 66 | } | |
| 67 | } | |
| 68 | ||
| 69 | ||
| 70 | int trigger_dmacplus_memcpy3(ScePVoid pRGBbuffer, ScePVoid pRGBbuffer2, SceMpegYCrCbBuffer *pYCrCbBuffer) | |
| 71 | {
| |
| 72 | int iVar1; | |
| 73 | int iVar2; | |
| 74 | uint ret; | |
| 75 | ||
| 76 | iVar1 = sceKernelPollEventFlag(g_SceMpegBaseCSC_evflag,3,1,0); | |
| 77 | iVar2 = -0x7fffffff; | |
| 78 | if (-1 < iVar1) {
| |
| 79 | do {
| |
| 80 | ret = sceDmacplus_driver_0x9C492B9B(pRGBbuffer, pRGBbuffer2, pYCrCbBuffer); | |
| 81 | if ((ret != 0) && (ret != 0x80000021)) {
| |
| 82 | return ret; | |
| 83 | } | |
| 84 | iVar2 = sceDmacplus_driver_0xBF0DB45E_sceDmacplusAvcSync(); | |
| 85 | } while (ret != 0); | |
| 86 | } | |
| 87 | return iVar2; | |
| 88 | } | |
| 89 | ||
| 90 | uint sceDmacplus_driver_0xB269EAC9(int param_1,int width,ushort *param_3) | |
| 91 | {
| |
| 92 | undefined4 tmp; | |
| 93 | uint ret; | |
| 94 | ||
| 95 | tmp = sceKernelCpuSuspendIntr(); | |
| 96 | if ((g_dmac_status & 2) == 0) {
| |
| 97 | DAT_000012f4 = ((uint)param_3[2] & 0x3ff) << 0x14 | ((uint)param_3[1] & 0x3ff) << 10 | | |
| 98 | (uint)*param_3 & 0x3ff; | |
| 99 | DAT_000012f8 = ((uint)param_3[5] & 0x3ff) << 0x14 | ((uint)param_3[4] & 0x3ff) << 10 | | |
| 100 | (uint)param_3[3] & 0x3ff; | |
| 101 | DAT_000012fc = ((uint)param_3[8] & 0x3ff) << 0x14 | ((uint)param_3[7] & 0x3ff) << 10 | | |
| 102 | (uint)param_3[6] & 0x3ff; | |
| 103 | DAT_00001300 = ((uint)param_3[10] & 1) << 8 | (uint)*(byte *)(param_3 + 9); | |
| 104 | DAT_00001304 = width; | |
| 105 | DAT_00001308 = param_1; | |
| 106 | _DAT_bc800150 = DAT_000012f4; | |
| 107 | _DAT_bc800154 = DAT_000012f8; | |
| 108 | _DAT_bc800158 = DAT_000012fc; | |
| 109 | _DAT_bc80015c = DAT_00001300; | |
| 110 | sceKernelCpuResumeIntr(tmp); | |
| 111 | ret = 0; | |
| 112 | } | |
| 113 | else {
| |
| 114 | sceKernelCpuResumeIntr(tmp); | |
| 115 | ret = 0x80000021; | |
| 116 | } | |
| 117 | return ret; | |
| 118 | } | |
| 119 | ||
| 120 | uint sceDmacplus_driver_0x9C492B9B(ScePVoid pRGBbuffer, ScePVoid pRGBbuffer2, SceMpegYCrCbBuffer *pYCrCbBuffer) | |
| 121 | {
| |
| 122 | uint uVar1; | |
| 123 | undefined4 uVar2; | |
| 124 | ushort uVar3; | |
| 125 | int iVar4; | |
| 126 | uint in_k1; | |
| 127 | ||
| 128 | uVar1 = 0x80000103; | |
| 129 | if (pRGBbuffer != (ScePVoid)0x0) {
| |
| 130 | uVar2 = sceKernelCpuSuspendIntr(); | |
| 131 | uVar3 = 0x1a; | |
| 132 | if ((pYCrCbBuffer->iFrameBufferWidth16 & 7U | DAT_00001308) == 0) {
| |
| 133 | uVar3 = 10; | |
| 134 | } | |
| 135 | iVar4 = (in_k1 >> 0x1f) << 0x1e; | |
| 136 | if ((g_dmac_status & uVar3) == 0) {
| |
| 137 | if (pRGBbuffer2 == (ScePVoid)0x0) {
| |
| 138 | _DAT_bc80014c = DAT_00001304 << 8 | DAT_00001308 << 1; | |
| 139 | } | |
| 140 | else {
| |
| 141 | _DAT_bc80014c = DAT_00001304 << 8 | DAT_00001308 << 1 | 1; | |
| 142 | } | |
| 143 | _DAT_bc800140 = | |
| 144 | (pYCrCbBuffer->iFrameBufferHeight16 & 0x3fU) << 0x10 | | |
| 145 | (pYCrCbBuffer->iFrameBufferWidth16 & 0x3fU) << 8 | | |
| 146 | (pYCrCbBuffer->iUnknown & 1U) << 2 | (pYCrCbBuffer->iUnknown2 & 1U) << 1 | 1; | |
| 147 | _DAT_bc800160 = 0xd; | |
| 148 | g_dmac_status = g_dmac_status | 0x8002; | |
| 149 | _DAT_bc800120 = iVar4; | |
| 150 | _DAT_bc800128 = iVar4; | |
| 151 | _DAT_bc800130 = iVar4; | |
| 152 | _DAT_bc800134 = iVar4; | |
| 153 | _DAT_bc800138 = iVar4; | |
| 154 | _DAT_bc80013c = iVar4; | |
| 155 | _DAT_bc800144 = iVar4; | |
| 156 | _DAT_bc800148 = iVar4; | |
| 157 | sceKernelClearEventFlag(g_SceDmacplusAvc_evflag,0xfffffffc); | |
| 158 | sceKernelCpuResumeIntrWithSync(uVar2); | |
| 159 | uVar1 = 0; | |
| 160 | } | |
| 161 | else {
| |
| 162 | sceKernelCpuResumeIntr(uVar2); | |
| 163 | uVar1 = 0x80000021; | |
| 164 | } | |
| 165 | } | |
| 166 | return uVar1; | |
| 167 | } | |
| 168 | ||
| 169 | ||
| 170 | ||
| 171 | ||
| 172 |