⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 afl.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************  This file will contain an interface to ACM drivers.  Its content will be based mainly on wine/dlls/msacm32  actually, for audio decompression only the following functions  are needed:    acmStreamOpen ( takes formats of src and dest, returns stream handle )  acmStreamPrepareHeader ( takes stream handler and info on data )  acmStreamConvert ( the same as PrepareHeader )  acmStreamUnprepareHeader  acmStreamClose  acmStreamSize  maybe acmStreamReset    In future I'll also add functions for format enumeration,   but not right now.  Modified for use with MPlayer, detailed changelog at  http://svn.mplayerhq.hu/mplayer/trunk/  $Id: afl.c,v 1.3 2008/04/12 07:14:45 dsqiu Exp $  ***************************************************************************/#include "config.h"#include "debug.h"#include "wine/winbase.h"#include "wine/windef.h"#include "wine/winuser.h"#include "wine/vfw.h"#include "wine/winestring.h"#include "wine/driver.h"#include "wine/winerror.h"#include "wine/msacm.h"#include "wine/msacmdrv.h"#include "wineacm.h"#ifndef __MINGW32__#include "ext.h"#endif#include "driver.h"#include <mplaylib.h>#include <mplaylib.h>#include <mplaylib.h>#undef memcpy#define memcpy uc_memcpy#pragma pack(1)#define OpenDriverA DrvOpen#define CloseDriver DrvClosestatic inline PWINE_ACMSTREAM ACM_GetStream(HACMSTREAM has){    return (PWINE_ACMSTREAM)has;}/*********************************************************************** *           acmDriverAddA (MSACM32.2) */MMRESULT WINAPI acmDriverAddA(PHACMDRIVERID phadid, HINSTANCE hinstModule,			      LPARAM lParam, DWORD dwPriority, DWORD fdwAdd){    if (!phadid)	return MMSYSERR_INVALPARAM;        /* Check if any unknown flags */    if (fdwAdd & 	~(ACM_DRIVERADDF_FUNCTION|ACM_DRIVERADDF_NOTIFYHWND|	  ACM_DRIVERADDF_GLOBAL))	return MMSYSERR_INVALFLAG;        /* Check if any incompatible flags */    if ((fdwAdd & ACM_DRIVERADDF_FUNCTION) && 	(fdwAdd & ACM_DRIVERADDF_NOTIFYHWND))	return MMSYSERR_INVALFLAG;        /* FIXME: in fact, should GetModuleFileName(hinstModule) and do a      * LoadDriver on it, to be sure we can call SendDriverMessage on the     * hDrvr handle.     */    *phadid = (HACMDRIVERID) MSACM_RegisterDriver(NULL, 0, hinstModule);        /* FIXME: lParam, dwPriority and fdwAdd ignored */        return MMSYSERR_NOERROR;}/*********************************************************************** *           acmDriverClose (MSACM32.4) */MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose){    PWINE_ACMDRIVER  p;    PWINE_ACMDRIVER* tp;        if (fdwClose)	return MMSYSERR_INVALFLAG;        p = MSACM_GetDriver(had);    if (!p)	return MMSYSERR_INVALHANDLE;    for (tp = &(p->obj.pACMDriverID->pACMDriverList); *tp; *tp = (*tp)->pNextACMDriver) {	if (*tp == p) {	    *tp = (*tp)->pNextACMDriver;	    break;	}    }        if (p->hDrvr && !p->obj.pACMDriverID->pACMDriverList)	CloseDriver(p->hDrvr);        HeapFree(MSACM_hHeap, 0, p);        return MMSYSERR_NOERROR;}/*********************************************************************** *           acmDriverEnum (MSACM32.7) */MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum){    PWINE_ACMDRIVERID	p;    DWORD		fdwSupport;    if (!fnCallback) {	return MMSYSERR_INVALPARAM;    }        if (fdwEnum && ~(ACM_DRIVERENUMF_NOLOCAL|ACM_DRIVERENUMF_DISABLED)) {	return MMSYSERR_INVALFLAG;    }        for (p = MSACM_pFirstACMDriverID; p; p = p->pNextACMDriverID) {	fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;	if (!p->bEnabled) {	    if (fdwEnum & ACM_DRIVERENUMF_DISABLED)		fdwSupport |= ACMDRIVERDETAILS_SUPPORTF_DISABLED;	    else		continue;	}	(*fnCallback)((HACMDRIVERID) p, dwInstance, fdwSupport);    }        return MMSYSERR_NOERROR;}/*********************************************************************** *           acmDriverID (MSACM32.8) */MMRESULT WINAPI acmDriverID(HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID){    PWINE_ACMOBJ pao;        pao = MSACM_GetObj(hao);    if (!pao)	return MMSYSERR_INVALHANDLE;        if (!phadid)	return MMSYSERR_INVALPARAM;        if (fdwDriverID)	return MMSYSERR_INVALFLAG;        *phadid = (HACMDRIVERID) pao->pACMDriverID;        return MMSYSERR_NOERROR;}/*********************************************************************** *           acmDriverMessage (MSACM32.9) * FIXME *   Not implemented */LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2){    PWINE_ACMDRIVER pad = MSACM_GetDriver(had);    if (!pad)	return MMSYSERR_INVALPARAM;        /* FIXME: Check if uMsg legal */        if (!SendDriverMessage(pad->hDrvr, uMsg, lParam1, lParam2))	return MMSYSERR_NOTSUPPORTED;        return MMSYSERR_NOERROR;}/*********************************************************************** *           acmDriverOpen (MSACM32.10) */MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen){    PWINE_ACMDRIVERID	padid;    PWINE_ACMDRIVER	pad;    ICOPEN		icopen;    TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen);    if (!phad)	return MMSYSERR_INVALPARAM;        padid = MSACM_GetDriverID(hadid);     if (!padid)	return MMSYSERR_INVALHANDLE;        if (fdwOpen)	return MMSYSERR_INVALFLAG;        pad = (PWINE_ACMDRIVER) HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER));    if (!pad)	return MMSYSERR_NOMEM;    pad->obj.pACMDriverID = padid;    icopen.fccType		= mmioFOURCC('a', 'u', 'd', 'c');    icopen.fccHandler		= (long)padid->pszFileName;    icopen.dwSize		= sizeof(ICOPEN);    icopen.dwFlags		= 0;    icopen.pV1Reserved = padid->pszFileName;    if (!padid->hInstModule)	pad->hDrvr = OpenDriverA((long)&icopen);    else	pad->hDrvr = padid->hInstModule;        if (!pad->hDrvr) {	HeapFree(MSACM_hHeap, 0, pad);	return MMSYSERR_ERROR;    }    pad->pfnDriverProc = GetProcAddress(pad->hDrvr, "DriverProc");    /* insert new pad at beg of list */    pad->pNextACMDriver = padid->pACMDriverList;    padid->pACMDriverList = pad;    /* FIXME: Create a WINE_ACMDRIVER32 */    *phad = (HACMDRIVER)pad;    return MMSYSERR_NOERROR;}/*********************************************************************** *           acmDriverRemove (MSACM32.12) */MMRESULT WINAPI acmDriverRemove(HACMDRIVERID hadid, DWORD fdwRemove){    PWINE_ACMDRIVERID padid;        padid = MSACM_GetDriverID(hadid);    if (!padid)	return MMSYSERR_INVALHANDLE;        if (fdwRemove)	return MMSYSERR_INVALFLAG;        MSACM_UnregisterDriver(padid);        return MMSYSERR_NOERROR;}/**********************************************************************/HANDLE MSACM_hHeap = (HANDLE) NULL;PWINE_ACMDRIVERID MSACM_pFirstACMDriverID = NULL;PWINE_ACMDRIVERID MSACM_pLastACMDriverID = NULL;/*********************************************************************** *           MSACM_RegisterDriver32()  */PWINE_ACMDRIVERID MSACM_RegisterDriver(const char* pszFileName,				       WORD wFormatTag,				       HINSTANCE hinstModule){    PWINE_ACMDRIVERID padid;    TRACE("('%s', '%x', 0x%08x)\n", pszFileName, wFormatTag, hinstModule);#ifndef WIN32_LOADER	MSACM_hHeap = GetProcessHeap();#endif    padid = (PWINE_ACMDRIVERID) HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVERID));    padid->pszFileName = malloc(strlen(pszFileName)+1);    strcpy(padid->pszFileName, pszFileName);//    1~strdup(pszDriverAlias);    padid->wFormatTag = wFormatTag;    padid->hInstModule = hinstModule;    padid->bEnabled = TRUE;    padid->pACMDriverList = NULL;    padid->pNextACMDriverID = NULL;    padid->pPrevACMDriverID = MSACM_pLastACMDriverID;    if (MSACM_pLastACMDriverID)	MSACM_pLastACMDriverID->pNextACMDriverID = padid;    MSACM_pLastACMDriverID = padid;    if (!MSACM_pFirstACMDriverID)	MSACM_pFirstACMDriverID = padid;        return padid;}/*********************************************************************** *           MSACM_UnregisterDriver32() */PWINE_ACMDRIVERID MSACM_UnregisterDriver(PWINE_ACMDRIVERID p){    PWINE_ACMDRIVERID pNextACMDriverID;        while (p->pACMDriverList)	acmDriverClose((HACMDRIVER) p->pACMDriverList, 0);        if (p->pszFileName)	free(p->pszFileName);        if (p == MSACM_pFirstACMDriverID)	MSACM_pFirstACMDriverID = p->pNextACMDriverID;    if (p == MSACM_pLastACMDriverID)	MSACM_pLastACMDriverID = p->pPrevACMDriverID;    if (p->pPrevACMDriverID)	p->pPrevACMDriverID->pNextACMDriverID = p->pNextACMDriverID;    if (p->pNextACMDriverID)	p->pNextACMDriverID->pPrevACMDriverID = p->pPrevACMDriverID;        pNextACMDriverID = p->pNextACMDriverID;        HeapFree(MSACM_hHeap, 0, p);        return pNextACMDriverID;}/*********************************************************************** *           MSACM_UnregisterAllDrivers32() * FIXME *   Where should this function be called? */void MSACM_UnregisterAllDrivers(void){    PWINE_ACMDRIVERID p;    for (p = MSACM_pFirstACMDriverID; p; p = MSACM_UnregisterDriver(p));}/*********************************************************************** *           MSACM_GetDriverID32()  */PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID){    return (PWINE_ACMDRIVERID)hDriverID;}/*********************************************************************** *           MSACM_GetDriver32() */PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver){    return (PWINE_ACMDRIVER)hDriver;}/*********************************************************************** *           MSACM_GetObj32() */PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj){    return (PWINE_ACMOBJ)hObj;}/*********************************************************************** *           acmStreamOpen (MSACM32.40) */MMRESULT WINAPI acmStreamOpen(PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,			      PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD dwCallback,			      DWORD dwInstance, DWORD fdwOpen){    PWINE_ACMSTREAM	was;    PWINE_ACMDRIVER	wad;    MMRESULT		ret;    int			wfxSrcSize;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -