rpcsx/rpcs3/Emu/SysCalls/Modules/cellPngDec.h

401 lines
10 KiB
C
Raw Normal View History

#pragma once
2014-09-08 02:54:17 +02:00
#include "cellPng.h"
2014-09-08 02:54:17 +02:00
enum : u32
{
PNGDEC_CODEC_VERSION = 0x00420000,
};
struct PngDecoder;
struct PngStream;
typedef vm::ptr<PngDecoder> CellPngDecMainHandle;
typedef vm::ptr<PngStream> CellPngDecSubHandle;
// Return Codes
enum
{
2014-04-04 15:25:38 +02:00
CELL_PNGDEC_ERROR_HEADER = 0x80611201,
CELL_PNGDEC_ERROR_STREAM_FORMAT = 0x80611202,
CELL_PNGDEC_ERROR_ARG = 0x80611203,
CELL_PNGDEC_ERROR_SEQ = 0x80611204,
CELL_PNGDEC_ERROR_BUSY = 0x80611205,
CELL_PNGDEC_ERROR_FATAL = 0x80611206,
CELL_PNGDEC_ERROR_OPEN_FILE = 0x80611207,
CELL_PNGDEC_ERROR_SPU_UNSUPPORT = 0x80611208,
CELL_PNGDEC_ERROR_SPU_ERROR = 0x80611209,
CELL_PNGDEC_ERROR_CB_PARAM = 0x8061120a,
};
2014-09-08 02:54:17 +02:00
// Consts
2014-09-11 21:18:19 +02:00
enum CellPngDecColorSpace : u32
{
2014-04-04 15:25:38 +02:00
CELL_PNGDEC_GRAYSCALE = 1,
CELL_PNGDEC_RGB = 2,
CELL_PNGDEC_PALETTE = 4,
CELL_PNGDEC_GRAYSCALE_ALPHA = 9,
CELL_PNGDEC_RGBA = 10,
CELL_PNGDEC_ARGB = 20,
};
2014-09-08 02:54:17 +02:00
enum CellPngDecSpuThreadEna : u32
{
2014-09-08 02:54:17 +02:00
CELL_PNGDEC_SPU_THREAD_DISABLE = 0,
CELL_PNGDEC_SPU_THREAD_ENABLE = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecStreamSrcSel : u32
{
2014-04-04 15:25:38 +02:00
CELL_PNGDEC_FILE = 0,
CELL_PNGDEC_BUFFER = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecInterlaceMode : u32
{
CELL_PNGDEC_NO_INTERLACE = 0,
CELL_PNGDEC_ADAM7_INTERLACE = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecOutputMode : u32
{
CELL_PNGDEC_TOP_TO_BOTTOM = 0,
CELL_PNGDEC_BOTTOM_TO_TOP = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecPackFlag : u32
2014-09-08 02:54:17 +02:00
{
CELL_PNGDEC_1BYTE_PER_NPIXEL = 0,
CELL_PNGDEC_1BYTE_PER_1PIXEL = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecAlphaSelect : u32
2014-09-08 02:54:17 +02:00
{
CELL_PNGDEC_STREAM_ALPHA = 0,
CELL_PNGDEC_FIX_ALPHA = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecCommand : u32
2014-09-08 02:54:17 +02:00
{
CELL_PNGDEC_CONTINUE = 0,
CELL_PNGDEC_STOP = 1,
};
2014-09-11 21:18:19 +02:00
enum CellPngDecDecodeStatus : u32
2014-09-08 02:54:17 +02:00
{
CELL_PNGDEC_DEC_STATUS_FINISH = 0,
CELL_PNGDEC_DEC_STATUS_STOP = 1,
};
// Callbacks
2015-01-28 13:59:16 +01:00
typedef vm::ptr<void>(CellPngDecCbControlMalloc)(u32 size, vm::ptr<void> cbCtrlMallocArg);
typedef s32(CellPngDecCbControlFree)(vm::ptr<void> ptr, vm::ptr<void> cbCtrlFreeArg);
// Structs
2014-09-08 02:54:17 +02:00
struct CellPngDecThreadInParam
{
2014-09-08 02:54:17 +02:00
be_t<CellPngDecSpuThreadEna> spuThreadEnable;
be_t<u32> ppuThreadPriority;
be_t<u32> spuThreadPriority;
vm::bptr<CellPngDecCbControlMalloc> cbCtrlMallocFunc;
2014-09-08 12:20:25 +02:00
vm::bptr<void> cbCtrlMallocArg;
2014-09-08 02:54:17 +02:00
vm::bptr<CellPngDecCbControlFree> cbCtrlFreeFunc;
2014-09-08 12:20:25 +02:00
vm::bptr<void> cbCtrlFreeArg;
};
2014-09-08 02:54:17 +02:00
struct CellPngDecExtThreadInParam
{
2014-09-08 02:54:17 +02:00
be_t<u32> spurs_addr; // it could be vm::bptr<CellSpurs>, but nobody will use SPURS in HLE implementation
u8 priority[8];
be_t<u32> maxContention;
};
2014-09-08 02:54:17 +02:00
struct CellPngDecThreadOutParam
{
2014-09-08 02:54:17 +02:00
be_t<u32> pngCodecVersion;
};
struct CellPngDecExtThreadOutParam
{
be_t<u32> reserved;
};
struct CellPngDecSrc
{
2014-09-08 02:54:17 +02:00
be_t<CellPngDecStreamSrcSel> srcSelect;
2014-09-04 19:32:20 +02:00
vm::bptr<const char> fileName;
be_t<s64> fileOffset;
be_t<u32> fileSize;
2014-09-08 02:54:17 +02:00
vm::bptr<void> streamPtr;
be_t<u32> streamSize;
2014-09-08 02:54:17 +02:00
be_t<CellPngDecSpuThreadEna> spuThreadEnable;
};
struct CellPngDecOpnInfo
{
be_t<u32> initSpaceAllocated;
};
struct CellPngDecInfo
{
be_t<u32> imageWidth;
be_t<u32> imageHeight;
be_t<u32> numComponents;
be_t<CellPngDecColorSpace> colorSpace;
be_t<u32> bitDepth;
be_t<CellPngDecInterlaceMode> interlaceMethod;
be_t<u32> chunkInformation;
};
struct CellPngDecInParam
{
2014-09-08 02:54:17 +02:00
vm::bptr<volatile CellPngDecCommand> commandPtr;
be_t<CellPngDecOutputMode> outputMode;
be_t<CellPngDecColorSpace> outputColorSpace;
be_t<u32> outputBitDepth;
2014-09-08 02:54:17 +02:00
be_t<CellPngDecPackFlag> outputPackFlag;
be_t<CellPngDecAlphaSelect> outputAlphaSelect;
be_t<u32> outputColorAlpha;
};
struct CellPngDecOutParam
{
be_t<u64> outputWidthByte;
be_t<u32> outputWidth;
be_t<u32> outputHeight;
be_t<u32> outputComponents;
be_t<u32> outputBitDepth;
2014-09-08 02:54:17 +02:00
be_t<CellPngDecOutputMode> outputMode;
be_t<CellPngDecColorSpace> outputColorSpace;
be_t<u32> useMemorySpace;
};
2014-09-08 02:54:17 +02:00
struct CellPngDecDataCtrlParam
{
be_t<u64> outputBytesPerLine;
};
struct CellPngDecDataOutInfo
{
be_t<u32> chunkInformation;
be_t<u32> numText;
be_t<u32> numUnknownChunk;
be_t<CellPngDecDecodeStatus> status;
};
// Functions
2015-02-18 23:54:31 +01:00
s32 cellPngDecCreate(vm::ptr<u32> mainHandle, vm::ptr<const CellPngDecThreadInParam> threadInParam, vm::ptr<CellPngDecThreadOutParam> threadOutParam);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecExtCreate(
2014-09-08 02:54:17 +02:00
vm::ptr<u32> mainHandle,
vm::ptr<const CellPngDecThreadInParam> threadInParam,
vm::ptr<CellPngDecThreadOutParam> threadOutParam,
vm::ptr<const CellPngDecExtThreadInParam> extThreadInParam,
vm::ptr<CellPngDecExtThreadOutParam> extThreadOutParam);
2015-02-18 23:54:31 +01:00
s32 cellPngDecOpen(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
vm::ptr<u32> subHandle,
vm::ptr<const CellPngDecSrc> src,
vm::ptr<CellPngDecOpnInfo> openInfo);
2015-02-18 23:54:31 +01:00
s32 cellPngDecReadHeader(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngDecInfo> info);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecSetParameter(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
vm::ptr<const CellPngDecInParam> inParam,
vm::ptr<CellPngDecOutParam> outParam);
2015-02-18 23:54:31 +01:00
s32 cellPngDecDecodeData(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
vm::ptr<u8> data,
vm::ptr<const CellPngDecDataCtrlParam> dataCtrlParam,
vm::ptr<CellPngDecDataOutInfo> dataOutInfo);
2015-02-18 23:54:31 +01:00
s32 cellPngDecClose(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecDestroy(CellPngDecMainHandle mainHandle);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetTextChunk(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
vm::ptr<u32> textInfoNum,
2014-09-08 16:56:47 +02:00
vm::ptr<vm::bptr<CellPngTextInfo>> textInfo);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetPLTE(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngPLTE> plte);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetgAMA(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngGAMA> gama);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetsRGB(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngSRGB> srgb);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetiCCP(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngICCP> iccp);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetsBIT(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngSBIT> sbit);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGettRNS(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngTRNS> trns);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGethIST(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngHIST> hist);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGettIME(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngTIME> time);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetbKGD(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngBKGD> bkgd);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetsPLT(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngSPLT> splt);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetoFFs(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngOFFS> offs);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetpHYs(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngPHYS> phys);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetsCAL(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngSCAL> scal);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetcHRM(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngCHRM> chrm);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetpCAL(CellPngDecMainHandle mainHandle, CellPngDecSubHandle subHandle, vm::ptr<CellPngPCAL> pcal);
2014-09-08 02:54:17 +02:00
2015-02-18 23:54:31 +01:00
s32 cellPngDecGetUnknownChunks(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
2014-09-08 16:56:47 +02:00
vm::ptr<vm::bptr<CellPngUnknownChunk>> unknownChunk,
2014-09-08 02:54:17 +02:00
vm::ptr<u32> unknownChunkNumber);
enum CellPngDecBufferMode
{
CELL_PNGDEC_LINE_MODE = 1,
};
enum CellPngDecSpuMode
{
CELL_PNGDEC_RECEIVE_EVENT = 0,
CELL_PNGDEC_TRYRECEIVE_EVENT = 1,
};
// Structs
2014-06-29 05:21:57 +02:00
struct CellPngDecStrmInfo
{
be_t<u32> decodedStrmSize;
};
struct CellPngDecStrmParam
{
2014-09-08 02:54:17 +02:00
vm::bptr<void> strmPtr;
2014-06-29 05:21:57 +02:00
be_t<u32> strmSize;
};
2015-01-28 13:59:16 +01:00
typedef s32(CellPngDecCbControlStream)(vm::ptr<CellPngDecStrmInfo> strmInfo, vm::ptr<CellPngDecStrmParam> strmParam, vm::ptr<void> cbCtrlStrmArg);
2014-09-08 02:54:17 +02:00
struct CellPngDecDispInfo
2014-06-28 03:19:44 +02:00
{
2014-09-08 02:54:17 +02:00
be_t<u64> outputFrameWidthByte;
be_t<u32> outputFrameHeight;
be_t<u64> outputStartXByte;
be_t<u32> outputStartY;
be_t<u64> outputWidthByte;
be_t<u32> outputHeight;
be_t<u32> outputBitDepth;
be_t<u32> outputComponents;
be_t<u32> nextOutputStartY;
be_t<u32> scanPassCount;
vm::bptr<void> outputImage;
2014-06-28 03:19:44 +02:00
};
2014-09-08 02:54:17 +02:00
struct CellPngDecDispParam
2014-06-28 03:19:44 +02:00
{
2014-09-08 02:54:17 +02:00
vm::bptr<void> nextOutputImage;
2014-06-28 03:19:44 +02:00
};
2014-09-08 02:54:17 +02:00
// Callback
2015-01-28 13:59:16 +01:00
typedef s32(CellPngDecCbControlDisp)(vm::ptr<CellPngDecDispInfo> dispInfo, vm::ptr<CellPngDecDispParam> dispParam, vm::ptr<void> cbCtrlDispArg);
2014-09-08 02:54:17 +02:00
// Structs
struct CellPngDecOpnParam
{
be_t<u32> selectChunk;
};
struct CellPngDecCbCtrlStrm
2014-06-28 03:19:44 +02:00
{
2014-09-08 02:54:17 +02:00
vm::bptr<CellPngDecCbControlStream> cbCtrlStrmFunc;
be_t<vm::ptr<void>> cbCtrlStrmArg;
2014-06-28 03:19:44 +02:00
};
struct CellPngDecExtInfo
{
be_t<u64> reserved;
};
struct CellPngDecExtInParam
{
2014-09-08 02:54:17 +02:00
be_t<CellPngDecBufferMode> bufferMode;
2014-06-28 03:19:44 +02:00
be_t<u32> outputCounts;
2014-09-08 02:54:17 +02:00
be_t<CellPngDecSpuMode> spuMode;
2014-06-28 03:19:44 +02:00
};
struct CellPngDecExtOutParam
{
be_t<u64> outputWidthByte;
be_t<u32> outputHeight;
};
2014-09-08 02:54:17 +02:00
struct CellPngDecCbCtrlDisp
2014-06-28 03:19:44 +02:00
{
2014-09-08 02:54:17 +02:00
vm::bptr<CellPngDecCbControlDisp> cbCtrlDispFunc;
be_t<vm::ptr<void>> cbCtrlDispArg;
};
2014-09-08 02:54:17 +02:00
// Functions
2015-02-18 23:54:31 +01:00
s32 cellPngDecExtOpen(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
vm::ptr<u32> subHandle,
vm::ptr<const CellPngDecSrc> src,
vm::ptr<CellPngDecOpnInfo> openInfo,
vm::ptr<const CellPngDecCbCtrlStrm> cbCtrlStrm,
vm::ptr<const CellPngDecOpnParam> opnParam);
2015-02-18 23:54:31 +01:00
s32 cellPngDecExtReadHeader(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
vm::ptr<CellPngDecInfo> info,
vm::ptr<CellPngDecExtInfo> extInfo);
2015-02-18 23:54:31 +01:00
s32 cellPngDecExtSetParameter(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
vm::ptr<const CellPngDecInParam> inParam,
vm::ptr<CellPngDecOutParam> outParam,
vm::ptr<const CellPngDecExtInParam> extInParam,
vm::ptr<CellPngDecExtOutParam> extOutParam);
2015-02-18 23:54:31 +01:00
s32 cellPngDecExtDecodeData(
2014-09-08 02:54:17 +02:00
CellPngDecMainHandle mainHandle,
CellPngDecSubHandle subHandle,
vm::ptr<u8> data,
vm::ptr<const CellPngDecDataCtrlParam> dataCtrlParam,
vm::ptr<CellPngDecDataOutInfo> dataOutInfo,
vm::ptr<const CellPngDecCbCtrlDisp> cbCtrlDisp,
vm::ptr<CellPngDecDispParam> dispParam);
2014-09-08 16:56:47 +02:00
// Custom structs
2014-09-08 02:54:17 +02:00
struct PngDecoder
{
2014-09-08 02:54:17 +02:00
vm::ptr<CellPngDecCbControlMalloc> malloc;
vm::ptr<void> malloc_arg;
vm::ptr<CellPngDecCbControlFree> free;
vm::ptr<void> free_arg;
};
struct PngStream
{
CellPngDecMainHandle dec;
// old data:
u32 fd;
u64 fileSize;
CellPngDecInfo info;
CellPngDecOutParam outParam;
CellPngDecSrc src;
2014-09-08 02:54:17 +02:00
CellPngDecStrmInfo streamInfo;
CellPngDecStrmParam streamParam;
};