diff --git a/src/DivaGL/DivaGL.vcxproj b/src/DivaGL/DivaGL.vcxproj
index 07a5545..47a7b9f 100644
--- a/src/DivaGL/DivaGL.vcxproj
+++ b/src/DivaGL/DivaGL.vcxproj
@@ -152,6 +152,7 @@
+
diff --git a/src/DivaGL/movie_play_lib/movie_play_lib.cpp b/src/DivaGL/movie_play_lib/movie_play_lib.cpp
new file mode 100644
index 0000000..5ec794f
--- /dev/null
+++ b/src/DivaGL/movie_play_lib/movie_play_lib.cpp
@@ -0,0 +1,11 @@
+/*
+ by korenkonder
+ GitHub/GitLab: korenkonder
+*/
+
+#include "movie_play_lib.hpp"
+
+namespace MoviePlayLib {
+ void(FASTCALL* trace)(const wchar_t* fmt, ...)
+ = (void(FASTCALL*)(const wchar_t* fmt, ...))0x00000001404241F0;
+}
diff --git a/src/DivaGL/movie_play_lib/movie_play_lib.hpp b/src/DivaGL/movie_play_lib/movie_play_lib.hpp
index e9ca47f..3fbeb64 100644
--- a/src/DivaGL/movie_play_lib/movie_play_lib.hpp
+++ b/src/DivaGL/movie_play_lib/movie_play_lib.hpp
@@ -17,22 +17,22 @@
struct texture;
-#define MOVIE_PLAY_LIB_PRINT_FUNC_BEGIN MoviePlayLib::PrintDebug(L">%S(%p)\n", __FUNCTION__, this)
-#define MOVIE_PLAY_LIB_PRINT_FUNC_END MoviePlayLib::PrintDebug(L"<%S(%p)\n", __FUNCTION__, this)
+#define MOVIE_PLAY_LIB_TRACE_BEGIN MoviePlayLib::trace(L">%S(%p)\n", __FUNCTION__, this)
+#define MOVIE_PLAY_LIB_TRACE_END MoviePlayLib::trace(L"<%S(%p)\n", __FUNCTION__, this)
namespace MoviePlayLib {
- enum class State {
- None = 0x0,
- Init,
- Open,
- Wait,
- Pause,
- Play,
- Stop,
- Max,
+ enum Status {
+ Status_NotInitialized = 0,
+ Status_Initializing,
+ Status_Initialized,
+ Status_Starting,
+ Status_Started,
+ Status_Stopping,
+ Status_Stopped,
+ Status_Shutdown,
};
- struct AudioParams {
+ struct AudioVolumes {
float_t spk_l_volume;
float_t spk_r_volume;
float_t field_8;
@@ -41,44 +41,44 @@ namespace MoviePlayLib {
float_t hph_r_volume;
};
- struct MediaStats {
+ struct PlayerStat {
double_t duration;
- bool audio_present;
- bool video_present;
- uint32_t width;
- uint32_t height;
- uint32_t frame_size_width;
- uint32_t frame_size_height;
- float_t frame_rate;
- float_t pixel_aspect_ratio;
- uint32_t sample_rate;
+ bool enable_audio;
+ bool enable_video;
+ uint32_t present_width;
+ uint32_t present_height;
+ uint32_t raw_width;
+ uint32_t raw_height;
+ float_t framerate;
+ float_t pixelaspect;
+ uint32_t sample_freq;
uint32_t channels;
- HRESULT curr_error;
- IUnknown* curr_object;
- uint32_t audio_mf_samples_wait_count;
- uint32_t video_mf_samples_wait_count;
- uint32_t audio_mf_samples_count;
- uint32_t video_mf_samples_count;
- double_t audio_sample_time;
- double_t video_sample_time;
- double_t audio_process_sample_time;
- double_t video_process_sample_time;
- double_t audio_process_output_time;
- double_t video_process_output_time;
- double_t video_process_blt_time;
- double_t audio_time_advance;
- double_t video_time_advance;
- double_t audio_output_time;
- double_t video_output_time;
+ HRESULT error;
+ void* error_object;
+ uint32_t source_audio_queue_count;
+ uint32_t source_video_queue_count;
+ uint32_t decode_audio_queue_count;
+ uint32_t decode_video_queue_count;
+ double_t source_audio_sample_time;
+ double_t source_video_sample_time;
+ double_t decode_audio_sample_time;
+ double_t decode_video_sample_time;
+ double_t decode_audio_elapse;
+ double_t decode_video_elapse;
+ double_t decode_video_conv_elapse;
+ double_t schedule_audio_drift;
+ double_t schedule_video_drift;
+ double_t audio_send_elapse;
+ double_t video_lock_elapse;
};
- struct VideoParams {
- int32_t width;
- int32_t height;
- int32_t frame_size_width;
- int32_t frame_size_height;
- float_t frame_rate;
- float_t pixel_aspect_ratio;
+ struct VideoInfo {
+ int32_t present_width;
+ int32_t present_height;
+ int32_t raw_width;
+ int32_t raw_height;
+ float_t framerate;
+ float_t pixelaspect;
};
class DECLSPEC_UUID("BE82EF2E-4B9F-4470-9C6F-F78E002FCDEF")
@@ -88,28 +88,28 @@ namespace MoviePlayLib {
virtual HRESULT Close() = 0;
virtual HRESULT Flush() = 0;
virtual HRESULT Open() = 0;
- virtual HRESULT SetMFSample(IMFSample* mf_sample) = 0;
+ virtual HRESULT ProcessSample(IMFSample * pSample) = 0;
};
class DECLSPEC_UUID("4A5C73B9-FBFE-4A00-A298-FD3FAB0C5AF1")
IAudioRenderer : public IMediaRenderer {
public:
- virtual HRESULT GetParams(AudioParams* value) = 0;
- virtual HRESULT SetParams(const AudioParams* value) = 0;
+ virtual HRESULT GetVolumes(AudioVolumes * out_volumes) = 0;
+ virtual HRESULT SetVolumes(const AudioVolumes * in_volumes) = 0;
};
class DECLSPEC_UUID("D19AC022-EA49-4B6F-9D51-673C1C15ECE8")
IGLDXInteropTexture : public IUnknown {
public:
- virtual texture* GetTexture() = 0;
+ virtual texture* GetGLTexture() = 0;
};
class DECLSPEC_UUID("D4FA34F6-D03C-4F21-8591-6858161CA5D7")
IMediaClock : public IUnknown {
public:
- virtual HRESULT TimeEnd() = 0;
- virtual HRESULT TimeBegin() = 0;
- virtual HRESULT SetTime(INT64 value) = 0;
+ virtual HRESULT Stop() = 0;
+ virtual HRESULT Start() = 0;
+ virtual HRESULT SetTime(INT64 hnsTime) = 0;
virtual INT64 GetTime() = 0;
};
@@ -120,14 +120,14 @@ namespace MoviePlayLib {
virtual HRESULT Close() = 0;
virtual HRESULT Flush() = 0;
virtual HRESULT Open() = 0;
- virtual HRESULT GetMFMediaType(IMFMediaType** mf_media_type) = 0;
- virtual void SendMFSample(IMFSample* mf_sample) = 0;
- virtual BOOL SignalEvent() = 0;
- virtual BOOL CanShutdown() = 0;
- virtual UINT32 GetMFSamplesWaitCount() = 0;
- virtual UINT32 GetMFSamplesCount() = 0;
- virtual INT64 GetSampleTime() = 0;
- virtual void GetMFSample(IMFSample*& mf_sample) = 0;
+ virtual HRESULT GetMediaType(IMFMediaType * *pType) = 0;
+ virtual void PushSample(IMFSample * pSample) = 0;
+ virtual BOOL RequestSample() = 0;
+ virtual BOOL IsEndOfStream() = 0;
+ virtual UINT32 GetInputQueueCount() = 0;
+ virtual UINT32 GetOutputQueueCount() = 0;
+ virtual INT64 PeekSampleTime() = 0;
+ virtual void GetSample(IMFSample * &ppOutSample) = 0;
};
class DECLSPEC_UUID("0D41578B-4514-407D-B654-870BCCDC630A")
@@ -135,32 +135,34 @@ namespace MoviePlayLib {
public:
virtual HRESULT Shutdown() = 0;
virtual HRESULT Stop() = 0;
- virtual HRESULT Start(INT64 time) = 0;
+ virtual HRESULT Start(INT64 hnsTime) = 0;
virtual UINT64 GetDuration() = 0;
- virtual HRESULT GetAudioMFMediaType(IMFMediaType** ptr) = 0;
- virtual HRESULT GetVideoMFMediaType(IMFMediaType** ptr) = 0;
- virtual HRESULT SetAudioMediaTransform(IMediaTransform* media_transform) = 0;
- virtual HRESULT SetVideoMediaTransform(IMediaTransform* media_transform) = 0;
+ virtual HRESULT GetAudioMediaType(IMFMediaType * *ppType) = 0;
+ virtual HRESULT GetVideoMediaType(IMFMediaType * *ppType) = 0;
+ virtual HRESULT SetAudioDecoder(IMediaTransform * pDecoder) = 0;
+ virtual HRESULT SetVideoDecoder(IMediaTransform * pDecoder) = 0;
};
class DECLSPEC_UUID("12AC5FCE-C816-47FE-84B4-4915D6B42FA7")
IPlayer : public IUnknown {
public:
- virtual HRESULT Open(const wchar_t* path) = 0;
- virtual HRESULT Open(const char* path) = 0;
+ virtual HRESULT Open(const wchar_t* filePath) = 0;
+ virtual HRESULT Open(const char* filePath) = 0;
virtual HRESULT Close() = 0;
- virtual HRESULT SetMediaClock(IMediaClock* media_clock) = 0;
- virtual State GetState() = 0;
+ virtual HRESULT SetTimeSource(IMediaClock * pClock) = 0;
+ virtual Status GetStatus() = 0;
virtual HRESULT Play() = 0;
virtual HRESULT Pause() = 0;
virtual double_t GetDuration() = 0;
- virtual double_t GetTime() = 0;
- virtual HRESULT SetTime(double_t value) = 0;
- virtual HRESULT GetAudioParams(AudioParams* value) = 0;
- virtual HRESULT SetAudioParams(const AudioParams* value) = 0;
- virtual HRESULT GetVideoParams(VideoParams* value) = 0;
- virtual HRESULT GetD3D9Texture(IDirect3DDevice9* d3d_device, IDirect3DTexture9** ptr) = 0;
- virtual HRESULT GetD3D11Texture(ID3D11Device* d3d_device, ID3D11Texture2D** ptr) = 0;
- virtual HRESULT GetGLDXIntreropTexture(IGLDXInteropTexture** value) = 0;
+ virtual double_t GetCurrentPosition() = 0;
+ virtual HRESULT SetCurrentPosition(double_t pos) = 0;
+ virtual HRESULT GetVolumes(AudioVolumes * out_volumes) = 0;
+ virtual HRESULT SetVolumes(const AudioVolumes * in_volumes) = 0;
+ virtual HRESULT GetVideoInfo(VideoInfo * out_info) = 0;
+ virtual HRESULT GetTextureD3D9Ex(IDirect3DDevice9 * pDevice, IDirect3DTexture9 * *ppOutTexture) = 0;
+ virtual HRESULT GetTextureD3D11(ID3D11Device * pDevice, ID3D11Texture2D * *ppOutTexture) = 0;
+ virtual HRESULT GetTextureOGL(IGLDXInteropTexture * *ppOutTexture) = 0;
};
+
+ extern void(FASTCALL* trace)(const wchar_t* fmt, ...);
}
diff --git a/src/DivaGL/task_movie.cpp b/src/DivaGL/task_movie.cpp
index 1efb22d..5fc450f 100644
--- a/src/DivaGL/task_movie.cpp
+++ b/src/DivaGL/task_movie.cpp
@@ -16,29 +16,28 @@
class TaskMovie : public app::Task {
public:
- enum class State {
- Wait = 0,
- Init,
- Disp,
- Stop,
- Max,
+ enum State {
+ State_Wait = 0,
+ State_Init,
+ State_Disp,
+ State_Stop,
+ State_Shutdown,
};
- enum class DispType {
- None = 0,
- SpriteTextute,
- Textute,
- Max,
+ enum DispType {
+ DispType_None = 0,
+ DispType_SpriteTextute,
+ DispType_Textute,
};
- struct PlayerVideoParams {
- int64_t width;
- int64_t height;
- int64_t frame_size_width;
- int64_t frame_size_height;
+ struct PlayerVideoInfo {
+ int64_t present_width;
+ int64_t present_height;
+ int64_t raw_width;
+ int64_t raw_height;
};
- static_assert(sizeof(TaskMovie::PlayerVideoParams) == 0x20, "\"TaskMovie::PlayerVideoParams\" struct should have a size of 0x20");
+ static_assert(sizeof(TaskMovie::PlayerVideoInfo) == 0x20, "\"TaskMovie::PlayerVideoInfo\" struct should have a size of 0x20");
struct DispParams {
rectangle rect;
@@ -58,21 +57,24 @@ public:
static_assert(sizeof(TaskMovie::SprParams) == 0x24, "\"TaskMovie::SprParams\" struct should have a size of 0x24");
struct Player {
- bool pause;
+ bool pause_flag;
float_t volume;
- bool set_audio_params;
+ bool volume_req;
State state;
MoviePlayLib::IPlayer* player;
MoviePlayLib::IMediaClock* external_clock;
- MoviePlayLib::State player_state;
- MoviePlayLib::VideoParams video_params;
- MoviePlayLib::IGLDXInteropTexture* interop_texture;
+ MoviePlayLib::Status player_state;
+ MoviePlayLib::VideoInfo video_info;
+ MoviePlayLib::IGLDXInteropTexture* gl_texture;
double_t duration;
double_t time;
void Ctrl();
- void GetInteropTexture(texture*& ptr);
- void UpdateInteropTexture(TaskMovie::PlayerVideoParams* player_video_params);
+ void GetGLTexture(texture*& ptr);
+ void UpdateGLTexture(TaskMovie::PlayerVideoInfo* player_video_info);
+
+ protected:
+ bool set_volume_internal(float_t vol);
};
static_assert(sizeof(TaskMovie::Player) == 0x58, "\"TaskMovie::Player\" struct should have a size of 0x58");
@@ -82,7 +84,7 @@ public:
SprParams spr_params;
State state;
Player* player;
- PlayerVideoParams* player_video_params;
+ PlayerVideoInfo* player_video_info;
texture* tex;
bool pause;
bool wait_play;
@@ -104,11 +106,11 @@ struct TaskMoviePlayerNoInterop {
void Create();
void Ctrl(TaskMovie* task_movie, TaskMovie::Player* player,
- TaskMovie::PlayerVideoParams* player_video_params);
+ TaskMovie::PlayerVideoInfo* player_video_info);
void GetD3D11Texture(TaskMovie::Player* player, texture*& ptr);
void Release();
void ReleaseTexture();
- void UpdateD3D11Texture(TaskMovie::Player* player, TaskMovie::PlayerVideoParams* player_video_params);
+ void UpdateD3D11Texture(TaskMovie::Player* player, TaskMovie::PlayerVideoInfo* player_video_info);
static TaskMoviePlayerNoInterop* Get(TaskMovie::Player* player);
};
@@ -119,7 +121,7 @@ static texture* (FASTCALL* sub_14041E560)()
= (texture * (FASTCALL*)())0x000000014041E560;
HOOK(bool, FASTCALL, TaskMovie__ctrl, 0x000000014041E570, TaskMovie* This) {
- This->state = TaskMovie::State::Wait;
+ This->state = TaskMovie::State_Wait;
if (This->player) {
This->player->Ctrl();
This->state = This->player->state;
@@ -128,26 +130,26 @@ HOOK(bool, FASTCALL, TaskMovie__ctrl, 0x000000014041E570, TaskMovie* This) {
if (This->CheckState()) {
TaskMoviePlayerNoInterop* no_interop = TaskMoviePlayerNoInterop::Get(This->player);
if (no_interop) {
- no_interop->Ctrl(This, This->player, This->player_video_params);
+ no_interop->Ctrl(This, This->player, This->player_video_info);
return false;
}
- if (This->player->interop_texture) {
- This->player->interop_texture->Release();
- This->player->interop_texture = 0;
+ if (This->player->gl_texture) {
+ This->player->gl_texture->Release();
+ This->player->gl_texture = 0;
}
- This->player->UpdateInteropTexture(This->player_video_params);
- if (This->player_video_params->frame_size_width && This->player_video_params->frame_size_height) {
+ This->player->UpdateGLTexture(This->player_video_info);
+ if (This->player_video_info->raw_width && This->player_video_info->raw_height) {
if (!This->tex)
This->tex = (texture*)sub_14041E560();
- if (This->disp_type != TaskMovie::DispType::None)
- This->player->GetInteropTexture(This->tex);
+ if (This->disp_type != TaskMovie::DispType_None)
+ This->player->GetGLTexture(This->tex);
}
- if (This->player && !This->player->interop_texture
- && !no_interop && This->disp_type != TaskMovie::DispType::None) {
- HRESULT hr = This->player->player->GetGLDXIntreropTexture(&This->player->interop_texture);
+ if (This->player && !This->player->gl_texture
+ && !no_interop && This->disp_type != TaskMovie::DispType_None) {
+ HRESULT hr = This->player->player->GetTextureOGL(&This->player->gl_texture);
if (hr < S_FALSE)
task_movie_player_no_interop.insert({ This->player, {} }).first->second.Create();
}
@@ -176,9 +178,9 @@ HOOK(bool, FASTCALL, TaskMovie__Shutdown, 0x000000014041F500, TaskMovie* This) {
if (no_interop)
no_interop->ReleaseTexture();
- if (player->interop_texture) {
- player->interop_texture->Release();
- player->interop_texture = 0;
+ if (player->gl_texture) {
+ player->gl_texture->Release();
+ player->gl_texture = 0;
}
This->tex = 0;
@@ -186,9 +188,9 @@ HOOK(bool, FASTCALL, TaskMovie__Shutdown, 0x000000014041F500, TaskMovie* This) {
if (no_interop)
no_interop->ReleaseTexture();
- if (player->interop_texture) {
- player->interop_texture->Release();
- player->interop_texture = 0;
+ if (player->gl_texture) {
+ player->gl_texture->Release();
+ player->gl_texture = 0;
}
if (player->player) {
@@ -231,14 +233,14 @@ void TaskMoviePlayerNoInterop::Create() {
}
void TaskMoviePlayerNoInterop::Ctrl(TaskMovie* task_movie,
- TaskMovie::Player* player, TaskMovie::PlayerVideoParams* player_video_params) {
- UpdateD3D11Texture(player, player_video_params);
+ TaskMovie::Player* player, TaskMovie::PlayerVideoInfo* player_video_info) {
+ UpdateD3D11Texture(player, player_video_info);
- if (player_video_params->frame_size_width && player_video_params->frame_size_height) {
+ if (player_video_info->raw_width && player_video_info->raw_height) {
if (!task_movie->tex)
task_movie->tex = sub_14041E560();
- if (task_movie->disp_type != TaskMovie::DispType::None)
+ if (task_movie->disp_type != TaskMovie::DispType_None)
GetD3D11Texture(player, task_movie->tex);
}
}
@@ -283,8 +285,8 @@ void TaskMoviePlayerNoInterop::GetD3D11Texture(TaskMovie::Player* player, textur
}
ptr = tex;
- ptr->width = player->video_params.frame_size_width;
- ptr->height = player->video_params.frame_size_height;
+ ptr->width = player->video_info.raw_width;
+ ptr->height = player->video_info.raw_height;
}
void TaskMoviePlayerNoInterop::Release() {
@@ -328,10 +330,10 @@ void TaskMoviePlayerNoInterop::ReleaseTexture() {
}
void TaskMoviePlayerNoInterop::UpdateD3D11Texture(TaskMovie::Player* player,
- TaskMovie::PlayerVideoParams* player_video_params) {
+ TaskMovie::PlayerVideoInfo* player_video_info) {
ID3D11Texture2D* d3d_texture = 0;
if (player->player)
- player->player->GetD3D11Texture(d3d11_device, &d3d_texture);
+ player->player->GetTextureD3D11(d3d11_device, &d3d_texture);
if (!d3d_texture)
return;
@@ -390,20 +392,20 @@ void TaskMoviePlayerNoInterop::UpdateD3D11Texture(TaskMovie::Player* player,
d3d_texture = 0;
}
- if (!player_video_params)
+ if (!player_video_info)
return;
- if (player->state == TaskMovie::State::Disp) {
- player_video_params->width = player->video_params.width;
- player_video_params->height = player->video_params.height;
- player_video_params->frame_size_width = player->video_params.frame_size_width;
- player_video_params->frame_size_height = player->video_params.frame_size_height;
+ if (player->state == TaskMovie::State_Disp) {
+ player_video_info->present_width = player->video_info.present_width;
+ player_video_info->present_height = player->video_info.present_height;
+ player_video_info->raw_width = player->video_info.raw_width;
+ player_video_info->raw_height = player->video_info.raw_height;
}
else {
- player_video_params->width = 0;
- player_video_params->height = 0;
- player_video_params->frame_size_width = 0;
- player_video_params->frame_size_height = 0;
+ player_video_info->present_width = 0;
+ player_video_info->present_height = 0;
+ player_video_info->raw_width = 0;
+ player_video_info->raw_height = 0;
}
}
@@ -415,111 +417,117 @@ inline TaskMoviePlayerNoInterop* TaskMoviePlayerNoInterop::Get(TaskMovie::Player
}
void TaskMovie::Player::Ctrl() {
- player_state = MoviePlayLib::State::Wait;
+ player_state = MoviePlayLib::Status_Starting;
time = 0.0f;
if (player && !*(uint32_t*)0x00000001411A1840) {
- player_state = player->GetState();
- time = player->GetTime();
+ player_state = player->GetStatus();
+ time = player->GetCurrentPosition();
}
switch (player_state) {
- case MoviePlayLib::State::None:
- case MoviePlayLib::State::Init:
- state = TaskMovie::State::Init;
+ case MoviePlayLib::Status_NotInitialized:
+ case MoviePlayLib::Status_Initializing:
+ state = TaskMovie::State_Init;
break;
- case MoviePlayLib::State::Open:
- player->GetVideoParams(&video_params);
+ case MoviePlayLib::Status_Initialized:
+ player->GetVideoInfo(&video_info);
duration = player->GetDuration();
player->Play();
- state = TaskMovie::State::Init;
+ state = TaskMovie::State_Init;
break;
- case MoviePlayLib::State::Wait:
- state = TaskMovie::State::Wait;
+ case MoviePlayLib::Status_Starting:
+ state = TaskMovie::State_Wait;
break;
- case MoviePlayLib::State::Pause:
- if (!pause)
+ case MoviePlayLib::Status_Started:
+ if (!pause_flag)
player->Play();
- state = TaskMovie::State::Disp;
+ state = TaskMovie::State_Disp;
break;
- case MoviePlayLib::State::Play:
+ case MoviePlayLib::Status_Stopping:
{
TaskMoviePlayerNoInterop* no_interop = TaskMoviePlayerNoInterop::Get(this);
if (no_interop) {
- if (no_interop->d3d11_texture && no_interop->d3d11_tex && pause)
+ if (no_interop->d3d11_texture && no_interop->d3d11_tex && pause_flag)
player->Pause();
- state = TaskMovie::State::Disp;
+ state = TaskMovie::State_Disp;
break;
}
}
- if (interop_texture && interop_texture->GetTexture() && pause)
+ if (gl_texture && gl_texture->GetGLTexture() && pause_flag)
player->Pause();
- state = TaskMovie::State::Disp;
+ state = TaskMovie::State_Disp;
break;
- case MoviePlayLib::State::Stop:
+ case MoviePlayLib::Status_Stopped:
if (time <= 0.0f || time >= duration)
- state = TaskMovie::State::Stop;
+ state = TaskMovie::State_Stop;
break;
}
- if (state == TaskMovie::State::Disp && player && set_audio_params) {
- MoviePlayLib::AudioParams audio_params;
- audio_params.spk_l_volume = volume;
- audio_params.spk_r_volume = volume;
- audio_params.field_8 = 0.0f;
- audio_params.field_C = 0.0f;
- audio_params.hph_l_volume = volume;
- audio_params.hph_r_volume = volume;
- if (player->SetAudioParams(&audio_params) >= 0)
- set_audio_params = false;
- }
+ if (state == TaskMovie::State_Disp && player && volume_req)
+ set_volume_internal(volume);
}
-void TaskMovie::Player::GetInteropTexture(texture*& ptr) {
- if (!interop_texture)
+void TaskMovie::Player::GetGLTexture(texture*& ptr) {
+ if (!gl_texture)
return;
- texture* tex = interop_texture->GetTexture();
+ texture* tex = gl_texture->GetGLTexture();
if (!tex)
return;
ptr = tex;
- ptr->width = video_params.frame_size_width;
- ptr->height = video_params.frame_size_height;
+ ptr->width = video_info.raw_width;
+ ptr->height = video_info.raw_height;
}
-void TaskMovie::Player::UpdateInteropTexture(TaskMovie::PlayerVideoParams* player_video_params) {
- if (interop_texture) {
- interop_texture->Release();
- interop_texture = 0;
+void TaskMovie::Player::UpdateGLTexture(TaskMovie::PlayerVideoInfo* player_video_info) {
+ if (gl_texture) {
+ gl_texture->Release();
+ gl_texture = 0;
}
if (player)
- player->GetGLDXIntreropTexture(&interop_texture);
+ player->GetTextureOGL(&gl_texture);
- if (!player_video_params)
+ if (!player_video_info)
return;
- if (state == TaskMovie::State::Disp) {
- player_video_params->width = video_params.width;
- player_video_params->height = video_params.height;
- player_video_params->frame_size_width = video_params.frame_size_width;
- player_video_params->frame_size_height = video_params.frame_size_height;
+ if (state == TaskMovie::State_Disp) {
+ player_video_info->present_width = video_info.present_width;
+ player_video_info->present_height = video_info.present_height;
+ player_video_info->raw_width = video_info.raw_width;
+ player_video_info->raw_height = video_info.raw_height;
}
else {
- player_video_params->width = 0;
- player_video_params->height = 0;
- player_video_params->frame_size_width = 0;
- player_video_params->frame_size_height = 0;
+ player_video_info->present_width = 0;
+ player_video_info->present_height = 0;
+ player_video_info->raw_width = 0;
+ player_video_info->raw_height = 0;
}
}
+bool TaskMovie::Player::set_volume_internal(float_t vol) {
+ MoviePlayLib::AudioVolumes volumes;
+ volumes.spk_l_volume = vol;
+ volumes.spk_r_volume = vol;
+ volumes.field_8 = 0.0f;
+ volumes.field_C = 0.0f;
+ volumes.hph_l_volume = vol;
+ volumes.hph_r_volume = vol;
+
+ HRESULT hr = player->SetVolumes(&volumes);
+ if (SUCCEEDED(hr))
+ volume_req = false;
+ return SUCCEEDED(hr);
+}
+
bool TaskMovie::CheckState() {
- return state == TaskMovie::State::Init || state == TaskMovie::State::Disp;
+ return state == TaskMovie::State_Init || state == TaskMovie::State_Disp;
}