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);
|
||
|