diff --git a/audacious/plugin.cc b/audacious/plugin.cc index db517b41..bb00b8c2 100644 --- a/audacious/plugin.cc +++ b/audacious/plugin.cc @@ -15,7 +15,6 @@ extern "C" { -#include "../src/formats.h" #include "../src/vgmstream.h" } #include "plugin.h" @@ -95,8 +94,8 @@ bool VgmstreamPlugin::is_our_file(const char *filename, VFSFile &file) { else ext = ext+1; /* skip the dot */ - const char ** ext_list = vgmstream_get_formats(); - int ext_list_len = vgmstream_get_formats_length(); + size_t ext_list_len = 0; + const char ** ext_list = vgmstream_get_formats(&ext_list_len); for (int i=0; i < ext_list_len; i++) { if (!strcasecmp(ext, ext_list[i])) diff --git a/fb2k/foo_vgmstream.cpp b/fb2k/foo_vgmstream.cpp index a15d4243..c6ad17d7 100644 --- a/fb2k/foo_vgmstream.cpp +++ b/fb2k/foo_vgmstream.cpp @@ -16,7 +16,6 @@ #include extern "C" { -#include "../src/formats.h" #include "../src/vgmstream.h" } #include "foo_vgmstream.h" @@ -184,19 +183,19 @@ void input_vgmstream::decode_initialize(t_uint32 p_subsong, unsigned p_flags, ab bool input_vgmstream::decode_run(audio_chunk & p_chunk,abort_callback & p_abort) { if (!decoding) return false; + if (!vgmstream) return false; int max_buffer_samples = sizeof(sample_buffer)/sizeof(sample_buffer[0])/vgmstream->channels; - int l = 0, samples_to_do = max_buffer_samples; + int samples_to_do = max_buffer_samples; + t_size bytes; - if(vgmstream) { + { bool loop_okay = loop_forever && vgmstream->loop_flag && !ignore_loop && !force_ignore_loop; if (decode_pos_samples+max_buffer_samples>stream_length_samples && !loop_okay) samples_to_do=stream_length_samples-decode_pos_samples; else samples_to_do=max_buffer_samples; - l = (samples_to_do*vgmstream->channels * sizeof(sample_buffer[0])); - if (samples_to_do /*< DECODE_SIZE*/ == 0) { decoding = false; return false; @@ -222,15 +221,14 @@ bool input_vgmstream::decode_run(audio_chunk & p_chunk,abort_callback & p_abort) } } - p_chunk.set_data_fixedpoint((char*)sample_buffer, l, vgmstream->sample_rate, vgmstream->channels, 16, audio_chunk::g_guess_channel_config(vgmstream->channels)); + bytes = (samples_to_do*vgmstream->channels * sizeof(sample_buffer[0])); + p_chunk.set_data_fixedpoint((char*)sample_buffer, bytes, vgmstream->sample_rate, vgmstream->channels, 16, audio_chunk::g_guess_channel_config(vgmstream->channels)); decode_pos_samples+=samples_to_do; decode_pos_ms=decode_pos_samples*1000LL/vgmstream->sample_rate; return samples_to_do==max_buffer_samples; - } - return false; } void input_vgmstream::decode_seek(double p_seconds,abort_callback & p_abort) { @@ -295,11 +293,10 @@ void input_vgmstream::retag_commit(abort_callback & p_abort) { /*throw exception bool input_vgmstream::g_is_our_content_type(const char * p_content_type) {return false;} bool input_vgmstream::g_is_our_path(const char * p_path,const char * p_extension) { const char ** ext_list; - int ext_list_len; + size_t ext_list_len; int i; - ext_list = vgmstream_get_formats(); - ext_list_len = vgmstream_get_formats_length(); + ext_list = vgmstream_get_formats(&ext_list_len); for (i=0; i < ext_list_len; i++) { if (!stricmp_utf8(p_extension, ext_list[i])) diff --git a/src/formats.c b/src/formats.c index 84ba14e3..4d4520cd 100644 --- a/src/formats.c +++ b/src/formats.c @@ -1,4 +1,4 @@ -#include "formats.h" +#include "vgmstream.h" //#define VGM_REGISTER_TYPE(extension) ... //#define VGM_REGISTER_TYPE_COMMON(extension) ... /* for common extensions like aiff */ @@ -375,22 +375,11 @@ static const char* extension_list[] = { //, NULL //end mark }; -/** - * List of supported formats. - * - * For plugins that need to know (test.exe doesn't use it) - */ -const char ** vgmstream_get_formats() { +const char ** vgmstream_get_formats(size_t * size) { + *size = sizeof(extension_list) / sizeof(char*); return extension_list; } -/** - * Number of elements in the list. - */ -int vgmstream_get_formats_length() { - return sizeof(extension_list) / sizeof(char*); -} - /* internal description info */ diff --git a/src/formats.h b/src/formats.h deleted file mode 100644 index 2fe6d910..00000000 --- a/src/formats.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * formats.h - utils to parse supported formats - */ -#ifndef _FORMATS_H_ -#define _FORMATS_H_ - -#include "vgmstream.h" - -/* rough number of chars counting all extensions (actually <1500 and extra space) */ -#define VGM_EXTENSION_LIST_CHAR_SIZE 2000 - -const char ** vgmstream_get_formats(); -int vgmstream_get_formats_length(); - -const char * get_vgmstream_coding_description(coding_t coding_type); -const char * get_vgmstream_layout_description(layout_t layout_type); -const char * get_vgmstream_meta_description(meta_t meta_type); - -#endif /* _FORMATS_H_ */ diff --git a/src/libvgmstream.vcproj b/src/libvgmstream.vcproj index ec3355ff..3b691713 100644 --- a/src/libvgmstream.vcproj +++ b/src/libvgmstream.vcproj @@ -147,10 +147,6 @@ Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > - - diff --git a/src/libvgmstream.vcxproj b/src/libvgmstream.vcxproj index 26db56d8..1eed3f99 100644 --- a/src/libvgmstream.vcxproj +++ b/src/libvgmstream.vcxproj @@ -113,7 +113,6 @@ - diff --git a/src/libvgmstream.vcxproj.filters b/src/libvgmstream.vcxproj.filters index 821ee4b7..ad3111a9 100644 --- a/src/libvgmstream.vcxproj.filters +++ b/src/libvgmstream.vcxproj.filters @@ -47,9 +47,6 @@ - - Header Files - Header Files diff --git a/src/vgmstream.c b/src/vgmstream.c index f3f8f64a..1c5e9091 100644 --- a/src/vgmstream.c +++ b/src/vgmstream.c @@ -5,7 +5,6 @@ #include #include #include -#include "formats.h" #include "vgmstream.h" #include "meta/meta.h" #include "layout/layout.h" diff --git a/src/vgmstream.h b/src/vgmstream.h index f2a85116..794963b7 100644 --- a/src/vgmstream.h +++ b/src/vgmstream.h @@ -1147,6 +1147,7 @@ typedef struct { /* do format detection, return pointer to a usable VGMSTREAM, or NULL on failure */ VGMSTREAM * init_vgmstream(const char * const filename); +/* init with custom IO via streamfile */ VGMSTREAM * init_vgmstream_from_STREAMFILE(STREAMFILE *streamFile); /* reset a VGMSTREAM to start of stream */ @@ -1169,6 +1170,9 @@ void describe_vgmstream(VGMSTREAM * vgmstream, char * desc, int length); * stream. Compares files by absolute paths. */ int get_vgmstream_average_bitrate(VGMSTREAM * vgmstream); +/* List of supported formats and elements in the list, for plugins that need to know. */ +const char ** vgmstream_get_formats(size_t * size); + /* -------------------------------------------------------------------------*/ /* vgmstream "private" API */ /* -------------------------------------------------------------------------*/ @@ -1203,4 +1207,9 @@ int vgmstream_do_loop(VGMSTREAM * vgmstream); * returns 0 on failure */ int vgmstream_open_stream(VGMSTREAM * vgmstream, STREAMFILE *streamFile, off_t start_offset); +/* get description info */ +const char * get_vgmstream_coding_description(coding_t coding_type); +const char * get_vgmstream_layout_description(layout_t layout_type); +const char * get_vgmstream_meta_description(meta_t meta_type); + #endif diff --git a/winamp/in_vgmstream.c b/winamp/in_vgmstream.c index 9ca571bd..87b4a72b 100644 --- a/winamp/in_vgmstream.c +++ b/winamp/in_vgmstream.c @@ -19,7 +19,6 @@ #include #include -#include "../src/formats.h" #include "../src/vgmstream.h" #include "in2.h" #include "wa_ipc.h" @@ -68,7 +67,7 @@ In_Module input_module; DWORD WINAPI __stdcall decode(void *arg); /* Winamp Play extension list, needed to accept/play and associate extensions in Windows */ -#define EXTENSION_LIST_SIZE VGM_EXTENSION_LIST_CHAR_SIZE * 6 +#define EXTENSION_LIST_SIZE (0x2000 * 6) #define EXT_BUFFER_SIZE 200 char working_extension_list[EXTENSION_LIST_SIZE] = {0}; @@ -463,14 +462,13 @@ static void add_extension(int length, char * dst, const char * ext) { * Each extension must be in this format: "extension\0Description\0" */ static void build_extension_list() { const char ** ext_list; - int ext_list_len; + size_t ext_list_len; int i; working_extension_list[0]='\0'; working_extension_list[1]='\0'; - ext_list = vgmstream_get_formats(); - ext_list_len = vgmstream_get_formats_length(); + ext_list = vgmstream_get_formats(&ext_list_len); for (i=0; i < ext_list_len; i++) { add_extension(EXTENSION_LIST_SIZE, working_extension_list, ext_list[i]); diff --git a/xmplay/xmp_vgmstream.c b/xmplay/xmp_vgmstream.c index 3b7b5de9..74551a11 100644 --- a/xmplay/xmp_vgmstream.c +++ b/xmplay/xmp_vgmstream.c @@ -11,7 +11,6 @@ #include #include -#include "../src/formats.h" #include "../src/vgmstream.h" #include "xmpin.h" @@ -27,7 +26,7 @@ /* XMPlay extension list, only needed to associate extensions in Windows */ /* todo: as of v3.8.2.17, any more than ~1000 will crash XMplay's file list screen (but not using the non-native Winamp plugin...) */ -#define EXTENSION_LIST_SIZE 1000 /*VGM_EXTENSION_LIST_CHAR_SIZE * 2*/ +#define EXTENSION_LIST_SIZE 1000 /* (0x2000 * 2) */ #define XMPLAY_MAX_PATH 32768 /* XMPlay function library */ @@ -205,13 +204,12 @@ static int add_extension(int length, char * dst, const char * ext) { * Extensions must be in this format: "Description\0extension1/.../extensionN" */ static void build_extension_list() { const char ** ext_list; - int ext_list_len; + size_t ext_list_len; int i, written; written = sprintf(working_extension_list, "%s%c", "vgmstream files",'\0'); - ext_list = vgmstream_get_formats(); - ext_list_len = vgmstream_get_formats_length(); + ext_list = vgmstream_get_formats(&ext_list_len); for (i=0; i < ext_list_len; i++) { written += add_extension(EXTENSION_LIST_SIZE-written, working_extension_list + written, ext_list[i]);