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

#include <MediaPlayer.h>

+ Граф связей класса MPlayer:

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

 MPlayer ()
 
virtual ~MPlayer ()
 
void Initialize ()
 
void Unload ()
 
void PlayFullscreenMovie (const std::string &pMovieName)
 
void OpenHouseMovie (const std::string &pMovieName, bool bLoop)
 
void HouseMovieLoop ()
 
bool IsMoviePlaying () const
 
bool StopMovie ()
 

Защищенные члены

FILE * LoadMovie (const std::string &video_name, size_t &size, size_t &offset)
 

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

VideoListmight_list
 
VideoListmagic_list
 
std::string sInHouseMovie
 

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

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

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

◆ MPlayer()

MPlayer::MPlayer ( )

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

846  {
847  static int libavcodec_initialized = false;
848 
849  if (!libavcodec_initialized) {
851  // Register all available file formats and codecs
852 #ifndef FF_API_NEXT
854  av_register_all();
855 #endif
856  libavcodec_initialized = true;
857  }
858 
859  pMovie_Track = nullptr;
860 
861  if (!provider) {
863  // logger->Warning(L"allocation dynamic memory for provider\n");
864  provider->Initialize();
865  }
866 }

Перекрестные ссылки av_log_set_callback(), av_logger(), av_register_all(), avcodec_register_all(), OpenALSoundProvider::Initialize(), pMovie_Track и provider.

+ Граф вызовов:

◆ ~MPlayer()

MPlayer::~MPlayer ( )
virtual

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

868  {
869  if (might_list != nullptr) {
870  delete might_list;
871  might_list = nullptr;
872  }
873 
874  if (magic_list != nullptr) {
875  delete magic_list;
876  magic_list = nullptr;
877  }
878 
879  delete provider;
880 }

Перекрестные ссылки magic_list, might_list и provider.

Методы

◆ Initialize()

void MPlayer::Initialize ( )

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

623  {
624  might_list = new VideoList();
625  std::string filename = MakeDataPath("anims\\might7.vid");
626  might_list->Initialize(filename);
627 
628  magic_list = new VideoList();
629  filename = MakeDataPath("anims\\magic7.vid");
630  magic_list->Initialize(filename);
631 }

Перекрестные ссылки VideoList::Initialize(), magic_list, MakeDataPath() и might_list.

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

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

◆ Unload()

void MPlayer::Unload ( )

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

826  {
827  if (pMovie_Track) {
828  pMovie_Track->Stop();
829  }
830  pMovie_Track = nullptr;
831  if (!bGameoverLoop) {
833  }
834  pEventTimer->Resume();
835 }

Перекрестные ссылки bGameoverLoop, AudioPlayer::MusicResume(), pAudioPlayer, pEventTimer, pMovie_Track и Timer::Resume().

Используется в Application::Game::EventLoop(), EventProcessor(), Application::Game::GameLoop() и TavernDialog().

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

◆ PlayFullscreenMovie()

void MPlayer::PlayFullscreenMovie ( const std::string pMovieName)

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

705  {
706  if (engine->config->NoVideo()) {
707  return;
708  }
709 
710  size_t size = 0;
711  size_t offset = 0;
712  FILE *file = LoadMovie(pFilename, size, offset);
713  if (file == nullptr) {
714  return;
715  }
716 
717  std::shared_ptr<Movie> pMovie = std::make_shared<Movie>();
718  if (!pMovie->LoadFromLOD(file, size, offset)) {
719  return;
720  }
721  pMovie_Track = std::dynamic_pointer_cast<IMovie>(pMovie);
722 
723  pEventTimer->Pause();
725  OS_ShowCursor(false);
727 
728  pMovie_Track->Play();
729 
730  Rect rect;
731  rect.x = 0;
732  rect.y = 0;
733  rect.z = rect.x + 640;
734  rect.w = rect.y + 480;
735 
736  // create texture
737  Texture *tex = render->CreateTexture_Blank(pMovie_Track->GetWidth(), pMovie_Track->GetHeight(), IMAGE_FORMAT_A8R8G8B8);
738 
739  while (true) {
740  render->BeginScene();
741 
742  window->PeekMessageLoop();
743 
744  // if (dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE) continue;
745  // add pausing of movie when game lost focus
746 
747  OS_Sleep(2);
748 
749  PMemBuffer buffer = pMovie_Track->GetFrame();
750  if (!buffer) {
751  break;
752  }
753 
754  // update pixels from buffer
756  unsigned int num_pixels = tex->GetWidth() * tex->GetHeight();
757  unsigned int num_pixels_bytes = num_pixels * IMAGE_FORMAT_BytesPerPixel(IMAGE_FORMAT_A8R8G8B8);
758  memcpy(pix, buffer->GetData(), num_pixels_bytes);
759 
760  // update texture
761  render->Update_Texture(tex);
762  render->DrawImage(tex, rect);
763 
764  render->EndScene();
765  render->Present();
766  }
767 
768  // release texture
769  tex->Release();
770 
772  pMovie_Track = nullptr;
773 
774  OS_ShowCursor(true);
775 }

