135 lines
4.7 KiB
C
135 lines
4.7 KiB
C
|
/****************************************************************************
|
|||
|
|
|||
|
Task State : MCIAVI has a separate background task for every open
|
|||
|
instance of mciavi. The task handle and task state are stored in
|
|||
|
the per-instance data structure. The task can be in one of four
|
|||
|
states.
|
|||
|
|
|||
|
TASKABORT : Set by the AVI task when it fails to open the requested
|
|||
|
file during initialisation.
|
|||
|
|
|||
|
TASKINIT : This is the initial task state set when the
|
|||
|
instance data structure is initialized in mwOpenDevice()
|
|||
|
before the actual task is created by mmTaskCreate().
|
|||
|
After the task is created, mwOpenDevice() waits until
|
|||
|
the task state changes to TASKIDLE before returning
|
|||
|
success so that the background task is definitely initialized
|
|||
|
after an open call.
|
|||
|
|
|||
|
TASKIDLE : The task sets the state to TASKIDLE and blocks whenever
|
|||
|
there is nothing to do. When the task wakes, the state is either
|
|||
|
TASKCLOSE if the instance is being closed or else TASKBUSY
|
|||
|
if the task is to begin recording or playback of the file.
|
|||
|
|
|||
|
TASKCLOSE : mwCloseDevice() stops playback or recording which forces
|
|||
|
the task state to TASKIDLE and then sets the state to TASKCLOSE and
|
|||
|
wakes the task so that the task will destroy itself.
|
|||
|
|
|||
|
TASKSTARTING: The task is in this state when it is initializing for
|
|||
|
playback, but hasn't started yet. This is used so that the calling
|
|||
|
task can wait for play to start before returning "no error" as the
|
|||
|
result of an MCI play command.
|
|||
|
|
|||
|
TASKCUEING: The task is in this state when it is reading extra
|
|||
|
records and buffering up audio before actually starting to play.
|
|||
|
|
|||
|
TASKPAUSED: The task is in this state while it is paused.
|
|||
|
TASKPLAYING: The task is in this state during playback
|
|||
|
|
|||
|
****************************************************************************/
|
|||
|
|
|||
|
#define TASKABORT 0
|
|||
|
#define TASKBEINGCREATED 1
|
|||
|
#define TASKINIT 2
|
|||
|
#define TASKIDLE 3
|
|||
|
#define TASKSTARTING 4
|
|||
|
#define TASKCUEING 5
|
|||
|
#define TASKPLAYING 6
|
|||
|
#define TASKPAUSED 7
|
|||
|
#define TASKCLOSE 8
|
|||
|
#define TASKCLOSED 9
|
|||
|
// 9
|
|||
|
// 10
|
|||
|
#define TASKREADINDEX 11
|
|||
|
#define TASKRELOAD 12
|
|||
|
|
|||
|
/* A function back in device.c */
|
|||
|
DWORD mciaviTaskMessage(NPMCIGRAPHIC npMCI, int msg);
|
|||
|
void NEAR PASCAL ShowStage(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
//
|
|||
|
// call this to RTL to AVIFile.
|
|||
|
//
|
|||
|
BOOL FAR InitAVIFile(NPMCIGRAPHIC npMCI);
|
|||
|
BOOL FAR FreeAVIFile(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
/* Functions in avitask.c */
|
|||
|
void FAR PASCAL _LOADDS mciaviTask(DWORD dwInst);
|
|||
|
void FAR PASCAL mciaviTaskCleanup(NPMCIGRAPHIC npMCI);
|
|||
|
void NEAR PASCAL mciaviMessage(NPMCIGRAPHIC npMCI, UINT msg);
|
|||
|
|
|||
|
/* Functions in aviplay.c */
|
|||
|
UINT NEAR PASCAL mciaviPlayFile(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
/* Functions in avidraw.c */
|
|||
|
/* !!! Should this be externally visible? */
|
|||
|
BOOL NEAR PASCAL DoStreamUpdate(NPMCIGRAPHIC npMCI, BOOL fPaint);
|
|||
|
void NEAR PASCAL StreamInvalidate(NPMCIGRAPHIC npMCI, LPRECT prc);
|
|||
|
|
|||
|
UINT NEAR PASCAL PrepareDC(NPMCIGRAPHIC npMCI);
|
|||
|
void NEAR PASCAL UnprepareDC(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
BOOL FAR PASCAL DrawBegin(NPMCIGRAPHIC npMCI, BOOL FAR *fRestart);
|
|||
|
void NEAR PASCAL DrawEnd(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
BOOL NEAR PASCAL DisplayVideoFrame(NPMCIGRAPHIC npMCI, BOOL fHurryUp);
|
|||
|
BOOL NEAR PASCAL ProcessPaletteChange(NPMCIGRAPHIC npMCI, DWORD cksize);
|
|||
|
|
|||
|
|
|||
|
/* Functions in avisound.c */
|
|||
|
BOOL NEAR PASCAL PlayRecordAudio(NPMCIGRAPHIC npMCI, BOOL FAR *pfHurryUp,
|
|||
|
BOOL FAR *pfPlayedAudio);
|
|||
|
BOOL NEAR PASCAL KeepPlayingAudio(NPMCIGRAPHIC npMCI);
|
|||
|
BOOL NEAR PASCAL HandleAudioChunk(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
DWORD FAR PASCAL SetUpAudio(NPMCIGRAPHIC npMCI, BOOL fPlaying);
|
|||
|
DWORD FAR PASCAL CleanUpAudio(NPMCIGRAPHIC npMCI);
|
|||
|
void FAR PASCAL BuildVolumeTable(NPMCIGRAPHIC npMCI);
|
|||
|
BOOL FAR PASCAL StealWaveDevice(NPMCIGRAPHIC npMCI);
|
|||
|
BOOL FAR PASCAL GiveWaveDevice(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
#define WM_AUDIO_ON WM_USER+100
|
|||
|
#define WM_AUDIO_OFF WM_USER+101
|
|||
|
|
|||
|
#ifdef WIN32
|
|||
|
#define WM_AVISWP WM_USER+102
|
|||
|
#endif
|
|||
|
|
|||
|
// in hmemcpy.asm
|
|||
|
#ifndef WIN32
|
|||
|
LPVOID FAR PASCAL MemCopy(LPVOID dest, LPVOID source, LONG count);
|
|||
|
#else
|
|||
|
#define MemCopy memmove
|
|||
|
#endif // WIN16
|
|||
|
|
|||
|
#define GET_BYTE() (*((BYTE _huge *) (npMCI->lp))++)
|
|||
|
#ifdef WIN32
|
|||
|
#define GET_WORD() (*((UNALIGNED WORD _huge *) (npMCI->lp))++)
|
|||
|
#define GET_DWORD() (*((UNALIGNED DWORD _huge *) (npMCI->lp))++)
|
|||
|
#define PEEK_DWORD() (*((UNALIGNED DWORD _huge *) (npMCI->lp)))
|
|||
|
#else
|
|||
|
#define GET_WORD() (*((WORD _huge *) (npMCI->lp))++)
|
|||
|
#define GET_DWORD() (*((DWORD _huge *) (npMCI->lp))++)
|
|||
|
#define PEEK_DWORD() (*((DWORD _huge *) (npMCI->lp)))
|
|||
|
#endif
|
|||
|
#define SKIP_BYTES(nBytes) ((npMCI->lp) += (nBytes))
|
|||
|
|
|||
|
#define Now() (timeGetTime())
|
|||
|
|
|||
|
void NEAR PASCAL aviTaskYield(void);
|
|||
|
|
|||
|
BOOL FAR PASCAL ReadIndex(NPMCIGRAPHIC npMCI);
|
|||
|
|
|||
|
LONG NEAR PASCAL FindPrevKeyFrame(NPMCIGRAPHIC npMCI, STREAMINFO *psi, LONG lFrame);
|
|||
|
LONG NEAR PASCAL FindNextKeyFrame(NPMCIGRAPHIC npMCI, STREAMINFO *psi, LONG lFrame);
|
|||
|
|