mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-01-29 19:37:30 +01:00
Added changes by kode54
git-svn-id: https://vgmstream.svn.sourceforge.net/svnroot/vgmstream@872 51a99a44-fe44-0410-b1ba-c3e57ba2b86b
This commit is contained in:
parent
7a910e227b
commit
7320d0f97d
@ -16,10 +16,8 @@
|
||||
// English (Australia) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENA)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
@ -67,11 +65,23 @@ BEGIN
|
||||
CONTROL "Loop normally",IDC_LOOP_NORMALLY,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,7,57,77,10
|
||||
CONTROL "Loop forever",IDC_LOOP_FOREVER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,7,70,77,10
|
||||
CONTROL "Ignore looping",IDC_IGNORE_LOOP,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,7,83,77,10
|
||||
LTEXT "Thread Priority",IDC_STATIC,21,99,46,8
|
||||
CONTROL "Slider1",IDC_THREAD_PRIORITY_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,7,107,77,10
|
||||
CTEXT "DATARIFIC",IDC_THREAD_PRIORITY_TEXT,7,120,77,18
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO
|
||||
BEGIN
|
||||
IDD_CONFIG, DIALOG
|
||||
BEGIN
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // English (Australia) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -141,7 +141,7 @@
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
IgnoreDefaultLibraryNames=""
|
||||
DelayLoadDLLs="libvorbis.dll;libmpg123-0.dll;libg7221_decode.dll"
|
||||
DelayLoadDLLs=""
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
|
@ -18,17 +18,12 @@ extern "C" {
|
||||
#include "foo_vgmstream.h"
|
||||
|
||||
|
||||
static const char * priority_strings[] = {"Idle","Lowest","Below Normal","Normal","Above Normal","Highest (not recommended)","Time Critical (not recommended)"};
|
||||
static const int priority_values[] = {THREAD_PRIORITY_IDLE,THREAD_PRIORITY_LOWEST,THREAD_PRIORITY_BELOW_NORMAL,THREAD_PRIORITY_NORMAL,THREAD_PRIORITY_ABOVE_NORMAL,THREAD_PRIORITY_HIGHEST,THREAD_PRIORITY_TIME_CRITICAL};
|
||||
|
||||
static const GUID guid_cfg_Priority = { 0x6a94e07f, 0xf565, 0x455f, { 0x87, 0x27, 0x30, 0xce, 0x81, 0x44, 0xd2, 0xf } };
|
||||
static const GUID guid_cfg_LoopForever = { 0xa19e36eb, 0x72a0, 0x4077, { 0x91, 0x43, 0x38, 0xb4, 0x5, 0xfc, 0x91, 0xc5 } };
|
||||
static const GUID guid_cfg_IgnoreLoop = { 0xddda7ab6, 0x7bb6, 0x4abe, { 0xb9, 0x66, 0x2d, 0xb7, 0x8f, 0xe4, 0xcc, 0xab } };
|
||||
static const GUID guid_cfg_LoopCount = { 0xfc8dfd72, 0xfae8, 0x44cc, { 0xbe, 0x99, 0x1c, 0x7b, 0x27, 0x7a, 0xb6, 0xb9 } };
|
||||
static const GUID guid_cfg_FadeLength = { 0x61da7ef1, 0x56a5, 0x4368, { 0xae, 0x6, 0xec, 0x6f, 0xd7, 0xe6, 0x15, 0x5d } };
|
||||
static const GUID guid_cfg_FadeDelay = { 0x73907787, 0xaf49, 0x4659, { 0x96, 0x8e, 0x9f, 0x70, 0xa1, 0x62, 0x49, 0xc4 } };
|
||||
|
||||
static cfg_uint cfg_Priority(guid_cfg_Priority, DEFAULT_THREAD_PRIORITY);
|
||||
static cfg_bool cfg_LoopForever(guid_cfg_LoopForever, DEFAULT_LOOP_FOREVER);
|
||||
static cfg_bool cfg_IgnoreLoop(guid_cfg_IgnoreLoop, DEFAULT_IGNORE_LOOP);
|
||||
static cfg_string cfg_LoopCount(guid_cfg_LoopCount, DEFAULT_LOOP_COUNT);
|
||||
@ -42,7 +37,6 @@ void input_vgmstream::load_settings()
|
||||
sscanf(cfg_FadeLength.get_ptr(),"%lf",&fade_seconds);
|
||||
sscanf(cfg_LoopCount.get_ptr(),"%lf",&loop_count);
|
||||
sscanf(cfg_FadeDelay.get_ptr(),"%lf",&fade_delay_seconds);
|
||||
thread_priority = priority_values[cfg_Priority];
|
||||
loop_forever = cfg_LoopForever;
|
||||
ignore_loop = cfg_IgnoreLoop;
|
||||
}
|
||||
@ -76,10 +70,6 @@ BOOL vgmstreamPreferences::OnInitDialog(CWindow, LPARAM)
|
||||
uSetDlgItemText(m_hWnd, IDC_FADE_SECONDS, cfg_FadeLength);
|
||||
uSetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS, cfg_FadeDelay);
|
||||
|
||||
SendDlgItemMessage(IDC_THREAD_PRIORITY_SLIDER, TBM_SETRANGE, 1, MAKELONG(0, 6));
|
||||
SendDlgItemMessage(IDC_THREAD_PRIORITY_SLIDER, TBM_SETPOS, 1, cfg_Priority);
|
||||
|
||||
uSetDlgItemText(m_hWnd, IDC_THREAD_PRIORITY_TEXT, priority_strings[cfg_Priority]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -101,11 +91,6 @@ void vgmstreamPreferences::reset()
|
||||
uSetDlgItemText(m_hWnd, IDC_LOOP_COUNT, DEFAULT_LOOP_COUNT);
|
||||
uSetDlgItemText(m_hWnd, IDC_FADE_SECONDS, DEFAULT_FADE_SECONDS);
|
||||
uSetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS, DEFAULT_FADE_DELAY_SECONDS);
|
||||
|
||||
SendDlgItemMessage(IDC_THREAD_PRIORITY_SLIDER, TBM_SETRANGE, 1, MAKELONG(0, 6));
|
||||
SendDlgItemMessage(IDC_THREAD_PRIORITY_SLIDER, TBM_SETPOS, 1, DEFAULT_THREAD_PRIORITY);
|
||||
|
||||
uSetDlgItemText(m_hWnd, IDC_THREAD_PRIORITY_TEXT, priority_strings[DEFAULT_THREAD_PRIORITY]);
|
||||
}
|
||||
|
||||
|
||||
@ -153,8 +138,6 @@ void vgmstreamPreferences::apply()
|
||||
"Error",MB_OK|MB_ICONERROR);
|
||||
return;
|
||||
} else cfg_FadeDelay = buf.get_ptr();
|
||||
|
||||
cfg_Priority = (t_uint32)SendDlgItemMessage(IDC_THREAD_PRIORITY_SLIDER, TBM_GETPOS, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -177,9 +160,7 @@ bool vgmstreamPreferences::HasChanged()
|
||||
if(FadeDelay != uGetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS)) return true;
|
||||
if(LoopCount != uGetDlgItemText(m_hWnd, IDC_LOOP_COUNT)) return true;
|
||||
|
||||
int Priority = SendDlgItemMessage(IDC_THREAD_PRIORITY_SLIDER, TBM_GETPOS, 0, 0);
|
||||
if(Priority != cfg_Priority) return true;
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -188,12 +169,5 @@ void vgmstreamPreferences::OnEditChange(UINT, int, CWindow)
|
||||
m_callback->on_state_changed();
|
||||
}
|
||||
|
||||
void vgmstreamPreferences::OnVScroll(UINT nSBCode, UINT nPos, CTrackBarCtrl pScrollBar)
|
||||
{
|
||||
int index = pScrollBar.GetPos();
|
||||
uSetDlgItemText(m_hWnd, IDC_THREAD_PRIORITY_TEXT, priority_strings[index]);
|
||||
m_callback->on_state_changed();
|
||||
}
|
||||
|
||||
|
||||
static preferences_page_factory_t<vgmstream_prefs> g_vgmstream_preferences_page_factory;
|
||||
|
@ -12,7 +12,6 @@
|
||||
#define DEFAULT_FADE_SECONDS "10.00"
|
||||
#define DEFAULT_FADE_DELAY_SECONDS "0.00"
|
||||
#define DEFAULT_LOOP_COUNT "2.00"
|
||||
#define DEFAULT_THREAD_PRIORITY 3
|
||||
#define DEFAULT_LOOP_FOREVER false
|
||||
#define DEFAULT_IGNORE_LOOP false
|
||||
|
||||
@ -41,12 +40,10 @@ public:
|
||||
COMMAND_HANDLER_EX(IDC_FADE_SECONDS, EN_CHANGE, OnEditChange)
|
||||
COMMAND_HANDLER_EX(IDC_FADE_DELAY_SECONDS, EN_CHANGE, OnEditChange)
|
||||
COMMAND_HANDLER_EX(IDC_LOOP_COUNT, EN_CHANGE, OnEditChange)
|
||||
MSG_WM_HSCROLL(OnVScroll)
|
||||
END_MSG_MAP()
|
||||
private:
|
||||
BOOL OnInitDialog(CWindow, LPARAM);
|
||||
void OnEditChange(UINT, int, CWindow);
|
||||
void OnVScroll(UINT nSBCode, UINT nPos, CTrackBarCtrl pScrollBar);
|
||||
bool HasChanged();
|
||||
void OnChanged();
|
||||
|
||||
|
@ -42,11 +42,9 @@ class input_vgmstream {
|
||||
char filename[260];
|
||||
t_input_open_reason currentreason;
|
||||
VGMSTREAM * vgmstream;
|
||||
HANDLE decode_thread_handle;
|
||||
|
||||
bool decoding;
|
||||
int paused;
|
||||
int decode_abort;
|
||||
int decode_pos_ms;
|
||||
int decode_pos_samples;
|
||||
int stream_length_samples;
|
||||
@ -56,7 +54,6 @@ class input_vgmstream {
|
||||
double fade_seconds;
|
||||
double fade_delay_seconds;
|
||||
double loop_count;
|
||||
int thread_priority;
|
||||
bool loop_forever;
|
||||
int ignore_loop;
|
||||
int seek_pos_samples;
|
||||
@ -65,7 +62,7 @@ class input_vgmstream {
|
||||
|
||||
short sample_buffer[OUTBUF_SIZE];
|
||||
|
||||
void getfileinfo(char *filename, char *title, int *length_in_ms, int *sample_rate, int *channels, abort_callback & p_abort);
|
||||
void getfileinfo(char *filename, char *title, int *length_in_ms, int *total_samples, int *loop_start, int *loop_end, int *sample_rate, int *channels, abort_callback & p_abort);
|
||||
void load_settings();
|
||||
|
||||
private:
|
||||
|
@ -31,7 +31,7 @@ extern "C" {
|
||||
#define APP_NAME "vgmstream plugin"
|
||||
#define PLUGIN_DESCRIPTION "vgmstream plugin " VERSION " " __DATE__ "\n" \
|
||||
"by hcs, FastElbja, manakoAT, and bxaimc\n" \
|
||||
"foobar2000 plugin by Josh W\n\n" \
|
||||
"foobar2000 plugin by Josh W, kode54\n\n" \
|
||||
"http://sourceforge.net/projects/vgmstream"
|
||||
#define PLUGIN_VERSION VERSION " " __DATE__
|
||||
|
||||
@ -76,7 +76,6 @@ void input_vgmstream::open(service_ptr_t<file> p_filehint,const char * p_path,t_
|
||||
return;
|
||||
}
|
||||
|
||||
decode_abort = 0;
|
||||
decode_pos_ms = 0;
|
||||
decode_pos_samples = 0;
|
||||
paused = 0;
|
||||
@ -87,10 +86,13 @@ void input_vgmstream::open(service_ptr_t<file> p_filehint,const char * p_path,t_
|
||||
break;
|
||||
|
||||
case input_open_info_read:
|
||||
if ( p_filehint.is_empty() ) input_open_file_helper( p_filehint, p_path, p_reason, p_abort );
|
||||
stats = p_filehint->get_stats( p_abort );
|
||||
break;
|
||||
|
||||
case input_open_info_write:
|
||||
//cant write...ever
|
||||
throw exception_io_data();
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -100,35 +102,34 @@ void input_vgmstream::open(service_ptr_t<file> p_filehint,const char * p_path,t_
|
||||
|
||||
void input_vgmstream::get_info(file_info & p_info,abort_callback & p_abort ) {
|
||||
int length_in_ms=0, channels = 0, samplerate = 0;
|
||||
int total_samples = -1;
|
||||
int loop_start = -1, loop_end = -1;
|
||||
char title[256];
|
||||
|
||||
getfileinfo(filename, title, &length_in_ms, &samplerate, &channels, p_abort);
|
||||
getfileinfo(filename, title, &length_in_ms, &total_samples, &loop_start, &loop_end, &samplerate, &channels, p_abort);
|
||||
|
||||
p_info.info_set_int("samplerate", samplerate);
|
||||
p_info.info_set_int("channels", channels);
|
||||
p_info.info_set_int("bitspersample",16);
|
||||
p_info.info_set("encoding","lossless");
|
||||
p_info.info_set_bitrate((samplerate * 16 * channels) / 1000);
|
||||
if (total_samples > 0)
|
||||
p_info.info_set_int("stream_total_samples", total_samples);
|
||||
if (loop_start >= 0 && loop_end >= loop_start)
|
||||
{
|
||||
p_info.info_set_int("loop_start", loop_start);
|
||||
p_info.info_set_int("loop_end", loop_end);
|
||||
}
|
||||
|
||||
p_info.set_length(((double)length_in_ms)/1000);
|
||||
}
|
||||
|
||||
void input_vgmstream::decode_initialize(unsigned p_flags,abort_callback & p_abort) {
|
||||
if(!loop_forever || !vgmstream->loop_flag)
|
||||
p_flags|=input_flag_no_looping;
|
||||
|
||||
if (p_flags & input_flag_no_looping) loop_forever = false;
|
||||
decode_seek( 0, p_abort );
|
||||
};
|
||||
|
||||
bool input_vgmstream::decode_run(audio_chunk & p_chunk,abort_callback & p_abort) {
|
||||
// why is this being called while this is being called? bad foobar!
|
||||
while(decoding)
|
||||
Sleep(10);
|
||||
decoding = true;
|
||||
|
||||
int CurPriority = GetThreadPriority(GetCurrentThread());
|
||||
SetThreadPriority(GetCurrentThread(), thread_priority);
|
||||
|
||||
|
||||
int max_buffer_samples = sizeof(sample_buffer)/sizeof(sample_buffer[0])/vgmstream->channels;
|
||||
int l = 0, samples_to_do = max_buffer_samples, t= 0;
|
||||
|
||||
@ -172,12 +173,9 @@ bool input_vgmstream::decode_run(audio_chunk & p_chunk,abort_callback & p_abort)
|
||||
decode_pos_ms=decode_pos_samples*1000LL/vgmstream->sample_rate;
|
||||
|
||||
decoding = false;
|
||||
SetThreadPriority(GetCurrentThread(), CurPriority);
|
||||
return samples_to_do==max_buffer_samples;
|
||||
|
||||
}
|
||||
SetThreadPriority(GetCurrentThread(), CurPriority);
|
||||
decoding = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -210,9 +208,7 @@ void input_vgmstream::decode_seek(double p_seconds,abort_callback & p_abort) {
|
||||
|
||||
input_vgmstream::input_vgmstream() {
|
||||
vgmstream = NULL;
|
||||
decode_thread_handle = INVALID_HANDLE_VALUE;
|
||||
paused = 0;
|
||||
decode_abort = 0;
|
||||
decode_pos_ms = 0;
|
||||
decode_pos_samples = 0;
|
||||
stream_length_samples = 0;
|
||||
@ -220,7 +216,6 @@ input_vgmstream::input_vgmstream() {
|
||||
fade_seconds = 10.0f;
|
||||
fade_delay_seconds = 0.0f;
|
||||
loop_count = 2.0f;
|
||||
thread_priority = 3;
|
||||
loop_forever = false;
|
||||
ignore_loop = 0;
|
||||
decoding = false;
|
||||
@ -502,7 +497,7 @@ bool input_vgmstream::g_is_our_path(const char * p_path,const char * p_extension
|
||||
|
||||
|
||||
/* retrieve information on this or possibly another file */
|
||||
void input_vgmstream::getfileinfo(char *filename, char *title, int *length_in_ms, int *sample_rate, int *channels, abort_callback & p_abort) {
|
||||
void input_vgmstream::getfileinfo(char *filename, char *title, int *length_in_ms, int *total_samples, int *loop_start, int *loop_end, int *sample_rate, int *channels, abort_callback & p_abort) {
|
||||
|
||||
VGMSTREAM * infostream;
|
||||
if (length_in_ms)
|
||||
@ -514,6 +509,12 @@ void input_vgmstream::getfileinfo(char *filename, char *title, int *length_in_ms
|
||||
test_length = *length_in_ms;
|
||||
*sample_rate = infostream->sample_rate;
|
||||
*channels = infostream->channels;
|
||||
*total_samples = infostream->num_samples;
|
||||
if (infostream->loop_flag)
|
||||
{
|
||||
*loop_start = infostream->loop_start_sample;
|
||||
*loop_end = infostream->loop_end_sample;
|
||||
}
|
||||
|
||||
close_vgmstream(infostream);
|
||||
infostream=NULL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user