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

📄 mciavi.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 3 页
字号:
/*************************************************************************** * 				MCIAVI_mciPlay			[internal] */static	DWORD	MCIAVI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    DWORD		tc;    DWORD		frameTime;    DWORD		delta;    DWORD		dwRet;    LPWAVEHDR		waveHdr = NULL;    unsigned		i, nHdr = 0;    DWORD		dwFromFrame, dwToFrame;    TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    if (!wma->hFile)		return MCIERR_FILE_NOT_FOUND;    if (!wma->hWnd) 		return MCIERR_NO_WINDOW;    wma->dwStatus = MCI_MODE_PLAY;    if (!(dwFlags & MCI_WAIT)) {	return MCI_SendCommandAsync(wma->openParms.wDeviceID, MCI_PLAY, dwFlags,				    (DWORD)lpParms, sizeof(MCI_PLAY_PARMS));    }    ShowWindow(wma->hWnd, SW_SHOW);    dwFromFrame = wma->dwCurrVideoFrame;    dwToFrame = wma->dwPlayableVideoFrames - 1;    if (lpParms && (dwFlags & MCI_FROM)) {	dwFromFrame = MCIAVI_ConvertTimeFormatToFrame(wma, lpParms->dwFrom);    }    if (lpParms && (dwFlags & MCI_TO)) {	dwToFrame = MCIAVI_ConvertTimeFormatToFrame(wma, lpParms->dwTo);    }    if (dwToFrame >= wma->dwPlayableVideoFrames)	dwToFrame = wma->dwPlayableVideoFrames - 1;    TRACE("Playing from frame=%lu to frame=%lu\n", dwFromFrame, dwToFrame);    if (dwToFrame <= wma->dwCurrVideoFrame)	return TRUE;    wma->dwCurrVideoFrame = dwFromFrame;    if (dwFlags & (MCI_DGV_PLAY_REPEAT|MCI_DGV_PLAY_REVERSE|MCI_MCIAVI_PLAY_WINDOW|MCI_MCIAVI_PLAY_FULLSCREEN))	FIXME("Unsupported flag %08lx\n", dwFlags);    /* time is in microseconds, we should convert it to milliseconds */    frameTime = (wma->mah.dwMicroSecPerFrame + 500) / 1000;    if (wma->lpWaveFormat) {	if ((dwRet = MCIAVI_OpenAudio(wma, &nHdr, &waveHdr)) != 0)	    goto cleanUp;	/* fill the queue with as many wave headers as possible */	MCIAVI_PlayAudioBlocks(wma, nHdr, waveHdr);    }    while (wma->dwStatus != MCI_MODE_STOP && wma->dwStatus != MCI_MODE_NOT_READY) {	tc = GetTickCount();	MCIAVI_DrawFrame(wma);	if (wma->lpWaveFormat) {	    MCIAVI_PlayAudioBlocks(wma, nHdr, waveHdr);	    delta = GetTickCount() - tc;	    WaitForSingleObject(wma->hEvent, (delta >= frameTime) ? 0 : frameTime - delta);	}	delta = GetTickCount() - tc;	if (delta < frameTime)	    Sleep(frameTime - delta);	if (wma->dwCurrVideoFrame++ >= dwToFrame) {	    wma->dwCurrVideoFrame--;	    wma->dwStatus = MCI_MODE_STOP;	}    }    if (wma->lpWaveFormat) {	while (*(volatile DWORD*)&wma->dwEventCount != nHdr - 1) {	    Sleep(100);	}	/* just to get rid of some race conditions between play, stop and pause */	waveOutReset(wma->hWave);	for (i = 0; i < nHdr; i++)	    waveOutUnprepareHeader(wma->hWave, &waveHdr[i], sizeof(WAVEHDR));    }    dwRet = 0;cleanUp:    if (wma->lpWaveFormat) {	HeapFree(GetProcessHeap(), 0, waveHdr);	if (wma->hWave) {	    waveOutClose(wma->hWave);	    wma->hWave = 0;	}	CloseHandle(wma->hEvent);    }    if (lpParms && (dwFlags & MCI_NOTIFY)) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			wma->openParms.wDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    wma->dwStatus = MCI_MODE_STOP;    return dwRet;}/*************************************************************************** * 				MCIAVI_mciRecord			[internal] */static	DWORD	MCIAVI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECORD_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    wma->dwStatus = MCI_MODE_RECORD;    return 0;}/*************************************************************************** * 				MCIAVI_mciStop			[internal] */static	DWORD	MCIAVI_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    DWORD		dwRet = 0;    TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    switch (wma->dwStatus) {    case MCI_MODE_PAUSE:    case MCI_MODE_PLAY:    case MCI_MODE_RECORD:	{	    int oldStat = wma->dwStatus;	    wma->dwStatus = MCI_MODE_NOT_READY;	    if (oldStat == MCI_MODE_PAUSE)		dwRet = waveOutReset(wma->hWave);	}	while (wma->dwStatus != MCI_MODE_STOP)	    Sleep(10);	break;    default:	wma->dwStatus = MCI_MODE_STOP;	break;    }    if ((dwFlags & MCI_NOTIFY) && lpParms) {	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			wma->openParms.wDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return dwRet;}/*************************************************************************** * 				MCIAVI_mciPause			[internal] */static	DWORD	MCIAVI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    if (wma->dwStatus == MCI_MODE_PLAY)	wma->dwStatus = MCI_MODE_PAUSE;    return (wma->lpWaveFormat) ? waveOutPause(wma->hWave) : 0;}/*************************************************************************** * 				MCIAVI_mciResume			[internal] */static	DWORD	MCIAVI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    if (wma->dwStatus == MCI_MODE_PAUSE)	wma->dwStatus = MCI_MODE_PLAY;    return (wma->lpWaveFormat) ? waveOutRestart(wma->hWave) : 0;}/*************************************************************************** * 				MCIAVI_mciSeek			[internal] */static	DWORD	MCIAVI_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    EnterCriticalSection(&wma->cs);    MCIAVI_mciStop(wDevID, MCI_WAIT, 0);    if (dwFlags & MCI_SEEK_TO_START) {	wma->dwCurrVideoFrame = 0;    } else if (dwFlags & MCI_SEEK_TO_END) {	wma->dwCurrVideoFrame = wma->dwPlayableVideoFrames - 1;    } else if (dwFlags & MCI_TO) {	wma->dwCurrVideoFrame = MCIAVI_ConvertTimeFormatToFrame(wma, lpParms->dwTo);    } else {	WARN("dwFlag doesn't tell where to seek to...\n");	LeaveCriticalSection(&wma->cs);	return MCIERR_MISSING_PARAMETER;    }    TRACE("Seeking to frame=%lu bytes\n", wma->dwCurrVideoFrame);    if (dwFlags & MCI_NOTIFY) {	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			wma->openParms.wDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    LeaveCriticalSection(&wma->cs);    return 0;}/***************************************************************************** * 				MCIAVI_mciLoad			[internal] */static DWORD	MCIAVI_mciLoad(UINT wDevID, DWORD dwFlags, LPMCI_DGV_LOAD_PARMSA lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    return 0;}/****************************************************************************** * 				MCIAVI_mciSave			[internal] */static	DWORD	MCIAVI_mciSave(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SAVE_PARMSA lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    return 0;}/****************************************************************************** * 				MCIAVI_mciFreeze			[internal] */static	DWORD	MCIAVI_mciFreeze(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    return 0;}/****************************************************************************** * 				MCIAVI_mciRealize			[internal] */static	DWORD	MCIAVI_mciRealize(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    return 0;}/****************************************************************************** * 				MCIAVI_mciUnFreeze			[internal] */static	DWORD	MCIAVI_mciUnFreeze(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    return 0;}/****************************************************************************** * 				MCIAVI_mciUpdate			[internal] */static	DWORD	MCIAVI_mciUpdate(UINT wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS lpParms){    WINE_MCIAVI*	wma = MCIAVI_mciGetOpenDev(wDevID);    FIXME("(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL)	return MCIERR_NULL_PARAMETER_BLOCK;    if (wma == NULL)		return MCIERR_INVALID_DEVICE_ID;    return 0;}/******************************************************************************

⌨️ 快捷键说明

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