mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-25 11:34:55 +00:00
* Update file_system.cpp * libSceVideodec2 struct fixes Our code was based on an old version of the libSceVideodec2 library. Based on what I've decompiled, these structs changed somewhere around firmware 6.50, and newer versions of the library have these flexible checks to accommodate both variants of the structs. * Static assert for AvcPictureInfo struct All the other Videodec2 structs have static asserts, might as well use one here too. * Initialize new values Set proper values for frameFormat and framePitchInBytes. `frame->linesize[0]` appears to be in bytes already, I'm not sure if that means framePitch is being set wrong though.
141 lines
4.1 KiB
C++
141 lines
4.1 KiB
C++
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "common/types.h"
|
|
|
|
#include "videodec2_avc.h"
|
|
|
|
namespace Core::Loader {
|
|
class SymbolsResolver;
|
|
}
|
|
namespace Libraries::Vdec2 {
|
|
|
|
class VdecDecoder;
|
|
|
|
using OrbisVideodec2Decoder = VdecDecoder*;
|
|
using OrbisVideodec2ComputeQueue = void*;
|
|
|
|
struct OrbisVideodec2DecoderConfigInfo {
|
|
u64 thisSize;
|
|
u32 resourceType;
|
|
u32 codecType;
|
|
u32 profile;
|
|
u32 maxLevel;
|
|
s32 maxFrameWidth;
|
|
s32 maxFrameHeight;
|
|
s32 maxDpbFrameCount;
|
|
u32 decodePipelineDepth;
|
|
OrbisVideodec2ComputeQueue computeQueue;
|
|
u64 cpuAffinityMask;
|
|
s32 cpuThreadPriority;
|
|
bool optimizeProgressiveVideo;
|
|
bool checkMemoryType;
|
|
u8 reserved0;
|
|
u8 reserved1;
|
|
void* extraConfigInfo;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2DecoderConfigInfo) == 0x48);
|
|
|
|
struct OrbisVideodec2DecoderMemoryInfo {
|
|
u64 thisSize;
|
|
u64 cpuMemorySize;
|
|
void* cpuMemory;
|
|
u64 gpuMemorySize;
|
|
void* gpuMemory;
|
|
u64 cpuGpuMemorySize;
|
|
void* cpuGpuMemory;
|
|
u64 maxFrameBufferSize;
|
|
u32 frameBufferAlignment;
|
|
u32 reserved0;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2DecoderMemoryInfo) == 0x48);
|
|
|
|
struct OrbisVideodec2InputData {
|
|
u64 thisSize;
|
|
void* auData;
|
|
u64 auSize;
|
|
u64 ptsData;
|
|
u64 dtsData;
|
|
u64 attachedData;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2InputData) == 0x30);
|
|
|
|
struct OrbisVideodec2OutputInfo {
|
|
u64 thisSize;
|
|
bool isValid;
|
|
bool isErrorFrame;
|
|
u8 pictureCount;
|
|
u32 codecType;
|
|
u32 frameWidth;
|
|
u32 framePitch;
|
|
u32 frameHeight;
|
|
void* frameBuffer;
|
|
u64 frameBufferSize;
|
|
u32 frameFormat;
|
|
u32 framePitchInBytes;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2OutputInfo) == 0x38);
|
|
|
|
struct OrbisVideodec2FrameBuffer {
|
|
u64 thisSize;
|
|
void* frameBuffer;
|
|
u64 frameBufferSize;
|
|
bool isAccepted;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2FrameBuffer) == 0x20);
|
|
|
|
struct OrbisVideodec2ComputeMemoryInfo {
|
|
u64 thisSize;
|
|
u64 cpuGpuMemorySize;
|
|
void* cpuGpuMemory;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2ComputeMemoryInfo) == 0x18);
|
|
|
|
struct OrbisVideodec2ComputeConfigInfo {
|
|
u64 thisSize;
|
|
u16 computePipeId;
|
|
u16 computeQueueId;
|
|
bool checkMemoryType;
|
|
u8 reserved0;
|
|
u16 reserved1;
|
|
};
|
|
static_assert(sizeof(OrbisVideodec2ComputeConfigInfo) == 0x10);
|
|
|
|
s32 PS4_SYSV_ABI
|
|
sceVideodec2QueryComputeMemoryInfo(OrbisVideodec2ComputeMemoryInfo* computeMemInfo);
|
|
|
|
s32 PS4_SYSV_ABI
|
|
sceVideodec2AllocateComputeQueue(const OrbisVideodec2ComputeConfigInfo* computeCfgInfo,
|
|
const OrbisVideodec2ComputeMemoryInfo* computeMemInfo,
|
|
OrbisVideodec2ComputeQueue* computeQueue);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2ReleaseComputeQueue(OrbisVideodec2ComputeQueue computeQueue);
|
|
|
|
s32 PS4_SYSV_ABI
|
|
sceVideodec2QueryDecoderMemoryInfo(const OrbisVideodec2DecoderConfigInfo* decoderCfgInfo,
|
|
OrbisVideodec2DecoderMemoryInfo* decoderMemInfo);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2CreateDecoder(const OrbisVideodec2DecoderConfigInfo* decoderCfgInfo,
|
|
const OrbisVideodec2DecoderMemoryInfo* decoderMemInfo,
|
|
OrbisVideodec2Decoder* decoder);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2DeleteDecoder(OrbisVideodec2Decoder decoder);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2Decode(OrbisVideodec2Decoder decoder,
|
|
const OrbisVideodec2InputData* inputData,
|
|
OrbisVideodec2FrameBuffer* frameBuffer,
|
|
OrbisVideodec2OutputInfo* outputInfo);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2Flush(OrbisVideodec2Decoder decoder,
|
|
OrbisVideodec2FrameBuffer* frameBuffer,
|
|
OrbisVideodec2OutputInfo* outputInfo);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2Reset(OrbisVideodec2Decoder decoder);
|
|
|
|
s32 PS4_SYSV_ABI sceVideodec2GetPictureInfo(const OrbisVideodec2OutputInfo* outputInfo,
|
|
void* p1stPictureInfo, void* p2ndPictureInfo);
|
|
|
|
void RegisterlibSceVdec2(Core::Loader::SymbolsResolver* sym);
|
|
} // namespace Libraries::Vdec2
|