Created
June 30, 2019 11:20
-
-
Save psxdev/20cc8a3a1b1f33d2271a85d59c529083 to your computer and use it in GitHub Desktop.
PlayStation Camera frame parser more at https://psxdev.github.io/luke2.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* OrbisEyeCam library | |
* Copyright (C) 2013,2014,2019 Antonio Jose Ramos Marquez (aka bigboss) @psxdev on twitter | |
* | |
* Repository https://github.com/psxdev/OrbisEyeCam | |
typedef struct OrbisEyeCamFrame | |
{ | |
BYTE* header; | |
BYTE* audio; | |
BYTE* videoFrame[2]; | |
BYTE* videoFrameHigh[2]; | |
BYTE* videoFrameMedium[2]; | |
BYTE* videoFrameLow[2]; | |
BYTE* mode; | |
}OrbisEyeCamFrame; | |
//Declare your frame | |
OrbisEyeCamFrame eyeFrame; | |
//Reserve memory for each frame pointer where you want | |
eyeFrame.header = (BYTE *)malloc(32*800); | |
eyeFrame.audio = (BYTE*)malloc(64*800); | |
eyeFrame.videoFrame[0] = (BYTE*)malloc(1280 * 800 * 2); | |
eyeFrame.videoFrame[1] = (BYTE*)malloc(1280 * 800 * 2); | |
eyeFrame.videoFrameHigh[0] = (BYTE*)malloc(640 * 400 * 2); | |
eyeFrame.videoFrameHigh[1] = (BYTE*)malloc(640 * 400 * 2); | |
eyeFrame.videoFrameMedium[0] = (BYTE*)malloc(320 * 200 * 2); | |
eyeFrame.videoFrameMedium[1] = (BYTE*)malloc(320 * 200 * 2); | |
eyeFrame.videoFrameLow[0] = (BYTE*)malloc(160 * 100 * 2); | |
eyeFrame.videoFrameLow[1] = (BYTE*)malloc(160 * 100 * 2); | |
//get frames with Windows Media Framework and call to getFrame to populate each frame pointer as you like :P | |
void getFrame(const BYTE* raw, int lineSize, int size_x, int size_y) | |
{ | |
int i; | |
int j = 0; | |
for (i = 0; i < size_y; i++) | |
{ | |
memcpy(&eyeFrame.header[32 * i], &raw[lineSize * 2 * i], 32); | |
memcpy(&eyeFrame.audio[64 * i], &raw[lineSize * 2 * i + 32], 64); | |
memcpy(&eyeFrame.videoFrame[0][1280 * 2 * i], &raw[lineSize * 2 * i + 32 + 64], 1280 * 2); | |
memcpy(&eyeFrame.videoFrame[1][1280 * 2 * i], &raw[lineSize * 2 * i + 32 + 64 + 1280 * 2], 1280 * 2); | |
if (i <size_y-1) | |
{ | |
memcpy(&eyeFrame.videoFrameHigh[0][320*2 * i], &raw[lineSize * 2 * (i + 1) + 32 + 64 + 1280 * 2 + 1280 * 2], 320 * 2 ); | |
memcpy(&eyeFrame.videoFrameHigh[0][320*2* (i+1)], &raw[lineSize * 2 * (i) + 32 + 64 + 1280 * 2 + 1280 * 2], 320 * 2 ); | |
memcpy(&eyeFrame.videoFrameHigh[1][320 * 2 * i], &raw[lineSize * 2 * (i + 1) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2], 320 * 2); | |
memcpy(&eyeFrame.videoFrameHigh[1][320 * 2 * (i + 1)], &raw[lineSize * 2 * (i)+32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2], 320 * 2); | |
} | |
if (i < size_y-3) | |
{ | |
memcpy(&eyeFrame.videoFrameMedium[0][80 * 2 * i], &raw[lineSize * 2 * (i+3) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[0][80 * 2 * (i + 1)], &raw[lineSize * 2 * (i + 2) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[0][80 * 2 * (i + 2)], &raw[lineSize * 2 * (i + 1) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[0][80 * 2 * (i + 3)], &raw[lineSize * 2 * (i + 0) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[1][80 * 2 * i], &raw[lineSize * 2 * (i + 3) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 80 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[1][80 * 2 * (i + 1)], &raw[lineSize * 2 * (i + 2) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 80 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[1][80 * 2 * (i + 2)], &raw[lineSize * 2 * (i + 1) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 80 * 2], 80 * 2); | |
memcpy(&eyeFrame.videoFrameMedium[1][80 * 2 * (i + 3)], &raw[lineSize * 2 * (i + 0) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 80 * 2], 80 * 2); | |
} | |
if (i < size_y - 7) | |
{ | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * i], &raw[lineSize * 2 * (i + 7) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 1)], &raw[lineSize * 2 * (i + 6) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 2)], &raw[lineSize * 2 * (i + 5) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 3)], &raw[lineSize * 2 * (i + 4) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 4)], &raw[lineSize * 2 * (i + 3) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 5)], &raw[lineSize * 2 * (i + 2) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 6)], &raw[lineSize * 2 * (i + 1) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[0][20 * 2 * (i + 7)], &raw[lineSize * 2 * (i + 0) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * i], &raw[lineSize * 2 * (i + 7) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 1)], &raw[lineSize * 2 * (i + 6) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 2)], &raw[lineSize * 2 * (i + 5) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 3)], &raw[lineSize * 2 * (i + 4) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 4)], &raw[lineSize * 2 * (i + 3) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 5)], &raw[lineSize * 2 * (i + 2) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 6)], &raw[lineSize * 2 * (i + 1) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
memcpy(&eyeFrame.videoFrameLow[1][20 * 2 * (i + 7)], &raw[lineSize * 2 * (i + 0) + 32 + 64 + 1280 * 2 + 1280 * 2 + 320 * 2 + 320 * 2 + 160 * 2 + 20 * 2], 20 * 2); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment