123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- #ifndef IN_VORBIS_MAIN_H
- #define IN_VORBIS_MAIN_H
- #define WINSOCK_API_LINKAGE
- #ifndef STRICT
- #define STRICT
- #endif
- #include <windows.h>
- extern int (*warand)();
- extern float (*warandf)();
- inline void * z_malloc(int x)
- {
- void* foo=malloc(x);
- if (foo) memset(foo,0,x);
- return foo;
- }
- #include <shlwapi.h>
- #include <malloc.h>
- #define uitoa(x,y) _itoa(x,y,10)
- #define atoui atoi
- #include <vorbis\vorbisfile.h>
- #include "c_string.h"
- #include "../Winamp/in2.h"
- extern In_Module mod;
- #include "resource.h"
- #define VER L"1.79"
- #define _NAME "Nullsoft Vorbis Decoder"
- extern "C"
- {
- extern const char *INI_FILE;
- extern const wchar_t *INI_DIRECTORY;
- }
- class CfgVar
- {
- private:
- String name;
- CfgVar * next;
- static CfgVar * list;
- public:
-
- static void ReadConfig();
- static void WriteConfig();
- //helpers
- static bool read_struct(const char *inifile, const char *section, const char * name,void * ptr,UINT size);
- static void write_struct(const char *inifile, const char *section, const char * name,void * ptr,UINT size);
- static void write_int(const char *inifile, const char *section, const char * name,int val);
- static int read_int(const char *inifile, const char *section,const char * name,int def);
- protected:
- CfgVar(const char * n) : name(n) {next=list;list=this;}
- virtual void Read(const char * name)=0;
- virtual void Write(const char * name)=0;
- };
- class CfgInt : private CfgVar
- {
- private:
- int def,value;
- public:
- CfgInt(const char * name,int _def) : CfgVar(name) {value=def=_def;}
- inline int operator=(int x) {value=x;return value;}
- inline operator int() {return value;}
- private:
- virtual void Read(const char * name);
- virtual void Write(const char * name);
- };
- class CfgString : private CfgVar, public StringW
- {
- private:
- StringW def;
- public:
- CfgString(const char * name,const char * _def) : CfgVar(name), StringW(_def), def(_def) {}
- private:
- virtual void Read(const char * name);
- virtual void Write(const char * name);
- };
- template<class T>
- class CfgStructT : private CfgVar
- {
- public:
- T data;
- CfgStructT(const char * name) : CfgVar(name) {}
- private:
- void Read(const char * name) { read_struct(INI_FILE, "in_vorbis",name,&data,sizeof(data));}
- void Write(const char * name) {if (IsValueDefault()) WritePrivateProfileStringA("in_vorbis", name, 0, INI_FILE); else write_struct(INI_FILE, "in_vorbis", name, &data, sizeof(data));}
- protected:
- virtual bool IsValueDefault() {return 0;}
- };
- class CfgFont : public CfgStructT<LOGFONT>
- {
- private:
- void get_def(LOGFONT * f) {memset(f,0,sizeof(LOGFONT));GetObject(GetStockObject(DEFAULT_GUI_FONT),sizeof(LOGFONT),f);}
- virtual bool IsValueDefault()
- {
- LOGFONT t;
- get_def(&t);
- return !memcmp(&data,&t,sizeof(LOGFONT));
- }
- public:
- CfgFont(const char * name) : CfgStructT<LOGFONT>(name)
- {
- get_def(&data);
- }
- };
- extern int32_t priority_tab[7];
- extern HINSTANCE hIns;
- extern CfgString cfg_ssave_format,cfg_dumpdir;
- int is_http(const char* url);
- class VorbisFile
- {
- protected:
- virtual int f_seek(__int64 offset,int whence)=0;
- virtual size_t f_read(UINT siz,void * ptr)=0;
- virtual UINT f_tell()=0;
- static int _f_close(void *);
- static int _f_seek(void* rs,__int64 offset,int whence);
- static size_t _f_read(void* ptr,size_t size,size_t nmemb,void * rs);
- static long _f_tell(void* rs);
- static ov_callbacks oc;
- static VorbisFile * Create_HTTP(const char * url,bool is_info);
- VorbisFile(const wchar_t * u, bool is_info) : url(u) {memset(&vf,0,sizeof(vf));stopping=0;abort_prebuf=0;avg_kbps=0;use_prebuf=0;primary=!is_info; baseoffs=0;}
- bool init();
- virtual void post_init() {};
- UINT avg_kbps;
- bool Aborting();
- __int64 baseoffs;
- public:
- enum {TYPE_LOCAL,TYPE_HTTP};
- virtual int GetType()=0;
- virtual bool IsLive() {return 0;}
- virtual void do_prebuf() {use_prebuf=1;abort_prebuf=0;};
- StringW url;
- String withlp;
- String stream_title;
- bool stopping,abort_prebuf,use_prebuf;
- bool primary;//display status messages or not
- OggVorbis_File vf;
- UINT get_avg_bitrate()
- {
- if (avg_kbps>0) return avg_kbps;
- vorbis_info * vi=ov_info(&vf,-1);
- if (!vi) return 0;
- return vi->bitrate_nominal/1000;
- }
- const char* get_meta(const char* tag,UINT c);
- void set_meta(const vorbis_comment * vc,int links);
- static VorbisFile * Create(const wchar_t * url,bool is_info);
- double Length() {return ov_time_total(&vf,-1);}
- double GetPos() {return ov_time_tell(&vf);}
- int Seek(double p);
- void Status(const wchar_t * zzz);
- virtual UINT FileSize()=0;
-
- virtual ~VorbisFile() {ov_clear(&vf);}
- virtual void Idle() {Sleep(10);}
- virtual void setBaseOffset(__int64 offs) { baseoffs=offs; }
- float GetGain();
- };
- extern VorbisFile * theFile;
- extern StringW cur_file;
- extern CRITICAL_SECTION sync;
- BOOL modify_file(const wchar_t* url,const vorbis_comment * comments,int links);
- void winampGetExtendedFileInfoW_Cleanup(void);
- void UpdateFileTimeChanged(const wchar_t *fn);
- void do_cfg(int s);
- bool KeywordMatch(const char *mainString, const char *keyword);
- class Info
- {
- public:
- Info(const wchar_t *filename);
- ~Info();
- bool Save();
- int Error() { return vc==0?1:0; }
- int GetNumMetadataItems();
- void EnumMetadata(int n,wchar_t *key,int keylen, wchar_t *val, int vallen);
- void RemoveMetadata(wchar_t * key);
- void RemoveMetadata(int n);
- void SetMetadata(wchar_t *key, wchar_t *val);
- void SetMetadata(int n, wchar_t *key, wchar_t *val);
- void SetTag(int n,wchar_t *key); // changes the key name
- private:
- const wchar_t *filename;
- vorbis_comment * vc;
- int numstreams, stream;
- };
- // {B6CB4A7C-A8D0-4c55-8E60-9F7A7A23DA0F}
- static const GUID playbackConfigGroupGUID =
- { 0xb6cb4a7c, 0xa8d0, 0x4c55, { 0x8e, 0x60, 0x9f, 0x7a, 0x7a, 0x23, 0xda, 0xf } };
- #endif //IN_VORBIS_MAIN_H
|