Перекрестные ссылки current_screen_type, engine, Image::GetHeight(), Image::GetPixels(), Image::GetWidth(), IMAGE_FORMAT_A8R8G8B8, IMAGE_FORMAT_BytesPerPixel(), LoadMovie(), AudioPlayer::MusicPause(), OS_ShowCursor(), OS_Sleep(), pAudioPlayer, Timer::Pause(), pEventTimer, pMovie_Track, Image::Release(), render, SCREEN_GAME, SCREEN_VIDEO, Rect::w, Rect::x, Rect::y и Rect::z.

Используется в Application::Game::GameLoop(), Application::Game::Loop() и ShowMM7IntroVideo_and_LoadingScreen().

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

◆ OpenHouseMovie()

void MPlayer::OpenHouseMovie ( const std::string pMovieName,
bool  bLoop 
)

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

633  {
634  if (IsMoviePlaying()) {
635  return;
636  }
637 
638  pEventTimer->Pause();
640  size_t size = 0;
641  size_t offset = 0;
642  FILE *file = LoadMovie(pMovieName, size, offset);
643  if (file == nullptr) {
644  return;
645  }
646 
647  std::shared_ptr<Movie> pMovie = std::make_shared<Movie>();
648  pMovie->LoadFromLOD(file, size, offset);
649  pMovie_Track = std::dynamic_pointer_cast<IMovie>(pMovie);
650  sInHouseMovie = pMovieName;
651 }

Перекрестные ссылки IsMoviePlaying(), LoadMovie(), AudioPlayer::MusicPause(), pAudioPlayer, Timer::Pause(), pEventTimer, pMovie_Track и sInHouseMovie.

Используется в EnterHouse() и GUIWindow_Transition::GUIWindow_Transition().

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

◆ HouseMovieLoop()

void MPlayer::HouseMovieLoop ( )

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

653  {
654  if (!pMovie_Track || engine->config->NoVideo()) {
655  return;
656  }
657 
658  if (!pMovie_Track->IsPlaing()) {
659  pMovie_Track->Play(false);
660  }
661 
662  render->BeginScene();
663 
664  static Texture *tex;
665  if (!tex) {
666  tex = render->CreateTexture_Blank(pMovie_Track->GetWidth(), pMovie_Track->GetHeight(), IMAGE_FORMAT_A8R8G8B8);
667  }
668 
669  PMemBuffer buffer = pMovie_Track->GetFrame();
670  if (buffer) {
671  Rect rect;
672  rect.x = 8;
673  rect.y = 8;
674  rect.z = rect.x + game_viewport_width;
675  rect.w = rect.y + game_viewport_height;
676 
677  // update pixels from buffer
679  unsigned int num_pixels = tex->GetWidth() * tex->GetHeight();
680  unsigned int num_pixels_bytes = num_pixels * IMAGE_FORMAT_BytesPerPixel(IMAGE_FORMAT_A8R8G8B8);
681  memcpy(pix, buffer->GetData(), num_pixels_bytes);
682 
683  // update texture
684  render->Update_Texture(tex);
685  render->DrawImage(tex, rect);
686 
687  } else {
688  pMovie_Track = nullptr;
689  size_t size = 0;
690  size_t offset = 0;
691  FILE *file = LoadMovie(sInHouseMovie, size, offset);
692  if (file != nullptr) {
693  std::shared_ptr<Movie> pMovie = std::make_shared<Movie>();
694  pMovie->LoadFromLOD(file, size, offset);
695  pMovie_Track = std::dynamic_pointer_cast<IMovie>(pMovie);
696  pMovie_Track->Play();
697  }
698  // callback to prevent skipped frame draw
699  HouseMovieLoop();
700  }
701 
702  render->EndScene();
703 }

