mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-08 19:53:15 +00:00
core: Library cleanup (#1631)
* core: Split error codes into separate files * Reduces build times and is cleaner * core: Bring structs and enums to codebase style * core: More style changes
This commit is contained in:
parent
3d0aacd43d
commit
5b6e0ab238
114 changed files with 2158 additions and 2509 deletions
|
@ -3,8 +3,8 @@
|
|||
|
||||
#include "common/logging/log.h"
|
||||
#include "core/libraries/avplayer/avplayer.h"
|
||||
#include "core/libraries/avplayer/avplayer_error.h"
|
||||
#include "core/libraries/avplayer/avplayer_impl.h"
|
||||
#include "core/libraries/error_codes.h"
|
||||
#include "core/libraries/libs.h"
|
||||
|
||||
namespace Libraries::AvPlayer {
|
||||
|
|
|
@ -18,17 +18,26 @@ class AvPlayer;
|
|||
|
||||
using SceAvPlayerHandle = AvPlayer*;
|
||||
|
||||
enum SceAvPlayerUriType { SCE_AVPLAYER_URI_TYPE_SOURCE = 0 };
|
||||
enum class SceAvPlayerUriType : u32 {
|
||||
Source = 0,
|
||||
};
|
||||
|
||||
struct SceAvPlayerUri {
|
||||
const char* name;
|
||||
u32 length;
|
||||
};
|
||||
|
||||
enum SceAvPlayerSourceType {
|
||||
SCE_AVPLAYER_SOURCE_TYPE_UNKNOWN = 0,
|
||||
SCE_AVPLAYER_SOURCE_TYPE_FILE_MP4 = 1,
|
||||
SCE_AVPLAYER_SOURCE_TYPE_HLS = 8
|
||||
enum class SceAvPlayerSourceType {
|
||||
Unknown = 0,
|
||||
FileMp4 = 1,
|
||||
Hls = 8,
|
||||
};
|
||||
|
||||
enum class SceAvPlayerStreamType : u32 {
|
||||
Video,
|
||||
Audio,
|
||||
TimedText,
|
||||
Unknown,
|
||||
};
|
||||
|
||||
struct SceAvPlayerSourceDetails {
|
||||
|
@ -50,7 +59,7 @@ struct SceAvPlayerVideo {
|
|||
u32 width;
|
||||
u32 height;
|
||||
f32 aspect_ratio;
|
||||
u8 language_code[4];
|
||||
char language_code[4];
|
||||
};
|
||||
|
||||
struct SceAvPlayerTextPosition {
|
||||
|
@ -82,7 +91,7 @@ struct SceAvPlayerFrameInfo {
|
|||
};
|
||||
|
||||
struct SceAvPlayerStreamInfo {
|
||||
u32 type;
|
||||
SceAvPlayerStreamType type;
|
||||
u8 reserved[4];
|
||||
SceAvPlayerStreamDetails details;
|
||||
u64 duration;
|
||||
|
@ -135,10 +144,10 @@ struct SceAvPlayerFrameInfoEx {
|
|||
SceAvPlayerStreamDetailsEx details;
|
||||
};
|
||||
|
||||
typedef void* PS4_SYSV_ABI (*SceAvPlayerAllocate)(void* p, u32 align, u32 size);
|
||||
typedef void PS4_SYSV_ABI (*SceAvPlayerDeallocate)(void* p, void* mem);
|
||||
typedef void* PS4_SYSV_ABI (*SceAvPlayerAllocateTexture)(void* p, u32 align, u32 size);
|
||||
typedef void PS4_SYSV_ABI (*SceAvPlayerDeallocateTexture)(void* p, void* mem);
|
||||
using SceAvPlayerAllocate = void* PS4_SYSV_ABI (*)(void* p, u32 align, u32 size);
|
||||
using SceAvPlayerDeallocate = void PS4_SYSV_ABI (*)(void* p, void* mem);
|
||||
using SceAvPlayerAllocateTexture = void* PS4_SYSV_ABI (*)(void* p, u32 align, u32 size);
|
||||
using SceAvPlayerDeallocateTexture = void PS4_SYSV_ABI (*)(void* p, void* mem);
|
||||
|
||||
struct SceAvPlayerMemAllocator {
|
||||
void* object_ptr;
|
||||
|
@ -148,10 +157,10 @@ struct SceAvPlayerMemAllocator {
|
|||
SceAvPlayerDeallocateTexture deallocate_texture;
|
||||
};
|
||||
|
||||
typedef s32 PS4_SYSV_ABI (*SceAvPlayerOpenFile)(void* p, const char* name);
|
||||
typedef s32 PS4_SYSV_ABI (*SceAvPlayerCloseFile)(void* p);
|
||||
typedef s32 PS4_SYSV_ABI (*SceAvPlayerReadOffsetFile)(void* p, u8* buf, u64 pos, u32 len);
|
||||
typedef u64 PS4_SYSV_ABI (*SceAvPlayerSizeFile)(void* p);
|
||||
using SceAvPlayerOpenFile = s32 PS4_SYSV_ABI (*)(void* p, const char* name);
|
||||
using SceAvPlayerCloseFile = s32 PS4_SYSV_ABI (*)(void* p);
|
||||
using SceAvPlayerReadOffsetFile = s32 PS4_SYSV_ABI (*)(void* p, u8* buf, u64 pos, u32 len);
|
||||
using SceAvPlayerSizeFile = u64 PS4_SYSV_ABI (*)(void* p);
|
||||
|
||||
struct SceAvPlayerFileReplacement {
|
||||
void* object_ptr;
|
||||
|
@ -161,31 +170,31 @@ struct SceAvPlayerFileReplacement {
|
|||
SceAvPlayerSizeFile size;
|
||||
};
|
||||
|
||||
enum SceAvPlayerEvents {
|
||||
SCE_AVPLAYER_STATE_STOP = 0x01,
|
||||
SCE_AVPLAYER_STATE_READY = 0x02,
|
||||
SCE_AVPLAYER_STATE_PLAY = 0x03,
|
||||
SCE_AVPLAYER_STATE_PAUSE = 0x04,
|
||||
SCE_AVPLAYER_STATE_BUFFERING = 0x05,
|
||||
SCE_AVPLAYER_TIMED_TEXT_DELIVERY = 0x10,
|
||||
SCE_AVPLAYER_WARNING_ID = 0x20,
|
||||
SCE_AVPLAYER_ENCRYPTION = 0x30,
|
||||
SCE_AVPLAYER_DRM_ERROR = 0x40
|
||||
enum class SceAvPlayerEvents {
|
||||
StateStop = 0x01,
|
||||
StateReady = 0x02,
|
||||
StatePlay = 0x03,
|
||||
StatePause = 0x04,
|
||||
StateBuffering = 0x05,
|
||||
TimedTextDelivery = 0x10,
|
||||
WarningId = 0x20,
|
||||
Encryption = 0x30,
|
||||
DrmError = 0x40,
|
||||
};
|
||||
|
||||
typedef void PS4_SYSV_ABI (*SceAvPlayerEventCallback)(void* p, SceAvPlayerEvents event, s32 src_id,
|
||||
void* data);
|
||||
using SceAvPlayerEventCallback = void PS4_SYSV_ABI (*)(void* p, SceAvPlayerEvents event, s32 src_id,
|
||||
void* data);
|
||||
|
||||
struct SceAvPlayerEventReplacement {
|
||||
void* object_ptr;
|
||||
SceAvPlayerEventCallback event_callback;
|
||||
};
|
||||
|
||||
enum SceAvPlayerDebuglevels {
|
||||
SCE_AVPLAYER_DBG_NONE,
|
||||
SCE_AVPLAYER_DBG_INFO,
|
||||
SCE_AVPLAYER_DBG_WARNINGS,
|
||||
SCE_AVPLAYER_DBG_ALL
|
||||
enum class SceAvPlayerDebuglevels {
|
||||
None,
|
||||
Info,
|
||||
Warnings,
|
||||
All,
|
||||
};
|
||||
|
||||
struct SceAvPlayerInitData {
|
||||
|
@ -224,24 +233,17 @@ struct SceAvPlayerInitDataEx {
|
|||
u8 reserved[3];
|
||||
};
|
||||
|
||||
enum SceAvPlayerStreamType {
|
||||
SCE_AVPLAYER_VIDEO,
|
||||
SCE_AVPLAYER_AUDIO,
|
||||
SCE_AVPLAYER_TIMEDTEXT,
|
||||
SCE_AVPLAYER_UNKNOWN
|
||||
enum class SceAvPlayerVideoDecoderType {
|
||||
Default = 0,
|
||||
Reserved1,
|
||||
Software,
|
||||
Software2,
|
||||
};
|
||||
|
||||
enum SceAvPlayerVideoDecoderType {
|
||||
SCE_AVPLAYER_VIDEO_DECODER_TYPE_DEFAULT = 0,
|
||||
SCE_AVPLAYER_VIDEO_DECODER_TYPE_RESERVED1,
|
||||
SCE_AVPLAYER_VIDEO_DECODER_TYPE_SOFTWARE,
|
||||
SCE_AVPLAYER_VIDEO_DECODER_TYPE_SOFTWARE2
|
||||
};
|
||||
|
||||
enum SceAvPlayerAudioDecoderType {
|
||||
SCE_AVPLAYER_AUDIO_DECODER_TYPE_DEFAULT = 0,
|
||||
SCE_AVPLAYER_AUDIO_DECODER_TYPE_RESERVED1,
|
||||
SCE_AVPLAYER_AUDIO_DECODER_TYPE_RESERVED2
|
||||
enum class SceAvPlayerAudioDecoderType {
|
||||
Default = 0,
|
||||
Reserved1,
|
||||
Reserved2,
|
||||
};
|
||||
|
||||
struct SceAvPlayerDecoderInit {
|
||||
|
@ -281,12 +283,12 @@ struct SceAvPlayerPostInitData {
|
|||
u8 reserved[56];
|
||||
};
|
||||
|
||||
enum SceAvPlayerAvSyncMode {
|
||||
SCE_AVPLAYER_AV_SYNC_MODE_DEFAULT = 0,
|
||||
SCE_AVPLAYER_AV_SYNC_MODE_NONE
|
||||
enum class SceAvPlayerAvSyncMode {
|
||||
Default = 0,
|
||||
None,
|
||||
};
|
||||
|
||||
typedef int PS4_SYSV_ABI (*SceAvPlayerLogCallback)(void* p, const char* format, va_list args);
|
||||
using SceAvPlayerLogCallback = int PS4_SYSV_ABI (*)(void* p, const char* format, va_list args);
|
||||
|
||||
void RegisterlibSceAvPlayer(Core::Loader::SymbolsResolver* sym);
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ static bool iequals(std::string_view l, std::string_view r) {
|
|||
|
||||
SceAvPlayerSourceType GetSourceType(std::string_view path) {
|
||||
if (path.empty()) {
|
||||
return SCE_AVPLAYER_SOURCE_TYPE_UNKNOWN;
|
||||
return SceAvPlayerSourceType::Unknown;
|
||||
}
|
||||
|
||||
std::string_view name = path;
|
||||
|
@ -25,14 +25,14 @@ SceAvPlayerSourceType GetSourceType(std::string_view path) {
|
|||
// -> schema://server.domain/path/to/file.ext/and/beyond
|
||||
name = path.substr(0, path.find_first_of("?#"));
|
||||
if (name.empty()) {
|
||||
return SCE_AVPLAYER_SOURCE_TYPE_UNKNOWN;
|
||||
return SceAvPlayerSourceType::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
// schema://server.domain/path/to/file.ext/and/beyond -> .ext/and/beyond
|
||||
auto ext = name.substr(name.rfind('.'));
|
||||
if (ext.empty()) {
|
||||
return SCE_AVPLAYER_SOURCE_TYPE_UNKNOWN;
|
||||
return SceAvPlayerSourceType::Unknown;
|
||||
}
|
||||
|
||||
// .ext/and/beyond -> .ext
|
||||
|
@ -40,14 +40,14 @@ SceAvPlayerSourceType GetSourceType(std::string_view path) {
|
|||
|
||||
if (iequals(ext, ".mp4") || iequals(ext, ".m4v") || iequals(ext, ".m3d") ||
|
||||
iequals(ext, ".m4a") || iequals(ext, ".mov")) {
|
||||
return SCE_AVPLAYER_SOURCE_TYPE_FILE_MP4;
|
||||
return SceAvPlayerSourceType::FileMp4;
|
||||
}
|
||||
|
||||
if (iequals(ext, ".m3u8")) {
|
||||
return SCE_AVPLAYER_SOURCE_TYPE_HLS;
|
||||
return SceAvPlayerSourceType::Hls;
|
||||
}
|
||||
|
||||
return SCE_AVPLAYER_SOURCE_TYPE_UNKNOWN;
|
||||
return SceAvPlayerSourceType::Unknown;
|
||||
}
|
||||
|
||||
} // namespace Libraries::AvPlayer
|
||||
|
|
19
src/core/libraries/avplayer/avplayer_error.h
Normal file
19
src/core/libraries/avplayer/avplayer_error.h
Normal file
|
@ -0,0 +1,19 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "core/libraries/error_codes.h"
|
||||
|
||||
// AvPlayer library
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_INVALID_PARAMS = 0x806A0001;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_OPERATION_FAILED = 0x806A0002;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_NO_MEMORY = 0x806A0003;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_NOT_SUPPORTED = 0x806A0004;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_WAR_FILE_NONINTERLEAVED = 0x806A00A0;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_WAR_LOOPING_BACK = 0x806A00A1;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_WAR_JUMP_COMPLETE = 0x806A00A3;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_INFO_MARLIN_ENCRY = 0x806A00B0;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_INFO_PLAYREADY_ENCRY = 0x806A00B4;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_INFO_AES_ENCRY = 0x806A00B5;
|
||||
constexpr int ORBIS_AVPLAYER_ERROR_INFO_OTHER_ENCRY = 0x806A00BF;
|
|
@ -2,8 +2,8 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "core/libraries/avplayer/avplayer_common.h"
|
||||
#include "core/libraries/avplayer/avplayer_error.h"
|
||||
#include "core/libraries/avplayer/avplayer_impl.h"
|
||||
#include "core/libraries/error_codes.h"
|
||||
#include "core/tls.h"
|
||||
|
||||
namespace Libraries::AvPlayer {
|
||||
|
|
|
@ -85,17 +85,17 @@ s32 AvPlayerSource::GetStreamCount() {
|
|||
return m_avformat_context->nb_streams;
|
||||
}
|
||||
|
||||
static s32 CodecTypeToStreamType(AVMediaType codec_type) {
|
||||
static SceAvPlayerStreamType CodecTypeToStreamType(AVMediaType codec_type) {
|
||||
switch (codec_type) {
|
||||
case AVMediaType::AVMEDIA_TYPE_VIDEO:
|
||||
return SCE_AVPLAYER_VIDEO;
|
||||
return SceAvPlayerStreamType::Video;
|
||||
case AVMediaType::AVMEDIA_TYPE_AUDIO:
|
||||
return SCE_AVPLAYER_AUDIO;
|
||||
return SceAvPlayerStreamType::Audio;
|
||||
case AVMediaType::AVMEDIA_TYPE_SUBTITLE:
|
||||
return SCE_AVPLAYER_TIMEDTEXT;
|
||||
return SceAvPlayerStreamType::TimedText;
|
||||
default:
|
||||
LOG_ERROR(Lib_AvPlayer, "Unexpected AVMediaType {}", magic_enum::enum_name(codec_type));
|
||||
return -1;
|
||||
return SceAvPlayerStreamType::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -124,7 +124,7 @@ bool AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info
|
|||
LOG_WARNING(Lib_AvPlayer, "Stream {} language is unknown", stream_index);
|
||||
}
|
||||
switch (info.type) {
|
||||
case SCE_AVPLAYER_VIDEO: {
|
||||
case SceAvPlayerStreamType::Video: {
|
||||
LOG_INFO(Lib_AvPlayer, "Stream {} is a video stream.", stream_index);
|
||||
info.details.video.aspect_ratio =
|
||||
f32(p_stream->codecpar->width) / p_stream->codecpar->height;
|
||||
|
@ -142,7 +142,7 @@ bool AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info
|
|||
}
|
||||
break;
|
||||
}
|
||||
case SCE_AVPLAYER_AUDIO: {
|
||||
case SceAvPlayerStreamType::Audio: {
|
||||
LOG_INFO(Lib_AvPlayer, "Stream {} is an audio stream.", stream_index);
|
||||
info.details.audio.channel_count = p_stream->codecpar->ch_layout.nb_channels;
|
||||
info.details.audio.sample_rate = p_stream->codecpar->sample_rate;
|
||||
|
@ -153,7 +153,7 @@ bool AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info
|
|||
}
|
||||
break;
|
||||
}
|
||||
case SCE_AVPLAYER_TIMEDTEXT: {
|
||||
case SceAvPlayerStreamType::TimedText: {
|
||||
LOG_WARNING(Lib_AvPlayer, "Stream {} is a timedtext stream.", stream_index);
|
||||
info.details.subs.font_size = 12;
|
||||
info.details.subs.text_size = 12;
|
||||
|
@ -164,7 +164,8 @@ bool AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info
|
|||
break;
|
||||
}
|
||||
default: {
|
||||
LOG_ERROR(Lib_AvPlayer, "Stream {} type is unknown: {}.", stream_index, info.type);
|
||||
LOG_ERROR(Lib_AvPlayer, "Stream {} type is unknown: {}.", stream_index,
|
||||
magic_enum::enum_name(info.type));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
#include "common/logging/log.h"
|
||||
#include "common/thread.h"
|
||||
#include "core/libraries/avplayer/avplayer_error.h"
|
||||
#include "core/libraries/avplayer/avplayer_source.h"
|
||||
#include "core/libraries/avplayer/avplayer_state.h"
|
||||
#include "core/libraries/error_codes.h"
|
||||
#include "core/tls.h"
|
||||
|
||||
#include <magic_enum.hpp>
|
||||
|
@ -16,7 +16,7 @@ void PS4_SYSV_ABI AvPlayerState::AutoPlayEventCallback(void* opaque, SceAvPlayer
|
|||
s32 source_id, void* event_data) {
|
||||
auto const self = reinterpret_cast<AvPlayerState*>(opaque);
|
||||
|
||||
if (event_id == SCE_AVPLAYER_STATE_READY) {
|
||||
if (event_id == SceAvPlayerEvents::StateReady) {
|
||||
s32 video_stream_index = -1;
|
||||
s32 audio_stream_index = -1;
|
||||
s32 timedtext_stream_index = -1;
|
||||
|
@ -36,36 +36,37 @@ void PS4_SYSV_ABI AvPlayerState::AutoPlayEventCallback(void* opaque, SceAvPlayer
|
|||
return;
|
||||
}
|
||||
|
||||
const std::string_view default_language(
|
||||
reinterpret_cast<char*>(self->m_default_language));
|
||||
const std::string_view default_language{self->m_default_language};
|
||||
switch (info.type) {
|
||||
case SCE_AVPLAYER_VIDEO:
|
||||
case SceAvPlayerStreamType::Video:
|
||||
if (video_stream_index == -1) {
|
||||
video_stream_index = stream_index;
|
||||
}
|
||||
if (!default_language.empty() &&
|
||||
default_language == reinterpret_cast<char*>(info.details.video.language_code)) {
|
||||
default_language == info.details.video.language_code) {
|
||||
video_stream_index = stream_index;
|
||||
}
|
||||
break;
|
||||
case SCE_AVPLAYER_AUDIO:
|
||||
case SceAvPlayerStreamType::Audio:
|
||||
if (audio_stream_index == -1) {
|
||||
audio_stream_index = stream_index;
|
||||
}
|
||||
if (!default_language.empty() &&
|
||||
default_language == reinterpret_cast<char*>(info.details.video.language_code)) {
|
||||
default_language == info.details.video.language_code) {
|
||||
audio_stream_index = stream_index;
|
||||
}
|
||||
break;
|
||||
case SCE_AVPLAYER_TIMEDTEXT:
|
||||
case SceAvPlayerStreamType::TimedText:
|
||||
if (default_language.empty()) {
|
||||
timedtext_stream_index = stream_index;
|
||||
break;
|
||||
}
|
||||
if (default_language == reinterpret_cast<char*>(info.details.video.language_code)) {
|
||||
if (default_language == info.details.video.language_code) {
|
||||
timedtext_stream_index = stream_index;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -141,7 +142,7 @@ bool AvPlayerState::AddSource(std::string_view path, SceAvPlayerSourceType sourc
|
|||
|
||||
m_up_source = std::make_unique<AvPlayerSource>(
|
||||
*this, m_post_init_data.video_decoder_init.decoderType.video_type ==
|
||||
SCE_AVPLAYER_VIDEO_DECODER_TYPE_SOFTWARE2);
|
||||
SceAvPlayerVideoDecoderType::Software2);
|
||||
if (!m_up_source->Init(m_init_data, path)) {
|
||||
SetState(AvState::Error);
|
||||
m_up_source.reset();
|
||||
|
@ -317,23 +318,23 @@ void AvPlayerState::OnEOF() {
|
|||
void AvPlayerState::OnPlaybackStateChanged(AvState state) {
|
||||
switch (state) {
|
||||
case AvState::Ready: {
|
||||
EmitEvent(SCE_AVPLAYER_STATE_READY);
|
||||
EmitEvent(SceAvPlayerEvents::StateReady);
|
||||
break;
|
||||
}
|
||||
case AvState::Play: {
|
||||
EmitEvent(SCE_AVPLAYER_STATE_PLAY);
|
||||
EmitEvent(SceAvPlayerEvents::StatePlay);
|
||||
break;
|
||||
}
|
||||
case AvState::Stop: {
|
||||
EmitEvent(SCE_AVPLAYER_STATE_STOP);
|
||||
EmitEvent(SceAvPlayerEvents::StateStop);
|
||||
break;
|
||||
}
|
||||
case AvState::Pause: {
|
||||
EmitEvent(SCE_AVPLAYER_STATE_PAUSE);
|
||||
EmitEvent(SceAvPlayerEvents::StatePause);
|
||||
break;
|
||||
}
|
||||
case AvState::Buffering: {
|
||||
EmitEvent(SCE_AVPLAYER_STATE_BUFFERING);
|
||||
EmitEvent(SceAvPlayerEvents::StateBuffering);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -69,7 +69,7 @@ private:
|
|||
SceAvPlayerPostInitData m_post_init_data{};
|
||||
SceAvPlayerEventReplacement m_event_replacement{};
|
||||
bool m_auto_start{};
|
||||
u8 m_default_language[4]{};
|
||||
char m_default_language[4]{};
|
||||
|
||||
std::atomic<AvState> m_current_state;
|
||||
std::atomic<AvState> m_previous_state;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue