Initial cellSail implementation

Also a TODOs for frequencies
This commit is contained in:
Raul Tambre 2014-10-17 16:20:40 +03:00
parent 9e5403aeb3
commit d58beb8f4c
3 changed files with 617 additions and 29 deletions

View File

@ -540,7 +540,9 @@ int cellGcmSetSecondVFrequency(u32 freq)
switch (freq)
{
case CELL_GCM_DISPLAY_FREQUENCY_59_94HZ:
cellGcmSys->Todo("Unimplemented display frequency: 59.94Hz");
case CELL_GCM_DISPLAY_FREQUENCY_SCANOUT:
cellGcmSys->Todo("Unimplemented display frequency: Scanout");
case CELL_GCM_DISPLAY_FREQUENCY_DISABLE:
Emu.GetGSManager().GetRender().m_frequency_mode = freq;
break;

View File

@ -6,9 +6,12 @@
Module *cellSail = nullptr;
int cellSailMemAllocatorInitialize()
int cellSailMemAllocatorInitialize(vm::ptr<CellSailMemAllocator> pSelf, vm::ptr<CellSailMemAllocatorFuncs> pCallbacks)
{
UNIMPLEMENTED_FUNC(cellSail);
cellSail->Warning("cellSailMemAllocatorInitialize(pSelf_addr=0x%x, pCallbacks_addr=0x%x)", pSelf.addr(), pCallbacks.addr());
pSelf->callbacks = pCallbacks;
return CELL_OK;
}
@ -66,16 +69,19 @@ int cellSailDescriptorGetMediaInfo()
return CELL_OK;
}
int cellSailDescriptorSetAutoSelection()
int cellSailDescriptorSetAutoSelection(vm::ptr<CellSailDescriptor> pSelf, bool autoSelection)
{
UNIMPLEMENTED_FUNC(cellSail);
return CELL_OK;
cellSail->Todo("cellSailDescriptorSetAutoSelection(pSelf_addr=0x%x, autoSelection=%b)", pSelf.addr(), autoSelection);
pSelf->autoSelection = autoSelection;
return autoSelection;
}
int cellSailDescriptorIsAutoSelection()
int cellSailDescriptorIsAutoSelection(vm::ptr<CellSailDescriptor> pSelf)
{
UNIMPLEMENTED_FUNC(cellSail);
return CELL_OK;
cellSail->Warning("cellSailDescriptorIsAutoSelection(pSelf_addr=0x%x)", pSelf.addr());
return pSelf->autoSelection;
}
int cellSailDescriptorCreateDatabase()
@ -486,9 +492,18 @@ int cellSailPlayerInitialize()
return CELL_OK;
}
int cellSailPlayerInitialize2()
int cellSailPlayerInitialize2(vm::ptr<CellSailPlayer> pSelf, vm::ptr<CellSailMemAllocator> pAllocator, vm::ptr<CellSailPlayerFuncNotified> pCallback, u64 callbackArg,
vm::ptr<CellSailPlayerAttribute> pAttribute, vm::ptr<CellSailPlayerResource> pResource)
{
UNIMPLEMENTED_FUNC(cellSail);
cellSail->Warning("cellSailPlayerInitialize2(pSelf_addr=0x%x, pAllocator_addr=0x%x, pCallback=0x%x, callbackArg=%d, pAttribute_addr=0x%x, pResource=0x%x)", pSelf.addr(),
pAllocator.addr(), pCallback.addr(), callbackArg, pAttribute.addr(), pResource.addr());
pSelf->allocator = pAllocator;
pSelf->callback = pCallback;
pSelf->callbackArgument = callbackArg;
pSelf->attribute = pAttribute;
pSelf->resource = pResource;
return CELL_OK;
}
@ -576,34 +591,73 @@ int cellSailPlayerBoot()
return CELL_OK;
}
int cellSailPlayerCreateDescriptor()
int cellSailPlayerAddDescriptor(vm::ptr<CellSailPlayer> pSelf, vm::ptr<CellSailDescriptor> pDesc)
{
UNIMPLEMENTED_FUNC(cellSail);
cellSail->Warning("cellSailPlayerAddDescriptor(pSelf_addr=0x%x, pDesc_addr=0x%x)", pSelf.addr(), pDesc.addr());
if (pSelf->descriptors < 3)
{
pSelf->descriptors++;
pSelf->registeredDescriptors[pSelf->descriptors] = pDesc;
pDesc->registered = true;
}
else
{
cellSail->Error("Descriptor limit reached! This should never happen, report this to a developer.");
}
return CELL_OK;
}
int cellSailPlayerDestroyDescriptor()
int cellSailPlayerCreateDescriptor(vm::ptr<CellSailPlayer> pSelf, s32 streamType, vm::ptr<u32> pMediaInfo, vm::ptr<const char> pUri, vm::ptr<CellSailDescriptor> ppDesc)
{
UNIMPLEMENTED_FUNC(cellSail);
cellSail->Todo("cellSailPlayerCreateDescriptor(pSelf_addr=0x%x, streamType=%d, pMediaInfo_addr=0x%x, pUri_addr=0x%x, ppDesc_addr=0x%x)", pSelf.addr(), streamType,
pMediaInfo.addr(), pUri.addr(), ppDesc.addr());
CellSailDescriptor *pDesc = new CellSailDescriptor();
vm::ptr<CellSailDescriptor> descriptor = vm::ptr<CellSailDescriptor>::make(Memory.RealToVirtualAddr(&pDesc));
descriptor->streamType = streamType;
descriptor->registered = false;
pSelf->descriptors = 0;
pSelf->repeatMode = 0;
ppDesc = descriptor;
cellSail->Todo("pSelf_addr=0x%x, pDesc_addr=0x%x", pSelf.addr(), descriptor.addr());
cellSailPlayerAddDescriptor(pSelf, ppDesc);
return CELL_OK;
}
int cellSailPlayerAddDescriptor()
int cellSailPlayerDestroyDescriptor(vm::ptr<CellSailPlayer> pSelf, vm::ptr<CellSailDescriptor> pDesc)
{
UNIMPLEMENTED_FUNC(cellSail);
cellSail->Todo("cellSailPlayerAddDescriptor(pSelf_addr=0x%x, pDesc_addr=0x%x)", pSelf.addr(), pDesc.addr());
if (pDesc->registered)
return CELL_SAIL_ERROR_INVALID_STATE;
return CELL_OK;
}
int cellSailPlayerRemoveDescriptor()
int cellSailPlayerRemoveDescriptor(vm::ptr<CellSailPlayer> pSelf, vm::ptr<CellSailDescriptor> ppDesc)
{
UNIMPLEMENTED_FUNC(cellSail);
return CELL_OK;
cellSail->Warning("cellSailPlayerAddDescriptor(pSelf_addr=0x%x, pDesc_addr=0x%x)", pSelf.addr(), ppDesc.addr());
if (pSelf->descriptors > 0)
{
ppDesc = pSelf->registeredDescriptors[pSelf->descriptors];
delete &pSelf->registeredDescriptors[pSelf->descriptors];
pSelf->descriptors--;
}
return pSelf->descriptors;
}
int cellSailPlayerGetDescriptorCount()
int cellSailPlayerGetDescriptorCount(vm::ptr<CellSailPlayer> pSelf)
{
UNIMPLEMENTED_FUNC(cellSail);
return CELL_OK;
cellSail->Warning("cellSailPlayerGetDescriptorCount(pSelf_addr=0x%x)", pSelf.addr());
return pSelf->descriptors;
}
int cellSailPlayerGetCurrentDescriptor()
@ -714,16 +768,23 @@ int cellSailPlayerIsPaused()
return CELL_OK;
}
int cellSailPlayerSetRepeatMode()
int cellSailPlayerSetRepeatMode(vm::ptr<CellSailPlayer> pSelf, s32 repeatMode, vm::ptr<CellSailStartCommand> pCommand)
{
UNIMPLEMENTED_FUNC(cellSail);
return CELL_OK;
cellSail->Warning("cellSailPlayerSetRepeatMode(pSelf_addr=0x%x, repeatMode=%i, pCommand_addr=0x%x)", pSelf.addr(), repeatMode, pCommand.addr());
pSelf->repeatMode = repeatMode;
pSelf->playbackCommand = pCommand;
return pSelf->repeatMode;
}
int cellSailPlayerGetRepeatMode()
int cellSailPlayerGetRepeatMode(vm::ptr<CellSailPlayer> pSelf, vm::ptr<CellSailStartCommand> pCommand)
{
UNIMPLEMENTED_FUNC(cellSail);
return CELL_OK;
cellSail->Warning("cellSailPlayerGetRepeatMode(pSelf_addr=0x%x, pCommand_addr=0x%x)", pSelf.addr(), pCommand.addr());
pCommand = pSelf->playbackCommand;
return pSelf->repeatMode;
}
int cellSailPlayerSetEsAudioMuted()

