Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
flac
Commits
4a103840
Commit
4a103840
authored
Mar 01, 2001
by
Josh Coalson
Browse files
initial import
parent
f1b114e9
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/plugin_winamp3/Makefile.vc
0 → 100644
View file @
4a103840
!
include
<win32.mak>
!IFDEF
DEBUG
.c.obj
:
$(cc)
/GX
$(cdebug)
$(cflags)
$(cvarsdll)
/I
"..
\.
.
\i
nclude"
/I
".
\i
nclude"
-DSTRICT
-YX
/Od /D
"_DEBUG"
$<
!else
.c.obj
:
$(cc)
/O2
$(crelease)
$(cflags)
$(cvarsdll)
/I
"..
\.
.
\i
nclude"
/I
".
\i
nclude"
-DSTRICT
-YX
-DNODEBUG
$<
!endif
C_FILES
=
\
in_flac.c
OBJS
=
$(C_FILES:.c=.obj)
all
:
in_flac.dll
in_flac.dll
:
$(OBJS)
link.exe /dll /libpath:
"..
\.
.
\o
bj
\l
ib"
-out
:../../obj/bin/
$*
.dll
$(OBJS)
libFLAC.lib user32.lib kernel32.lib
clean
:
-
del
*
.obj
*
.pch
-
del ..
\.
.
\o
bj
\b
in
\i
n_flac.
*
src/plugin_winamp3/core_api.h
0 → 100644
View file @
4a103840
/* Winamp 3 Player core api v0.1
** (c)2000 nullsoft jcf/ct/dk
** Notes:
** Keep in mind that this header file is subject to change prior to the
** release of Winamp 3. The ability to configure plug-ins has yet to be
** added and is the first and foremost concern of the engineering team.
*/
#ifndef __CORE_API_H
#define __CORE_API_H
// Visual C 6 makes big unaligned dlls. the following will correct it
#ifndef _DEBUG
// release optimizations
// /Og (global optimizations), /Os (favor small code), /Oy (no frame pointers)
#pragma optimize("gsy",on)
#pragma comment(linker,"/RELEASE")
// set the 512-byte alignment
#pragma comment(linker,"/opt:nowin98")
#endif
// Use Assert in your code to catch errors that shouldn't happen, when compiled in release mode, they are #defined out
#ifndef ASSERT
#ifdef _DEBUG
#define ASSERT(x) if (!(x)) MessageBox(NULL,"ASSERT FAILED: " #x,"ASSERT FAILED in " __FILE__ ,MB_OK|MB_ICONSTOP);
#else
#define ASSERT(x)
#endif
#endif
/* CLASS DESCRIPTIONS */
/* WReader
** File reader module class, ie. opens and reads files, streams
*/
class
WReader
;
/* WInputInfo
** Class that returns information (length, title, metadata) about a specified file
*/
class
WInputInfo
;
/* WInfo_callback
** Player's interface that provides Winamp 3 core functions to your WInputInfo classes
*/
class
WInfo_callback
;
/* WInputSource
** Input Source manager base class, ie. decodes mp3's, wavs
*/
class
WInputSource
;
/* WOutputFilter
** Abstract base class for any Output Filter plug-in, ie. changes pitch, converts format, outputs to speakers
*/
class
WOutputFilter
;
/* WPlayer_callback
** Player's interface that provides Winamp 3 core functions to your Input Sources and Output Filter plug-ins
** (Getting a reader for opening a file, sending stuff about what's going on to the Winamp 3 core)
*/
class
WPlayer_callback
;
class
WPlayer_callback
{
public:
/* GetReader
** Allows your Input Source and Output Filter plugins to request a reader from Winamp,
** so you don't have to worry about opening files or streams
*/
virtual
WReader
*
GetReader
(
char
*
url
)
=
0
;
/* The 3 following functions allows your Input Source and Output Filter plugins to send error/warning/status
** messages back to the Winamp 3 core
*/
/* Error
** playback should stop (soundcard driver error, etc)
*/
virtual
void
Error
(
char
*
reason
)
=
0
;
/* Warning
** warning (something recoverable, like file not found, etc)
*/
virtual
void
Warning
(
char
*
warning
)
=
0
;
/* Status
** status update (nothing really wrong)
*/
virtual
void
Status
(
char
*
status
)
=
0
;
/* TitleChange
** should be called if the current file titlename changes during the decoding
*/
virtual
void
TitleChange
(
char
*
new_title
)
=
0
;
/* InfoChange
** should be called if the infos about the current file changes during the decoding
*/
virtual
void
InfoChange
(
char
*
new_info_str
,
int
new_length
)
=
0
;
/* UrlChange
** should be called if the current file associated URL changes during the decoding
*/
virtual
void
UrlChange
(
char
*
new_url
)
=
0
;
};
class
WInfo_callback
{
public:
/* GetReader
** Allows your WInfo classes to request a reader from Winamp
** so you don't have to worry about opening files or streams
*/
virtual
WReader
*
GetReader
(
char
*
url
)
=
0
;
};
class
WInputInfo
{
public:
/* WInputInfo
** WInputInfo constructor
*/
WInputInfo
(){
};
/* m_info
** Filled by Winamp. Pointer to WInputInfo callback function
*/
WInfo_callback
*
m_info
;
/* Open
** Called by Winamp to request informations about a specified media (file, url, etc...)
** returns 0 if succesful, 1 if not
**
** You must open, get all information and close the specified file here and store
** the useful information into member elements for quick access by other functions
*/
virtual
int
Open
(
char
*
url
)
{
return
1
;
}
/* GetTitle
** Called by Winamp to get the decoded title about the file opened
** i.e. id3 title name, etc...
*/
virtual
void
GetTitle
(
char
*
buf
,
int
maxlen
)
{
if
(
maxlen
>
0
)
buf
[
0
]
=
0
;
};
/* GetInfoString
** Called by Winamp to get extra informations about the file opened
** i.e. "160kbps stereo 44Khz" for MP3 files,"4 channels" for MOD files,etc...
*/
virtual
void
GetInfoString
(
char
*
buf
,
int
maxlen
)
{
if
(
maxlen
>
0
)
buf
[
0
]
=
0
;
};
/* GetLength
** Called by Winamp to retrieves media type length in milliseconds
** returns -1 if length is undefined/infinite
*/
virtual
int
GetLength
(
void
)
{
return
-
1
;
};
/* GetMetaData
** Fetches metadata by attribute name (Artist, Album, Bitrate, etc...)
** attribute names are non case-sensitive.
** returns size of data
*/
virtual
int
GetMetaData
(
char
*
name
,
char
*
data
,
int
data_len
)
{
if
(
data
&&
data_len
>
0
)
*
data
=
0
;
return
0
;
}
/* ~WInputInfo
** WInputInfo virtual destructor
*/
virtual
~
WInputInfo
()
{
};
};
/* WINAMP Output Filter NOTIFY MESSAGES
** Messages returned to notify Output Filter plug-ins of events
*/
typedef
enum
{
/* WOFNM_FILETITLECHANGE
** Sent when the song changes
** param1=new filename song
** param2=new title song
*/
WOFNM_FILETITLECHANGE
=
1024
,
/* WOFNM_ENDOFDECODE
** Sent when decoding ends
*/
WOFNM_ENDOFDECODE
,
}
WOutputFilterNotifyMsg
;
class
WOutputFilter
{
protected:
/* WOutputFilter
** WOutputFilter constructor
*/
WOutputFilter
()
{
m_next
=
NULL
;
};
public:
/* m_player
** Filled by Winamp. Pointer to Winamp 3 core player interface
*/
WPlayer_callback
*
m_player
;
/* m_next
** Internally used by Winamp. Pointer to next activated Output Filter
*/
WOutputFilter
*
m_next
;
/* ~WOutputFilter
** WOutputFilter destructor
*/
virtual
~
WOutputFilter
()
{
};
/* GetDescription
** Retrieves your plug-in's text description
*/
virtual
char
*
GetDescription
()
{
return
"Unknown"
;
};
/* ProcessSamples
** Render data as it receives it
** sampledata: Data to process
** bytes: number of bytes to process
** bps: Bits per sample (8 or 16)
** nch: Number of channels (1 or 2)
** srate: Sample rate in Hz
** killswitch: Will be set to 1 by winamp if stop if requested. Poll the pointed value very often to
** make sure Winamp doesn't hang
**
** Returns the number of processed bytes or -1 if unable to open the device or an error occured.
**
** You have to open your device (ie. Directsound) the first time this function is called.
*/
virtual
int
ProcessSamples
(
char
*
sampledata
,
int
bytes
,
int
*
bps
,
int
*
nch
,
int
*
srate
,
bool
*
killswitch
)
{
return
bytes
;
}
/* FlushSamples
** Flushes output buffers so that all is written
*/
virtual
void
FlushSamples
(
bool
*
killswitch
)
{
};
/* Restart
** Called by Winamp after a seek
*/
virtual
void
Restart
(
void
)
{
}
/* GetLatency
** Returns < 0 for a final output latency, > 0 for an additive
*/
virtual
int
GetLatency
(
void
)
{
return
0
;
}
/* Pause
** Suspends output
*/
virtual
void
Pause
(
int
pause
)
{
}
/* ShutDown
** Completely stops output
**
** Close your device here (not in destructor)
*/
virtual
void
ShutDown
(
void
)
{
}
/* SetVolume
** Sets the volume (0 to 255)
** return 1 if volume successfully modified
*/
virtual
int
SetVolume
(
int
volume
)
{
return
0
;
}
/* SetPan
** Sets Left-Right sound balance (-127 to 127)
** return 1 if pan successfully modified
*/
virtual
int
SetPan
(
int
pan
)
{
return
0
;
}
/* Notify
** Called by Winamp to notify what's going on
*/
virtual
void
Notify
(
WOutputFilterNotifyMsg
msg
,
int
data1
,
int
data2
)
{
}
};
class
WInputSource
{
protected:
/* WInputSource
** WInputSource constructor
*/
WInputSource
(){
};
public:
/* m_player
** Filled by Winamp. Pointer to Winamp 3 core interface
*/
WPlayer_callback
*
m_player
;
/* GetDescription
** Retrieves your plug-in's text description
*/
virtual
char
*
GetDescription
()
{
return
"Unknown"
;
};
/* UsesOutputFilters
** Returns whether or not the Output Filter pipeline can be used
*/
virtual
int
UsesOutputFilters
(
void
)
{
return
1
;
}
/* Open
** Used to open and prepare input media type
*/
virtual
int
Open
(
char
*
url
,
bool
*
killswitch
)
=
0
;
/* GetSamples
** This function must fill bps, nch and srate.
** Here, you have to fill the sample_buffer with decoded data. Be sure to fill it with the specified
** size (bytes). Use an internal buffer, etc ...
**
** sample_buffer: buffer to put decoded data into
** bytes: size of the sample_buffer
** bps: Bits par sample (8 or 16)
** nch: Number of channels (1 or 2)
** srate: Sample rate in Hz
** killswitch: Will be set to 1 by winamp if stop if requested. Poll the pointed value very often to
** make sure Winamp doesn't hang
*/
virtual
int
GetSamples
(
char
*
sample_buffer
,
int
bytes
,
int
*
bps
,
int
*
nch
,
int
*
srate
,
bool
*
killswitch
)
=
0
;
/* SetVolume
** Sets the volume (0 to 255)
** Return 1 if volume has been set
*/
virtual
int
SetVolume
(
int
volume
)
{
return
0
;
};
/* SetPan
** Sets Left-Right sound balance (-127 to 127)
** return 1 if pan successfully modified
*/
virtual
int
SetPan
(
int
pan
)
{
return
0
;
};
/* SetPosition
** Sets position in ms. returns 0 on success, 1 if seek impossible
*/
virtual
int
SetPosition
(
int
)
=
0
;
/* Pause
** Suspends input
*/
virtual
void
Pause
(
int
pause
)
{
};
/* GetPosition
** Retrieve position in milliseconds
*/
virtual
int
GetPosition
(
void
)
{
return
0
;
}
/* GetTitle
** Called by Winamp to get the decoded title about the file opened
** i.e. stream name, id3 title name, etc...
*/
virtual
void
GetTitle
(
char
*
buf
,
int
maxlen
)
{
if
(
maxlen
>
0
)
buf
[
0
]
=
0
;
};
/* GetInfoString
** Called by Winamp to get extra informations about the file openend
** i.e. "32kbps 44khz", etc...
*/
virtual
void
GetInfoString
(
char
*
buf
,
int
maxlen
)
{
if
(
maxlen
>
0
)
buf
[
0
]
=
0
;
};
/* GetLength
** Called by Winamp to retrieves media type length in milliseconds
** returns -1 if length is undefined/infinite
*/
virtual
int
GetLength
(
void
)
{
return
-
1
;
}
/* ~WInputSource
** ~WInputSource virtual destructor
*/
virtual
~
WInputSource
()
{
};
};
class
WReader
{
protected:
/* WReader
** WReader constructor
*/
WReader
()
{
}
public:
/* m_player
** Filled by Winamp. Pointer to Winamp 3 core interface
*/
WPlayer_callback
*
m_player
;
/* GetDescription
** Retrieves your plug-in's text description
*/
virtual
char
*
GetDescription
()
{
return
"Unknown"
;
};
/* Open
** Used to open a file, return 0 on success
*/
virtual
int
Open
(
char
*
url
,
bool
*
killswitch
)
=
0
;
/* Read
** Returns number of BYTES read (if < length then eof or killswitch)
*/
virtual
int
Read
(
char
*
buffer
,
int
length
,
bool
*
killswitch
)
=
0
;
/* GetLength
** Returns length of the entire file in BYTES, return -1 on unknown/infinite (as for a stream)
*/
virtual
int
GetLength
(
void
)
=
0
;
/* CanSeek
** Returns 1 if you can skip ahead in the file, 0 if not
*/
virtual
int
CanSeek
(
void
)
=
0
;
/* Seek
** Jump to a certain absolute position
*/
virtual
int
Seek
(
int
position
,
bool
*
killswitch
)
=
0
;
/* GetHeader
** Retrieve header. Used in read_http to retrieve the HTTP header
*/
virtual
char
*
GetHeader
(
char
*
name
)
{
return
0
;
}
/* ~WReader
** WReader virtual destructor
*/
virtual
~
WReader
()
{
}
};
/* DLL PLUGINS EXPORT STRUCTURES */
#define READ_VER 0x100
#define IN_VER 0x100
#define OF_VER 0x100
typedef
struct
{
/* version
** Version revision number
*/
int
version
;
/* description
** Text description of the reader plug-in
*/
char
*
description
;
/* create
** Function pointer to create a reader module
*/
WReader
*
(
*
create
)();
/* ismine
** Determines whether or not a file should be read by this plug-in
*/
int
(
*
ismine
)(
char
*
url
);
}
reader_source
;
typedef
struct
{
/* version
** Version revision number
*/
int
version
;
/* description
** Text description of the input plug-in
*/
char
*
description
;
/* extension_list
** Defines all the supported filetypes by this input plug-in
** In semicolon delimited format ("ext;desc;ext;desc" etc).
*/
char
*
extension_list
;
/* ismine
** called before extension checks, to allow detection of tone://,http://, etc
** Determines whether or not a file type should be decoded by this plug-in
*/
int
(
*
ismine
)(
char
*
filename
);
/* create
** Function pointer to create a decoder module
*/
WInputSource
*
(
*
create
)(
void
);
/* createinfo
** Function pointer to create a decoder module information
*/
WInputInfo
*
(
*
createinfo
)(
void
);
}
input_source
;
typedef
struct
{
/* version
** Version revision number
*/
int
version
;
/* description
** Text description of the output plug-in
*/
char
*
description
;
/* create
** Function pointer to create an Output Filter
*/
WOutputFilter
*
(
*
create
)();
}
output_filter
;
#endif
src/plugin_winamp3/in_flac.cpp
0 → 100644
View file @
4a103840
/* in_flac - Winamp3 FLAC input plugin
* Copyright (C) 2001 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.
*/
#include
<windows.h>
#include
<stdio.h>
#include
"core_api.h"
static
char
plugin_description_
[]
=
"Reference FLAC Player v"
FLAC__VERSION_STRING
;
static
HINSTANCE
g_hDllInstance_
;
class
FLAC_Info
:
public
WInputInfo
{
private:
char
title
[
MAX_PATH
],
infostr
[
MAX_PATH
];
int
length_in_ms
;
public:
FLAC_Info
();
~
FLAC_Info
();
int
Open
(
char
*
url
);
void
GetTitle
(
char
*
buf
,
int
maxlen
);
void
GetInfoString
(
char
*
buf
,
int
maxlen
);
inline
int
GetLength
(
void
)
{
return
length_in_ms
;
}
};
FLAC_Info
::
FLAC_Info
()
:
WInputInfo
()
{
infostr
[
0
]
=
title
[
0
]
=
0
;
length_in_ms
=
-
1
;
}
FLAC_Info
::~
FLAC_Info
()
{