xerpi

PSP sceMpegBaseCscVme

Sep 29th, 2020
630
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.     }
  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.  
RAW Paste Data