View File

@ -17,6 +17,519 @@ enum
CELL_SAIL_ERROR_FATAL = 0x806107FF,
};
// Call types
enum {
CELL_SAIL_PLAYER_CALL_NONE = 0,
CELL_SAIL_PLAYER_CALL_BOOT = 1,
CELL_SAIL_PLAYER_CALL_OPEN_STREAM = 2,
CELL_SAIL_PLAYER_CALL_CLOSE_STREAM = 3,
CELL_SAIL_PLAYER_CALL_OPEN_ES_AUDIO = 4,
CELL_SAIL_PLAYER_CALL_OPEN_ES_VIDEO = 5,
CELL_SAIL_PLAYER_CALL_OPEN_ES_USER = 6,
CELL_SAIL_PLAYER_CALL_CLOSE_ES_AUDIO = 7,
CELL_SAIL_PLAYER_CALL_CLOSE_ES_VIDEO = 8,
CELL_SAIL_PLAYER_CALL_CLOSE_ES_USER = 9,
CELL_SAIL_PLAYER_CALL_START = 10,
CELL_SAIL_PLAYER_CALL_STOP = 11,
CELL_SAIL_PLAYER_CALL_NEXT = 12,
CELL_SAIL_PLAYER_CALL_REOPEN_ES_AUDIO = 13,
CELL_SAIL_PLAYER_CALL_REOPEN_ES_VIDEO = 14,
CELL_SAIL_PLAYER_CALL_REOPEN_ES_USER = 15,
_CELL_SAIL_PLAYER_CALL_TYPE_NUM_OF_ELEMENTS = 16, // Never used?
};
// State types
enum {
CELL_SAIL_PLAYER_STATE_INITIALIZED = 0,
CELL_SAIL_PLAYER_STATE_BOOT_TRANSITION = 1,
CELL_SAIL_PLAYER_STATE_CLOSED = 2,
CELL_SAIL_PLAYER_STATE_OPEN_TRANSITION = 3,
CELL_SAIL_PLAYER_STATE_OPENED = 4,
CELL_SAIL_PLAYER_STATE_START_TRANSITION = 5,
CELL_SAIL_PLAYER_STATE_RUNNING = 6,
CELL_SAIL_PLAYER_STATE_STOP_TRANSITION = 7,
CELL_SAIL_PLAYER_STATE_CLOSE_TRANSITION = 8,
CELL_SAIL_PLAYER_STATE_LOST = 9,
_CELL_SAIL_PLAYER_STATE_TYPE_NUM_OF_ELEMENTS = 10, // Never used?
};
// Preset types
enum {
CELL_SAIL_PLAYER_PRESET_AV_SYNC = 0, // Deprecated, same as 59_94HZ
CELL_SAIL_PLAYER_PRESET_AS_IS = 1,
CELL_SAIL_PLAYER_PRESET_AV_SYNC_59_94HZ = 2,
CELL_SAIL_PLAYER_PRESET_AV_SYNC_29_97HZ = 3,
CELL_SAIL_PLAYER_PRESET_AV_SYNC_50HZ = 4,
CELL_SAIL_PLAYER_PRESET_AV_SYNC_25HZ = 5,
CELL_SAIL_PLAYER_PRESET_AV_SYNC_AUTO_DETECT = 6,
};
// Parameter types
enum {
CELL_SAIL_PARAMETER_ENABLE_VPOST = 0,
// Player
CELL_SAIL_PARAMETER_CONTROL_QUEUE_DEPTH = 1,
CELL_SAIL_PARAMETER_CONTROL_PPU_THREAD_PRIORITY = 2,
// SPURS
CELL_SAIL_PARAMETER_SPURS_NUM_OF_SPUS = 3,
CELL_SAIL_PARAMETER_SPURS_SPU_THREAD_PRIORITY = 4,
CELL_SAIL_PARAMETER_SPURS_PPU_THREAD_PRIORITY = 5,
CELL_SAIL_PARAMETER_SPURS_EXIT_IF_NO_WORK = 6,
// Source
CELL_SAIL_PARAMETER_IO_PPU_THREAD_PRIORITY = 7,
// Dmux
CELL_SAIL_PARAMETER_DMUX_PPU_THREAD_PRIORITY = 8,
CELL_SAIL_PARAMETER_DMUX_SPU_THREAD_PRIORITY = 9, // Deprecated
CELL_SAIL_PARAMETER_DMUX_NUM_OF_SPUS = 10,
CELL_SAIL_PARAMETER_DMUX_SPURS_TASK_PRIORITIES = 11,
// Adec
CELL_SAIL_PARAMETER_ADEC_PPU_THREAD_PRIORITY = 12,
CELL_SAIL_PARAMETER_ADEC_SPU_THREAD_PRIORITY = 13, // Deprecated
CELL_SAIL_PARAMETER_ADEC_NUM_OF_SPUS = 14,
CELL_SAIL_PARAMETER_ADEC_SPURS_TASK_PRIORITIES = 15,
// Vdec
CELL_SAIL_PARAMETER_VDEC_PPU_THREAD_PRIORITY = 16,
CELL_SAIL_PARAMETER_VDEC_SPU_THREAD_PRIORITY = 17, // Deprecated
CELL_SAIL_PARAMETER_VDEC_M2V_NUM_OF_SPUS = 18,
CELL_SAIL_PARAMETER_VDEC_AVC_NUM_OF_SPUS = 19,
CELL_SAIL_PARAMETER_VDEC_SPURS_TASK_PRIORITIES = 20,
// Vpost */
CELL_SAIL_PARAMETER_VPOST_PPU_THREAD_PRIORITY = 21, // Deprecated
CELL_SAIL_PARAMETER_VPOST_SPU_THREAD_PRIORITY = 22, // Deprecated
CELL_SAIL_PARAMETER_VPOST_NUM_OF_SPUS = 23,
CELL_SAIL_PARAMETER_VPOST_SPURS_TASK_PRIORITIES = 24,
// Graphics Adapter
CELL_SAIL_PARAMETER_GRAPHICS_ADAPTER_BUFFER_RELEASE_DELAY = 25,
// AV Sync
CELL_SAIL_PARAMETER_AV_SYNC_ES_AUDIO = 26,
CELL_SAIL_PARAMETER_AV_SYNC_ES_VIDEO = 27,
CELL_SAIL_PARAMETER_AV_SYNC_ES_USER = 28, // Not available
// Control
CELL_SAIL_PARAMETER_CONTROL_PPU_THREAD_STACK_SIZE = 29,
CELL_SAIL_PARAMETER_RESERVED0_ = 30, // Should be never used
CELL_SAIL_PARAMETER_RESERVED1 = 31, // Should be never used
// Apost
CELL_SAIL_PARAMETER_ENABLE_APOST_SRC = 32,
// File I/O Interface
CELL_SAIL_PARAMETER_FS = 33,
CELL_SAIL_PARAMETER_IO_PPU_THREAD_STACK_SIZE = 34,
CELL_SAIL_PARAMETER_VIDEO_PERFORMANCE_POLICY = 35,
_CELL_SAIL_PARAMETER_TYPE_NUM_OF_ELEMENTS = 36, // Should be never used
CELL_SAIL_PARAMETER_SOURCE_PPU_THREAD_PRIORITY = CELL_SAIL_PARAMETER_IO_PPU_THREAD_PRIORITY,
CELL_SAIL_PARAMETER_DMUX_SPURS_TASK_PRIORITY = CELL_SAIL_PARAMETER_DMUX_SPURS_TASK_PRIORITIES, // Deprecated
CELL_SAIL_PARAMETER_VDEC_SPURS_TASK_PRIORITY = CELL_SAIL_PARAMETER_VDEC_SPURS_TASK_PRIORITIES, // Deprecated
CELL_SAIL_PARAMETER_ADEC_SPURS_TASK_PRIORITY = CELL_SAIL_PARAMETER_ADEC_SPURS_TASK_PRIORITIES, // Deprecated
CELL_SAIL_PARAMETER_VPOST_SPURS_TASK_PRIORITY = CELL_SAIL_PARAMETER_VPOST_SPURS_TASK_PRIORITIES, // Deprecated
};
// Media states
enum {
CELL_SAIL_MEDIA_STATE_FINE = 0,
CELL_SAIL_MEDIA_STATE_BAD = 1,
CELL_SAIL_MEDIA_STATE_LOST = 2,
};
// Stream Types
enum
{
CELL_SAIL_STREAM_PAMF = 0,
CELL_SAIL_STREAM_MP4 = 1,
CELL_SAIL_STREAM_AVI = 2,
CELL_SAIL_STREAM_UNSPECIFIED = -1,
};
// Sync Types
enum {
CELL_SAIL_SYNC_MODE_REPEAT = 1 << 0,
CELL_SAIL_SYNC_MODE_SKIP = 1 << 1,
};
// Flags
enum {
CELL_SAIL_AVISF_DISABLED = 0x00000001,
CELL_SAIL_AVIF_HASINDEX = 0x00000010,
CELL_SAIL_AVIF_MUSTUSEINDEX = 0x00000020,
CELL_SAIL_AVIF_ISINTERLEAVED = 0x00000100,
CELL_SAIL_AVIF_WASCAPTUREFILE = 0x00010000,
CELL_SAIL_AVISF_VIDEO_PALCHANGES = 0x00010000,
CELL_SAIL_AVIF_COPYRIGHTED = 0x00020000,
CELL_SAIL_AVIF_TRUSTCKTYPE = 0x00000800, // Open-DML only
};
// Wave types
enum {
CELL_SAIL_WAVE_FORMAT_PCM = 0x0001,
CELL_SAIL_WAVE_FORMAT_MPEG = 0x0050,
CELL_SAIL_WAVE_FORMAT_MPEGLAYER3 = 0x0055,
CELL_SAIL_WAVE_FORMAT_AC3 = 0x2000,
CELL_SAIL_WAVE_FORMAT_UNSPECIFIED = 0xFFFF,
};
// MPEG Layers
enum {
CELL_SAIL_ACM_MPEG_LAYER1 = 0x0001,
CELL_SAIL_ACM_MPEG_LAYER2 = 0x0002,
CELL_SAIL_ACM_MPEG_LAYER3 = 0x0004,
};
// MPEG Modes
enum {
CELL_SAIL_ACM_MPEG_STEREO = 0x0001,
CELL_SAIL_ACM_MPEG_JOINTSTEREO = 0x0002,
CELL_SAIL_ACM_MPEG_DUALCHANNEL = 0x0004,
CELL_SAIL_ACM_MPEG_SINGLECHANNEL = 0x0008,
};
// MPEG Flags
enum {
CELL_SAIL_ACM_MPEG_PRIVATEBIT = 0x0001,
CELL_SAIL_ACM_MPEG_COPYRIGHT = 0x0002,
CELL_SAIL_ACM_MPEG_ORIGINALHOME = 0x0004,
CELL_SAIL_ACM_MPEG_PROTECTIONBIT = 0x0008,
CELL_SAIL_ACM_MPEG_ID_MPEG1 = 0x0010,
};
// MPEG Layer 3 Flags
enum {
CELL_SAIL_MPEGLAYER3_ID_UNKNOWN = 0,
CELL_SAIL_MPEGLAYER3_ID_MPEG = 1,
CELL_SAIL_MPEGLAYER3_ID_CONSTANTFRAMESIZE = 2,
CELL_SAIL_MPEGLAYER3_FLAG_PADDING_ISO = 0x00000000,
CELL_SAIL_MPEGLAYER3_FLAG_PADDING_ON = 0x00000001,
CELL_SAIL_MPEGLAYER3_FLAG_PADDING_OFF = 0x00000002,
};
// ES Types
enum {
CELL_SAIL_ES_AUDIO = 0,
CELL_SAIL_ES_VIDEO = 1,
CELL_SAIL_ES_USER = 2,
};
// Audio Coding Types
enum {
CELL_SAIL_AUDIO_CODING_UNSPECIFIED = -1,
CELL_SAIL_AUDIO_CODING_LPCM_FLOAT32 = 1,
};
enum {
CELL_SAIL_AUDIO_CHNUM_UNSPECIFIED = -1,
CELL_SAIL_AUDIO_CH_NUM_UNSPECIFIED = -1,
CELL_SAIL_AUDIO_AUSAMPLE_UNSPECIFIED = -1,
CELL_SAIL_AUDIO_SAMPLE_NUM_UNSPECIFIED = -1,
};
enum {
CELL_SAIL_AUDIO_FS_32000HZ = 32000,
CELL_SAIL_AUDIO_FS_44100HZ = 44100,
CELL_SAIL_AUDIO_FS_48000HZ = 48000,
CELL_SAIL_AUDIO_FS_96000HZ = 96000,
CELL_SAIL_AUDIO_FS_88200HZ = 88200,
CELL_SAIL_AUDIO_FS_64000HZ = 64000,
//CELL_SAIL_AUDIO_FS_48000HZ = 48000,
//CELL_SAIL_AUDIO_FS_44100HZ = 44100,
//CELL_SAIL_AUDIO_FS_32000HZ = 32000,
CELL_SAIL_AUDIO_FS_24000HZ = 24000,
CELL_SAIL_AUDIO_FS_22050HZ = 22050,
CELL_SAIL_AUDIO_FS_16000HZ = 16000,
CELL_SAIL_AUDIO_FS_12000HZ = 12000,
CELL_SAIL_AUDIO_FS_11025HZ = 11025,
CELL_SAIL_AUDIO_FS_8000HZ = 8000,
CELL_SAIL_AUDIO_FS_7350HZ = 7350,
CELL_SAIL_AUDIO_FS_192000HZ = 192000,
//CELL_SAIL_AUDIO_FS_11024HZ = 11025,
CELL_SAIL_AUDIO_FS_UNSPECIFIED = -1,
};
enum {
CELL_SAIL_AUDIO_CH_LAYOUT_UNDEFINED = 0,
// monoral
CELL_SAIL_AUDIO_CH_LAYOUT_1CH = 1,
// 1. Front Left
// 2. Front Right
CELL_SAIL_AUDIO_CH_LAYOUT_2CH_LR = 2,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// for m4aac ac3
CELL_SAIL_AUDIO_CH_LAYOUT_3CH_LCR = 3,
// 1. Front Left
// 2. Front Center
// 3. Surround
// for m4aac ac3
CELL_SAIL_AUDIO_CH_LAYOUT_3CH_LRc = 4,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// 4. Surround
// for m4aac ac3
CELL_SAIL_AUDIO_CH_LAYOUT_4CH_LCRc = 5,
// 1. Front Left
// 2. Front Right
// 3. Surround Left
// 4. Surround Right
// for m4aac
CELL_SAIL_AUDIO_CH_LAYOUT_4CH_LRlr = 6,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// 4. Surround Left
// 5. Surround Right
// for m4aac
CELL_SAIL_AUDIO_CH_LAYOUT_5CH_LCRlr = 7,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// 4. Surround Left
// 5. Surround Right
// 6. LFE
// for lpcm ac3 m4aac
CELL_SAIL_AUDIO_CH_LAYOUT_6CH_LCRlrE = 8,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// 4. Back Left
// 5. Back Right
// 6. LFE
// for at3plus
CELL_SAIL_AUDIO_CH_LAYOUT_6CH_LCRxyE = 9,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// 4. Back Left
// 5. Back Right
// 6. Back Center
// 7. LFE
// (for at3plus)
CELL_SAIL_AUDIO_CH_LAYOUT_7CH_LCRxycE = 10,
// 1. Front Left
// 2. Front Center
// 3. Front Right
// 4. LFE
// 5. Surround Left
// 6. Surround Right
// 7. Back Left (Left-Extend)
// 8. Back Right (Right-Extend)
// for lpcm at3plus
CELL_SAIL_AUDIO_CH_LAYOUT_8CH_LRCElrxy = 11,
CELL_SAIL_AUDIO_CH_LAYOUT_2CH_DUAL = 12,
CELL_SAIL_AUDIO_CH_LAYOUT_UNSPECIFIED = -1,
};
// Video Codings
enum {
CELL_SAIL_VIDEO_CODING_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_CODING_ARGB_INTERLEAVED = 0,
CELL_SAIL_VIDEO_CODING_RGBA_INTERLEAVED = 1,
CELL_SAIL_VIDEO_CODING_YUV422_U_Y0_V_Y1 = 2,
CELL_SAIL_VIDEO_CODING_YUV420_PLANAR = 3,
// Suported by cellCamera
CELL_SAIL_VIDEO_CODING_YUV422_Y0_U_Y1_V = 4,
CELL_SAIL_VIDEO_CODING_YUV422_V_Y1_U_Y0 = 9,
CELL_SAIL_VIDEO_CODING_YUV422_Y1_V_Y0_U = 10,
CELL_SAIL_VIDEO_CODING_JPEG = 11,
CELL_SAIL_VIDEO_CODING_RAW8_BAYER_BGGR = 12,
_CELL_SAIL_VIDEO_CODING_TYPE_NUM_OF_ELEMENTS = 13,
CELL_SAIL_VIDEO_CODING_UYVY422_INTERLEAVED = 2,
CELL_SAIL_VIDEO_CODING_YUYV422_INTERLEAVED = 4,
CELL_SAIL_VIDEO_CODING_VYUY422_REVERSE_INTERLEAVED = 9,
CELL_SAIL_VIDEO_CODING_RAW8_BAYER_GRBG = 12,
};
// Video Color Types
enum {
CELL_SAIL_VIDEO_COLOR_MATRIX_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_COLOR_MATRIX_BT601 = 0,
CELL_SAIL_VIDEO_COLOR_MATRIX_BT709 = 1,
_CELL_SAIL_VIDEO_COLOR_MATRIX_TYPE_NUM_OF_ELEMENTS = 2,
};
// Video Scan Types
enum {
CELL_SAIL_VIDEO_SCAN_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_SCAN_PROGRESSIVE = 0,
CELL_SAIL_VIDEO_SCAN_INTERLACE = 1,
_CELL_SAIL_VIDEO_SCAN_TYPE_NUM_OF_ELEMENTS = 2,
};
// Framerates
enum {
CELL_SAIL_VIDEO_FRAME_RATE_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_FRAME_RATE_24000_1001HZ = 0,
CELL_SAIL_VIDEO_FRAME_RATE_24HZ = 1,
CELL_SAIL_VIDEO_FRAME_RATE_25HZ = 2,
CELL_SAIL_VIDEO_FRAME_RATE_30000_1001HZ = 3,
CELL_SAIL_VIDEO_FRAME_RATE_30HZ = 4,
CELL_SAIL_VIDEO_FRAME_RATE_50HZ = 5,
CELL_SAIL_VIDEO_FRAME_RATE_60000_1001HZ = 6,
CELL_SAIL_VIDEO_FRAME_RATE_60HZ = 7,
_CELL_SAIL_VIDEO_FRAME_RATE_TYPE_NUM_OF_ELEMENTS = 8,
};
// Aspect Ratios
enum {
CELL_SAIL_VIDEO_ASPECT_RATIO_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_ASPECT_RATIO_1_1 = 1, // 1920x1080 1280x720
CELL_SAIL_VIDEO_ASPECT_RATIO_12_11 = 2, // 720x576 normal
CELL_SAIL_VIDEO_ASPECT_RATIO_10_11 = 3, // 720x480 normal
CELL_SAIL_VIDEO_ASPECT_RATIO_16_11 = 4, // 720x576 wide
CELL_SAIL_VIDEO_ASPECT_RATIO_40_33 = 5, // 720x480 wide
CELL_SAIL_VIDEO_ASPECT_RATIO_4_3 = 14, // 1440x1080
};
enum {
CELL_SAIL_VIDEO_WIDTH_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_HEIGHT_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_PITCH_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_BITS_PER_COLOR_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_ALPHA_UNSPECIFIED = -1,
};
// Color Ranges
enum {
CELL_SAIL_VIDEO_COLOR_RANGE_UNSPECIFIED = -1,
CELL_SAIL_VIDEO_COLOR_RANGE_LIMITED = 1,
CELL_SAIL_VIDEO_COLOR_RANGE_FULL = 0,
};
enum {
CELL_SAIL_START_NOT_SPECIFIED = 0,
CELL_SAIL_START_NORMAL = 1 << 0, //1
CELL_SAIL_START_TIME_SCALE = 1 << 2, //4
CELL_SAIL_START_EP_SKIP = 1 << 4, //16
CELL_SAIL_START_EP_SKIP_REVERSE = 1 << 5, //32
CELL_SAIL_START_FRAME_STEP = 1 << 6, //64
};
// Seek Types
enum {
CELL_SAIL_SEEK_NOT_SPECIFIED = 0,
CELL_SAIL_SEEK_ABSOLUTE_BYTE_POSITION = 1 << 0, // For PAMF
CELL_SAIL_SEEK_RELATIVE_BYTE_POSITION = 1 << 1, // Not implemented
CELL_SAIL_SEEK_ABSOLUTE_TIME_POSITION = 1 << 4, // MP4, AVI
CELL_SAIL_SEEK_CURRENT_POSITION = 1 << 6,
CELL_SAIL_SEEK_MP4_SCALE_AND_TIME = 1 << 4, // For MP4, obsolete
};
// Terminus Types
enum {
CELL_SAIL_TERMINUS_NOT_SPECIFIED = 0,
CELL_SAIL_TERMINUS_EOS = 1 << 0,
CELL_SAIL_TERMINUS_ABSOLUTE_BYTE_POSITION = 1 << 1, // For PAMF
CELL_SAIL_TERMINUS_RELATIVE_BYTE_POSITION = 1 << 2, // Mot implemented
CELL_SAIL_TERMINUS_ABSOLUTE_TIME_POSITION = 1 << 5, // For MP4, AVI
CELL_SAIL_TERMINUS_MP4_SCALE_AND_TIME = 1 << 5, // For MP4, obsolete
CELL_SAIL_TERMINUS_MP4_SCALE_ANT_TIME = 1 << 5, // For MP4, here because of a typo
};
// Start Flag Types
enum {
CELL_SAIL_START_FLAG_NOT_SPECIFIED = 0,
CELL_SAIL_START_FLAG_UNFLUSH = 1 << 0,
CELL_SAIL_START_FLAG_PAUSE_BEGIN = 1 << 1,
CELL_SAIL_START_FLAG_PAUSE_END = 1 << 2,
CELL_SAIL_START_FLAG_COMPLETE_STREAM = 1 << 3,
CELL_SAIL_START_FLAG_STICKY = 1 << 4,
CELL_SAIL_START_FLAG_PAUSE = 1 << 1, // Obsolete
};
enum {
_CELL_SAIL_SYNC_SHIFT_NUM = 8,
// Buffering
CELL_SAIL_SYNC_UNDERFLOW = 1,
// = 2, Reserved
// Sync Status
CELL_SAIL_SYNC_ON_TIME = 1 << 2,
CELL_SAIL_SYNC_MAYBE_ON_TIME = 2 << 2,
CELL_SAIL_SYNC_EARLY = 3 << 2,
CELL_SAIL_SYNC_LATE = 4 << 2,
CELL_SAIL_SYNC_NO_SYNC = 5 << 2,
CELL_SAIL_SYNC_NO_PTS = 6 << 2,
CELL_SAIL_SYNC_NOT_READY = 7 << 2,
CELL_SAIL_SYNC_DISABLED = 8 << 2,
CELL_SAIL_SYNC_PAUSED = 9 << 2,
CELL_SAIL_SYNC_DISABLED_PAUSED = 10 << 2,
CELL_SAIL_SYNC_MUTED = 11 << 2,
CELL_SAIL_SYNC_DONE = 12 << 2,
// = 13 << 2, Reserved
// = 14 << 2, Reserved
// = 15 << 2, Reserved
//CELL_SAIL_SYNC_FIRST_FRAME = 64,
//CELL_SAIL_SYNC_LAST_FRAME = 128,
// Frame Status
CELL_SAIL_SYNC_NO_FRAME = 0,
CELL_SAIL_SYNC_REPEATED = 1 << _CELL_SAIL_SYNC_SHIFT_NUM,
CELL_SAIL_SYNC_NEXT = 2 << _CELL_SAIL_SYNC_SHIFT_NUM,
CELL_SAIL_SYNC_SKIPPED_ONE = 3 << _CELL_SAIL_SYNC_SHIFT_NUM,
};
enum {
CELL_SAIL_EVENT_RECORDER_CALL_COMPLETED = 2,
CELL_SAIL_EVENT_RECORDER_STATE_CHANGED = 3,
};
enum {
CELL_SAIL_VIDEO_FRAME_RATE_100HZ = 8,
CELL_SAIL_VIDEO_FRAME_RATE_120000_1001HZ = 9,
CELL_SAIL_VIDEO_FRAME_RATE_120HZ = 10,
};
enum {
CELL_SAIL_GRAPHICS_ADAPTER_FIELD_TOP = 0,
CELL_SAIL_GRAPHICS_ADAPTER_FIELD_BOTTOM = 1,
CELL_SAIL_GRAPHICS_ADAPTER_FIELD_DONT_CARE = 2,
};
enum {
CELL_SAIL_SOURCE_SEEK_ABSOLUTE_BYTE_POSITION = 1 << 0,
};
enum {
CELL_SAIL_SOURCE_CAPABILITY_NONE = 0,
CELL_SAIL_SOURCE_CAPABILITY_SEEK_ABSOLUTE_BYTE_POSITION = 1 << 0,
CELL_SAIL_SOURCE_CAPABILITY_PAUSE = 1 << 4,
CELL_SAIL_SOURCE_CAPABILITY_GAPLESS = 1 << 5,
CELL_SAIL_SOURCE_CAPABILITY_EOS = 1 << 6,
CELL_SAIL_SOURCE_CAPABILITY_SEEK_ABSOLUTE_TIME_POSITION = 1 << 7,
};
struct CellSailAudioFormat
{
s8 coding;
@ -172,7 +685,7 @@ struct CellSailMemAllocatorFuncs
struct CellSailMemAllocator
{
CellSailMemAllocatorFuncs callbacks;
vm::ptr<CellSailMemAllocatorFuncs> callbacks;
be_t<u32> pArg;
};
@ -522,6 +1035,9 @@ struct CellSailMpegLayer3WaveFormat
struct CellSailDescriptor
{
bool autoSelection;
bool registered;
be_t<s32> streamType;
be_t<u64> internalData[32];
};
@ -577,5 +1093,14 @@ struct CellSailPlayerResource
struct CellSailPlayer
{
vm::ptr<CellSailMemAllocator> allocator;
vm::ptr<CellSailPlayerFuncNotified> callback;
be_t<u64> callbackArgument;
vm::ptr<CellSailPlayerAttribute> attribute;
vm::ptr<CellSailPlayerResource> resource;
vm::ptr<CellSailStartCommand> playbackCommand;
be_t<s32> repeatMode;
be_t<u32> descriptors;
vm::ptr<CellSailDescriptor> registeredDescriptors[2];
be_t<u64> internalData[128];
};