Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* From Mario Artist Paint Studio */
- /* WARNING: Removing unreachable block (ram,0x80114804) */
- /* WARNING: Removing unreachable block (ram,0x80114460) */
- /* WARNING: Removing unreachable block (ram,0x80114638) */
- //byte* capture : raw capture data from capture cart
- //ushort* dest : RGBA framebuffer
- void osCapConvertToRGBA(byte *capture,ushort *dest,int width,int height)
- {
- byte bVar1;
- ushort angle;
- ushort uVar2;
- int video_i;
- int video_q;
- uint uVar3;
- uint uVar4;
- undefined2 *puVar5;
- undefined2 *puVar6;
- undefined2 *puVar7;
- undefined2 *puVar8;
- int iVar9;
- int iVar10;
- undefined2 uVar11;
- byte *pCaptureBuffer;
- byte *pbVar12;
- byte *pbVar13;
- byte *pbVar14;
- float video_y;
- int iVar15;
- int y;
- int x;
- int offset;
- video_y = FLOAT_8014e06c_100;
- pCaptureBuffer = capture + 0x4440;
- DAT_801f27b4 = 0;
- video_i = 0;
- do {
- bVar1 = *pCaptureBuffer;
- pbVar12 = pCaptureBuffer + 1;
- video_i = video_i + 1;
- pbVar13 = pCaptureBuffer + 2;
- pbVar14 = pCaptureBuffer + 3;
- pCaptureBuffer = pCaptureBuffer + 0x3400;
- DAT_801f27b4 = DAT_801f27b4 + (uint)bVar1 + (uint)*pbVar12 + (uint)*pbVar13 + (uint)*pbVar14;
- } while (video_i < 0x10);
- if (DAT_801f27b4 < 0) {
- DAT_801f27b4 = DAT_801f27b4 + 0x3f;
- }
- DAT_801f27b4 = DAT_801f27b4 >> 6;
- DAT_801f27b8 = (DAT_801f27b4 * 0x4b) / 400 + DAT_801f27b4;
- DAT_801f27bc = (DAT_801f27b4 * 100) / 0x28 + DAT_801f27b4;
- iVar10 = (DAT_801f27b4 - DAT_801f27b8) * 0x100;
- video_i = iVar10 + -0x8000;
- puVar8 = &DAT_801f2bc0;
- puVar7 = &DAT_801f27c0;
- iVar9 = (DAT_801f27bc - DAT_801f27b8) * 800;
- iVar10 = iVar10 + -0x7f00;
- puVar5 = &temp_line;
- do {
- video_q = video_i * (int)video_y;
- video_i = video_i + 0x200;
- iVar15 = video_q / iVar9;
- if (iVar9 == 0) {
- trap(0x1c00);
- }
- if ((iVar9 == -1) && (video_q == -0x80000000)) {
- trap(0x1800);
- }
- video_q = iVar15;
- if (iVar15 < 0) {
- video_q = 0;
- }
- if (0x1f < iVar15) {
- video_q = 0x1f;
- }
- iVar15 = iVar10 * (int)video_y;
- iVar10 = iVar10 + 0x200;
- *puVar5 = (short)(video_q << 1);
- *puVar8 = (short)(video_q << 6);
- *puVar7 = (short)(video_q << 0xb);
- video_q = iVar15 / iVar9;
- if (iVar9 == 0) {
- trap(0x1c00);
- }
- if ((iVar9 == -1) && (iVar15 == -0x80000000)) {
- trap(0x1800);
- }
- iVar15 = video_q;
- if (video_q < 0) {
- iVar15 = 0;
- }
- if (video_q < 0x20) {
- uVar11 = (undefined2)(iVar15 << 0xb);
- }
- else {
- iVar15 = 0x1f;
- uVar11 = 0xf800;
- }
- puVar6 = puVar5 + 2;
- puVar5[1] = (short)(iVar15 << 1);
- puVar8[1] = (short)(iVar15 << 6);
- puVar7[1] = uVar11;
- puVar7 = puVar7 + 2;
- puVar8 = puVar8 + 2;
- puVar5 = puVar6;
- } while (puVar6 != (undefined2 *)0x801f33c0);
- offset = 0x4400;
- y = 0;
- if (0 < height) {
- do {
- iVar10 = 0;
- iVar9 = offset + 0x3c;
- video_i = 0;
- x = 0;
- pCaptureBuffer = capture + iVar9;
- do {
- bVar1 = *pCaptureBuffer;
- video_i = video_i + 1;
- pCaptureBuffer = pCaptureBuffer + 1;
- iVar10 = iVar10 + (uint)bVar1;
- } while (video_i < 0x10);
- iVar10 = iVar10 >> 4;
- video_q = 0;
- iVar15 = 0;
- video_i = 0;
- pCaptureBuffer = capture + iVar9;
- do {
- bVar1 = *pCaptureBuffer;
- video_q = (video_q + (uint)pCaptureBuffer[1]) - (uint)pCaptureBuffer[3];
- pbVar12 = pCaptureBuffer + 2;
- video_i = video_i + 1;
- pCaptureBuffer = pCaptureBuffer + 4;
- iVar15 = (iVar15 + (uint)bVar1) - (uint)*pbVar12;
- } while (video_i < 4);
- uVar3 = getAngle((float)(video_q >> 3),(float)(iVar15 >> 3));
- uVar2 = (short)(uVar3 >> 8) + 0x80U & 0xff;
- pCaptureBuffer = capture + iVar9;
- pbVar12 = capture + offset + 0x40;
- pbVar13 = capture + offset + 0x44;
- pbVar14 = capture + offset + 0x48;
- uVar3 = getAngle((float)((int)((((((((uint)pCaptureBuffer[3] - (uint)pCaptureBuffer[5]) +
- (uint)pbVar12[3]) - (uint)pbVar12[5]) + (uint)pbVar13[3]) -
- (uint)pbVar13[5]) + (uint)pbVar14[3]) - (uint)pbVar14[5]) >> 3
- ),(float)((int)((((((((uint)pCaptureBuffer[2] -
- (uint)pCaptureBuffer[4]) + (uint)pbVar12[2]) -
- (uint)pbVar12[4]) + (uint)pbVar13[2]) -
- (uint)pbVar13[4]) + (uint)pbVar14[2]) -
- (uint)pbVar14[4]) >> 3));
- if (0 < width) {
- pCaptureBuffer = capture + offset + 0x68;
- do {
- if (capture_type == 0) {
- iVar15 = ((int)((uint)pCaptureBuffer[2] + (uint)*pCaptureBuffer) >> 1) + -0x80;
- video_i = ((uint)pCaptureBuffer[1] - iVar15) + -0x80;
- iVar9 = ((uint)*pCaptureBuffer - iVar15) + -0x80;
- video_y = sqrtf((float)(video_i * video_i + iVar9 * iVar9));
- uVar4 = getAngle((float)video_i,(float)iVar9);
- angle = (((short)(uVar4 >> 8) - uVar2) + (short)cap_hue) * 0x100;
- video_i = sins(angle);
- video_q = ((int)video_y * (video_i * 0x92 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
- video_i = coss(angle);
- iVar9 = (iVar15 - iVar10) * 2;
- video_i = ((int)video_y * (video_i * 0x104 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
- dest[(y * width + x) * 2] =
- (*(ushort *)(&blue_intensity + video_i * 2 + iVar9) |
- *(ushort *)(&red_intensity + video_q * 2 + iVar9) |
- *(ushort *)
- (&green_intensity + (video_q * -0x41 + video_i * -0x18 >> 7) * 2 + iVar9)) + 1;
- iVar15 = ((int)((uint)pCaptureBuffer[4] + (uint)pCaptureBuffer[2]) >> 1) + -0x80;
- video_i = ((uint)pCaptureBuffer[3] - iVar15) + -0x80;
- iVar9 = ((uint)pCaptureBuffer[2] - iVar15) + -0x80;
- video_y = sqrtf((float)(video_i * video_i + iVar9 * iVar9));
- uVar4 = getAngle((float)video_i,(float)iVar9);
- angle = (((short)(uVar4 >> 8) - ((short)(uVar3 >> 8) + 0x80U & 0xff)) + (short)cap_hue)
- * 0x100;
- video_i = sins(angle);
- video_q = ((int)video_y * (video_i * 0x92 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
- video_i = coss(angle);
- iVar9 = (iVar15 - iVar10) * 2;
- video_i = ((int)video_y * (video_i * 0x104 >> 8) * (cap_contrast + 100)) / 100 >> 0xe;
- (dest + (y * width + x) * 2)[1] =
- (*(ushort *)(&blue_intensity + video_i * 2 + iVar9) |
- *(ushort *)(&red_intensity + video_q * 2 + iVar9) |
- *(ushort *)
- (&green_intensity + (video_q * -0x41 + video_i * -0x18 >> 7) * 2 + iVar9)) + 1;
- }
- else {
- iVar15 = ((int)((uint)pCaptureBuffer[2] + (uint)*pCaptureBuffer) >> 1) + -0x80;
- video_i = ((uint)pCaptureBuffer[1] - iVar15) + -0x80;
- iVar9 = ((uint)*pCaptureBuffer - iVar15) + -0x80;
- video_y = sqrtf((float)(video_i * video_i + iVar9 * iVar9));
- uVar4 = getAngle((float)video_i,(float)iVar9);
- angle = (((short)(uVar4 >> 8) - uVar2) + (short)cap_hue) * 0x100;
- video_i = sins(angle);
- video_q = (int)video_y * (video_i * 0x92 >> 8) * ((cap_contrast + 100) / 100) >> 0xe;
- video_i = coss(angle);
- iVar9 = (iVar15 - iVar10) * 2;
- video_i = (int)video_y * (video_i * 0x104 >> 8) * ((cap_contrast + 100) / 100) >> 0xe;
- dest[y * width + x] =
- (*(ushort *)(&blue_intensity + video_i * 2 + iVar9) |
- *(ushort *)(&red_intensity + video_q * 2 + iVar9) |
- *(ushort *)
- (&green_intensity + (video_q * -0x41 + video_i * -0x18 >> 7) * 2 + iVar9)) + 1;
- }
- pCaptureBuffer = pCaptureBuffer + 4;
- x = x + 1;
- } while (x != width);
- }
- y = y + 1;
- offset = offset + 0x400;
- } while (y != height);
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement