mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-18 11:19:10 +00:00
Choose tracks based on language, if possible
This commit is contained in:
@ -53,15 +53,16 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
# define WEBM_CODECID_OPUS "A_OPUS"
|
||||
#endif
|
||||
|
||||
#include "hsResMgr.h"
|
||||
#include "hsTimer.h"
|
||||
#include "plAudio/plWin32VideoSound.h"
|
||||
#include "plGImage/plMipmap.h"
|
||||
#include "pnKeyedObject/plUoid.h"
|
||||
#include "plPipeline/hsGDeviceRef.h"
|
||||
#include "plPipeline/plPlates.h"
|
||||
#include "plPlanarImage.h"
|
||||
#include "hsResMgr.h"
|
||||
#include "hsTimer.h"
|
||||
#include "plAudio/plWin32VideoSound.h"
|
||||
#include "plResMgr/plLocalization.h"
|
||||
|
||||
#include "plPlanarImage.h"
|
||||
#include "webm/mkvreader.hpp"
|
||||
#include "webm/mkvparser.hpp"
|
||||
|
||||
@ -224,8 +225,7 @@ bool plMoviePlayer::IOpenMovie()
|
||||
SAFE_OP(seg->Load(), "load segment from webm");
|
||||
fSegment.reset(seg);
|
||||
|
||||
// TODO: Figure out video and audio based on current language
|
||||
// For now... just take the first one.
|
||||
// Use first tracks unless another one matches the current game language
|
||||
const mkvparser::Tracks* tracks = fSegment->GetTracks();
|
||||
for (uint32_t i = 0; i < tracks->GetTracksCount(); ++i)
|
||||
{
|
||||
@ -237,13 +237,13 @@ bool plMoviePlayer::IOpenMovie()
|
||||
{
|
||||
case mkvparser::Track::kAudio:
|
||||
{
|
||||
if (!fAudioTrack)
|
||||
if (!fAudioTrack || ICheckLanguage(track))
|
||||
fAudioTrack.reset(new TrackMgr(track));
|
||||
break;
|
||||
}
|
||||
case mkvparser::Track::kVideo:
|
||||
{
|
||||
if (!fVideoTrack)
|
||||
if (!fVideoTrack || ICheckLanguage(track))
|
||||
fVideoTrack.reset(new TrackMgr(track));
|
||||
break;
|
||||
}
|
||||
@ -255,6 +255,14 @@ bool plMoviePlayer::IOpenMovie()
|
||||
#endif
|
||||
}
|
||||
|
||||
bool plMoviePlayer::ICheckLanguage(const mkvparser::Track* track)
|
||||
{
|
||||
auto codes = plLocalization::GetLanguageCodes(plLocalization::GetLanguage());
|
||||
if (codes.find(track->GetLanguage()) != codes.end())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void plMoviePlayer::IProcessVideoFrame(const std::vector<blkbuf_t>& frames)
|
||||
{
|
||||
#ifdef VIDEO_AVAILABLE
|
||||
|
@ -87,6 +87,7 @@ protected:
|
||||
bool fPaused;
|
||||
|
||||
bool IOpenMovie();
|
||||
bool ICheckLanguage(const mkvparser::Track* track);
|
||||
void IProcessVideoFrame(const std::vector<blkbuf_t>& frames);
|
||||
void IProcessAudioFrame(const std::vector<blkbuf_t>& frames);
|
||||
|
||||
|
@ -56,6 +56,17 @@ const char* plLocalization::fLangTags[] =
|
||||
};
|
||||
const int kLangTagLen = 4;
|
||||
|
||||
// ISO 639, e.g. used in video tracks
|
||||
std::set<plString> plLocalization::fLangCodes[] =
|
||||
{
|
||||
{"eng", "en"},
|
||||
{"fre", "fra", "fr"},
|
||||
{"ger", "deu", "de"},
|
||||
{"spa", "es"},
|
||||
{"ita", "it"},
|
||||
{"jpn", "ja"}
|
||||
};
|
||||
|
||||
const char* plLocalization::fLangNames[] =
|
||||
{
|
||||
"English", // kEnglish
|
||||
|
@ -44,6 +44,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <set>
|
||||
#include "plFileSystem.h"
|
||||
|
||||
class plLocalization
|
||||
@ -78,6 +79,7 @@ public:
|
||||
protected:
|
||||
static Language fLanguage;
|
||||
static const char* fLangTags[kNumLanguages];
|
||||
static std::set<plString> fLangCodes[kNumLanguages];
|
||||
static const char* fLangNames[kNumLanguages];
|
||||
static bool fUsesUnicode[kNumLanguages];
|
||||
static encodingTypes fUnicodeEncoding[kNumLanguages];
|
||||
@ -89,6 +91,7 @@ public:
|
||||
static Language GetLanguage() { return fLanguage; }
|
||||
|
||||
static const char* GetLanguageName(Language lang) { return fLangNames[lang]; }
|
||||
static std::set<plString> GetLanguageCodes(Language lang) { return fLangCodes[lang]; }
|
||||
|
||||
static bool UsingUnicode() { return fUsesUnicode[fLanguage]; }
|
||||
static encodingTypes UnicodeEncoding() { return fUnicodeEncoding[fLanguage]; }
|
||||
|
Reference in New Issue
Block a user