mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-03-01 19:13:54 +01:00
ISO: Fix game movie icons
This commit is contained in:
parent
ab45b1bf61
commit
eff25ed0aa
|
|
@ -11,6 +11,8 @@
|
|||
#include "Emu/vfs_config.h"
|
||||
#include "Utilities/StrUtil.h"
|
||||
|
||||
#include "Loader/ISO.h"
|
||||
|
||||
#include <QHeaderView>
|
||||
#include <QScrollBar>
|
||||
#include <QStringBuilder>
|
||||
|
|
@ -242,6 +244,12 @@ void game_list_table::populate(
|
|||
custom_table_widget_item* icon_item = new custom_table_widget_item;
|
||||
game->item = icon_item;
|
||||
|
||||
if (is_file_iso(game->info.path) && !game->info.movie_path.empty()
|
||||
&& !fs::exists(game->info.movie_path))
|
||||
{
|
||||
icon_item->set_source_path(game->info.path);
|
||||
}
|
||||
|
||||
icon_item->set_image_change_callback([this, icon_item, game](const QVideoFrame& frame)
|
||||
{
|
||||
if (!icon_item || !game)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
#include "Emu/System.h"
|
||||
#include "qt_video_source.h"
|
||||
|
||||
#include "Loader/ISO.h"
|
||||
|
||||
#include <QFile>
|
||||
|
||||
qt_video_source::qt_video_source()
|
||||
|
|
@ -19,6 +21,11 @@ void qt_video_source::set_video_path(const std::string& video_path)
|
|||
m_video_path = QString::fromStdString(video_path);
|
||||
}
|
||||
|
||||
void qt_video_source::set_source_path(const std::string& source_path)
|
||||
{
|
||||
m_source_path = QString::fromStdString(source_path);
|
||||
}
|
||||
|
||||
void qt_video_source::set_active(bool active)
|
||||
{
|
||||
if (m_active.exchange(active) == active) return;
|
||||
|
|
@ -55,7 +62,7 @@ void qt_video_source::init_movie()
|
|||
return;
|
||||
}
|
||||
|
||||
if (!m_image_change_callback || m_video_path.isEmpty() || !QFile::exists(m_video_path))
|
||||
if (!m_image_change_callback || m_video_path.isEmpty() || (!QFile::exists(m_video_path) && m_source_path.isEmpty()))
|
||||
{
|
||||
m_video_path.clear();
|
||||
return;
|
||||
|
|
@ -65,8 +72,25 @@ void qt_video_source::init_movie()
|
|||
|
||||
if (lower.endsWith(".gif"))
|
||||
{
|
||||
m_movie = std::make_unique<QMovie>(m_video_path);
|
||||
m_video_path.clear();
|
||||
if (m_source_path.isEmpty())
|
||||
{
|
||||
m_movie = std::make_unique<QMovie>(m_video_path);
|
||||
m_video_path.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
iso_archive archive(m_source_path.toStdString());
|
||||
auto movie_file = archive.open(m_video_path.toStdString());
|
||||
auto movie_size = movie_file.size();
|
||||
m_video_data = QByteArray(movie_size, 0);
|
||||
movie_file.read(m_video_data.data(), movie_size);
|
||||
|
||||
QBuffer buffer(&m_video_data);
|
||||
buffer.open(QIODevice::ReadOnly);
|
||||
m_movie = std::make_unique<QMovie>(&buffer);
|
||||
|
||||
m_video_path.clear();
|
||||
}
|
||||
|
||||
if (!m_movie->isValid())
|
||||
{
|
||||
|
|
@ -85,17 +109,30 @@ void qt_video_source::init_movie()
|
|||
if (lower.endsWith(".pam"))
|
||||
{
|
||||
// We can't set PAM files as source of the video player, so we have to feed them as raw data.
|
||||
QFile file(m_video_path);
|
||||
if (!file.open(QFile::OpenModeFlag::ReadOnly))
|
||||
if (m_source_path.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
QFile file(m_video_path);
|
||||
if (!file.open(QFile::OpenModeFlag::ReadOnly))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Decode the pam properly before pushing it to the player
|
||||
m_video_data = file.readAll();
|
||||
if (m_video_data.isEmpty())
|
||||
// TODO: Decode the pam properly before pushing it to the player
|
||||
m_video_data = file.readAll();
|
||||
if (m_video_data.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
auto source_path = m_source_path.toStdString();
|
||||
auto video_path = m_video_path.toStdString();
|
||||
iso_archive archive(source_path.c_str());
|
||||
auto movie_file = archive.open(video_path);
|
||||
auto movie_size = movie_file.size();
|
||||
m_video_data = QByteArray(movie_size, 0);
|
||||
movie_file.read(m_video_data.data(), movie_size);
|
||||
}
|
||||
|
||||
m_video_buffer = std::make_unique<QBuffer>(&m_video_data);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ public:
|
|||
qt_video_source();
|
||||
virtual ~qt_video_source();
|
||||
|
||||
void set_source_path(const std::string& source_path);
|
||||
void set_video_path(const std::string& video_path) override;
|
||||
const QString& video_path() const { return m_video_path; }
|
||||
|
||||
|
|
@ -43,6 +44,7 @@ protected:
|
|||
atomic_t<bool> m_has_new = false;
|
||||
|
||||
QString m_video_path;
|
||||
QString m_source_path; // path of the source archive
|
||||
QByteArray m_video_data{};
|
||||
QImage m_image{};
|
||||
std::vector<u8> m_image_path;
|
||||
|
|
|
|||
Loading…
Reference in a new issue