74 {1, 8, 8000}, {2, 8, 8000}, {1, 16, 8000}, {2, 16, 8000},
75 {1, 8, 11025}, {2, 8, 11025}, {1, 16, 11025}, {2, 16, 11025},
76 {1, 8, 22050}, {2, 8, 22050}, {1, 16, 22050}, {2, 16, 22050},
77 {1, 8, 44100}, {2, 8, 44100}, {1, 16, 44100}, {2, 16, 44100},
82 {1, 4, 8000}, {2, 4, 8000}, {1, 4, 11025}, {2, 4, 11025},
83 {1, 4, 22050}, {2, 4, 22050}, {1, 4, 44100}, {2, 4, 44100},
88 230, 230, 230, 230, 307, 409, 512, 614,
89 768, 614, 512, 409, 307, 230, 230, 230
95 {256, 0}, {512, -256}, {0, 0}, {192, 64}, {240, 0}, {460, -208}, {392, -232}
120 for (
i = 0;
i < hi;
i++)
182 static inline short R16(
const unsigned char*
src)
184 return (
short)((
unsigned short)
src[0] | ((
unsigned short)
src[1] << 8));
192 static inline void W16(
unsigned char*
dst,
short s)
200 if (*sample < -32768) *sample = -32768;
201 if (*sample > 32767) *sample = 32767;
205 int* sample1,
int* sample2,
212 snibble = (nibble & 0x08) ? (nibble - 16) : nibble;
213 sample = ((*sample1 * coeff->
iCoef1) + (*sample2 * coeff->
iCoef2)) / 256 +
219 *idelta = ((
MS_Delta[nibble] * *idelta) / 256);
220 if (*idelta < 16) *idelta = 16;
223 static inline unsigned char C168(
short s)
232 int ideltaL, ideltaR;
233 int sample1L, sample2L;
234 int sample1R, sample2R;
245 for (; nblock > 0; nblock--)
247 const unsigned char* in_src =
src;
251 if (*
src > 6 || *(
src + 1) > 6)
256 WARN(
"Invalid ADPCM data, stopping conversion\n");
276 for (nsamp = nsamp_blk; nsamp > 0; nsamp--)
290 for (nsamp = nsamp_blk; nsamp > 0; nsamp--)
307 int sample1, sample2;
318 for (; nblock > 0; nblock--)
320 const unsigned char* in_src =
src;
334 for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 2)
345 for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 2)
407 static const WCHAR szPcm[]={
'P',
'C',
'M',0};
408 static const WCHAR szMsAdPcm[]={
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'A',
'D',
'P',
'C',
'M',0};
431 WARN(
"Unsupported query %08x\n", dwQuery);
497 WARN(
"Unsupported query %08x\n", dwQuery);
606 FIXME(
"spb=%u\n", nspb);
612 if (((nspb - 1) & 3) != 0)
goto theEnd;
633 FIXME(
"spb=%u\n", nspb);
639 if (((nspb - 1) & 3) != 0)
goto theEnd;
650 FIXME(
"We don't support encoding yet\n");
681 WORD wSamplesPerBlock;
763 FIXME(
"Unsupported fdwConvert (%08x), ignoring it\n", adsh->
fdwConvert);
788 TRACE(
"(%08lx %p %04x %08lx %08lx);\n",
789 dwDevID, hDriv, wMsg, dwParam1, dwParam2);
847 return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
#define WAVE_FORMAT_UNKNOWN
struct tagAcmAdpcmData AcmAdpcmData
#define ACM_STREAMSIZEF_DESTINATION
static void ADPCM_Reset(PACMDRVSTREAMINSTANCE adsi, AcmAdpcmData *aad)
WCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]
static LRESULT ADPCM_DriverDetails(PACMDRIVERDETAILSW add)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
#define ACM_FORMATSUGGESTF_NSAMPLESPERSEC
#define MM_MSFT_ACM_MSADPCM
#define ACM_STREAMCONVERTF_BLOCKALIGN
#define ACMDRIVERDETAILS_SUPPORTF_CODEC
#define ACMDM_STREAM_RESET
#define ACM_FORMATSUGGESTF_WFORMATTAG
static LRESULT ADPCM_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEADER adsh)
static LRESULT ADPCM_drvClose(DWORD_PTR dwDevID)
static const Format ADPCM_Formats[]
#define ACMDM_STREAM_OPEN
static void init_wfx_adpcm(ADPCMWAVEFORMAT *awfx)
#define ACMDM_FORMATTAG_DETAILS
#define ACMDM_STREAM_PREPARE
struct pcmwaveformat_tag PCMWAVEFORMAT
#define ACM_STREAMCONVERTF_END
#define ACMDM_STREAM_CLOSE
#define DRV_QUERYCONFIGURE
#define ACMDM_DRIVER_NOTIFY
#define ACMDM_FORMAT_SUGGEST
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
#define ACM_FORMATDETAILSF_FORMAT
WCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]
#define ACMDM_DRIVER_DETAILS
#define ACMDM_STREAM_CONVERT
#define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED
#define ACM_FORMATSUGGESTF_NCHANNELS
static void W16(unsigned char *dst, short s)
static LRESULT ADPCM_StreamSize(const ACMDRVSTREAMINSTANCE *adsi, PACMDRVSTREAMSIZE adss)
#define ACMDM_HARDWARE_WAVE_CAPS_OUTPUT
#define ACMDM_HARDWARE_WAVE_CAPS_INPUT
void(* convert)(PACMDRVSTREAMINSTANCE adsi, const unsigned char *, LPDWORD, unsigned char *, LPDWORD)
#define ACM_FORMATTAGDETAILSF_FORMATTAG
static void cvtMMms16K(const ACMDRVSTREAMINSTANCE *adsi, const unsigned char *src, LPDWORD nsrc, unsigned char *dst, LPDWORD ndst)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const Format PCM_Formats[]
#define ACM_STREAMSIZEF_SOURCE
#define ACM_FORMATTAGDETAILSF_INDEX
static short R16(const unsigned char *src)
WCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]
#define ACM_STREAMOPENF_ASYNC
static LRESULT ADPCM_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
#define MMSYSERR_NOTSUPPORTED
struct adpcmwaveformat_tag ADPCMWAVEFORMAT
static LRESULT ADPCM_FormatTagDetails(PACMFORMATTAGDETAILSW aftd, DWORD dwQuery)
#define ACMDM_FILTERTAG_DETAILS
#define memcpy(s1, s2, n)
#define ACM_FORMATTAGDETAILSF_LARGESTSIZE
static ADPCMCOEFSET MSADPCM_CoeffSet[]
#define ACMERR_NOTPOSSIBLE
#define ACMDM_STREAM_UNPREPARE
#define WAVE_FORMAT_ADPCM
static LRESULT ADPCM_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
#define ACM_STREAMCONVERTF_START
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define MMSYSERR_INVALPARAM
static unsigned char C168(short s)
#define MultiByteToWideChar
static LRESULT ADPCM_FormatDetails(PACMFORMATDETAILSW afd, DWORD dwQuery)
static void process_nibble(unsigned nibble, int *idelta, int *sample1, int *sample2, const ADPCMCOEFSET *coeff)
#define ACM_FORMATDETAILSF_INDEX
WCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]
WCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]
LRESULT WINAPI DefDriverProc(DWORD_PTR dwDriverIdentifier, HDRVR hDrv, UINT Msg, LPARAM lParam1, LPARAM lParam2)
static DWORD ADPCM_GetFormatIndex(const WAVEFORMATEX *wfx)
static void cvtSSms16K(const ACMDRVSTREAMINSTANCE *adsi, const unsigned char *src, LPDWORD nsrc, unsigned char *dst, LPDWORD ndst)
LRESULT CALLBACK ADPCM_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, LPARAM dwParam1, LPARAM dwParam2)
static LRESULT ADPCM_StreamClose(PACMDRVSTREAMINSTANCE adsi)
static void clamp_sample(int *sample)
#define HeapFree(x, y, z)
#define ACM_FORMATSUGGESTF_WBITSPERSAMPLE
#define ACMDM_FORMAT_DETAILS
WINE_DEFAULT_DEBUG_CHANNEL(adpcm)
static LRESULT ADPCM_drvOpen(LPCSTR str)
int WINAPI MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType)
#define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC
struct adpcmcoef_tag ADPCMCOEFSET
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char * Format
#define ACMDM_STREAM_SIZE
#define ACMDM_FILTER_DETAILS