World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Класс VideoList

Классы

struct  MovieHeader
 
struct  Node
 

Открытые члены

 VideoList ()
 
virtual ~VideoList ()
 
void Initialize (const std::string &file_path)
 
bool find (const std::string &video_name, FILE *&file_, size_t &offset, size_t &size)
 

Защищенные типы

typedef std::map< std::string, NodeNodes
 

Защищенные данные

Nodes nodes
 
FILE * file
 

Подробное описание

См. определение в файле MediaPlayer.cpp строка 530

Определения типов

◆ Nodes

typedef std::map<std::string, Node> VideoList::Nodes
protected

См. определение в файле MediaPlayer.cpp строка 543

Конструктор(ы)

◆ VideoList()

VideoList::VideoList ( )
inline

См. определение в файле MediaPlayer.cpp строка 546

546 { file = nullptr; }

Перекрестные ссылки file.

◆ ~VideoList()

virtual VideoList::~VideoList ( )
inlinevirtual

См. определение в файле MediaPlayer.cpp строка 548

548  {
549  if (file != nullptr) {
550  fclose(file);
551  file = nullptr;
552  }
553  }

Перекрестные ссылки file.

Методы

◆ Initialize()

void VideoList::Initialize ( const std::string file_path)
inline

См. определение в файле MediaPlayer.cpp строка 555

555  {
556  static_assert(sizeof(MovieHeader) == 44, "Wrong type size");
557 
558  if (engine->config->NoVideo()) {
559  return;
560  }
561 
562  file = fopen(file_path.c_str(), "rb");
563  if (file == nullptr) {
564  logger->Warning(L"Can't open video file: %S", file_path.c_str());
565  return;
566  }
567  fseek(file, 0, SEEK_END);
568  size_t file_size = ftell(file);
569  fseek(file, 0, SEEK_SET);
570 
571  uint32_t uNumVideoHeaders = 0;
572  fread(&uNumVideoHeaders, 1, 4, file);
573 
574  std::vector<MovieHeader> headers;
575  headers.resize(uNumVideoHeaders);
576  if (fread(&headers[0], sizeof(MovieHeader), uNumVideoHeaders, file) !=
577  uNumVideoHeaders) {
578  return;
579  }
580  std::sort(headers.begin(), headers.end(),
581  [](MovieHeader &a, MovieHeader &b) {
582  return a.uFileOffset < b.uFileOffset;
583  });
584 
585  for (size_t i = 0; i < headers.size(); i++) {
586  std::string name = headers[i].pVideoName;
587  std::transform(name.begin(), name.end(), name.begin(), ::tolower);
588  Node node;
589  node.offset = headers[i].uFileOffset;
590  if (i < headers.size() - 1) {
591  node.size = headers[i + 1].uFileOffset - headers[i].uFileOffset;
592  } else {
593  node.size = file_size - headers[i].uFileOffset;
594  }
595  nodes[name] = node;
596  }
597  }

Перекрестные ссылки engine, file, logger, nodes, VideoList::Node::offset, VideoList::Node::size и Log::Warning().

Используется в MPlayer::Initialize().

+ Граф вызовов:
+ Граф вызова функции:

◆ find()

bool VideoList::find ( const std::string video_name,
FILE *&  file_,
size_t offset,
size_t size 
)
inline

См. определение в файле MediaPlayer.cpp строка 599

600  {
601  file_ = nullptr;
602  offset = 0;
603  size = 0;
604 
605  std::string name = video_name;
606  std::transform(name.begin(), name.end(), name.begin(), ::tolower);
607  Nodes::iterator it = nodes.find(name);
608  if (it != nodes.end()) {
609  file_ = file;
610  offset = it->second.offset;
611  size = it->second.size;
612  return true;
613  }
614 
615  return false;
616  }

Перекрестные ссылки file и nodes.

Используется в MPlayer::LoadMovie().

+ Граф вызова функции:

Данные класса

◆ nodes

Nodes VideoList::nodes
protected

См. определение в файле MediaPlayer.cpp строка 619

Используется в find() и Initialize().

◆ file

FILE* VideoList::file
protected

См. определение в файле MediaPlayer.cpp строка 620

Используется в find(), Initialize(), VideoList() и ~VideoList().


Объявления и описания членов класса находятся в файле:
engine
std::shared_ptr< Engine > engine
Definition: Engine.cpp:130
Log::Warning
void Warning(const wchar_t *pFormat,...)
Definition: Log.cpp:28
VideoList::file
FILE * file
Definition: MediaPlayer.cpp:620
transform
GLuint GLenum GLenum transform
Definition: SDL_opengl_glext.h:9999
b
GLboolean GLboolean GLboolean b
Definition: SDL_opengl_glext.h:1112
name
EGLImageKHR EGLint * name
Definition: SDL_egl.h:1497
a
GLboolean GLboolean GLboolean GLboolean a
Definition: SDL_opengl_glext.h:1112
string
GLsizei const GLchar *const * string
Definition: SDL_opengl_glext.h:691
size
GLsizeiptr size
Definition: SDL_opengl_glext.h:540
offset
GLintptr offset
Definition: SDL_opengl_glext.h:541
logger
Log * logger
Definition: IocContainer.cpp:47
uint32_t
unsigned __int32 uint32_t
Definition: SDL_config.h:39
VideoList::nodes
Nodes nodes
Definition: MediaPlayer.cpp:619