Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e8a7ad30
Commit
e8a7ad30
authored
Jan 11, 2003
by
Eric Pouech
Committed by
Alexandre Julliard
Jan 11, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some code cleanups.
Better error handling. Removed unneeded internal variables.
parent
04d59638
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
36 deletions
+40
-36
mciwave.c
dlls/winmm/mciwave/mciwave.c
+40
-36
No files found.
dlls/winmm/mciwave/mciwave.c
View file @
e8a7ad30
...
@@ -45,7 +45,6 @@ typedef struct {
...
@@ -45,7 +45,6 @@ typedef struct {
BOOL
fInput
;
/* FALSE = Output, TRUE = Input */
BOOL
fInput
;
/* FALSE = Output, TRUE = Input */
volatile
WORD
dwStatus
;
/* one from MCI_MODE_xxxx */
volatile
WORD
dwStatus
;
/* one from MCI_MODE_xxxx */
DWORD
dwMciTimeFormat
;
/* One of the supported MCI_FORMAT_xxxx */
DWORD
dwMciTimeFormat
;
/* One of the supported MCI_FORMAT_xxxx */
DWORD
dwRemaining
;
/* remaining bytes to play or record */
DWORD
dwPosition
;
/* position in bytes in chunk */
DWORD
dwPosition
;
/* position in bytes in chunk */
HANDLE
hEvent
;
/* for synchronization */
HANDLE
hEvent
;
/* for synchronization */
DWORD
dwEventCount
;
/* for synchronization */
DWORD
dwEventCount
;
/* for synchronization */
...
@@ -251,6 +250,7 @@ static DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
...
@@ -251,6 +250,7 @@ static DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
(
LPSTR
)
&
mmckInfo
.
ckid
,
(
LPSTR
)
&
mmckInfo
.
fccType
,
mmckInfo
.
cksize
);
(
LPSTR
)
&
mmckInfo
.
ckid
,
(
LPSTR
)
&
mmckInfo
.
fccType
,
mmckInfo
.
cksize
);
wmw
->
lpWaveFormat
=
HeapAlloc
(
GetProcessHeap
(),
0
,
mmckInfo
.
cksize
);
wmw
->
lpWaveFormat
=
HeapAlloc
(
GetProcessHeap
(),
0
,
mmckInfo
.
cksize
);
if
(
!
wmw
->
lpWaveFormat
)
return
MMSYSERR_NOMEM
;
r
=
mmioRead
(
wmw
->
hFile
,
(
HPSTR
)
wmw
->
lpWaveFormat
,
mmckInfo
.
cksize
);
r
=
mmioRead
(
wmw
->
hFile
,
(
HPSTR
)
wmw
->
lpWaveFormat
,
mmckInfo
.
cksize
);
if
(
r
<
sizeof
(
WAVEFORMAT
))
if
(
r
<
sizeof
(
WAVEFORMAT
))
return
MCIERR_INVALID_FILE
;
return
MCIERR_INVALID_FILE
;
...
@@ -284,45 +284,41 @@ static DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
...
@@ -284,45 +284,41 @@ static DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
static
DWORD
WAVE_mciCreateRIFFSkeleton
(
WINE_MCIWAVE
*
wmw
)
static
DWORD
WAVE_mciCreateRIFFSkeleton
(
WINE_MCIWAVE
*
wmw
)
{
{
MMCKINFO
ckWaveFormat
;
MMCKINFO
ckWaveFormat
;
LPMMCKINFO
lpckRIFF
=
&
(
wmw
->
ckMainRIFF
);
LPMMCKINFO
lpckRIFF
=
&
(
wmw
->
ckMainRIFF
);
LPMMCKINFO
lpckWaveData
=
&
(
wmw
->
ckWaveData
);
LPMMCKINFO
lpckWaveData
=
&
(
wmw
->
ckWaveData
);
LPWAVEFORMATEX
lpWaveFormat
=
wmw
->
lpWaveFormat
;
HMMIO
hmmio
=
wmw
->
hFile
;
lpckRIFF
->
ckid
=
FOURCC_RIFF
;
lpckRIFF
->
ckid
=
FOURCC_RIFF
;
lpckRIFF
->
fccType
=
mmioFOURCC
(
'W'
,
'A'
,
'V'
,
'E'
);
lpckRIFF
->
fccType
=
mmioFOURCC
(
'W'
,
'A'
,
'V'
,
'E'
);
lpckRIFF
->
cksize
=
0
;
lpckRIFF
->
cksize
=
0
;
if
(
MMSYSERR_NOERROR
!=
mmioCreateChunk
(
hmmio
,
lpckRIFF
,
MMIO_CREATERIFF
))
if
(
MMSYSERR_NOERROR
!=
mmioCreateChunk
(
wmw
->
hFile
,
lpckRIFF
,
MMIO_CREATERIFF
))
goto
err
;
goto
err
;
ckWaveFormat
.
fccType
=
0
;
ckWaveFormat
.
fccType
=
0
;
ckWaveFormat
.
ckid
=
mmioFOURCC
(
'f'
,
'm'
,
't'
,
' '
);
ckWaveFormat
.
ckid
=
mmioFOURCC
(
'f'
,
'm'
,
't'
,
' '
);
ckWaveFormat
.
cksize
=
16
;
ckWaveFormat
.
cksize
=
sizeof
(
PCMWAVEFORMAT
)
;
if
(
!
lpWaveFormat
)
if
(
!
wmw
->
lpWaveFormat
)
{
{
/* FIXME: for non PCM formats, the size of the waveFormat has to be
wmw
->
lpWaveFormat
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
wmw
->
lpWaveFormat
));
* gotten
if
(
!
wmw
->
lpWaveFormat
)
return
MMSYSERR_NOMEM
;
*/
memcpy
(
wmw
->
lpWaveFormat
,
&
wmw
->
wfxRef
,
sizeof
(
wmw
->
wfxRef
));
lpWaveFormat
=
wmw
->
lpWaveFormat
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
lpWaveFormat
));
memcpy
(
lpWaveFormat
,
&
wmw
->
wfxRef
,
sizeof
(
wmw
->
wfxRef
));
}
}
if
(
MMSYSERR_NOERROR
!=
mmioCreateChunk
(
hmmio
,
&
ckWaveFormat
,
0
))
/* we can only record PCM files... there is no way in the MCI API to specify
* the necessary data to initialize the extra bytes of the WAVEFORMATEX
* structure
*/
if
(
wmw
->
lpWaveFormat
->
wFormatTag
!=
WAVE_FORMAT_PCM
)
goto
err
;
goto
err
;
/* only the first 16 bytes are serialized */
if
(
MMSYSERR_NOERROR
!=
mmioCreateChunk
(
wmw
->
hFile
,
&
ckWaveFormat
,
0
))
/* wrong... for non PCM, the whole waveFormat is stored
goto
err
;
*/
if
(
-
1
==
mmioWrite
(
hmmio
,
(
HPCSTR
)
lpWaveFormat
,
16
))
if
(
-
1
==
mmioWrite
(
wmw
->
hFile
,
(
HPCSTR
)
wmw
->
lpWaveFormat
,
sizeof
(
PCMWAVEFORMAT
)
))
goto
err
;
goto
err
;
if
(
MMSYSERR_NOERROR
!=
mmioAscend
(
hmmio
,
&
ckWaveFormat
,
0
))
if
(
MMSYSERR_NOERROR
!=
mmioAscend
(
wmw
->
hFile
,
&
ckWaveFormat
,
0
))
goto
err
;
goto
err
;
lpckWaveData
->
cksize
=
0
;
lpckWaveData
->
cksize
=
0
;
...
@@ -330,13 +326,15 @@ static DWORD WAVE_mciCreateRIFFSkeleton(WINE_MCIWAVE* wmw)
...
@@ -330,13 +326,15 @@ static DWORD WAVE_mciCreateRIFFSkeleton(WINE_MCIWAVE* wmw)
lpckWaveData
->
ckid
=
mmioFOURCC
(
'd'
,
'a'
,
't'
,
'a'
);
lpckWaveData
->
ckid
=
mmioFOURCC
(
'd'
,
'a'
,
't'
,
'a'
);
/* create data chunk */
/* create data chunk */
if
(
MMSYSERR_NOERROR
!=
mmioCreateChunk
(
hmmio
,
lpckWaveData
,
0
))
if
(
MMSYSERR_NOERROR
!=
mmioCreateChunk
(
wmw
->
hFile
,
lpckWaveData
,
0
))
goto
err
;
goto
err
;
return
0
;
return
0
;
err:
err:
if
(
wmw
->
lpWaveFormat
)
HeapFree
(
GetProcessHeap
(),
0
,
wmw
->
lpWaveFormat
);
HeapFree
(
GetProcessHeap
(),
0
,
wmw
->
lpWaveFormat
);
wmw
->
lpWaveFormat
=
NULL
;
return
MCIERR_INVALID_FILE
;
return
MCIERR_INVALID_FILE
;
}
}
...
@@ -616,7 +614,7 @@ static DWORD WAVE_mciClose(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPar
...
@@ -616,7 +614,7 @@ static DWORD WAVE_mciClose(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPar
*/
*/
if
(
wmw
->
bTemporaryFile
)
if
(
wmw
->
bTemporaryFile
)
{
{
HeapFree
(
GetProcessHeap
(),
0
,
(
CHAR
*
)
wmw
->
openParms
.
lpstrElementName
);
HeapFree
(
GetProcessHeap
(),
0
,
(
char
*
)
wmw
->
openParms
.
lpstrElementName
);
wmw
->
openParms
.
lpstrElementName
=
NULL
;
wmw
->
openParms
.
lpstrElementName
=
NULL
;
}
}
...
@@ -655,6 +653,11 @@ static void CALLBACK WAVE_mciPlayCallback(HWAVEOUT hwo, UINT uMsg,
...
@@ -655,6 +653,11 @@ static void CALLBACK WAVE_mciPlayCallback(HWAVEOUT hwo, UINT uMsg,
}
}
}
}
/******************************************************************
* WAVE_mciPlayWaitDone
*
*
*/
static
void
WAVE_mciPlayWaitDone
(
WINE_MCIWAVE
*
wmw
)
static
void
WAVE_mciPlayWaitDone
(
WINE_MCIWAVE
*
wmw
)
{
{
for
(;;)
{
for
(;;)
{
...
@@ -869,8 +872,9 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg,
...
@@ -869,8 +872,9 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg,
DWORD
dwParam1
,
DWORD
dwParam2
)
DWORD
dwParam1
,
DWORD
dwParam2
)
{
{
WINE_MCIWAVE
*
wmw
=
(
WINE_MCIWAVE
*
)
dwInstance
;
WINE_MCIWAVE
*
wmw
=
(
WINE_MCIWAVE
*
)
dwInstance
;
LPWAVEHDR
lpWaveHdr
=
NULL
;
LPWAVEHDR
lpWaveHdr
;
LONG
count
=
0
;
LONG
count
=
0
;
switch
(
uMsg
)
{
switch
(
uMsg
)
{
case
WIM_OPEN
:
case
WIM_OPEN
:
case
WIM_CLOSE
:
case
WIM_CLOSE
:
...
@@ -883,9 +887,9 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg,
...
@@ -883,9 +887,9 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg,
count
=
mmioWrite
(
wmw
->
hFile
,
lpWaveHdr
->
lpData
,
lpWaveHdr
->
dwBytesRecorded
);
count
=
mmioWrite
(
wmw
->
hFile
,
lpWaveHdr
->
lpData
,
lpWaveHdr
->
dwBytesRecorded
);
lpWaveHdr
->
dwFlags
&=
~
WHDR_DONE
;
lpWaveHdr
->
dwFlags
&=
~
WHDR_DONE
;
if
(
count
>
0
)
wmw
->
dwPosition
+=
count
;
wmw
->
dwPosition
+=
count
;
wmw
->
dwRemaining
-=
count
;
/* else error reporting ?? */
if
(
wmw
->
dwStatus
==
MCI_MODE_RECORD
)
if
(
wmw
->
dwStatus
==
MCI_MODE_RECORD
)
{
{
/* Only queue up another buffer if we are recording. We could receive this
/* Only queue up another buffer if we are recording. We could receive this
...
@@ -903,6 +907,10 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg,
...
@@ -903,6 +907,10 @@ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg,
}
}
}
}
/******************************************************************
* bWAVE_mciRecordWaitDone
*
*/
static
void
WAVE_mciRecordWaitDone
(
WINE_MCIWAVE
*
wmw
)
static
void
WAVE_mciRecordWaitDone
(
WINE_MCIWAVE
*
wmw
)
{
{
for
(;;)
{
for
(;;)
{
...
@@ -922,7 +930,7 @@ static void WAVE_mciRecordWaitDone(WINE_MCIWAVE* wmw)
...
@@ -922,7 +930,7 @@ static void WAVE_mciRecordWaitDone(WINE_MCIWAVE* wmw)
static
DWORD
WAVE_mciRecord
(
UINT
wDevID
,
DWORD
dwFlags
,
LPMCI_RECORD_PARMS
lpParms
)
static
DWORD
WAVE_mciRecord
(
UINT
wDevID
,
DWORD
dwFlags
,
LPMCI_RECORD_PARMS
lpParms
)
{
{
DWORD
end
;
DWORD
end
;
DWORD
dwRet
=
0
;
DWORD
dwRet
=
MMSYSERR_NOERROR
;
LONG
bufsize
;
LONG
bufsize
;
LPWAVEHDR
waveHdr
=
NULL
;
LPWAVEHDR
waveHdr
=
NULL
;
WINE_MCIWAVE
*
wmw
=
WAVE_mciGetOpenDev
(
wDevID
);
WINE_MCIWAVE
*
wmw
=
WAVE_mciGetOpenDev
(
wDevID
);
...
@@ -963,12 +971,10 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
...
@@ -963,12 +971,10 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
(
DWORD
)
lpParms
,
sizeof
(
MCI_RECORD_PARMS
));
(
DWORD
)
lpParms
,
sizeof
(
MCI_RECORD_PARMS
));
}
}
if
(
!
wmw
->
lpWaveFormat
)
if
(
!
wmw
->
lpWaveFormat
)
{
{
/* new RIFF file */
/* new RIFF file */
dwRet
=
WAVE_mciCreateRIFFSkeleton
(
wmw
);
dwRet
=
WAVE_mciCreateRIFFSkeleton
(
wmw
);
}
else
}
else
{
{
FIXME
(
"Should descend into data chunk. Please report.
\n
"
);
FIXME
(
"Should descend into data chunk. Please report.
\n
"
);
}
}
...
@@ -1009,7 +1015,7 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
...
@@ -1009,7 +1015,7 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
dwRet
=
waveInOpen
((
HWAVEIN
*
)
&
wmw
->
hWave
,
WAVE_MAPPER
,
wmw
->
lpWaveFormat
,
dwRet
=
waveInOpen
((
HWAVEIN
*
)
&
wmw
->
hWave
,
WAVE_MAPPER
,
wmw
->
lpWaveFormat
,
(
DWORD
)
WAVE_mciRecordCallback
,
(
DWORD
)
wmw
,
CALLBACK_FUNCTION
);
(
DWORD
)
WAVE_mciRecordCallback
,
(
DWORD
)
wmw
,
CALLBACK_FUNCTION
);
if
(
dwRet
!=
0
)
{
if
(
dwRet
!=
MMSYSERR_NOERROR
)
{
TRACE
(
"Can't open low level audio device %ld
\n
"
,
dwRet
);
TRACE
(
"Can't open low level audio device %ld
\n
"
,
dwRet
);
dwRet
=
MCIERR_DEVICE_OPEN
;
dwRet
=
MCIERR_DEVICE_OPEN
;
wmw
->
hWave
=
0
;
wmw
->
hWave
=
0
;
...
@@ -1042,13 +1048,11 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
...
@@ -1042,13 +1048,11 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
wmw
->
hEvent
=
CreateEventA
(
NULL
,
FALSE
,
FALSE
,
NULL
);
wmw
->
hEvent
=
CreateEventA
(
NULL
,
FALSE
,
FALSE
,
NULL
);
wmw
->
dwEventCount
=
1L
;
/* for first buffer */
wmw
->
dwEventCount
=
1L
;
/* for first buffer */
wmw
->
dwRemaining
=
end
-
wmw
->
dwPosition
;
TRACE
(
"Recording (normalized) from byte=%lu for %lu bytes
\n
"
,
wmw
->
dwPosition
,
end
-
wmw
->
dwPosition
);
TRACE
(
"Recording (normalized) from byte=%lu for %lu bytes
\n
"
,
wmw
->
dwPosition
,
wmw
->
dwRemaining
);
dwRet
=
waveInStart
(
wmw
->
hWave
);
dwRet
=
waveInStart
(
wmw
->
hWave
);
while
(
wmw
->
dwRemaining
>
0
&&
wmw
->
dwStatus
!=
MCI_MODE_STOP
&&
wmw
->
dwStatus
!=
MCI_MODE_NOT_READY
)
{
while
(
wmw
->
dwPosition
<
end
&&
wmw
->
dwStatus
!=
MCI_MODE_STOP
&&
wmw
->
dwStatus
!=
MCI_MODE_NOT_READY
)
{
WAVE_mciRecordWaitDone
(
wmw
);
WAVE_mciRecordWaitDone
(
wmw
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment