2017-04-18 22:39:45 -04:00
|
|
|
#include "stdafx.h"
|
2017-04-22 13:19:21 -04:00
|
|
|
#include "../Utilities/FolderUtilities.h"
|
2017-04-18 22:39:45 -04:00
|
|
|
#include "MovieManager.h"
|
|
|
|
#include "MesenMovie.h"
|
2017-04-22 13:19:21 -04:00
|
|
|
#include "BizhawkMovie.h"
|
2017-04-24 18:28:50 -04:00
|
|
|
#include "FceuxMovie.h"
|
2017-11-19 23:08:23 -05:00
|
|
|
#include "MovieRecorder.h"
|
|
|
|
#include "VirtualFile.h"
|
2017-04-18 22:39:45 -04:00
|
|
|
|
2017-11-19 23:08:23 -05:00
|
|
|
shared_ptr<IMovie> MovieManager::_player;
|
|
|
|
shared_ptr<MovieRecorder> MovieManager::_recorder;
|
2017-04-18 22:39:45 -04:00
|
|
|
|
2018-07-01 15:21:05 -04:00
|
|
|
void MovieManager::Record(RecordMovieOptions options, shared_ptr<Console> console)
|
2017-04-18 22:39:45 -04:00
|
|
|
{
|
2018-07-01 15:21:05 -04:00
|
|
|
shared_ptr<MovieRecorder> recorder(new MovieRecorder(console));
|
2017-12-22 15:08:58 -05:00
|
|
|
if(recorder->Record(options)) {
|
2017-11-19 23:08:23 -05:00
|
|
|
_recorder = recorder;
|
2017-04-18 22:39:45 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-01 15:21:05 -04:00
|
|
|
void MovieManager::Play(VirtualFile file, shared_ptr<Console> console)
|
2017-04-18 22:39:45 -04:00
|
|
|
{
|
2017-11-19 23:08:23 -05:00
|
|
|
vector<uint8_t> fileData;
|
|
|
|
if(file.IsValid() && file.ReadFile(fileData)) {
|
|
|
|
shared_ptr<IMovie> player;
|
|
|
|
if(memcmp(fileData.data(), "MMO", 3) == 0) {
|
|
|
|
//Old movie format, no longer supported
|
|
|
|
MessageManager::DisplayMessage("Movies", "MovieIncompatibleVersion");
|
|
|
|
} else if(memcmp(fileData.data(), "PK", 2) == 0) {
|
|
|
|
//Mesen or Bizhawk movie
|
|
|
|
ZipReader reader;
|
|
|
|
reader.LoadArchive(fileData);
|
2017-04-18 22:39:45 -04:00
|
|
|
|
2017-11-19 23:08:23 -05:00
|
|
|
vector<string> files = reader.GetFileList();
|
|
|
|
if(std::find(files.begin(), files.end(), "GameSettings.txt") != files.end()) {
|
2018-07-01 15:21:05 -04:00
|
|
|
player.reset(new MesenMovie(console));
|
2017-11-19 23:08:23 -05:00
|
|
|
} else {
|
2018-07-01 15:21:05 -04:00
|
|
|
player.reset(new BizhawkMovie(console));
|
2017-11-19 23:08:23 -05:00
|
|
|
}
|
|
|
|
} else if(memcmp(fileData.data(), "ver", 3) == 0) {
|
2018-07-01 15:21:05 -04:00
|
|
|
player.reset(new FceuxMovie(console));
|
2017-04-22 13:19:21 -04:00
|
|
|
}
|
2017-11-19 23:08:23 -05:00
|
|
|
|
|
|
|
if(player && player->Play(file)) {
|
|
|
|
_player = player;
|
|
|
|
|
|
|
|
MessageManager::DisplayMessage("Movies", "MoviePlaying", file.GetFileName());
|
2017-04-24 18:28:50 -04:00
|
|
|
}
|
2017-04-18 22:39:45 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MovieManager::Stop()
|
|
|
|
{
|
2017-11-19 23:08:23 -05:00
|
|
|
_player.reset();
|
|
|
|
|
|
|
|
if(_recorder) {
|
|
|
|
_recorder.reset();
|
2017-04-22 13:19:21 -04:00
|
|
|
}
|
2017-04-18 22:39:45 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
bool MovieManager::Playing()
|
|
|
|
{
|
2017-11-19 23:08:23 -05:00
|
|
|
shared_ptr<IMovie> player = _player;
|
|
|
|
return player && player->IsPlaying();
|
2017-04-18 22:39:45 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
bool MovieManager::Recording()
|
|
|
|
{
|
2017-11-19 23:08:23 -05:00
|
|
|
return _recorder != nullptr;
|
2017-04-18 22:39:45 -04:00
|
|
|
}
|