Changeset 2935 for trunk/src/winmm/waveout.cpp
- Timestamp:
- Feb 27, 2000, 9:29:47 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/waveout.cpp
r2812 r2935 1 /* $Id: waveout.cpp,v 1.1 0 2000-02-17 14:09:33sandervl Exp $ */1 /* $Id: waveout.cpp,v 1.11 2000-02-27 20:29:47 sandervl Exp $ */ 2 2 //#undef DEBUG 3 3 /* 4 4 * Wave out MM apis 5 5 * 6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)6 * Copyright 1998-2000 Sander van Leeuwen (sandervl@xs4all.nl) 7 7 * 8 * waveOutGetPosition partly based on Wine code (dll\winmm\wineoss\audio.c) 9 * Copyright 1994 Martin Ayotte 8 10 * 9 11 * Project Odin Software License can be found in LICENSE.TXT … … 29 31 #include "winmm.h" 30 32 31 #define DBG_LOCALLOG 33 #define DBG_LOCALLOG DBG_waveout 32 34 #include "dbglocal.h" 33 35 … … 98 100 if(DartWaveOut::find(dwave) == TRUE) 99 101 { 100 if(!(pwh->dwFlags & WHDR_PREPARED) || pwh->lpData == NULL) 101 return WAVERR_UNPREPARED; 102 103 if(pwh->dwFlags & WHDR_INQUEUE) 104 return WAVERR_STILLPLAYING; 105 106 pwh->dwFlags |= WHDR_INQUEUE; 107 pwh->dwFlags &= ~WHDR_DONE; 108 109 return(dwave->write(pwh, cbwh)); 110 } 111 else 112 return(MMSYSERR_INVALHANDLE); 102 if(!(pwh->dwFlags & WHDR_PREPARED) || pwh->lpData == NULL) 103 return WAVERR_UNPREPARED; 104 105 if(pwh->dwFlags & WHDR_INQUEUE) 106 return WAVERR_STILLPLAYING; 107 108 pwh->dwFlags |= WHDR_INQUEUE; 109 pwh->dwFlags &= ~WHDR_DONE; 110 111 return(dwave->write(pwh, cbwh)); 112 } 113 else return(MMSYSERR_INVALHANDLE); 113 114 } 114 115 /******************************************************************************/ … … 120 121 121 122 if(DartWaveOut::find(dwave) == TRUE) 122 return(dwave->reset()); 123 else 124 return(MMSYSERR_INVALHANDLE); 123 return(dwave->reset()); 124 else return(MMSYSERR_INVALHANDLE); 125 125 } 126 126 /******************************************************************************/ … … 133 133 dprintf(("WINMM:waveOutBreakLoop (implemented as reset) %X\n", hwaveout)); 134 134 if(DartWaveOut::find(dwave) == TRUE) 135 return(dwave->reset()); 136 else 137 return(MMSYSERR_INVALHANDLE); 135 return(dwave->reset()); 136 else return(MMSYSERR_INVALHANDLE); 138 137 } 139 138 /******************************************************************************/ … … 146 145 if(DartWaveOut::find(dwave) == TRUE) 147 146 { 148 if(dwave->getState() == STATE_PLAYING) 149 return(WAVERR_STILLPLAYING); 150 151 delete dwave; 152 return(MMSYSERR_NOERROR); 153 } 154 else 155 return(MMSYSERR_INVALHANDLE); 147 if(dwave->getState() == STATE_PLAYING) 148 return(WAVERR_STILLPLAYING); 149 150 delete dwave; 151 return(MMSYSERR_NOERROR); 152 } 153 else return(MMSYSERR_INVALHANDLE); 156 154 } 157 155 /******************************************************************************/ … … 163 161 164 162 if(DartWaveOut::find(dwave) == TRUE) 165 return(dwave->pause()); 166 else 167 return(MMSYSERR_INVALHANDLE); 163 return(dwave->pause()); 164 else return(MMSYSERR_INVALHANDLE); 168 165 } 169 166 /******************************************************************************/ … … 175 172 176 173 if(DartWaveOut::find(dwave) == TRUE) 177 return(dwave->restart()); 178 else 179 return(MMSYSERR_INVALHANDLE); 174 return(dwave->restart()); 175 else return(MMSYSERR_INVALHANDLE); 180 176 } 181 177 /******************************************************************************/ … … 190 186 if(DartWaveOut::find(dwave) == TRUE) 191 187 { 192 if(pwh->dwFlags & WHDR_INQUEUE) 193 return WAVERR_STILLPLAYING; 194 195 pwh->dwFlags |= WHDR_PREPARED; 196 pwh->dwFlags &= ~WHDR_DONE; 197 pwh->lpNext = NULL; 198 return(MMSYSERR_NOERROR); 199 } 200 else 201 return(MMSYSERR_INVALHANDLE); 188 if(pwh->dwFlags & WHDR_INQUEUE) 189 return WAVERR_STILLPLAYING; 190 191 pwh->dwFlags |= WHDR_PREPARED; 192 pwh->dwFlags &= ~WHDR_DONE; 193 pwh->lpNext = NULL; 194 return(MMSYSERR_NOERROR); 195 } 196 else return(MMSYSERR_INVALHANDLE); 202 197 } 203 198 /******************************************************************************/ … … 212 207 if(DartWaveOut::find(dwave) == TRUE) 213 208 { 214 if(pwh->dwFlags & WHDR_INQUEUE) 215 return WAVERR_STILLPLAYING; 216 217 pwh->dwFlags &= ~WHDR_PREPARED; 218 pwh->dwFlags |= WHDR_DONE; 219 return(MMSYSERR_NOERROR); 220 } 221 else 222 return(MMSYSERR_INVALHANDLE); 209 if(pwh->dwFlags & WHDR_INQUEUE) 210 return WAVERR_STILLPLAYING; 211 212 pwh->dwFlags &= ~WHDR_PREPARED; 213 pwh->dwFlags |= WHDR_DONE; 214 return(MMSYSERR_NOERROR); 215 } 216 else return(MMSYSERR_INVALHANDLE); 223 217 } 224 218 /******************************************************************************/ … … 230 224 { 231 225 DartWaveOut *dwave = (DartWaveOut *)hwo; 232 dprintf(("WINMM:waveOutGetPosition - not implemented\n")); 233 if(DartWaveOut::find(dwave) == TRUE) 234 return(MMSYSERR_NOERROR); 235 else 236 return(MMSYSERR_INVALHANDLE); 226 227 if(pmmt == NULL) 228 return MMSYSERR_INVALPARAM; 229 230 if(DartWaveOut::find(dwave) == TRUE) 231 { 232 ULONG position; 233 234 position = dwave->getPosition(); 235 if(position == -1) { 236 return MMSYSERR_HANDLEBUSY; //todo correct error value 237 } 238 switch (pmmt->wType) { 239 case TIME_BYTES: 240 pmmt->u.cb = position; 241 break; 242 case TIME_SAMPLES: 243 pmmt->u.sample = position * 8 / dwave->getBitsPerSample(); 244 break; 245 case TIME_SMPTE: 246 { 247 ULONG timeval = position / (dwave->getAvgBytesPerSecond() / 1000); 248 pmmt->u.smpte.hour = timeval / 108000; 249 timeval -= pmmt->u.smpte.hour * 108000; 250 pmmt->u.smpte.min = timeval / 1800; 251 timeval -= pmmt->u.smpte.min * 1800; 252 pmmt->u.smpte.sec = timeval / 30; 253 timeval -= pmmt->u.smpte.sec * 30; 254 pmmt->u.smpte.frame = timeval; 255 pmmt->u.smpte.fps = 30; 256 break; 257 } 258 default: 259 dprintf(("waveOutGetPosition: Format %d not supported ! use TIME_MS !\n", pmmt->wType)); 260 pmmt->wType = TIME_MS; 261 case TIME_MS: 262 pmmt->u.ms = position / (dwave->getAvgBytesPerSecond() / 1000); 263 dprintf(("WINMM:waveOutGetPosition: TIME_MS pos=%d ms=%d time=%d", position, pmmt->u.ms, GetCurrentTime())); 264 break; 265 } 266 return MMSYSERR_NOERROR; 267 } 268 else return(MMSYSERR_INVALHANDLE); 237 269 } 238 270 /******************************************************************************/ … … 243 275 UINT, cbwoc) 244 276 { 245 dprintf(("WINMM:waveOutGetDevCapsA"));246 247 277 if(DartWaveOut::getNumDevices() == 0) { 248 249 278 memset(pwoc, 0, sizeof(*pwoc)); 279 return MMSYSERR_NODRIVER; 250 280 } 251 281 … … 278 308 279 309 if(DartWaveOut::getNumDevices() == 0) { 280 281 310 memset(pwoc, 0, sizeof(*pwoc)); 311 return MMSYSERR_NODRIVER; 282 312 } 283 313 // we have to fill in this thing … … 313 343 { 314 344 char * theMsg = getWinmmMsg( wError ); 315 if ( theMsg ) 316 strncpy( lpText, theMsg, cchText ); 317 else 318 { 319 char errMsg[100]; 320 sprintf( errMsg, "Unknown error number %d", wError ); 321 strncpy( lpText, errMsg, cchText ); 345 if(theMsg) { 346 strncpy( lpText, theMsg, cchText ); 347 } 348 else 349 { 350 char errMsg[100]; 351 sprintf( errMsg, "Unknown error number %d", wError ); 352 strncpy( lpText, errMsg, cchText ); 322 353 } 323 354 return MMSYSERR_NOERROR; 324 355 } 325 356 /******************************************************************************/ 357 /******************************************************************************/ 326 358 ODINFUNCTION3(MMRESULT, waveOutGetErrorTextW, 327 359 MMRESULT, wError, … … 330 362 { 331 363 char * theMsg = getWinmmMsg( wError ); 332 if ( theMsg ) 333 AsciiToUnicode( theMsg, lpText ); 334 else 335 { 336 char errMsg[100]; 337 sprintf( errMsg, "Unknown error number %d", wError ); 338 AsciiToUnicode( errMsg, lpText ); 364 if(theMsg) { 365 AsciiToUnicode( theMsg, lpText ); 366 } 367 else 368 { 369 char errMsg[100]; 370 sprintf( errMsg, "Unknown error number %d", wError ); 371 AsciiToUnicode( errMsg, lpText ); 339 372 } 340 373 return MMSYSERR_NOERROR; 341 374 } 342 375 /******************************************************************************/ 376 /******************************************************************************/ 343 377 ODINFUNCTION2(MMRESULT, waveOutGetID, 344 378 HWAVEOUT, hwo, … … 348 382 if(DartWaveOut::find(dwave) == TRUE) 349 383 { 350 *puDeviceID = 1;351 return MMSYSERR_NOERROR;352 } 353 else 354 return(MMSYSERR_INVALHANDLE); 355 } 356 384 *puDeviceID = 1; 385 return MMSYSERR_NOERROR; 386 } 387 else return(MMSYSERR_INVALHANDLE); 388 } 389 /******************************************************************************/ 390 /******************************************************************************/ 357 391 ODINFUNCTION2(MMRESULT, waveOutGetPitch, 358 392 HWAVEOUT, hwo, … … 361 395 DartWaveOut *dwave = (DartWaveOut *)hwo; 362 396 if(DartWaveOut::find(dwave) == TRUE) 363 return MMSYSERR_NOTSUPPORTED;364 else 365 return(MMSYSERR_INVALHANDLE); 366 } 367 397 return MMSYSERR_NOTSUPPORTED; 398 else return(MMSYSERR_INVALHANDLE); 399 } 400 /******************************************************************************/ 401 /******************************************************************************/ 368 402 ODINFUNCTION2(MMRESULT, waveOutSetPitch, 369 403 HWAVEOUT, hwo, … … 372 406 DartWaveOut *dwave = (DartWaveOut *)hwo; 373 407 if(DartWaveOut::find(dwave) == TRUE) 374 return MMSYSERR_NOTSUPPORTED;375 else 376 return(MMSYSERR_INVALHANDLE); 377 } 378 408 return MMSYSERR_NOTSUPPORTED; 409 else return(MMSYSERR_INVALHANDLE); 410 } 411 /******************************************************************************/ 412 /******************************************************************************/ 379 413 ODINFUNCTION2(MMRESULT, waveOutGetVolume, 380 414 HWAVEOUT, hwo, … … 384 418 if(DartWaveOut::find(dwave) == TRUE) 385 419 { 386 if(pdwVolume!=NULL)387 *pdwVolume=dwave->getVolume();388 return MMSYSERR_NOERROR;420 if(pdwVolume!=NULL) 421 *pdwVolume=dwave->getVolume(); 422 return MMSYSERR_NOERROR; 389 423 } 390 424 else … … 392 426 // return(MMSYSERR_INVALHANDLE); 393 427 } 394 428 /******************************************************************************/ 429 /******************************************************************************/ 395 430 ODINFUNCTION2(MMRESULT, waveOutSetVolume, 396 431 HWAVEOUT, hwo, … … 406 441 // return(MMSYSERR_INVALHANDLE); 407 442 } 408 443 /******************************************************************************/ 444 /******************************************************************************/ 409 445 ODINFUNCTION2(MMRESULT, waveOutGetPlaybackRate, 410 446 HWAVEOUT, hwo, … … 414 450 if(DartWaveOut::find(dwave) == TRUE) 415 451 { 416 return MMSYSERR_NOTSUPPORTED;417 } 418 else 419 return(MMSYSERR_INVALHANDLE); 420 } 421 452 return MMSYSERR_NOTSUPPORTED; 453 } 454 else return(MMSYSERR_INVALHANDLE); 455 } 456 /******************************************************************************/ 457 /******************************************************************************/ 422 458 ODINFUNCTION2(MMRESULT, waveOutSetPlaybackRate, 423 459 HWAVEOUT, hwo, … … 427 463 if(DartWaveOut::find(dwave) == TRUE) 428 464 { 429 return MMSYSERR_NOTSUPPORTED;430 } 431 else 432 return(MMSYSERR_INVALHANDLE); 433 } 434 465 return MMSYSERR_NOTSUPPORTED; 466 } 467 else return(MMSYSERR_INVALHANDLE); 468 } 469 /******************************************************************************/ 470 /******************************************************************************/ 435 471 ODINFUNCTION4(MMRESULT, waveOutMessage, 436 472 HWAVEOUT, hwo, … … 447 483 return(MMSYSERR_INVALHANDLE); 448 484 } 449 450 485 /******************************************************************************/ 486 /******************************************************************************/ 487 488
Note:
See TracChangeset
for help on using the changeset viewer.