-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbasswma.h
153 lines (122 loc) · 6.78 KB
/
basswma.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
BASSWMA 2.4 C/C++ header file
Copyright (c) 2002-2014 Un4seen Developments Ltd.
See the BASSWMA.CHM file for more detailed documentation
*/
#ifndef BASSWMA_H
#define BASSWMA_H
#include "bass.h"
#if BASSVERSION!=0x204
#error conflicting BASS and BASSWMA versions
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BASSWMADEF
#define BASSWMADEF(f) WINAPI f
#endif
typedef DWORD HWMENCODE; // WMA encoding handle
// Additional error codes returned by BASS_ErrorGetCode
#define BASS_ERROR_WMA_LICENSE 1000 // the file is protected
#define BASS_ERROR_WMA 1001 // Windows Media (9 or above) is not installed
#define BASS_ERROR_WMA_WM9 BASS_ERROR_WMA
#define BASS_ERROR_WMA_DENIED 1002 // access denied (user/pass is invalid)
#define BASS_ERROR_WMA_INDIVIDUAL 1004 // individualization is needed
#define BASS_ERROR_WMA_PUBINIT 1005 // publishing point initialization problem
// Additional BASS_SetConfig options
#define BASS_CONFIG_WMA_PRECHECK 0x10100
#define BASS_CONFIG_WMA_PREBUF 0x10101
#define BASS_CONFIG_WMA_BASSFILE 0x10103
#define BASS_CONFIG_WMA_NETSEEK 0x10104
#define BASS_CONFIG_WMA_VIDEO 0x10105
#define BASS_CONFIG_WMA_BUFTIME 0x10106
// additional WMA sync types
#define BASS_SYNC_WMA_CHANGE 0x10100
#define BASS_SYNC_WMA_META 0x10101
// additional BASS_StreamGetFilePosition WMA mode
#define BASS_FILEPOS_WMA_BUFFER 1000 // internet buffering progress (0-100%)
// Additional flags for use with BASS_WMA_EncodeOpen/File/Network/Publish
#define BASS_WMA_ENCODE_STANDARD 0x2000 // standard WMA
#define BASS_WMA_ENCODE_PRO 0x4000 // WMA Pro
#define BASS_WMA_ENCODE_24BIT 0x8000 // 24-bit
#define BASS_WMA_ENCODE_PCM 0x10000 // uncompressed PCM
#define BASS_WMA_ENCODE_SCRIPT 0x20000 // set script (mid-stream tags) in the WMA encoding
#define BASS_WMA_ENCODE_QUEUE 0x40000 // queue data to feed encoder asynchronously
#define BASS_WMA_ENCODE_SOURCE 0x80000 // use a BASS channel as source
// Additional flag for use with BASS_WMA_EncodeGetRates
#define BASS_WMA_ENCODE_RATES_VBR 0x10000 // get available VBR quality settings
typedef void (CALLBACK CLIENTCONNECTPROC)(HWMENCODE handle, BOOL connect, const char *ip, void *user);
/* Client connection notification callback function.
handle : The encoder
connect: TRUE=client is connecting, FALSE=disconnecting
ip : The client's IP (xxx.xxx.xxx.xxx:port)
user : The 'user' parameter value given when calling BASS_WMA_EncodeSetNotify */
typedef void (CALLBACK WMENCODEPROC)(HWMENCODE handle, DWORD type, const void *buffer, DWORD length, void *user);
/* Encoder callback function.
handle : The encoder handle
type : The type of data, one of BASS_WMA_ENCODE_xxx values
buffer : The encoded data
length : Length of the data
user : The 'user' parameter value given when calling BASS_WMA_EncodeOpen */
// WMENCODEPROC "type" values
#define BASS_WMA_ENCODE_HEAD 0
#define BASS_WMA_ENCODE_DATA 1
#define BASS_WMA_ENCODE_DONE 2
// BASS_WMA_EncodeSetTag "form" values
#define BASS_WMA_TAG_ANSI 0
#define BASS_WMA_TAG_UNICODE 1
#define BASS_WMA_TAG_UTF8 2
#define BASS_WMA_TAG_BINARY 0x100 // FLAG: binary tag (HIWORD=length)
// BASS_CHANNELINFO type
#define BASS_CTYPE_STREAM_WMA 0x10300
#define BASS_CTYPE_STREAM_WMA_MP3 0x10301
// Additional BASS_ChannelGetTags types
#define BASS_TAG_WMA 8 // WMA header tags : series of null-terminated UTF-8 strings
#define BASS_TAG_WMA_META 11 // WMA mid-stream tag : UTF-8 string
#define BASS_TAG_WMA_CODEC 12 // WMA codec
HSTREAM BASSWMADEF(BASS_WMA_StreamCreateFile)(BOOL mem, const void *file, QWORD offset, QWORD length, DWORD flags);
HSTREAM BASSWMADEF(BASS_WMA_StreamCreateFileAuth)(BOOL mem, const void *file, QWORD offset, QWORD length, DWORD flags, const char *user, const char *pass);
HSTREAM BASSWMADEF(BASS_WMA_StreamCreateFileUser)(DWORD system, DWORD flags, const BASS_FILEPROCS *procs, void *user);
const char *BASSWMADEF(BASS_WMA_GetTags)(const char *file, DWORD flags);
const DWORD *BASSWMADEF(BASS_WMA_EncodeGetRates)(DWORD freq, DWORD chans, DWORD flags);
HWMENCODE BASSWMADEF(BASS_WMA_EncodeOpen)(DWORD freq, DWORD chans, DWORD flags, DWORD bitrate, WMENCODEPROC *proc, void *user);
HWMENCODE BASSWMADEF(BASS_WMA_EncodeOpenFile)(DWORD freq, DWORD chans, DWORD flags, DWORD bitrate, const char *file);
HWMENCODE BASSWMADEF(BASS_WMA_EncodeOpenNetwork)(DWORD freq, DWORD chans, DWORD flags, DWORD bitrate, DWORD port, DWORD clients);
HWMENCODE BASSWMADEF(BASS_WMA_EncodeOpenNetworkMulti)(DWORD freq, DWORD chans, DWORD flags, const DWORD *bitrates, DWORD port, DWORD clients);
HWMENCODE BASSWMADEF(BASS_WMA_EncodeOpenPublish)(DWORD freq, DWORD chans, DWORD flags, DWORD bitrate, const char *url, const char *user, const char *pass);
HWMENCODE BASSWMADEF(BASS_WMA_EncodeOpenPublishMulti)(DWORD freq, DWORD chans, DWORD flags, const DWORD *bitrates, const char *url, const char *user, const char *pass);
DWORD BASSWMADEF(BASS_WMA_EncodeGetPort)(HWMENCODE handle);
BOOL BASSWMADEF(BASS_WMA_EncodeSetNotify)(HWMENCODE handle, CLIENTCONNECTPROC *proc, void *user);
DWORD BASSWMADEF(BASS_WMA_EncodeGetClients)(HWMENCODE handle);
BOOL BASSWMADEF(BASS_WMA_EncodeSetTag)(HWMENCODE handle, const char *tag, const char *text, DWORD form);
BOOL BASSWMADEF(BASS_WMA_EncodeWrite)(HWMENCODE handle, const void *buffer, DWORD length);
BOOL BASSWMADEF(BASS_WMA_EncodeClose)(HWMENCODE handle);
void *BASSWMADEF(BASS_WMA_GetWMObject)(DWORD handle);
#ifdef __cplusplus
}
static inline HSTREAM BASS_WMA_StreamCreateFile(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags)
{
return BASS_WMA_StreamCreateFile(mem, (const void*)file, offset, length, flags|BASS_UNICODE);
}
static inline HSTREAM BASS_WMA_StreamCreateFileAuth(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags, const char *user, const char *pass)
{
return BASS_WMA_StreamCreateFileAuth(mem, (const void*)file, offset, length, flags|BASS_UNICODE, (const char*)user, (const char*)pass);
}
static inline const char *BASS_WMA_GetTags(const WCHAR *file, DWORD flags)
{
return BASS_WMA_GetTags((const char*)file, flags|BASS_UNICODE);
}
static inline HWMENCODE BASS_WMA_EncodeOpenFile(DWORD freq, DWORD chans, DWORD flags, DWORD bitrate, const WCHAR *file)
{
return BASS_WMA_EncodeOpenFile(freq, chans, flags|BASS_UNICODE, bitrate, (const char*)file);
}
static inline HWMENCODE BASS_WMA_EncodeOpenPublish(DWORD freq, DWORD chans, DWORD flags, DWORD bitrate, const WCHAR *url, const WCHAR *user, const WCHAR *pass)
{
return BASS_WMA_EncodeOpenPublish(freq, chans, flags|BASS_UNICODE, bitrate, (const char*)url, (const char*)user, (const char*)pass);
}
static inline HWMENCODE BASS_WMA_EncodeOpenPublishMulti(DWORD freq, DWORD chans, DWORD flags, const DWORD *bitrates, const WCHAR *url, const WCHAR *user, const WCHAR *pass)
{
return BASS_WMA_EncodeOpenPublishMulti(freq, chans, flags|BASS_UNICODE, bitrates, (const char*)url, (const char*)user, (const char*)pass);
}
#endif
#endif