#include "stdafx.h" #include "Ini.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" #include "cellCamera.h" extern Module cellCamera; //const char* attributes[] = {"GAIN", "REDBLUEGAIN", "SATURATION", "EXPOSURE", "BRIGHTNESS", "AEC", "AGC", "AWB", "ABC", "LED", "AUDIOGAIN", "QS", "NONZEROCOEFFS", "YUVFLAG", // "JPEGFLAG", "BACKLIGHTCOMP", "MIRRORFLAG", "MEASUREDQS", "422FLAG", "USBLOAD", "GAMMA", "GREENGAIN", "AGCLIMIT", "DENOISE", "FRAMERATEADJUST", // "PIXELOUTLIERFILTER", "AGCLOW", "AGCHIGH", "DEVICELOCATION", "FORMATCAP", "FORMATINDEX", "NUMFRAME", "FRAMEINDEX", "FRAMESIZE", "INTERVALTYPE", // "INTERVALINDEX", "INTERVALVALUE", "COLORMATCHING", "PLFREQ", "DEVICEID", "DEVICECAP", "DEVICESPEED", "UVCREQCODE", "UVCREQDATA", "DEVICEID2", // "READMODE", "GAMEPID", "PBUFFER", "READFINISH", "ATTRIBUTE_UNKNOWN"}; struct cellCameraInternal { bool m_bInitialized; //CellCamera m_camera; cellCameraInternal() : m_bInitialized(false) { } }; cellCameraInternal cellCameraInstance; s32 cellCameraInit() { cellCamera.Warning("cellCameraInit()"); if (cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_ALREADY_INIT; if (Ini.Camera.GetValue() == 0) return CELL_CAMERA_ERROR_DEVICE_NOT_FOUND; if (Ini.CameraType.GetValue() == 1) { //CellCamera camera; //camera.attributes.SATURATION = 164; //camera.attributes.BRIGHTNESS = 96; //camera.attributes.AEC = 1; //camera.attributes.AGC = 1; //camera.attributes.AWB = 1; //camera.attributes.ABC = 0; //camera.attributes.LED = 1; //camera.attributes.QS = 0; //camera.attributes.NONZEROCOEFFS[0] = 32; //camera.attributes.NONZEROCOEFFS[1] = 32; //camera.attributes.YUVFLAG = 0; //camera.attributes.BACKLIGHTCOMP = 0; //camera.attributes.MIRRORFLAG = 1; //camera.attributes._422FLAG = 1; //camera.attributes.USBLOAD = 4; //cellCameraInstance.m_camera = camera; } else if (Ini.CameraType.GetValue() == 2) { //CellCamera camera; //camera.attributes.SATURATION = 64; //camera.attributes.BRIGHTNESS = 8; //camera.attributes.AEC = 1; //camera.attributes.AGC = 1; //camera.attributes.AWB = 1; //camera.attributes.LED = 1; //camera.attributes.BACKLIGHTCOMP = 0; //camera.attributes.MIRRORFLAG = 1; //camera.attributes.GAMMA = 1; //camera.attributes.AGCLIMIT = 4; //camera.attributes.DENOISE = 0; //camera.attributes.FRAMERATEADJUST = 0; //camera.attributes.PIXELOUTLIERFILTER = 1; //camera.attributes.AGCLOW = 48; //camera.attributes.AGCHIGH = 64; //cellCameraInstance.m_camera = camera; } // TODO: Some other default attributes? Need to check the actual behaviour on a real PS3. cellCameraInstance.m_bInitialized = true; return CELL_OK; } s32 cellCameraEnd() { cellCamera.Warning("cellCameraEnd()"); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; cellCameraInstance.m_bInitialized = false; return CELL_OK; } s32 cellCameraOpen() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraOpenEx() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraClose() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraGetDeviceGUID() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraGetType(s32 dev_num, vm::ptr type) { cellCamera.Warning("cellCameraGetType(dev_num=%d, type=*0x%x)", dev_num, type); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; switch (Ini.CameraType.GetValue()) { case 1: *type = CELL_CAMERA_EYETOY; break; case 2: *type = CELL_CAMERA_EYETOY2; break; case 3: *type = CELL_CAMERA_USBVIDEOCLASS; break; default: *type = CELL_CAMERA_TYPE_UNKNOWN; break; } return CELL_OK; } s32 cellCameraIsAvailable() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraIsAttached() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraIsOpen() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraIsStarted() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraGetAttribute(s32 dev_num, s32 attrib, vm::ptr arg1, vm::ptr arg2) { cellCamera.Warning("cellCameraGetAttribute(dev_num=%d, attrib=%d, arg1=*0x%x, arg2=*0x%x)", dev_num, attrib, arg1, arg2); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; //switch (attrib) //{ //case 0: // *arg1 = cellCameraInstance.m_camera.attributes.GAIN; break; //case 1: // *arg1 = cellCameraInstance.m_camera.attributes.REDBLUEGAIN; break; //case 2: // *arg1 = cellCameraInstance.m_camera.attributes.SATURATION; break; //case 3: // *arg1 = cellCameraInstance.m_camera.attributes.EXPOSURE; break; //case 4: // *arg1 = cellCameraInstance.m_camera.attributes.BRIGHTNESS; break; //case 5: // *arg1 = cellCameraInstance.m_camera.attributes.AEC; break; //case 6: // *arg1 = cellCameraInstance.m_camera.attributes.AGC; break; //case 7: // *arg1 = cellCameraInstance.m_camera.attributes.AWB; break; //case 8: // *arg1 = cellCameraInstance.m_camera.attributes.ABC; break; //case 9: // *arg1 = cellCameraInstance.m_camera.attributes.LED; break; //case 10: // *arg1 = cellCameraInstance.m_camera.attributes.AUDIOGAIN; break; //case 11: // *arg1 = cellCameraInstance.m_camera.attributes.QS; break; //case 12: //{ // *arg1 = cellCameraInstance.m_camera.attributes.NONZEROCOEFFS[0]; // *arg2 = cellCameraInstance.m_camera.attributes.NONZEROCOEFFS[1]; // break; //} //case 13: // *arg1 = cellCameraInstance.m_camera.attributes.YUVFLAG; break; //case 14: // *arg1 = cellCameraInstance.m_camera.attributes.JPEGFLAG; break; //case 15: // *arg1 = cellCameraInstance.m_camera.attributes.BACKLIGHTCOMP; break; //case 16: // *arg1 = cellCameraInstance.m_camera.attributes.MIRRORFLAG; break; //case 17: // *arg1 = cellCameraInstance.m_camera.attributes.MEASUREDQS; break; //case 18: // *arg1 = cellCameraInstance.m_camera.attributes._422FLAG; break; //case 19: // *arg1 = cellCameraInstance.m_camera.attributes.USBLOAD; break; //case 20: // *arg1 = cellCameraInstance.m_camera.attributes.GAMMA; break; //case 21: // *arg1 = cellCameraInstance.m_camera.attributes.GREENGAIN; break; //case 22: // *arg1 = cellCameraInstance.m_camera.attributes.AGCLIMIT; break; //case 23: // *arg1 = cellCameraInstance.m_camera.attributes.DENOISE; break; //case 24: // *arg1 = cellCameraInstance.m_camera.attributes.FRAMERATEADJUST; break; //case 25: // *arg1 = cellCameraInstance.m_camera.attributes.PIXELOUTLIERFILTER; break; //case 26: // *arg1 = cellCameraInstance.m_camera.attributes.AGCLOW; break; //case 27: // *arg1 = cellCameraInstance.m_camera.attributes.AGCHIGH; break; //case 28: // *arg1 = cellCameraInstance.m_camera.attributes.DEVICELOCATION; break; //case 29: // *arg1 = cellCameraInstance.m_camera.attributes.FORMATCAP; break; //case 30: // *arg1 = cellCameraInstance.m_camera.attributes.FORMATINDEX; break; //case 31: // *arg1 = cellCameraInstance.m_camera.attributes.NUMFRAME; break; //case 32: // *arg1 = cellCameraInstance.m_camera.attributes.FRAMEINDEX; break; //case 33: // *arg1 = cellCameraInstance.m_camera.attributes.FRAMESIZE; break; //case 34: // *arg1 = cellCameraInstance.m_camera.attributes.INTERVALTYPE; break; //case 35: // *arg1 = cellCameraInstance.m_camera.attributes.INTERVALINDEX; break; //case 36: // *arg1 = cellCameraInstance.m_camera.attributes.INTERVALVALUE; break; //case 37: // *arg1 = cellCameraInstance.m_camera.attributes.COLORMATCHING; break; //case 38: // *arg1 = cellCameraInstance.m_camera.attributes.PLFREQ; break; //case 39: // *arg1 = cellCameraInstance.m_camera.attributes.DEVICEID; break; //case 40: // *arg1 = cellCameraInstance.m_camera.attributes.DEVICECAP; break; //case 41: // *arg1 = cellCameraInstance.m_camera.attributes.DEVICESPEED; break; //case 42: // *arg1 = cellCameraInstance.m_camera.attributes.UVCREQCODE; break; //case 43: // *arg1 = cellCameraInstance.m_camera.attributes.UVCREQDATA; break; //case 44: // *arg1 = cellCameraInstance.m_camera.attributes.DEVICEID2; break; //case 45: // *arg1 = cellCameraInstance.m_camera.attributes.READMODE; break; //case 46: // *arg1 = cellCameraInstance.m_camera.attributes.GAMEPID; break; //case 47: // *arg1 = cellCameraInstance.m_camera.attributes.PBUFFER; break; //case 48: // *arg1 = cellCameraInstance.m_camera.attributes.READFINISH; break; //case 49: // *arg1 = cellCameraInstance.m_camera.attributes.ATTRIBUTE_UNKNOWN; break; //default: // cellCamera.Error("Unexpected cellCameraGetAttribute attribute: %d", attrib); break; //} return CELL_OK; } s32 cellCameraSetAttribute(s32 dev_num, s32 attrib, u32 arg1, u32 arg2) { cellCamera.Warning("cellCameraSetAttribute(dev_num=%d, attrib=%d, arg1=%d, arg2=%d)", dev_num, attrib, arg1, arg2); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; //switch (attrib) //{ //case 0: // cellCameraInstance.m_camera.attributes.GAIN = arg1; break; //case 1: // cellCameraInstance.m_camera.attributes.REDBLUEGAIN = arg1; break; //case 2: // cellCameraInstance.m_camera.attributes.SATURATION = arg1; break; //case 3: // cellCameraInstance.m_camera.attributes.EXPOSURE = arg1; break; //case 4: // cellCameraInstance.m_camera.attributes.BRIGHTNESS = arg1; break; //case 5: // cellCameraInstance.m_camera.attributes.AEC = arg1; break; //case 6: // cellCameraInstance.m_camera.attributes.AGC = arg1; break; //case 7: // cellCameraInstance.m_camera.attributes.AWB = arg1; break; //case 8: // cellCameraInstance.m_camera.attributes.ABC = arg1; break; //case 9: // cellCameraInstance.m_camera.attributes.LED = arg1; break; //case 10: // cellCameraInstance.m_camera.attributes.AUDIOGAIN = arg1; break; //case 11: // cellCameraInstance.m_camera.attributes.QS = arg1; break; //case 12: //{ // cellCameraInstance.m_camera.attributes.NONZEROCOEFFS[0] = arg1; // cellCameraInstance.m_camera.attributes.NONZEROCOEFFS[1] = arg2; // break; //} //case 13: // cellCameraInstance.m_camera.attributes.YUVFLAG = arg1; break; //case 14: // cellCameraInstance.m_camera.attributes.JPEGFLAG = arg1; break; //case 15: // cellCameraInstance.m_camera.attributes.BACKLIGHTCOMP = arg1; break; //case 16: // cellCameraInstance.m_camera.attributes.MIRRORFLAG = arg1; break; //case 17: // return CELL_CAMERA_ERROR_PARAM; break; //case 18: // cellCameraInstance.m_camera.attributes._422FLAG = arg1; break; //case 19: // cellCameraInstance.m_camera.attributes.USBLOAD = arg1; break; //case 20: // cellCameraInstance.m_camera.attributes.GAMMA = arg1; break; //case 21: // cellCameraInstance.m_camera.attributes.GREENGAIN = arg1; break; //case 22: // cellCameraInstance.m_camera.attributes.AGCLIMIT = arg1; break; //case 23: // cellCameraInstance.m_camera.attributes.DENOISE = arg1; break; //case 24: // cellCameraInstance.m_camera.attributes.FRAMERATEADJUST = arg1; break; //case 25: // cellCameraInstance.m_camera.attributes.PIXELOUTLIERFILTER = arg1; break; //case 26: // cellCameraInstance.m_camera.attributes.AGCLOW = arg1; break; //case 27: // cellCameraInstance.m_camera.attributes.AGCHIGH = arg1; break; //case 28: // cellCameraInstance.m_camera.attributes.DEVICELOCATION = arg1; break; //case 29: // cellCamera.Error("Tried to write to read-only (?) value: FORMATCAP"); break; //case 30: // cellCameraInstance.m_camera.attributes.FORMATINDEX = arg1; break; //case 31: // cellCameraInstance.m_camera.attributes.NUMFRAME = arg1; break; //case 32: // cellCameraInstance.m_camera.attributes.FRAMEINDEX = arg1; break; //case 33: // cellCameraInstance.m_camera.attributes.FRAMESIZE = arg1; break; //case 34: // cellCameraInstance.m_camera.attributes.INTERVALTYPE = arg1; break; //case 35: // cellCameraInstance.m_camera.attributes.INTERVALINDEX = arg1; break; //case 36: // cellCameraInstance.m_camera.attributes.INTERVALVALUE = arg1; break; //case 37: // cellCameraInstance.m_camera.attributes.COLORMATCHING = arg1; break; //case 38: // cellCameraInstance.m_camera.attributes.PLFREQ = arg1; break; //case 39: // return CELL_CAMERA_ERROR_PARAM; break; //case 40: // cellCameraInstance.m_camera.attributes.DEVICECAP = arg1; break; //case 41: // cellCameraInstance.m_camera.attributes.DEVICESPEED = arg1; break; //case 42: // cellCameraInstance.m_camera.attributes.UVCREQCODE = arg1; break; //case 43: // cellCameraInstance.m_camera.attributes.UVCREQDATA = arg1; break; //case 44: // return CELL_CAMERA_ERROR_PARAM; break; //case 45: // cellCamera.Error("Tried to write to read-only (?) value: READMODE"); break; //case 46: // cellCameraInstance.m_camera.attributes.GAMEPID = arg1; break; //case 47: // cellCameraInstance.m_camera.attributes.PBUFFER = arg1; break; //case 48: // cellCameraInstance.m_camera.attributes.READFINISH = arg1; break; //case 49: // cellCamera.Error("Tried to write to read-only (?) value: ATTRIBUTE_UNKNOWN"); break; //default: // cellCamera.Error("Unexpected cellCameraGetAttribute attribute: %d", attrib); break; //} return CELL_OK; } s32 cellCameraGetBufferSize() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraGetBufferInfo() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraGetBufferInfoEx() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraPrepExtensionUnit() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraCtrlExtensionUnit() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraGetExtensionUnit() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraSetExtensionUnit() { UNIMPLEMENTED_FUNC(cellCamera); return CELL_OK; } s32 cellCameraReset() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraStart() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraRead() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraReadEx() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraReadComplete() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraStop() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraSetNotifyEventQueue() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraRemoveNotifyEventQueue() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraSetNotifyEventQueue2() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } s32 cellCameraRemoveNotifyEventQueue2() { UNIMPLEMENTED_FUNC(cellCamera); if (!cellCameraInstance.m_bInitialized) return CELL_CAMERA_ERROR_NOT_INIT; return CELL_OK; } Module cellCamera("cellCamera", []() { cellCameraInstance.m_bInitialized = false; REG_FUNC(cellCamera, cellCameraInit); REG_FUNC(cellCamera, cellCameraEnd); REG_FUNC(cellCamera, cellCameraOpen); REG_FUNC(cellCamera, cellCameraOpenEx); REG_FUNC(cellCamera, cellCameraClose); REG_FUNC(cellCamera, cellCameraGetDeviceGUID); REG_FUNC(cellCamera, cellCameraGetType); REG_FUNC(cellCamera, cellCameraIsAvailable); REG_FUNC(cellCamera, cellCameraIsAttached); REG_FUNC(cellCamera, cellCameraIsOpen); REG_FUNC(cellCamera, cellCameraIsStarted); REG_FUNC(cellCamera, cellCameraGetAttribute); REG_FUNC(cellCamera, cellCameraSetAttribute); REG_FUNC(cellCamera, cellCameraGetBufferSize); REG_FUNC(cellCamera, cellCameraGetBufferInfo); REG_FUNC(cellCamera, cellCameraGetBufferInfoEx); REG_FUNC(cellCamera, cellCameraPrepExtensionUnit); REG_FUNC(cellCamera, cellCameraCtrlExtensionUnit); REG_FUNC(cellCamera, cellCameraGetExtensionUnit); REG_FUNC(cellCamera, cellCameraSetExtensionUnit); REG_FUNC(cellCamera, cellCameraReset); REG_FUNC(cellCamera, cellCameraStart); REG_FUNC(cellCamera, cellCameraRead); REG_FUNC(cellCamera, cellCameraReadEx); REG_FUNC(cellCamera, cellCameraReadComplete); REG_FUNC(cellCamera, cellCameraStop); REG_FUNC(cellCamera, cellCameraSetNotifyEventQueue); REG_FUNC(cellCamera, cellCameraRemoveNotifyEventQueue); REG_FUNC(cellCamera, cellCameraSetNotifyEventQueue2); REG_FUNC(cellCamera, cellCameraRemoveNotifyEventQueue2); });