#pragma once enum VideoErrorCode { CELL_VIDEO_OUT_SUCCEEDED = 0, CELL_VIDEO_OUT_ERROR_NOT_IMPLEMENTED = 0x8002b220, CELL_VIDEO_OUT_ERROR_ILLEGAL_CONFIGURATION = 0x8002b221, CELL_VIDEO_OUT_ERROR_ILLEGAL_PARAMETER = 0x8002b222, CELL_VIDEO_OUT_ERROR_PARAMETER_OUT_OF_RANGE = 0x8002b223, CELL_VIDEO_OUT_ERROR_DEVICE_NOT_FOUND = 0x8002b224, CELL_VIDEO_OUT_ERROR_UNSUPPORTED_VIDEO_OUT = 0x8002b225, CELL_VIDEO_OUT_ERROR_UNSUPPORTED_DISPLAY_MODE = 0x8002b226, CELL_VIDEO_OUT_ERROR_CONDITION_BUSY = 0x8002b227, CELL_VIDEO_OUT_ERROR_VALUE_IS_NOT_SET = 0x8002b228, }; enum CellVideoOut { CELL_VIDEO_OUT_PRIMARY, CELL_VIDEO_OUT_SECONDARY, }; enum CellVideoOutResolutionId { CELL_VIDEO_OUT_RESOLUTION_UNDEFINED = 0, CELL_VIDEO_OUT_RESOLUTION_1080 = 1, CELL_VIDEO_OUT_RESOLUTION_720 = 2, CELL_VIDEO_OUT_RESOLUTION_480 = 4, CELL_VIDEO_OUT_RESOLUTION_576 = 5, CELL_VIDEO_OUT_RESOLUTION_1600x1080 = 10, CELL_VIDEO_OUT_RESOLUTION_1440x1080 = 11, CELL_VIDEO_OUT_RESOLUTION_1280x1080 = 12, CELL_VIDEO_OUT_RESOLUTION_960x1080 = 13, CELL_VIDEO_OUT_RESOLUTION_720_3D_FRAME_PACKING = 0x81, CELL_VIDEO_OUT_RESOLUTION_1024x720_3D_FRAME_PACKING = 0x88, CELL_VIDEO_OUT_RESOLUTION_960x720_3D_FRAME_PACKING = 0x89, CELL_VIDEO_OUT_RESOLUTION_800x720_3D_FRAME_PACKING = 0x8a, CELL_VIDEO_OUT_RESOLUTION_640x720_3D_FRAME_PACKING = 0x8b, }; enum CellVideoOutScanMode { CELL_VIDEO_OUT_SCAN_MODE_INTERLACE, CELL_VIDEO_OUT_SCAN_MODE_PROGRESSIVE, }; enum CellVideoOutScanMode2 { CELL_VIDEO_OUT_SCAN_MODE2_AUTO, CELL_VIDEO_OUT_SCAN_MODE2_INTERLACE, CELL_VIDEO_OUT_SCAN_MODE2_PROGRESSIVE, }; enum CellVideoOutRefreshRate { CELL_VIDEO_OUT_REFRESH_RATE_AUTO = 0x0000, CELL_VIDEO_OUT_REFRESH_RATE_59_94HZ = 0x0001, CELL_VIDEO_OUT_REFRESH_RATE_50HZ = 0x0002, CELL_VIDEO_OUT_REFRESH_RATE_60HZ = 0x0004, CELL_VIDEO_OUT_REFRESH_RATE_30HZ = 0x0008 }; enum CellVideoOutPortType { CELL_VIDEO_OUT_PORT_NONE = 0x00, CELL_VIDEO_OUT_PORT_HDMI = 0x01, CELL_VIDEO_OUT_PORT_NETWORK = 0x41, CELL_VIDEO_OUT_PORT_COMPOSITE_S = 0x81, CELL_VIDEO_OUT_PORT_D = 0x82, CELL_VIDEO_OUT_PORT_COMPONENT = 0x83, CELL_VIDEO_OUT_PORT_RGB = 0x84, CELL_VIDEO_OUT_PORT_AVMULTI_SCART = 0x85, CELL_VIDEO_OUT_PORT_DSUB = 0x86 }; enum CellVideoOutDisplayAspect { CELL_VIDEO_OUT_ASPECT_AUTO, CELL_VIDEO_OUT_ASPECT_4_3, CELL_VIDEO_OUT_ASPECT_16_9, }; enum CellVideoOutBufferColorFormat { CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_X8R8G8B8, CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_X8B8G8R8, CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_R16G16B16X16_FLOAT, }; enum CellVideoOutOutputState { CELL_VIDEO_OUT_OUTPUT_STATE_ENABLED, CELL_VIDEO_OUT_OUTPUT_STATE_DISABLED, CELL_VIDEO_OUT_OUTPUT_STATE_PREPARING, }; enum CellVideoOutDeviceState { CELL_VIDEO_OUT_DEVICE_STATE_UNAVAILABLE, CELL_VIDEO_OUT_DEVICE_STATE_AVAILABLE, }; enum CellVideoOutColorSpace { CELL_VIDEO_OUT_COLOR_SPACE_RGB = 0x01, CELL_VIDEO_OUT_COLOR_SPACE_YUV = 0x02, CELL_VIDEO_OUT_COLOR_SPACE_XVYCC = 0x04, }; enum CellVideoOutDebugMonitorType { CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_UNDEFINED = 0, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_480I_59_94HZ = 1, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_576I_50HZ = 2, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_480P_59_94HZ = 3, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_576P_50HZ = 4, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_1080I_59_94HZ = 5, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_720P_59_94HZ = 7, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_1080P_59_94HZ = 9, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_WXGA_60HZ = 11, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_SXGA_60HZ = 12, CELL_VIDEO_OUT_DEBUG_MONITOR_TYPE_WUXGA_60HZ = 13 }; struct CellVideoOutColorInfo { u16 redX; u16 redY; u16 greenX; u16 greenY; u16 blueX; u16 blueY; u16 whiteX; u16 whiteY; u32 gamma; }; struct CellVideoOutKSVList { u8 ksv[32*5]; u8 reserved[4]; u32 count; }; enum CellVideoOutDisplayConversion { CELL_VIDEO_OUT_DISPLAY_CONVERSION_NONE = 0x00, CELL_VIDEO_OUT_DISPLAY_CONVERSION_TO_WXGA = 0x01, CELL_VIDEO_OUT_DISPLAY_CONVERSION_TO_SXGA = 0x02, CELL_VIDEO_OUT_DISPLAY_CONVERSION_TO_WUXGA = 0x03, CELL_VIDEO_OUT_DISPLAY_CONVERSION_TO_1080 = 0x05, CELL_VIDEO_OUT_DISPLAY_CONVERSION_TO_REMOTEPLAY = 0x10, CELL_VIDEO_OUT_DISPLAY_CONVERSION_TO_720_3D_FRAME_PACKING = 0x80, }; struct CellVideoOutDisplayMode { u8 resolutionId; u8 scanMode; u8 conversion; u8 aspect; u8 reserved[2]; u16 refreshRates; }; struct CellVideoOutResolution { be_t width; be_t height; }; struct CellVideoOutDeviceInfo { u8 portType; u8 colorSpace; u16 latency; u8 availableModeCount; u8 state; u8 rgbOutputRange; u8 reserved[5]; CellVideoOutColorInfo colorInfo; CellVideoOutDisplayMode availableModes[32]; CellVideoOutKSVList ksvList; }; struct CellVideoOutState { u8 state; u8 colorSpace; u8 reserved[6]; CellVideoOutDisplayMode displayMode; }; struct CellVideoOutConfiguration { u8 resolutionId; u8 format; u8 aspect; u8 reserved[9]; u32 pitch; }; enum CellVideoOutEvent { CELL_VIDEO_OUT_EVENT_DEVICE_CHANGED, CELL_VIDEO_OUT_EVENT_OUTPUT_DISABLED, CELL_VIDEO_OUT_EVENT_DEVICE_AUTHENTICATED, CELL_VIDEO_OUT_EVENT_OUTPUT_ENABLED, }; enum CellVideoOutCopyControl { CELL_VIDEO_OUT_COPY_CONTROL_COPY_FREE, CELL_VIDEO_OUT_COPY_CONTROL_COPY_ONCE, CELL_VIDEO_OUT_COPY_CONTROL_COPY_NEVER, }; enum CellVideoOutRGBOutputRange { CELL_VIDEO_OUT_RGB_OUTPUT_RANGE_LIMITED, CELL_VIDEO_OUT_RGB_OUTPUT_RANGE_FULL, }; static const CellVideoOutResolution ResolutionTable[] = { {(u16)-1, (u16)-1}, //0 - 0 {1920, 1080}, //1 - 1 {1280, 720}, //2 - 2 {720, 480}, //4 - 3 {720, 576}, //5 - 4 {1600, 1080}, //10 - 5 {1440, 1080}, //11 - 6 {1280, 1080}, //12 - 7 {960, 1080}, //13 - 8 {960, 540}, //14 - 9 (Terraria [BLES01938]) {1024,768}, //15 - 10 (Eskiss Homebrew) }; inline static u32 ResolutionIdToNum(u32 id) { static const u32 res[] = { 0, //0 1, //1 2, //2 0, //3 3, //4 4, //5 0, //6 0, //7 0, //8 0, //9 5, //10 6, //11 7, //12 8, //13 9, //14 10, //15 }; return id <= 15 ? res[id] : 0; } inline static u32 ResolutionNumToId(u32 num) { static const u32 res[] = { 0, 1, 2, 4, 5, 10, 11, 12, 13, 14, 15, }; return num <= 10 ? res[num] : 0; }