Перекрестные ссылки engine, game_viewport_height, game_viewport_width, Image::GetHeight(), Image::GetPixels(), Image::GetWidth(), IMAGE_FORMAT_A8R8G8B8, IMAGE_FORMAT_BytesPerPixel(), LoadMovie(), pMovie_Track, render, sInHouseMovie, Rect::w, Rect::x, Rect::y и Rect::z.

Используется в Application::Game::GameLoop().

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

◆ IsMoviePlaying()

bool MPlayer::IsMoviePlaying ( ) const

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

777  {
778  if (!pMovie_Track) {
779  return false;
780  }
781 
782  return pMovie_Track->IsPlaing();
783 }

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

Используется в OpenHouseMovie().

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

◆ StopMovie()

bool MPlayer::StopMovie ( )

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

785  {
786  if (pMovie_Track) {
787  return pMovie_Track->Stop();
788  }
789  return false;
790 }

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

Используется в Application::GameWindowHandler::OnMouseLeftClick(), Application::GameWindowHandler::OnMouseRightClick() и Application::GameWindowHandler::OnVkDown().

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

◆ LoadMovie()

FILE * MPlayer::LoadMovie ( const std::string video_name,
size_t size,
size_t offset 
)
protected

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

793  {
794  std::string pVideoNameBik = video_name + ".bik";
795  std::transform(pVideoNameBik.begin(), pVideoNameBik.end(),
796  pVideoNameBik.begin(), ::tolower);
797  std::string pVideoNameSmk = video_name + ".smk";
798  std::transform(pVideoNameSmk.begin(), pVideoNameSmk.end(),
799  pVideoNameSmk.begin(), ::tolower);
800 
801  FILE *file = nullptr;
802  offset = 0;
803  size = 0;
804 
805  if (might_list != nullptr) {
806  if (might_list->find(pVideoNameBik, file, offset, size)) {
807  return file;
808  }
809  if (might_list->find(pVideoNameSmk, file, offset, size)) {
810  return file;
811  }
812  }
813 
814  if (magic_list != nullptr) {
815  if (magic_list->find(pVideoNameBik, file, offset, size)) {
816  return file;
817  }
818  if (magic_list->find(pVideoNameSmk, file, offset, size)) {
819  return file;
820  }
821  }
822 
823  return nullptr;
824 }

Перекрестные ссылки VideoList::find(), magic_list и might_list.

Используется в HouseMovieLoop(), OpenHouseMovie() и PlayFullscreenMovie().

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

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

◆ might_list

VideoList* MPlayer::might_list
protected

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

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

◆ magic_list

VideoList* MPlayer::magic_list
protected

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

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

◆ sInHouseMovie

std::string MPlayer::sInHouseMovie
protected

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

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


