|
|
//==========================================================================;
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (c) 1992 - 1994 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------;
//
// acmthunk.c
//
// Description:
// This is a thunk layer to the Audio Compression Manager. It's
// purpose is to allow an application to use the ACM only if it is
// available (like under Win 3.1 and NT where the ACM may or may not
// be installed).
//
// There are two requirements for using this module:
//
// 1. Compile and link with this module before linking to MMSYSTEM.LIB.
// Do *NOT* link with MSACM.LIB.
//
// 2. Before calling any other functions in ACM function set, call
// acmThunkInitialize(). This will cause all dyna-linking to occur.
//
// 3. Before exiting your application, call acmThunkTerminate().
// This will unlink to the ACM and free allocated resources.
//
// NOTE! this could be written more efficiently in Assembly by doing
// a jump to the correct API in the ACM, but this would not be
// portable (easily) on NT. So the arguments will be repushed on the
// stack.. such is life.
//
//==========================================================================;
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <mmreg.h>
#include <msacm.h>
//
//
//
#ifdef WIN32
#define BCODE
#else
#define BCODE _based(_segname("_CODE"))
#endif
//==========================================================================;
//
// Prototypes and String Defines for Dyna-Linking to the ACM
//
//
//==========================================================================;
#define ACMINST_NOT_PRESENT NULL
#define ACMINST_TRY_LINKING (HINSTANCE)(UINT)-1
static HINSTANCE ghinstAcm = ACMINST_TRY_LINKING;
#ifdef WIN32
TCHAR BCODE gszAcmModuleName[] = TEXT("MSACM32.DLL"); #else
char BCODE gszAcmModuleName[] = "MSACM.DLL"; #endif
FARPROC *gpafnAcmFunctions;
PSTR BCODE gapszAcmFunctions[] = { "acmGetVersion", "acmMetrics",
"acmDriverEnum", #ifdef WIN32
"acmDriverDetailsW", "acmDriverDetailsA", #else
"acmDriverDetails", #endif
#ifdef WIN32
"acmDriverAddW", "acmDriverAddA", #else
"acmDriverAdd", #endif
"acmDriverRemove", "acmDriverOpen", "acmDriverClose", "acmDriverMessage", "acmDriverID", "acmDriverPriority",
#ifdef WIN32
"acmFormatTagDetailsW", "acmFormatTagDetailsA", #else
"acmFormatTagDetails", #endif
#ifdef WIN32
"acmFormatTagEnumW", "acmFormatTagEnumA", #else
"acmFormatTagEnum", #endif
#ifdef WIN32
"acmFormatChooseW", "acmFormatChooseA", #else
"acmFormatChoose", #endif
#ifdef WIN32
"acmFormatDetailsW", "acmFormatDetailsA", #else
"acmFormatDetails", #endif
#ifdef WIN32
"acmFormatEnumW", "acmFormatEnumA", #else
"acmFormatEnum", #endif
"acmFormatSuggest",
#ifdef WIN32
"acmFilterTagDetailsW", "acmFilterTagDetailsA", #else
"acmFilterTagDetails", #endif
#ifdef WIN32
"acmFilterTagEnumW", "acmFilterTagEnumA", #else
"acmFilterTagEnum", #endif
#ifdef WIN32
"acmFilterChooseW", "acmFilterChooseA", #else
"acmFilterChoose", #endif
#ifdef WIN32
"acmFilterDetailsW", "acmFilterDetailsA", #else
"acmFilterDetails", #endif
#ifdef WIN32
"acmFilterEnumW", "acmFilterEnumA", #else
"acmFilterEnum", #endif
"acmStreamOpen", "acmStreamClose", "acmStreamSize", "acmStreamConvert", "acmStreamReset", "acmStreamPrepareHeader", "acmStreamUnprepareHeader" };
#ifdef WIN32
//
// For Win32
//
enum { ACMTHUNK_GETVERSION = 0, ACMTHUNK_METRICS, ACMTHUNK_DRIVERENUM, ACMTHUNK_DRIVERDETAILSW, ACMTHUNK_DRIVERDETAILSA, ACMTHUNK_DRIVERADDW, ACMTHUNK_DRIVERADDA, ACMTHUNK_DRIVERREMOVE, ACMTHUNK_DRIVEROPEN, ACMTHUNK_DRIVERCLOSE, ACMTHUNK_DRIVERMESSAGE, ACMTHUNK_DRIVERID, ACMTHUNK_DRIVERPRIORITY, ACMTHUNK_FORMATTAGDETAILSW, ACMTHUNK_FORMATTAGDETAILSA, ACMTHUNK_FORMATTAGENUMW, ACMTHUNK_FORMATTAGENUMA, ACMTHUNK_FORMATCHOOSEW, ACMTHUNK_FORMATCHOOSEA, ACMTHUNK_FORMATDETAILSW, ACMTHUNK_FORMATDETAILSA, ACMTHUNK_FORMATENUMW, ACMTHUNK_FORMATENUMA, ACMTHUNK_FORMATSUGGEST, ACMTHUNK_FILTERTAGDETAILSW, ACMTHUNK_FILTERTAGDETAILSA, ACMTHUNK_FILTERTAGENUMW, ACMTHUNK_FILTERTAGENUMA, ACMTHUNK_FILTERCHOOSEW, ACMTHUNK_FILTERCHOOSEA, ACMTHUNK_FILTERDETAILSW, ACMTHUNK_FILTERDETAILSA, ACMTHUNK_FILTERENUMW, ACMTHUNK_FILTERENUMA, ACMTHUNK_STREAMOPEN, ACMTHUNK_STREAMCLOSE, ACMTHUNK_STREAMSIZE, ACMTHUNK_STREAMCONVERT, ACMTHUNK_STREAMRESET, ACMTHUNK_STREAMPREPAREHEADER, ACMTHUNK_STREAMUNPREPAREHEADER,
ACMTHUNK_MAX_FUNCTIONS }; #ifdef _UNICODE
#define ACMTHUNK_DRIVERDETAILS ACMTHUNK_DRIVERDETAILSW
#define ACMTHUNK_DRIVERADD ACMTHUNK_DRIVERADDW
#define ACMTHUNK_FORMATTAGDETAILS ACMTHUNK_FORMATTAGDETAILSW
#define ACMTHUNK_FORMATTAGENUM ACMTHUNK_FORMATTAGENUMW
#define ACMTHUNK_FORMATCHOOSE ACMTHUNK_FORMATCHOOSEW
#define ACMTHUNK_FORMATDETAILS ACMTHUNK_FORMATDETAILSW
#define ACMTHUNK_FORMATENUM ACMTHUNK_FORMATENUMW
#define ACMTHUNK_FILTERTAGDETAILS ACMTHUNK_FILTERTAGDETAILSW
#define ACMTHUNK_FILTERTAGENUM ACMTHUNK_FILTERTAGENUMW
#define ACMTHUNK_FILTERCHOOSE ACMTHUNK_FILTERCHOOSEW
#define ACMTHUNK_FILTERDETAILS ACMTHUNK_FILTERDETAILSW
#define ACMTHUNK_FILTERENUM ACMTHUNK_FILTERENUMW
#else
#define ACMTHUNK_DRIVERDETAILS ACMTHUNK_DRIVERDETAILSA
#define ACMTHUNK_DRIVERADD ACMTHUNK_DRIVERADDA
#define ACMTHUNK_FORMATTAGDETAILS ACMTHUNK_FORMATTAGDETAILSA
#define ACMTHUNK_FORMATTAGENUM ACMTHUNK_FORMATTAGENUMA
#define ACMTHUNK_FORMATCHOOSE ACMTHUNK_FORMATCHOOSEA
#define ACMTHUNK_FORMATDETAILS ACMTHUNK_FORMATDETAILSA
#define ACMTHUNK_FORMATENUM ACMTHUNK_FORMATENUMA
#define ACMTHUNK_FILTERTAGDETAILS ACMTHUNK_FILTERTAGDETAILSA
#define ACMTHUNK_FILTERTAGENUM ACMTHUNK_FILTERTAGENUMA
#define ACMTHUNK_FILTERCHOOSE ACMTHUNK_FILTERCHOOSEA
#define ACMTHUNK_FILTERDETAILS ACMTHUNK_FILTERDETAILSA
#define ACMTHUNK_FILTERENUM ACMTHUNK_FILTERENUMA
#endif
#else // if Win32
//
// For Win16
//
enum { ACMTHUNK_GETVERSION = 0, ACMTHUNK_METRICS, ACMTHUNK_DRIVERENUM, ACMTHUNK_DRIVERDETAILS, ACMTHUNK_DRIVERADD, ACMTHUNK_DRIVERREMOVE, ACMTHUNK_DRIVEROPEN, ACMTHUNK_DRIVERCLOSE, ACMTHUNK_DRIVERMESSAGE, ACMTHUNK_DRIVERID, ACMTHUNK_DRIVERPRIORITY, ACMTHUNK_FORMATTAGDETAILS, ACMTHUNK_FORMATTAGENUM, ACMTHUNK_FORMATCHOOSE, ACMTHUNK_FORMATDETAILS, ACMTHUNK_FORMATENUM, ACMTHUNK_FORMATSUGGEST, ACMTHUNK_FILTERTAGDETAILS, ACMTHUNK_FILTERTAGENUM, ACMTHUNK_FILTERCHOOSE, ACMTHUNK_FILTERDETAILS, ACMTHUNK_FILTERENUM, ACMTHUNK_STREAMOPEN, ACMTHUNK_STREAMCLOSE, ACMTHUNK_STREAMSIZE, ACMTHUNK_STREAMCONVERT, ACMTHUNK_STREAMRESET, ACMTHUNK_STREAMPREPAREHEADER, ACMTHUNK_STREAMUNPREPAREHEADER,
ACMTHUNK_MAX_FUNCTIONS };
#endif // if WIN32 else
#define ACMTHUNK_SIZE_TABLE_BYTES (ACMTHUNK_MAX_FUNCTIONS * sizeof(FARPROC))
//==========================================================================;
//
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//
// BOOL acmThunkInitialize
//
// Description:
//
//
// Arguments:
// None.
//
// Return (BOOL):
//
//--------------------------------------------------------------------------;
BOOL FAR PASCAL acmThunkInitialize ( void ) { DWORD (ACMAPI *pfnAcmGetVersion) ( void );
UINT fuErrorMode; DWORD dwVersion; UINT u;
//
// if we have already linked to the API's, then just succeed...
//
if (NULL != gpafnAcmFunctions) { //
// someone isn't satisfied with calling this API only once?
//
return (TRUE); }
//
// if we have already tried to link to the ACM, then fail this
// call--it isn't present.
//
if (ACMINST_TRY_LINKING != ghinstAcm) return (FALSE);
//
// try to get a handle on the ACM--if we cannot do this, then fail
//
fuErrorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX); ghinstAcm = LoadLibrary(gszAcmModuleName); SetErrorMode(fuErrorMode); if (ghinstAcm < (HINSTANCE)HINSTANCE_ERROR) { ghinstAcm = ACMINST_NOT_PRESENT; return (FALSE); }
(FARPROC)pfnAcmGetVersion = GetProcAddress(ghinstAcm, gapszAcmFunctions[ACMTHUNK_GETVERSION]); if (NULL == pfnAcmGetVersion) { FreeLibrary(ghinstAcm); ghinstAcm = ACMINST_NOT_PRESENT;
return (FALSE); }
//
// allocate our array of function pointers to the ACM... note that
// this is dynamically allocated so if the ACM is _not_ present,
// then this code and data takes up very little space.
//
gpafnAcmFunctions = (FARPROC *)LocalAlloc(LPTR, ACMTHUNK_SIZE_TABLE_BYTES); if (NULL == gpafnAcmFunctions) { FreeLibrary(ghinstAcm); ghinstAcm = ACMINST_NOT_PRESENT;
return (FALSE); }
gpafnAcmFunctions[ACMTHUNK_GETVERSION] = (FARPROC)pfnAcmGetVersion;
//
// if the version of the ACM is *NOT* V2.00 or greater, then
// all other API's are unavailable--so don't waste time trying
// to link to them.
//
dwVersion = (* pfnAcmGetVersion)(); if (0x0200 > HIWORD(dwVersion)) { return (TRUE); }
//
// yipee! the ACM V2.00 or greater appears to be installed and
// happy with us--so link to the rest of the nifty cool API's.
//
// start at index 1 since we already linked to acmGetVersion above
//
for (u = 1; u < ACMTHUNK_MAX_FUNCTIONS; u++) { gpafnAcmFunctions[u] = GetProcAddress(ghinstAcm, gapszAcmFunctions[u]); }
//
// finally, return success
//
return (TRUE); } // acmThunkInitialize()
//--------------------------------------------------------------------------;
//
// BOOL acmThunkTerminate
//
// Description:
//
//
// Arguments:
// None.
//
// Return (BOOL):
//
//--------------------------------------------------------------------------;
BOOL FAR PASCAL acmThunkTerminate ( void ) { //
//
//
if (NULL != gpafnAcmFunctions) { LocalFree((HLOCAL)gpafnAcmFunctions);
gpafnAcmFunctions = NULL;
FreeLibrary(ghinstAcm); ghinstAcm = ACMINST_TRY_LINKING; }
return (TRUE); } // acmThunkTerminate()
//==========================================================================;
//
// General Information API's
//
//
//==========================================================================;
DWORD ACMAPI acmGetVersion ( void ) { DWORD (ACMAPI *pfnAcmGetVersion) ( void );
DWORD dwVersion;
if (NULL == gpafnAcmFunctions) return (0L);
(FARPROC)pfnAcmGetVersion = gpafnAcmFunctions[ACMTHUNK_GETVERSION]; if (NULL == pfnAcmGetVersion) return (0L);
dwVersion = (* pfnAcmGetVersion)();
return (dwVersion); } // acmGetVersion()
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmMetrics ( HACMOBJ hao, UINT uMetric, LPVOID pMetric ) { MMRESULT (ACMAPI *pfnAcmMetrics) ( HACMOBJ hao, UINT uMetric, LPVOID pMetric );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmMetrics = gpafnAcmFunctions[ACMTHUNK_METRICS]; if (NULL == pfnAcmMetrics) return (MMSYSERR_ERROR);
mmr = (* pfnAcmMetrics)(hao, uMetric, pMetric);
return (mmr); } // acmMetrics()
//==========================================================================;
//
// ACM Driver Management API's
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverEnum ( ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmDriverEnum) ( ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverEnum = gpafnAcmFunctions[ACMTHUNK_DRIVERENUM]; if (NULL == pfnAcmDriverEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverEnum)(fnCallback, dwInstance, fdwEnum);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverDetails ( HACMDRIVERID hadid, LPACMDRIVERDETAILS padd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmDriverDetails) ( HACMDRIVERID hadid, LPACMDRIVERDETAILS padd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverDetails = gpafnAcmFunctions[ACMTHUNK_DRIVERDETAILS]; if (NULL == pfnAcmDriverDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverDetails)(hadid, padd, fdwDetails);
return (mmr); }
#ifdef _UNICODE
MMRESULT ACMAPI acmDriverDetailsA ( HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmDriverDetails) ( HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverDetails = gpafnAcmFunctions[ACMTHUNK_DRIVERDETAILSA]; if (NULL == pfnAcmDriverDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverDetails)(hadid, padd, fdwDetails);
return (mmr); } #endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverAdd ( LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd ) { MMRESULT (ACMAPI *pfnAcmDriverAdd) ( LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverAdd = gpafnAcmFunctions[ACMTHUNK_DRIVERADD]; if (NULL == pfnAcmDriverAdd) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverAdd)(phadid, hinstModule, lParam, dwPriority, fdwAdd);
return (mmr); }
#ifdef _UNICODE
MMRESULT ACMAPI acmDriverAddA ( LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd ) { MMRESULT (ACMAPI *pfnAcmDriverAdd) ( LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverAdd = gpafnAcmFunctions[ACMTHUNK_DRIVERADDA]; if (NULL == pfnAcmDriverAdd) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverAdd)(phadid, hinstModule, lParam, dwPriority, fdwAdd);
return (mmr); } #endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverRemove ( HACMDRIVERID hadid, DWORD fdwRemove ) { MMRESULT (ACMAPI *pfnAcmDriverRemove) ( HACMDRIVERID hadid, DWORD fdwRemove );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverRemove = gpafnAcmFunctions[ACMTHUNK_DRIVERREMOVE]; if (NULL == pfnAcmDriverRemove) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverRemove)(hadid, fdwRemove);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverOpen ( LPHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen ) { MMRESULT (ACMAPI *pfnAcmDriverOpen) ( LPHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverOpen = gpafnAcmFunctions[ACMTHUNK_DRIVEROPEN]; if (NULL == pfnAcmDriverOpen) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverOpen)(phad, hadid, fdwOpen);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverClose ( HACMDRIVER had, DWORD fdwClose ) { MMRESULT (ACMAPI *pfnAcmDriverClose) ( HACMDRIVER had, DWORD fdwClose );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverClose = gpafnAcmFunctions[ACMTHUNK_DRIVERCLOSE]; if (NULL == pfnAcmDriverClose) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverClose)(had, fdwClose);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
LRESULT ACMAPI acmDriverMessage ( HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2 ) { LRESULT (ACMAPI *pfnAcmDriverMessage) ( HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2 );
LRESULT lr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverMessage = gpafnAcmFunctions[ACMTHUNK_DRIVERMESSAGE]; if (NULL == pfnAcmDriverMessage) return (MMSYSERR_ERROR);
lr = (* pfnAcmDriverMessage)(had, uMsg, lParam1, lParam2);
return (lr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverID ( HACMOBJ hao, LPHACMDRIVERID phadid, DWORD fdwDriverId ) { MMRESULT (ACMAPI *pfnAcmDriverId) ( HACMOBJ hao, LPHACMDRIVERID phadid, DWORD fdwDriverId );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverId = gpafnAcmFunctions[ACMTHUNK_DRIVERID]; if (NULL == pfnAcmDriverId) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverId)(hao, phadid, fdwDriverId);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmDriverPriority ( HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority ) { MMRESULT (ACMAPI *pfnAcmDriverPriority) ( HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmDriverPriority = gpafnAcmFunctions[ACMTHUNK_DRIVERPRIORITY]; if (NULL == pfnAcmDriverPriority) return (MMSYSERR_ERROR);
mmr = (* pfnAcmDriverPriority)(hadid, dwPriority, fdwPriority);
return (mmr); }
//==========================================================================;
//
// Format Tag Information API's
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFormatTagDetails ( HACMDRIVER had, LPACMFORMATTAGDETAILS paftd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFormatTagDetails) ( HACMDRIVER had, LPACMFORMATTAGDETAILS paftd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatTagDetails = gpafnAcmFunctions[ACMTHUNK_FORMATTAGDETAILS]; if (NULL == pfnAcmFormatTagDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatTagDetails)(had, paftd, fdwDetails);
return (mmr); } // acmFormatTagDetails()
#ifdef _UNICODE
MMRESULT ACMAPI acmFormatTagDetailsA ( HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFormatTagDetails) ( HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatTagDetails = gpafnAcmFunctions[ACMTHUNK_FORMATTAGDETAILSA]; if (NULL == pfnAcmFormatTagDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatTagDetails)(had, paftd, fdwDetails);
return (mmr); } // acmFormatTagDetails()
#endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFormatTagEnum ( HACMDRIVER had, LPACMFORMATTAGDETAILS paftd, ACMFORMATTAGENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFormatTagEnum) ( HACMDRIVER had, LPACMFORMATTAGDETAILS paftd, ACMFORMATTAGENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatTagEnum = gpafnAcmFunctions[ACMTHUNK_FORMATTAGENUM]; if (NULL == pfnAcmFormatTagEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatTagEnum)(had, paftd, fnCallback, dwInstance, fdwEnum);
return (mmr); } // acmFormatTagEnum()
#ifdef _UNICODE
MMRESULT ACMAPI acmFormatTagEnumA ( HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, ACMFORMATTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFormatTagEnum) ( HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, ACMFORMATTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatTagEnum = gpafnAcmFunctions[ACMTHUNK_FORMATTAGENUMA]; if (NULL == pfnAcmFormatTagEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatTagEnum)(had, paftd, fnCallback, dwInstance, fdwEnum);
return (mmr); } // acmFormatTagEnum()
#endif
//==========================================================================;
//
// Format Information API's
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFormatChoose ( LPACMFORMATCHOOSE pafmtc ) { MMRESULT (ACMAPI *pfnAcmFormatChoose) ( LPACMFORMATCHOOSE pafmtc );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatChoose = gpafnAcmFunctions[ACMTHUNK_FORMATCHOOSE]; if (NULL == pfnAcmFormatChoose) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatChoose)(pafmtc);
return (mmr); }
#ifdef _UNICODE
MMRESULT ACMAPI acmFormatChooseA ( LPACMFORMATCHOOSEA pafmtc ) { MMRESULT (ACMAPI *pfnAcmFormatChoose) ( LPACMFORMATCHOOSEA pafmtc );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatChoose = gpafnAcmFunctions[ACMTHUNK_FORMATCHOOSEA]; if (NULL == pfnAcmFormatChoose) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatChoose)(pafmtc);
return (mmr); } #endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFormatDetails ( HACMDRIVER had, LPACMFORMATDETAILS pafd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFormatDetails) ( HACMDRIVER had, LPACMFORMATDETAILS pafd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatDetails = gpafnAcmFunctions[ACMTHUNK_FORMATDETAILS]; if (NULL == pfnAcmFormatDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatDetails)(had, pafd, fdwDetails);
return (mmr); } // acmFormatDetails()
#ifdef _UNICODE
MMRESULT ACMAPI acmFormatDetailsA ( HACMDRIVER had, LPACMFORMATDETAILSA pafd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFormatDetails) ( HACMDRIVER had, LPACMFORMATDETAILSA pafd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatDetails = gpafnAcmFunctions[ACMTHUNK_FORMATDETAILSA]; if (NULL == pfnAcmFormatDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatDetails)(had, pafd, fdwDetails);
return (mmr); } // acmFormatDetails()
#endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFormatEnum ( HACMDRIVER had, LPACMFORMATDETAILS pafd, ACMFORMATENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFormatEnum) ( HACMDRIVER had, LPACMFORMATDETAILS pafd, ACMFORMATENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatEnum = gpafnAcmFunctions[ACMTHUNK_FORMATENUM]; if (NULL == pfnAcmFormatEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatEnum)(had, pafd, fnCallback, dwInstance, fdwEnum);
return (mmr); }
#ifdef _UNICODE
MMRESULT ACMAPI acmFormatEnumA ( HACMDRIVER had, LPACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFormatEnum) ( HACMDRIVER had, LPACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatEnum = gpafnAcmFunctions[ACMTHUNK_FORMATENUMA]; if (NULL == pfnAcmFormatEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatEnum)(had, pafd, fnCallback, dwInstance, fdwEnum);
return (mmr); } #endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFormatSuggest ( HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest ) { MMRESULT (ACMAPI *pfnAcmFormatSuggest) ( HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFormatSuggest = gpafnAcmFunctions[ACMTHUNK_FORMATSUGGEST]; if (NULL == pfnAcmFormatSuggest) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFormatSuggest)(had, pwfxSrc, pwfxDst, cbwfxDst, fdwSuggest);
return (mmr); }
//==========================================================================;
//
// Filter Tag Information API's
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFilterTagDetails ( HACMDRIVER had, LPACMFILTERTAGDETAILS paftd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFilterTagDetails) ( HACMDRIVER had, LPACMFILTERTAGDETAILS paftd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterTagDetails = gpafnAcmFunctions[ACMTHUNK_FILTERTAGDETAILS]; if (NULL == pfnAcmFilterTagDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterTagDetails)(had, paftd, fdwDetails);
return (mmr); } // acmFilterTagDetails()
#ifdef _UNICODE
MMRESULT ACMAPI acmFilterTagDetailsA ( HACMDRIVER had, LPACMFILTERTAGDETAILSA paftd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFilterTagDetails) ( HACMDRIVER had, LPACMFILTERTAGDETAILSA paftd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterTagDetails = gpafnAcmFunctions[ACMTHUNK_FILTERTAGDETAILSA]; if (NULL == pfnAcmFilterTagDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterTagDetails)(had, paftd, fdwDetails);
return (mmr); } // acmFilterTagDetails()
#endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFilterTagEnum ( HACMDRIVER had, LPACMFILTERTAGDETAILS paftd, ACMFILTERTAGENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFilterTagEnum) ( HACMDRIVER had, LPACMFILTERTAGDETAILS paftd, ACMFILTERTAGENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterTagEnum = gpafnAcmFunctions[ACMTHUNK_FILTERTAGENUM]; if (NULL == pfnAcmFilterTagEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterTagEnum)(had, paftd, fnCallback, dwInstance, fdwEnum);
return (mmr); } // acmFilterTagEnum()
#ifdef _UNICODE
MMRESULT ACMAPI acmFilterTagEnumA ( HACMDRIVER had, LPACMFILTERTAGDETAILSA paftd, ACMFILTERTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFilterTagEnum) ( HACMDRIVER had, LPACMFILTERTAGDETAILSA paftd, ACMFILTERTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterTagEnum = gpafnAcmFunctions[ACMTHUNK_FILTERTAGENUMA]; if (NULL == pfnAcmFilterTagEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterTagEnum)(had, paftd, fnCallback, dwInstance, fdwEnum);
return (mmr); } // acmFilterTagEnum()
#endif
//==========================================================================;
//
// Filter Information API's
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFilterChoose ( LPACMFILTERCHOOSE pafltrc ) { MMRESULT (ACMAPI *pfnAcmFilterChoose) ( LPACMFILTERCHOOSE pafltrc );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterChoose = gpafnAcmFunctions[ACMTHUNK_FILTERCHOOSE]; if (NULL == pfnAcmFilterChoose) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterChoose)(pafltrc);
return (mmr); }
#ifdef _UNICODE
MMRESULT ACMAPI acmFilterChooseA ( LPACMFILTERCHOOSEA pafltrc ) { MMRESULT (ACMAPI *pfnAcmFilterChoose) ( LPACMFILTERCHOOSEA pafltrc );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterChoose = gpafnAcmFunctions[ACMTHUNK_FILTERCHOOSEA]; if (NULL == pfnAcmFilterChoose) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterChoose)(pafltrc);
return (mmr); } #endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFilterDetails ( HACMDRIVER had, LPACMFILTERDETAILS pafd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFilterDetails) ( HACMDRIVER had, LPACMFILTERDETAILS pafd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterDetails = gpafnAcmFunctions[ACMTHUNK_FILTERDETAILS]; if (NULL == pfnAcmFilterDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterDetails)(had, pafd, fdwDetails);
return (mmr); } // acmFilterDetails()
#ifdef _UNICODE
MMRESULT ACMAPI acmFilterDetailsA ( HACMDRIVER had, LPACMFILTERDETAILSA pafd, DWORD fdwDetails ) { MMRESULT (ACMAPI *pfnAcmFilterDetails) ( HACMDRIVER had, LPACMFILTERDETAILSA pafd, DWORD fdwDetails );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterDetails = gpafnAcmFunctions[ACMTHUNK_FILTERDETAILSA]; if (NULL == pfnAcmFilterDetails) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterDetails)(had, pafd, fdwDetails);
return (mmr); } // acmFilterDetails()
#endif
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmFilterEnum ( HACMDRIVER had, LPACMFILTERDETAILS pafd, ACMFILTERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFilterEnum) ( HACMDRIVER had, LPACMFILTERDETAILS pafd, ACMFILTERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterEnum = gpafnAcmFunctions[ACMTHUNK_FILTERENUM]; if (NULL == pfnAcmFilterEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterEnum)(had, pafd, fnCallback, dwInstance, fdwEnum);
return (mmr); }
#ifdef _UNICODE
MMRESULT ACMAPI acmFilterEnumA ( HACMDRIVER had, LPACMFILTERDETAILSA pafd, ACMFILTERENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum ) { MMRESULT (ACMAPI *pfnAcmFilterEnum) ( HACMDRIVER had, LPACMFILTERDETAILSA pafd, ACMFILTERENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmFilterEnum = gpafnAcmFunctions[ACMTHUNK_FILTERENUMA]; if (NULL == pfnAcmFilterEnum) return (MMSYSERR_ERROR);
mmr = (* pfnAcmFilterEnum)(had, pafd, fnCallback, dwInstance, fdwEnum);
return (mmr); } #endif
//==========================================================================;
//
// ACM Stream Management API's
//
//
//==========================================================================;
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamOpen ( LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen ) { MMRESULT (ACMAPI *pfnAcmStreamOpen) ( LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamOpen = gpafnAcmFunctions[ACMTHUNK_STREAMOPEN]; if (NULL == pfnAcmStreamOpen) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamOpen)(phas, had, pwfxSrc, pwfxDst, pwfltr, dwCallback, dwInstance, fdwOpen);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamClose ( HACMSTREAM has, DWORD fdwClose ) { MMRESULT (ACMAPI *pfnAcmStreamClose) ( HACMSTREAM has, DWORD fdwClose );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamClose = gpafnAcmFunctions[ACMTHUNK_STREAMCLOSE]; if (NULL == pfnAcmStreamClose) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamClose)(has, fdwClose);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamSize ( HACMSTREAM has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize ) { MMRESULT (ACMAPI *pfnAcmStreamSize) ( HACMSTREAM has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamSize = gpafnAcmFunctions[ACMTHUNK_STREAMSIZE]; if (NULL == pfnAcmStreamSize) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamSize)(has, cbInput, pdwOutputBytes, fdwSize);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamConvert ( HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwConvert ) { MMRESULT (ACMAPI *pfnAcmStreamConvert) ( HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwConvert );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamConvert = gpafnAcmFunctions[ACMTHUNK_STREAMCONVERT]; if (NULL == pfnAcmStreamConvert) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamConvert)(has, pash, fdwConvert);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamReset ( HACMSTREAM has, DWORD fdwReset ) { MMRESULT (ACMAPI *pfnAcmStreamReset) ( HACMSTREAM has, DWORD fdwReset );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamReset = gpafnAcmFunctions[ACMTHUNK_STREAMRESET]; if (NULL == pfnAcmStreamReset) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamReset)(has, fdwReset);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamPrepareHeader ( HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwPrepare ) { MMRESULT (ACMAPI *pfnAcmStreamPrepareHeader) ( HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwPrepare );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamPrepareHeader = gpafnAcmFunctions[ACMTHUNK_STREAMPREPAREHEADER]; if (NULL == pfnAcmStreamPrepareHeader) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamPrepareHeader)(has, pash, fdwPrepare);
return (mmr); }
//--------------------------------------------------------------------------;
//--------------------------------------------------------------------------;
MMRESULT ACMAPI acmStreamUnprepareHeader ( HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwUnprepare ) { MMRESULT (ACMAPI *pfnAcmStreamUnprepareHeader) ( HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwUnprepare );
MMRESULT mmr;
if (NULL == gpafnAcmFunctions) return (MMSYSERR_ERROR);
(FARPROC)pfnAcmStreamUnprepareHeader = gpafnAcmFunctions[ACMTHUNK_STREAMUNPREPAREHEADER]; if (NULL == pfnAcmStreamUnprepareHeader) return (MMSYSERR_ERROR);
mmr = (* pfnAcmStreamUnprepareHeader)(has, pash, fdwUnprepare);
return (mmr); }
|