// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "avplayer.h" #include "common/assert.h" #include "common/logging/log.h" #include "core/libraries/kernel/thread_management.h" #include #include #include #define AVPLAYER_IS_ERROR(x) ((x) < 0) namespace Libraries::AvPlayer { enum class AvState { Initial, AddingSource, Ready, Play, Stop, EndOfFile, Pause, C0x08, Jump, TrickMode, C0x0B, Buffering, Starting, Error, }; enum class AvEventType { ChangeFlowState = 21, WarningId = 22, RevertState = 30, AddSource = 40, Error = 255, }; union AvPlayerEventData { u32 num_frames; // 20 AvState state; // AvEventType::ChangeFlowState s32 error; // AvEventType::WarningId u32 attempt; // AvEventType::AddSource }; struct AvPlayerEvent { AvEventType event; AvPlayerEventData payload; }; template class AvPlayerQueue { public: size_t Size() { return m_queue.size(); } void Push(T&& value) { std::lock_guard guard(m_mutex); m_queue.emplace(std::forward(value)); } std::optional Pop() { if (Size() == 0) { return std::nullopt; } std::lock_guard guard(m_mutex); auto result = std::move(m_queue.front()); m_queue.pop(); return result; } void Clear() { std::lock_guard guard(m_mutex); m_queue = {}; } private: std::mutex m_mutex{}; std::queue m_queue{}; }; SceAvPlayerSourceType GetSourceType(std::string_view path); } // namespace Libraries::AvPlayer