mirror of https://github.com/odrling/Aegisub
Switch to using csri_open_mem
This commit is contained in:
parent
af20d31699
commit
f7f6c2b90b
|
@ -36,15 +36,11 @@
|
||||||
#include "subtitles_provider_csri.h"
|
#include "subtitles_provider_csri.h"
|
||||||
|
|
||||||
#include "include/aegisub/subtitles_provider.h"
|
#include "include/aegisub/subtitles_provider.h"
|
||||||
#include "options.h"
|
|
||||||
#include "subtitle_format_ass.h"
|
#include "subtitle_format_ass.h"
|
||||||
#include "video_frame.h"
|
#include "video_frame.h"
|
||||||
|
|
||||||
#include <libaegisub/file_mapping.h>
|
|
||||||
#include <libaegisub/path.h>
|
|
||||||
#include <libaegisub/make_unique.h>
|
#include <libaegisub/make_unique.h>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/interprocess/streams/vectorstream.hpp>
|
#include <boost/interprocess/streams/vectorstream.hpp>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
|
@ -68,8 +64,6 @@ class CSRISubtitlesProvider final : public SubtitlesProvider {
|
||||||
csri_rend *renderer = nullptr;
|
csri_rend *renderer = nullptr;
|
||||||
|
|
||||||
boost::interprocess::basic_ovectorstream<std::vector<char>> ostr;
|
boost::interprocess::basic_ovectorstream<std::vector<char>> ostr;
|
||||||
/// Name of the file passed to renderers with can_open_mem false
|
|
||||||
agi::fs::path tempfile;
|
|
||||||
public:
|
public:
|
||||||
CSRISubtitlesProvider(std::string subType);
|
CSRISubtitlesProvider(std::string subType);
|
||||||
|
|
||||||
|
@ -96,14 +90,8 @@ void CSRISubtitlesProvider::LoadSubtitles(AssFile *subs, int time) {
|
||||||
ostr.rdbuf()->clear();
|
ostr.rdbuf()->clear();
|
||||||
AssSubtitleFormat::WriteToStream(subs, ostr, time);
|
AssSubtitleFormat::WriteToStream(subs, ostr, time);
|
||||||
|
|
||||||
if (tempfile.empty())
|
|
||||||
tempfile = unique_path(config::path->Decode("?temp/csri-%%%%-%%%%-%%%%-%%%%.ass"));
|
|
||||||
auto size = ostr.vector().size();
|
|
||||||
agi::temp_file_mapping file(tempfile, size);
|
|
||||||
memcpy(file.write(0, size), &ostr.vector()[0], size);
|
|
||||||
|
|
||||||
std::lock_guard<std::mutex> lock(csri_mutex);
|
std::lock_guard<std::mutex> lock(csri_mutex);
|
||||||
instance.reset(csri_open_file(renderer, tempfile.string().c_str(), nullptr));
|
instance.reset(csri_open_mem(renderer, ostr.vector().data(), ostr.vector().size(), nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSRISubtitlesProvider::DrawSubtitles(VideoFrame &dst, double time) {
|
void CSRISubtitlesProvider::DrawSubtitles(VideoFrame &dst, double time) {
|
||||||
|
|
Loading…
Reference in New Issue