Advertisement
LuigiBlood

osCapConvertToRGBA_PaintStudio

Sep 24th, 2022 (edited)
929
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.20 KB | Gaming | 0 0
  1. /* From Mario Artist Paint Studio */
  2. /* WARNING: Removing unreachable block (ram,0x80114804) */
  3. /* WARNING: Removing unreachable block (ram,0x80114460) */
  4. /* WARNING: Removing unreachable block (ram,0x80114638) */
  5.  
  6. //byte* capture : raw capture data from capture cart
  7. //ushort* dest  : RGBA framebuffer
  8. void osCapConvertToRGBA(byte *capture,ushort *dest,int width,int height)
  9.  
  10. {
  11.   byte bVar1;
  12.   ushort angle;
  13.   ushort uVar2;
  14.   int video_i;
  15.   int video_q;
  16.   uint uVar3;
  17.   uint uVar4;
  18.   undefined2 *puVar5;
  19.   undefined2 *puVar6;
  20.   undefined2 *puVar7;
  21.   undefined2 *puVar8;
  22.   int iVar9;
  23.   int iVar10;
  24.   undefined2 uVar11;
  25.   byte *pCaptureBuffer;
  26.   byte *pbVar12;
  27.   byte *pbVar13;
  28.   byte *pbVar14;
  29.   float video_y;
  30.   int iVar15;
  31.   int y;
  32.   int x;
  33.   int offset;
  34.  
  35.   video_y = FLOAT_8014e06c_100;
  36.   pCaptureBuffer = capture + 0x4440;
  37.   DAT_801f27b4 = 0;
  38.   video_i = 0;
  39.   do {
  40.     bVar1 = *pCaptureBuffer;
  41.     pbVar12 = pCaptureBuffer + 1;
  42.     video_i = video_i + 1;
  43.     pbVar13 = pCaptureBuffer + 2;
  44.     pbVar14 = pCaptureBuffer + 3;
  45.     pCaptureBuffer = pCaptureBuffer + 0x3400;
  46.     DAT_801f27b4 = DAT_801f27b4 + (uint)bVar1 + (uint)*pbVar12 + (uint)*pbVar13 + (uint)*pbVar14;
  47.   } while (video_i < 0x10);
  48.   if (DAT_801f27b4 < 0) {
  49.     DAT_801f27b4 = DAT_801f27b4 + 0x3f;
  50.   }
  51.   DAT_801f27b4 = DAT_801f27b4 >> 6;
  52.   DAT_801f27b8 = (DAT_801f27b4 * 0x4b) / 400 + DAT_801f27b4;
  53.   DAT_801f27bc = (DAT_801f27b4 * 100) / 0x28 + DAT_801f27b4;
  54.   iVar10 = (DAT_801f27b4 - DAT_801f27b8) * 0x100;
  55.   video_i = iVar10 + -0x8000;
  56.   puVar8 = &DAT_801f2bc0;
  57.   puVar7 = &DAT_801f27c0;
  58.   iVar9 = (DAT_801f27bc - DAT_801f27b8) * 800;
  59.   iVar10 = iVar10 + -0x7f00;
  60.   puVar5 = &temp_line;
  61.   do {
  62.     video_q = video_i * (int)video_y;
  63.     video_i = video_i + 0x200;
  64.     iVar15 = video_q / iVar9;
  65.     if (iVar9 == 0) {
  66.       trap(0x1c00);
  67.     }
  68.     if ((iVar9 == -1) && (video_q == -0x80000000)) {
  69.       trap(0x1800);
  70.     }
  71.     video_q = iVar15;
  72.     if (iVar15 < 0) {
  73.       video_q = 0;
  74.     }
  75.     if (0x1f < iVar15) {
  76.       video_q = 0x1f;
  77.     }
  78.     iVar15 = iVar10 * (int)video_y;
  79.     iVar10 = iVar10 + 0x200;
  80.     *puVar5 = (short)(video_q << 1);
  81.     *puVar8 = (short)(video_q << 6);
  82.     *puVar7 = (short)(video_q << 0xb);
  83.     video_q = iVar15 / iVar9;
  84.     if (iVar9 == 0) {
  85.       trap(0x1c00);
  86.     }
  87.     if ((iVar9 == -1) && (iVar15 == -0x80000000)) {
  88.       trap(0x1800);
  89.     }
  90.     iVar15 = video_q;
  91.     if (video_q < 0) {
  92.       iVar15 = 0;
  93.     }
  94.     if (video_q < 0x20) {
  95.       uVar11 = (undefined2)(iVar15 << 0xb);
  96.     }
  97.     else {
  98.       iVar15 = 0x1f;
  99.       uVar11 = 0xf800;
  100.     }
  101.     puVar6 = puVar5 + 2;
  102.     puVar5[1] = (short)(iVar15 << 1);
  103.     puVar8[1] = (short)(iVar15 << 6);
  104.     puVar7[1] = uVar11;
  105.     puVar7 = puVar7 + 2;
  106.     puVar8 = puVar8 + 2;
  107.     puVar5 = puVar6;
  108.   } while (puVar6 != (undefined2 *)0x801f33c0);
  109.   offset = 0x4400;
  110.   y = 0;
  111.   if (0 < height) {
  112.     do {
  113.       iVar10 = 0;
  114.       iVar9 = offset + 0x3c;
  115.       video_i = 0;
  116.       x = 0;
  117.       pCaptureBuffer = capture + iVar9;
  118.       do {
  119.         bVar1 = *pCaptureBuffer;
  120.         video_i = video_i + 1;
  121.         pCaptureBuffer = pCaptureBuffer + 1;
  122.         iVar10 = iVar10 + (uint)bVar1;
  123.       } while (video_i < 0x10);
  124.       iVar10 = iVar10 >> 4;
  125.       video_q = 0;
  126.       iVar15 = 0;
  127.       video_i = 0;
  128.       pCaptureBuffer = capture + iVar9;
  129.       do {
  130.         bVar1 = *pCaptureBuffer;
  131.         video_q = (video_q + (uint)pCaptureBuffer[1]) - (uint)pCaptureBuffer[3];
  132.         pbVar12 = pCaptureBuffer + 2;
  133.         video_i = video_i + 1;
  134.         pCaptureBuffer = pCaptureBuffer + 4;
  135.         iVar15 = (iVar15 + (uint)bVar1) - (uint)*pbVar12;
  136.       } while (video_i < 4);
  137.       uVar3 = getAngle((float)(video_q >> 3),(float)(iVar15 >> 3));
  138.       uVar2 = (short)(uVar3 >> 8) + 0x80U & 0xff;
  139.       pCaptureBuffer = capture + iVar9;
  140.       pbVar12 = capture + offset + 0x40;
  141.       pbVar13 = capture + offset + 0x44;
  142.       pbVar14 = capture + offset + 0x48;
  143.       uVar3 = getAngle((float)((int)((((((((uint)pCaptureBuffer[3] - (uint)pCaptureBuffer[5]) +
  144.                                          (uint)pbVar12[3]) - (uint)pbVar12[5]) + (uint)pbVar13[3]) -
  145.                                       (uint)pbVar13[5]) + (uint)pbVar14[3]) - (uint)pbVar14[5]) >> 3
  146.                               ),(float)((int)((((((((uint)pCaptureBuffer[2] -
  147.                                                    (uint)pCaptureBuffer[4]) + (uint)pbVar12[2]) -
  148.                                                  (uint)pbVar12[4]) + (uint)pbVar13[2]) -
  149.                                                (uint)pbVar13[4]) + (uint)pbVar14[2]) -
  150.                                              (uint)pbVar14[4]) >> 3));
  151.       if (0 < width) {
  152.         pCaptureBuffer = capture + offset + 0x68;
  153.         do {
  154.           if (capture_type == 0) {
  155.             iVar15 = ((int)((uint)pCaptureBuffer[2] + (uint)*pCaptureBuffer) >> 1) + -0x80;
  156.             video_i = ((uint)pCaptureBuffer[1] - iVar15) + -0x80;
  157.             iVar9 = ((uint)*pCaptureBuffer - iVar15) + -0x80;
  158.             video_y = sqrtf((float)(video_i * video_i + iVar9 * iVar9));
  159.             uVar4 = getAngle((float)video_i,(float)iVar9);
  160.             angle = (((short)(uVar4 >> 8) - uVar2) + (short)cap_hue) * 0x100;
  161.             video_i = sins(angle);
  162.             video_q = ((int)video_y * (video_i * 0x92 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
  163.             video_i = coss(angle);
  164.             iVar9 = (iVar15 - iVar10) * 2;
  165.             video_i = ((int)video_y * (video_i * 0x104 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
  166.             dest[(y * width + x) * 2] =
  167.                  (*(ushort *)(&blue_intensity + video_i * 2 + iVar9) |
  168.                   *(ushort *)(&red_intensity + video_q * 2 + iVar9) |
  169.                  *(ushort *)
  170.                   (&green_intensity + (video_q * -0x41 + video_i * -0x18 >> 7) * 2 + iVar9)) + 1;
  171.             iVar15 = ((int)((uint)pCaptureBuffer[4] + (uint)pCaptureBuffer[2]) >> 1) + -0x80;
  172.             video_i = ((uint)pCaptureBuffer[3] - iVar15) + -0x80;
  173.             iVar9 = ((uint)pCaptureBuffer[2] - iVar15) + -0x80;
  174.             video_y = sqrtf((float)(video_i * video_i + iVar9 * iVar9));
  175.             uVar4 = getAngle((float)video_i,(float)iVar9);
  176.             angle = (((short)(uVar4 >> 8) - ((short)(uVar3 >> 8) + 0x80U & 0xff)) + (short)cap_hue)
  177.                     * 0x100;
  178.             video_i = sins(angle);
  179.             video_q = ((int)video_y * (video_i * 0x92 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
  180.             video_i = coss(angle);
  181.             iVar9 = (iVar15 - iVar10) * 2;
  182.             video_i = ((int)video_y * (video_i * 0x104 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
  183.             (dest + (y * width + x) * 2)[1] =
  184.                  (*(ushort *)(&blue_intensity + video_i * 2 + iVar9) |
  185.                   *(ushort *)(&red_intensity + video_q * 2 + iVar9) |
  186.                  *(ushort *)
  187.                   (&green_intensity + (video_q * -0x41 + video_i * -0x18 >> 7) * 2 + iVar9)) + 1;
  188.           }
  189.           else {
  190.             iVar15 = ((int)((uint)pCaptureBuffer[2] + (uint)*pCaptureBuffer) >> 1) + -0x80;
  191.             video_i = ((uint)pCaptureBuffer[1] - iVar15) + -0x80;
  192.             iVar9 = ((uint)*pCaptureBuffer - iVar15) + -0x80;
  193.             video_y = sqrtf((float)(video_i * video_i + iVar9 * iVar9));
  194.             uVar4 = getAngle((float)video_i,(float)iVar9);
  195.             angle = (((short)(uVar4 >> 8) - uVar2) + (short)cap_hue) * 0x100;
  196.             video_i = sins(angle);
  197.             video_q = (int)video_y * (video_i * 0x92 >> 8) * ((cap_contrast + 100) / 100) >> 0xe;
  198.             video_i = coss(angle);
  199.             iVar9 = (iVar15 - iVar10) * 2;
  200.             video_i = (int)video_y * (video_i * 0x104 >> 8) * ((cap_contrast + 100) / 100) >> 0xe;
  201.             dest[y * width + x] =
  202.                  (*(ushort *)(&blue_intensity + video_i * 2 + iVar9) |
  203.                   *(ushort *)(&red_intensity + video_q * 2 + iVar9) |
  204.                  *(ushort *)
  205.                   (&green_intensity + (video_q * -0x41 + video_i * -0x18 >> 7) * 2 + iVar9)) + 1;
  206.           }
  207.           pCaptureBuffer = pCaptureBuffer + 4;
  208.           x = x + 1;
  209.         } while (x != width);
  210.       }
  211.       y = y + 1;
  212.       offset = offset + 0x400;
  213.     } while (y != height);
  214.   }
  215.   return;
  216. }
  217.  
  218.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement