mirror of
https://github.com/claunia/flac.git
synced 2025-12-16 18:54:26 +00:00
initial import
This commit is contained in:
18
src/plugin_winamp2/include/Makefile.am
Normal file
18
src/plugin_winamp2/include/Makefile.am
Normal file
@@ -0,0 +1,18 @@
|
||||
# in_flac - Winamp2 FLAC input plugin
|
||||
# Copyright (C) 2000,2001,2002,2003 Josh Coalson
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
SUBDIRS = winamp2
|
||||
21
src/plugin_winamp2/include/winamp2/Makefile.am
Normal file
21
src/plugin_winamp2/include/winamp2/Makefile.am
Normal file
@@ -0,0 +1,21 @@
|
||||
# in_flac - Winamp2 FLAC input plugin
|
||||
# Copyright (C) 2000,2001,2002,2003 Josh Coalson
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
EXTRA_DIST = \
|
||||
frontend.h \
|
||||
in2.h \
|
||||
out.h
|
||||
441
src/plugin_winamp2/include/winamp2/frontend.h
Normal file
441
src/plugin_winamp2/include/winamp2/frontend.h
Normal file
@@ -0,0 +1,441 @@
|
||||
#ifndef _WAFE_H_
|
||||
#define _WAFE_H_
|
||||
/*
|
||||
** Winamp frontend/plug-in control API documentation v1.1.
|
||||
** By Justin Frankel. Updates by Christophe Thibault.
|
||||
** Copyright (C) 1997-2000, Nullsoft Inc.
|
||||
** Last updated: JUL.12.2000.
|
||||
**
|
||||
** Introduction
|
||||
** -----------------------
|
||||
** This file describes a means to easily communicate to Winamp
|
||||
** via the classic Win32 Message API.
|
||||
**
|
||||
** These definitions/code assume C/C++. Porting to VB/Delphi shouldn't
|
||||
** be too hard.
|
||||
**
|
||||
** First, you find the HWND of the Winamp main window. From a plug-in
|
||||
** you can easily extract this from the plug-in structure (hMainWindow,
|
||||
** hwndParent, whatever). For external apps, use:
|
||||
**
|
||||
** HWND hwnd_winamp = FindWindow("Winamp v1.x",NULL);
|
||||
**
|
||||
** (note: I know, we're in Winamp 2.x, but it's 1.x for compatibility)
|
||||
**
|
||||
** Once you have the hwnd_winamp, it's a good idea to check the version
|
||||
** number. To do this, you send a WM_WA_IPC message to hwnd_winamp.
|
||||
** Note that WM_WA_IPC is defined as Win32's WM_USER.
|
||||
**
|
||||
** Note that sometimes you might want to use PostMessage instead of
|
||||
** SendMessage.
|
||||
*/
|
||||
|
||||
#define WM_WA_IPC WM_USER
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
#define IPC_GETVERSION 0
|
||||
|
||||
/*
|
||||
** int version = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION);
|
||||
**
|
||||
** Version will be 0x20yx for winamp 2.yx. versions previous to Winamp 2.0
|
||||
** typically (but not always) use 0x1zyx for 1.zx versions. Weird, I know.
|
||||
**
|
||||
** The basic format for sending messages to Winamp is:
|
||||
** int result=SendMessage(hwnd_winamp,WM_WA_IPC,command_data,command);
|
||||
** (for the version check, command_data is 0).
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_DELETE 101
|
||||
|
||||
/*
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_DELETE);
|
||||
**
|
||||
** You can use IPC_DELETE to clear Winamp's internal playlist.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_STARTPLAY 102
|
||||
|
||||
/*
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_STARTPLAY);
|
||||
**
|
||||
** Using IPC_STARTPLAY is like hitting 'Play' in Winamp, mostly.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_ISPLAYING 104
|
||||
|
||||
/*
|
||||
** int res = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING);
|
||||
**
|
||||
** IPC_ISPLAYING returns the status of playback.
|
||||
** If it returns 1, it is playing. if it returns 3, it is paused,
|
||||
** if it returns 0, it is not playing.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETOUTPUTTIME 105
|
||||
|
||||
/*
|
||||
** int res = SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETOUTPUTTIME);
|
||||
**
|
||||
** IPC_GETOUTPUTTIME returns the position in milliseconds of the
|
||||
** current song (mode = 0), or the song length, in seconds (mode = 1).
|
||||
** Returns -1 if not playing or error.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_JUMPTOTIME 106
|
||||
|
||||
/* (requires Winamp 1.60+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,ms,IPC_JUMPTOTIME);
|
||||
** IPC_JUMPTOTIME sets the position in milliseconds of the
|
||||
** current song (approximately).
|
||||
** Returns -1 if not playing, 1 on eof, or 0 if successful
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_WRITEPLAYLIST 120
|
||||
|
||||
/* (requires Winamp 1.666+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_WRITEPLAYLIST);
|
||||
**
|
||||
** IPC_WRITEPLAYLIST writes the current playlist to <winampdir>\\Winamp.m3u,
|
||||
** and returns the current playlist position.
|
||||
** Kinda obsoleted by some of the 2.x new stuff, but still good for when
|
||||
** using a front-end (instead of a plug-in)
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_SETPLAYLISTPOS 121
|
||||
|
||||
/* (requires Winamp 2.0+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,position,IPC_SETPLAYLISTPOS)
|
||||
**
|
||||
** IPC_SETPLAYLISTPOS sets the playlsit position to 'position'.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_SETVOLUME 122
|
||||
|
||||
/* (requires Winamp 2.0+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,volume,IPC_SETVOLUME);
|
||||
**
|
||||
** IPC_SETVOLUME sets the volume of Winamp (from 0-255).
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_SETPANNING 123
|
||||
|
||||
/* (requires Winamp 2.0+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,panning,IPC_SETPANNING);
|
||||
**
|
||||
** IPC_SETPANNING sets the panning of Winamp (from 0 (left) to 255 (right)).
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETLISTLENGTH 124
|
||||
|
||||
/* (requires Winamp 2.0+)
|
||||
** int length = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTLENGTH);
|
||||
**
|
||||
** IPC_GETLISTLENGTH returns the length of the current playlist, in
|
||||
** tracks.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_SETSKIN 200
|
||||
|
||||
/* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)"skinname",IPC_SETSKIN);
|
||||
**
|
||||
** IPC_SETSKIN sets the current skin to "skinname". Note that skinname
|
||||
** can be the name of a skin, a skin .zip file, with or without path.
|
||||
** If path isn't specified, the default search path is the winamp skins
|
||||
** directory.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETSKIN 201
|
||||
|
||||
/* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)skinname_buffer,IPC_GETSKIN);
|
||||
**
|
||||
** IPC_GETSKIN puts the directory where skin bitmaps can be found
|
||||
** into skinname_buffer.
|
||||
** skinname_buffer must be MAX_PATH characters in length.
|
||||
** When using a .zip'd skin file, it'll return a temporary directory
|
||||
** where the ZIP was decompressed.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_EXECPLUG 202
|
||||
|
||||
/* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)"vis_file.dll",IPC_EXECPLUG);
|
||||
**
|
||||
** IPC_EXECPLUG executes a visualization plug-in pointed to by WPARAM.
|
||||
** the format of this string can be:
|
||||
** "vis_whatever.dll"
|
||||
** "vis_whatever.dll,0" // (first mod, file in winamp plug-in dir)
|
||||
** "C:\\dir\\vis_whatever.dll,1"
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETPLAYLISTFILE 211
|
||||
|
||||
/* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
|
||||
** char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE);
|
||||
**
|
||||
** IPC_GETPLAYLISTFILE gets the filename of the playlist entry [index].
|
||||
** returns a pointer to it. returns NULL on error.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETPLAYLISTTITLE 212
|
||||
|
||||
/* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
|
||||
** char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTTITLE);
|
||||
**
|
||||
** IPC_GETPLAYLISTTITLE gets the title of the playlist entry [index].
|
||||
** returns a pointer to it. returns NULL on error.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETLISTPOS 125
|
||||
|
||||
/* (requires Winamp 2.05+)
|
||||
** int pos=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS);
|
||||
**
|
||||
** IPC_GETLISTPOS returns the playlist position. A lot like IPC_WRITEPLAYLIST
|
||||
** only faster since it doesn't have to write out the list. Heh, silly me.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETINFO 126
|
||||
|
||||
/* (requires Winamp 2.05+)
|
||||
** int inf=SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETINFO);
|
||||
**
|
||||
** IPC_GETINFO returns info about the current playing song. The value
|
||||
** it returns depends on the value of 'mode'.
|
||||
** Mode Meaning
|
||||
** ------------------
|
||||
** 0 Samplerate (i.e. 44100)
|
||||
** 1 Bitrate (i.e. 128)
|
||||
** 2 Channels (i.e. 2)
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_GETEQDATA 127
|
||||
|
||||
/* (requires Winamp 2.05+)
|
||||
** int data=SendMessage(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA);
|
||||
**
|
||||
** IPC_GETEQDATA queries the status of the EQ.
|
||||
** The value returned depends on what 'pos' is set to:
|
||||
** Value Meaning
|
||||
** ------------------
|
||||
** 0-9 The 10 bands of EQ data. 0-63 (+20db - -20db)
|
||||
** 10 The preamp value. 0-63 (+20db - -20db)
|
||||
** 11 Enabled. zero if disabled, nonzero if enabled.
|
||||
** 12 Autoload. zero if disabled, nonzero if enabled.
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_SETEQDATA 128
|
||||
/* (requires Winamp 2.05+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA);
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SETEQDATA);
|
||||
**
|
||||
** IPC_SETEQDATA sets the value of the last position retrieved
|
||||
** by IPC_GETEQDATA.
|
||||
*/
|
||||
|
||||
#define IPC_ADDBOOKMARK 129
|
||||
/* (requires Winamp 2.4+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_ADDBOOKMARK);
|
||||
**
|
||||
** IPC_ADDBOOKMARK will add the specified file to the Winamp bookmark list.
|
||||
*/
|
||||
|
||||
#define IPC_RESTARTWINAMP 135
|
||||
/* (requires Winamp 2.2+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_RESTARTWINAMP);
|
||||
**
|
||||
** IPC_RESTARTWINAMP will restart Winamp (isn't that obvious ? :)
|
||||
*/
|
||||
|
||||
#define IPC_MBOPEN 241
|
||||
/* (requires Winamp 2.05+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_MBOPEN);
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPEN);
|
||||
**
|
||||
** IPC_MBOPEN will open a new URL in the minibrowser. if url is NULL, it will open the Minibrowser window.
|
||||
*/
|
||||
|
||||
#define IPC_INETAVAILABLE 242
|
||||
/* (requires Winamp 2.05+)
|
||||
** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_INETAVAILABLE);
|
||||
**
|
||||
** IPC_INETAVAILABLE will return 1 if the Internet connection is available for Winamp.
|
||||
*/
|
||||
|
||||
#define IPC_UPDTITLE 243
|
||||
/* (requires Winamp 2.2+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_UPDTITLE);
|
||||
**
|
||||
** IPC_UPDTITLE will ask Winamp to update the informations about the current title.
|
||||
*/
|
||||
|
||||
#define IPC_CHANGECURRENTFILE 245
|
||||
/* (requires Winamp 2.05+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_CHANGECURRENTFILE);
|
||||
**
|
||||
** IPC_CHANGECURRENTFILE will set the current playlist item.
|
||||
*/
|
||||
|
||||
#define IPC_GETMBURL 246
|
||||
/* (requires Winamp 2.2+)
|
||||
** char buffer[4096]; // Urls can be VERY long
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)buffer,IPC_GETMBURL);
|
||||
**
|
||||
** IPC_GETMBURL will retrieve the current Minibrowser URL into buffer.
|
||||
*/
|
||||
|
||||
#define IPC_REFRESHPLCACHE 247
|
||||
/* (requires Winamp 2.2+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_REFRESHPLCACHE);
|
||||
**
|
||||
** IPC_REFRESHPLCACHE will flush the playlist cache buffer.
|
||||
*/
|
||||
|
||||
#define IPC_MBBLOCK 248
|
||||
/* (requires Winamp 2.4+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_MBBLOCK);
|
||||
**
|
||||
** IPC_MBBLOCK will block the Minibrowser from updates if value is set to 1
|
||||
*/
|
||||
|
||||
#define IPC_MBOPENREAL 249
|
||||
/* (requires Winamp 2.4+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPENREAL);
|
||||
**
|
||||
** IPC_MBOPENREAL works the same as IPC_MBOPEN except that it will works even if
|
||||
** IPC_MBBLOCK has been set to 1
|
||||
*/
|
||||
|
||||
#define IPC_GET_SHUFFLE 250
|
||||
/* (requires Winamp 2.4+)
|
||||
** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_SHUFFLE);
|
||||
**
|
||||
** IPC_GET_SHUFFLE returns the status of the Shuffle option (1 if set)
|
||||
*/
|
||||
|
||||
#define IPC_GET_REPEAT 251
|
||||
/* (requires Winamp 2.4+)
|
||||
** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_REPEAT);
|
||||
**
|
||||
** IPC_GET_REPEAT returns the status of the Repeat option (1 if set)
|
||||
*/
|
||||
|
||||
#define IPC_SET_SHUFFLE 252
|
||||
/* (requires Winamp 2.4+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_SHUFFLE);
|
||||
**
|
||||
** IPC_SET_SHUFFLE sets the status of the Shuffle option (1 to turn it on)
|
||||
*/
|
||||
|
||||
#define IPC_SET_REPEAT 253
|
||||
/* (requires Winamp 2.4+)
|
||||
** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_REPEAT);
|
||||
**
|
||||
** IPC_SET_REPEAT sets the status of the Repeat option (1 to turn it on)
|
||||
*/
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
/*
|
||||
** Some API calls tend to require that you send data via WM_COPYDATA
|
||||
** instead of WM_USER. Such as IPC_PLAYFILE:
|
||||
*/
|
||||
|
||||
#define IPC_PLAYFILE 100
|
||||
|
||||
/*
|
||||
** COPYDATASTRUCT cds;
|
||||
** cds.dwData = IPC_PLAYFILE;
|
||||
** cds.lpData = (void *) "file.mp3";
|
||||
** cds.cbData = strlen((char *) cds.lpData)+1; // include space for null char
|
||||
** SendMessage(hwnd_winamp,WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);
|
||||
**
|
||||
** This will play the file "file.mp3".
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#define IPC_CHDIR 103
|
||||
|
||||
/*
|
||||
** COPYDATASTRUCT cds;
|
||||
** cds.dwData = IPC_CHDIR;
|
||||
** cds.lpData = (void *) "c:\\download";
|
||||
** cds.cbData = strlen((char *) cds.lpData)+1; // include space for null char
|
||||
** SendMessage(hwnd_winamp,WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);
|
||||
**
|
||||
** This will make Winamp change to the directory C:\\download
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
/*
|
||||
** Finally there are some WM_COMMAND messages that you can use to send
|
||||
** Winamp misc commands.
|
||||
**
|
||||
** To send these, use:
|
||||
**
|
||||
** SendMessage(hwnd_winamp, WM_COMMAND,command_name,0);
|
||||
*/
|
||||
|
||||
#define WINAMP_OPTIONS_EQ 40036 // toggles the EQ window
|
||||
#define WINAMP_OPTIONS_PLEDIT 40040 // toggles the playlist window
|
||||
#define WINAMP_VOLUMEUP 40058 // turns the volume up a little
|
||||
#define WINAMP_VOLUMEDOWN 40059 // turns the volume down a little
|
||||
#define WINAMP_FFWD5S 40060 // fast forwards 5 seconds
|
||||
#define WINAMP_REW5S 40061 // rewinds 5 seconds
|
||||
|
||||
// the following are the five main control buttons, with optionally shift
|
||||
// or control pressed
|
||||
// (for the exact functions of each, just try it out)
|
||||
#define WINAMP_BUTTON1 40044
|
||||
#define WINAMP_BUTTON2 40045
|
||||
#define WINAMP_BUTTON3 40046
|
||||
#define WINAMP_BUTTON4 40047
|
||||
#define WINAMP_BUTTON5 40048
|
||||
#define WINAMP_BUTTON1_SHIFT 40144
|
||||
#define WINAMP_BUTTON2_SHIFT 40145
|
||||
#define WINAMP_BUTTON3_SHIFT 40146
|
||||
#define WINAMP_BUTTON4_SHIFT 40147
|
||||
#define WINAMP_BUTTON5_SHIFT 40148
|
||||
#define WINAMP_BUTTON1_CTRL 40154
|
||||
#define WINAMP_BUTTON2_CTRL 40155
|
||||
#define WINAMP_BUTTON3_CTRL 40156
|
||||
#define WINAMP_BUTTON4_CTRL 40157
|
||||
#define WINAMP_BUTTON5_CTRL 40158
|
||||
|
||||
#define WINAMP_FILE_PLAY 40029 // pops up the load file(s) box
|
||||
#define WINAMP_OPTIONS_PREFS 40012 // pops up the preferences
|
||||
#define WINAMP_OPTIONS_AOT 40019 // toggles always on top
|
||||
#define WINAMP_HELP_ABOUT 40041 // pops up the about box :)
|
||||
|
||||
|
||||
/*
|
||||
** EOF.. Enjoy.
|
||||
*/
|
||||
|
||||
#endif
|
||||
104
src/plugin_winamp2/include/winamp2/in2.h
Normal file
104
src/plugin_winamp2/include/winamp2/in2.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/* Standard Winamp input-plugin header
|
||||
*/
|
||||
|
||||
#include "out.h"
|
||||
|
||||
// note: exported symbol is now winampGetInModule2.
|
||||
|
||||
#define IN_VER 0x100
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int version; // module type (IN_VER)
|
||||
char *description; // description of module, with version string
|
||||
|
||||
HWND hMainWindow; // winamp's main window (filled in by winamp)
|
||||
HINSTANCE hDllInstance; // DLL instance handle (Also filled in by winamp)
|
||||
|
||||
char *FileExtensions; // "mp3\0Layer 3 MPEG\0mp2\0Layer 2 MPEG\0mpg\0Layer 1 MPEG\0"
|
||||
// May be altered from Config, so the user can select what they want
|
||||
|
||||
int is_seekable; // is this stream seekable?
|
||||
int UsesOutputPlug; // does this plug-in use the output plug-ins? (musn't ever change, ever :)
|
||||
|
||||
void (*Config)(HWND hwndParent); // configuration dialog
|
||||
void (*About)(HWND hwndParent); // about dialog
|
||||
|
||||
void (*Init)(); // called at program init
|
||||
void (*Quit)(); // called at program quit
|
||||
|
||||
void (*GetFileInfo)(char *file, char *title, int *length_in_ms); // if file == NULL, current playing is used
|
||||
int (*InfoBox)(char *file, HWND hwndParent);
|
||||
|
||||
int (*IsOurFile)(char *fn); // called before extension checks, to allow detection of mms://, etc
|
||||
// playback stuff
|
||||
int (*Play)(char *fn); // return zero on success, -1 on file-not-found, some other value on other (stopping winamp) error
|
||||
void (*Pause)(); // pause stream
|
||||
void (*UnPause)(); // unpause stream
|
||||
int (*IsPaused)(); // ispaused? return 1 if paused, 0 if not
|
||||
void (*Stop)(); // stop (unload) stream
|
||||
|
||||
// time stuff
|
||||
int (*GetLength)(); // get length in ms
|
||||
int (*GetOutputTime)(); // returns current output time in ms. (usually returns outMod->GetOutputTime()
|
||||
void (*SetOutputTime)(int time_in_ms); // seeks to point in stream (in ms). Usually you signal yoru thread to seek, which seeks and calls outMod->Flush()..
|
||||
|
||||
// volume stuff
|
||||
void (*SetVolume)(int volume); // from 0 to 255.. usually just call outMod->SetVolume
|
||||
void (*SetPan)(int pan); // from -127 to 127.. usually just call outMod->SetPan
|
||||
|
||||
// in-window builtin vis stuff
|
||||
|
||||
void (*SAVSAInit)(int maxlatency_in_ms, int srate); // call once in Play(). maxlatency_in_ms should be the value returned from outMod->Open()
|
||||
// call after opening audio device with max latency in ms and samplerate
|
||||
void (*SAVSADeInit)(); // call in Stop()
|
||||
|
||||
|
||||
// simple vis supplying mode
|
||||
void (*SAAddPCMData)(void *PCMData, int nch, int bps, int timestamp);
|
||||
// sets the spec data directly from PCM data
|
||||
// quick and easy way to get vis working :)
|
||||
// needs at least 576 samples :)
|
||||
|
||||
// advanced vis supplying mode, only use if you're cool. Use SAAddPCMData for most stuff.
|
||||
int (*SAGetMode)(); // gets csa (the current type (4=ws,2=osc,1=spec))
|
||||
// use when calling SAAdd()
|
||||
void (*SAAdd)(void *data, int timestamp, int csa); // sets the spec data, filled in by winamp
|
||||
|
||||
|
||||
// vis stuff (plug-in)
|
||||
// simple vis supplying mode
|
||||
void (*VSAAddPCMData)(void *PCMData, int nch, int bps, int timestamp); // sets the vis data directly from PCM data
|
||||
// quick and easy way to get vis working :)
|
||||
// needs at least 576 samples :)
|
||||
|
||||
// advanced vis supplying mode, only use if you're cool. Use VSAAddPCMData for most stuff.
|
||||
int (*VSAGetMode)(int *specNch, int *waveNch); // use to figure out what to give to VSAAdd
|
||||
void (*VSAAdd)(void *data, int timestamp); // filled in by winamp, called by plug-in
|
||||
|
||||
|
||||
// call this in Play() to tell the vis plug-ins the current output params.
|
||||
void (*VSASetInfo)(int nch, int srate);
|
||||
|
||||
|
||||
// dsp plug-in processing:
|
||||
// (filled in by winamp, called by input plug)
|
||||
|
||||
// returns 1 if active (which means that the number of samples returned by dsp_dosamples
|
||||
// could be greater than went in.. Use it to estimate if you'll have enough room in the
|
||||
// output buffer
|
||||
int (*dsp_isactive)();
|
||||
|
||||
// returns number of samples to output. This can be as much as twice numsamples.
|
||||
// be sure to allocate enough buffer for samples, then.
|
||||
int (*dsp_dosamples)(short int *samples, int numsamples, int bps, int nch, int srate);
|
||||
|
||||
|
||||
// eq stuff
|
||||
void (*EQSet)(int on, char data[10], int preamp); // 0-64 each, 31 is +0, 0 is +12, 63 is -12. Do nothing to ignore.
|
||||
|
||||
// info setting (filled in by winamp)
|
||||
void (*SetInfo)(int bitrate, int srate, int stereo, int synched); // if -1, changes ignored? :)
|
||||
|
||||
Out_Module *outMod; // filled in by winamp, optionally used :)
|
||||
} In_Module;
|
||||
55
src/plugin_winamp2/include/winamp2/out.h
Normal file
55
src/plugin_winamp2/include/winamp2/out.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/* Standard Winamp output-plugin header
|
||||
*/
|
||||
|
||||
#define OUT_VER 0x10
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int version; // module version (OUT_VER)
|
||||
char *description; // description of module, with version string
|
||||
int id; // module id. each input module gets its own. non-nullsoft modules should
|
||||
// be >= 65536.
|
||||
|
||||
HWND hMainWindow; // winamp's main window (filled in by winamp)
|
||||
HINSTANCE hDllInstance; // DLL instance handle (filled in by winamp)
|
||||
|
||||
void (*Config)(HWND hwndParent); // configuration dialog
|
||||
void (*About)(HWND hwndParent); // about dialog
|
||||
|
||||
void (*Init)(); // called when loaded
|
||||
void (*Quit)(); // called when unloaded
|
||||
|
||||
int (*Open)(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms);
|
||||
// returns >=0 on success, <0 on failure
|
||||
// NOTENOTENOTE: bufferlenms and prebufferms are ignored in most if not all output plug-ins.
|
||||
// ... so don't expect the max latency returned to be what you asked for.
|
||||
// returns max latency in ms (0 for diskwriters, etc)
|
||||
// bufferlenms and prebufferms must be in ms. 0 to use defaults.
|
||||
// prebufferms must be <= bufferlenms
|
||||
|
||||
void (*Close)(); // close the ol' output device.
|
||||
|
||||
int (*Write)(char *buf, int len);
|
||||
// 0 on success. Len == bytes to write (<= 8192 always). buf is straight audio data.
|
||||
// 1 returns not able to write (yet). Non-blocking, always.
|
||||
|
||||
int (*CanWrite)(); // returns number of bytes possible to write at a given time.
|
||||
// Never will decrease unless you call Write (or Close, heh)
|
||||
|
||||
int (*IsPlaying)(); // non0 if output is still going or if data in buffers waiting to be
|
||||
// written (i.e. closing while IsPlaying() returns 1 would truncate the song
|
||||
|
||||
int (*Pause)(int pause); // returns previous pause state
|
||||
|
||||
void (*SetVolume)(int volume); // volume is 0-255
|
||||
void (*SetPan)(int pan); // pan is -128 to 128
|
||||
|
||||
void (*Flush)(int t); // flushes buffers and restarts output at time t (in ms)
|
||||
// (used for seeking)
|
||||
|
||||
int (*GetOutputTime)(); // returns played time in MS
|
||||
int (*GetWrittenTime)(); // returns time written in MS (used for synching up vis stuff)
|
||||
|
||||
} Out_Module;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user