Объявления и описания членов классов находятся в файлах:
MPlayer::sInHouseMovie
std::string sInHouseMovie
Definition: MediaPlayer.h:36
Image::GetHeight
unsigned int GetHeight()
Definition: Image.cpp:230
OS_ShowCursor
void OS_ShowCursor(bool show)
Definition: Lin.cpp:28
Rect::x
int x
Definition: Rect.h:4
Timer::Resume
void Resume()
Definition: Time.cpp:27
Rect::w
int w
Definition: Rect.h:7
avcodec_register_all
attribute_deprecated void avcodec_register_all(void)
OpenALSoundProvider::Initialize
bool Initialize()
Definition: OpenALSoundProvider.cpp:50
engine
std::shared_ptr< Engine > engine
Definition: Engine.cpp:130
AudioPlayer::MusicResume
void MusicResume()
Definition: AudioPlayer.cpp:157
Rect::z
int z
Definition: Rect.h:6
Texture
Definition: Texture.h:4
game_viewport_width
unsigned int game_viewport_width
Definition: mm7_data.cpp:194
IMAGE_FORMAT_BytesPerPixel
unsigned int IMAGE_FORMAT_BytesPerPixel(IMAGE_FORMAT format)
Definition: Image.cpp:46
pMovie_Track
PMovie pMovie_Track
Definition: MediaPlayer.cpp:44
VideoList
Definition: MediaPlayer.cpp:530
MPlayer::might_list
VideoList * might_list
Definition: MediaPlayer.h:34
game_viewport_height
unsigned int game_viewport_height
Definition: mm7_data.cpp:195
VideoList::find
bool find(const std::string &video_name, FILE *&file_, size_t &offset, size_t &size)
Definition: MediaPlayer.cpp:599
current_screen_type
enum CURRENT_SCREEN current_screen_type
Definition: GUIWindow.cpp:83
av_register_all
attribute_deprecated void av_register_all(void)
VideoList::Initialize
void Initialize(const std::string &file_path)
Definition: MediaPlayer.cpp:555
IMAGE_FORMAT_A8R8G8B8
@ IMAGE_FORMAT_A8R8G8B8
Definition: Image.h:7
buffer
EGLContext EGLenum EGLClientBuffer buffer
Definition: SDL_egl.h:952
MPlayer::LoadMovie
FILE * LoadMovie(const std::string &video_name, size_t &size, size_t &offset)
Definition: MediaPlayer.cpp:792
Image::GetWidth
unsigned int GetWidth()
Definition: Image.cpp:217
OS_Sleep
void OS_Sleep(int ms)
Definition: Lin.cpp:36
window
EGLSurface EGLNativeWindowType * window
Definition: SDL_egl.h:1580
av_log_set_callback
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Timer::Pause
void Pause()
Definition: Time.cpp:19
Rect
Definition: Rect.h:3
MPlayer::HouseMovieLoop
void HouseMovieLoop()
Definition: MediaPlayer.cpp:653
MPlayer::magic_list
VideoList * magic_list
Definition: MediaPlayer.h:35
provider
OpenALSoundProvider * provider
Definition: MediaPlayer.cpp:41
CURRENT_SCREEN::SCREEN_GAME
@ SCREEN_GAME
transform
GLuint GLenum GLenum transform
Definition: SDL_opengl_glext.h:9999
Rect::y
int y
Definition: Rect.h:5
MakeDataPath
std::string MakeDataPath(const char *file_rel_path)
Definition: Engine.cpp:126
bGameoverLoop
int bGameoverLoop
Definition: mm7_data.cpp:785
OpenALSoundProvider
Definition: OpenALSoundProvider.h:12
Image::GetPixels
const void * GetPixels(IMAGE_FORMAT format)
Definition: Image.cpp:270
pAudioPlayer
AudioPlayer * pAudioPlayer
Definition: AudioPlayer.cpp:20
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
AudioPlayer::MusicPause
void MusicPause()
Definition: AudioPlayer.cpp:149
MPlayer::IsMoviePlaying
bool IsMoviePlaying() const
Definition: MediaPlayer.cpp:777
PMemBuffer
std::shared_ptr< IMemBuffer > PMemBuffer
Definition: MemBuffer.h:13
uint32_t
unsigned __int32 uint32_t
Definition: SDL_config.h:39
pEventTimer
Timer * pEventTimer
Definition: Time.cpp:8
Image::Release
bool Release()
Definition: Image.cpp:335
av_logger
void av_logger(void *ptr, int level, const char *format, va_list args)
Definition: MediaPlayer.cpp:839
CURRENT_SCREEN::SCREEN_VIDEO
@ SCREEN_VIDEO
render
std::shared_ptr< IRender > render
Definition: RenderOpenGL.cpp:52