Changeset 3203 for trunk/src/comctl32/animate.cpp
- Timestamp:
- Mar 23, 2000, 6:14:45 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/animate.cpp
r2875 r3203 1 /* $Id: animate.cpp,v 1. 1 2000-02-23 17:09:40cbratschi Exp $ */1 /* $Id: animate.cpp,v 1.2 2000-03-23 17:14:33 cbratschi Exp $ */ 2 2 /* 3 3 * Animation control … … 20 20 #include "animate.h" 21 21 22 HINSTANCE hMSVFW32 = 0; 23 24 HINSTANCE hWINMM = 0; 25 static LONG (*WINAPI WINMM_mmioRead)(HMMIO,HPSTR,LONG) = 0; 26 static LONG (*WINAPI WINMM_mmioSeek)(HMMIO,LONG,INT) = 0; 27 static MMRESULT (*WINAPI WINMM_mmioClose)(HMMIO,UINT) = 0; 28 static HMMIO (*WINAPI WINMM_mmioOpenA)(LPSTR ,MMIOINFO*,DWORD) = 0; 29 static HMMIO (*WINAPI WINMM_mmioOpenW)(LPWSTR,MMIOINFO*,DWORD) = 0; 30 static UINT (*WINAPI WINMM_mmioDescend)(HMMIO,MMCKINFO*,const MMCKINFO*,UINT) = 0; 31 static UINT (*WINAPI WINMM_mmioAscend)(HMMIO,MMCKINFO*,UINT) = 0; 32 22 33 #define ANIMATE_GetInfoPtr(hwnd) ((ANIMATE_INFO*)getInfoPtr(hwnd)) 34 35 static BOOL ANIMATE_LoadMSVFW32(VOID) 36 { 37 if (hMSVFW32) return TRUE; 38 39 hMSVFW32 = LoadLibraryA("msvfw32.dll"); 40 41 return hMSVFW32; 42 } 43 44 static VOID ANIMATE_UnloadMSVFW32(VOID) 45 { 46 if (hMSVFW32) 47 { 48 FreeLibrary(hMSVFW32); 49 hMSVFW32 = 0; 50 } 51 } 52 53 static BOOL ANIMATE_LoadWINMM(VOID) 54 { 55 if (hWINMM) return TRUE; 56 57 hWINMM = LoadLibraryA("WINMM"); 58 if (!hWINMM) return FALSE; 59 60 *(VOID**)&WINMM_mmioRead = (VOID*)GetProcAddress(hWINMM,"mmioRead"); 61 *(VOID**)&WINMM_mmioSeek = (VOID*)GetProcAddress(hWINMM,"mmioSeek"); 62 *(VOID**)&WINMM_mmioClose = (VOID*)GetProcAddress(hWINMM,"mmioClose"); 63 *(VOID**)&WINMM_mmioOpenA = (VOID*)GetProcAddress(hWINMM,"mmioOpenA"); 64 *(VOID**)&WINMM_mmioOpenW = (VOID*)GetProcAddress(hWINMM,"mmioOpenW"); 65 *(VOID**)&WINMM_mmioDescend = (VOID*)GetProcAddress(hWINMM,"mmioDescend"); 66 *(VOID**)&WINMM_mmioAscend = (VOID*)GetProcAddress(hWINMM,"mmioAscend"); 67 68 return TRUE; 69 } 70 71 static VOID ANIMATE_UnloadWINMM(VOID) 72 { 73 if (hWINMM) 74 { 75 FreeLibrary(hWINMM); 76 hWINMM = 0; 77 *(VOID**)&WINMM_mmioRead = NULL; 78 *(VOID**)&WINMM_mmioSeek = NULL; 79 *(VOID**)&WINMM_mmioClose = NULL; 80 *(VOID**)&WINMM_mmioOpenA = NULL; 81 *(VOID**)&WINMM_mmioOpenW = NULL; 82 *(VOID**)&WINMM_mmioDescend = NULL; 83 *(VOID**)&WINMM_mmioAscend = NULL; 84 } 85 } 23 86 24 87 static BOOL ANIMATE_LoadRes(ANIMATE_INFO *infoPtr,HINSTANCE hInst,LPWSTR lpName,BOOL unicode) … … 45 108 mminfo.pchBuffer = (LPSTR)lpAvi; 46 109 mminfo.cchBuffer = SizeofResource(hInst, hrsrc); 47 infoPtr->hMMio = mmioOpenA(NULL, &mminfo, MMIO_READ);110 infoPtr->hMMio = WINMM_mmioOpenA(NULL, &mminfo, MMIO_READ); 48 111 49 112 if (!infoPtr->hMMio) { … … 58 121 { 59 122 if (unicode) 60 infoPtr->hMMio = mmioOpenW(lpName,NULL,MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);123 infoPtr->hMMio = WINMM_mmioOpenW(lpName,NULL,MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); 61 124 else 62 infoPtr->hMMio = mmioOpenA((LPSTR)lpName,NULL,MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);125 infoPtr->hMMio = WINMM_mmioOpenA((LPSTR)lpName,NULL,MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); 63 126 64 127 if (!infoPtr->hMMio) … … 95 158 if (infoPtr->hMMio) { 96 159 ANIMATE_DoStop(infoPtr); 97 mmioClose(infoPtr->hMMio, 0);160 WINMM_mmioClose(infoPtr->hMMio, 0); 98 161 if (infoPtr->hRes) { 99 162 FreeResource(infoPtr->hRes); … … 154 217 EnterCriticalSection(&infoPtr->cs); 155 218 156 mmioSeek(infoPtr->hMMio, infoPtr->lpIndex[infoPtr->currFrame], SEEK_SET);157 mmioRead(infoPtr->hMMio, (HPSTR)infoPtr->indata, infoPtr->ash.dwSuggestedBufferSize);219 WINMM_mmioSeek(infoPtr->hMMio, infoPtr->lpIndex[infoPtr->currFrame], SEEK_SET); 220 WINMM_mmioRead(infoPtr->hMMio, (HPSTR)infoPtr->indata, infoPtr->ash.dwSuggestedBufferSize); 158 221 159 222 if (infoPtr->hic && … … 257 320 DWORD insize; 258 321 259 if ( mmioDescend(infoPtr->hMMio, &ckMainRIFF, NULL, 0) != 0) {322 if (WINMM_mmioDescend(infoPtr->hMMio, &ckMainRIFF, NULL, 0) != 0) { 260 323 //WARN("Can't find 'RIFF' chunk\n"); 261 324 return FALSE; … … 269 332 270 333 mmckHead.fccType = mmioFOURCC('h', 'd', 'r', 'l'); 271 if ( mmioDescend(infoPtr->hMMio, &mmckHead, &ckMainRIFF, MMIO_FINDLIST) != 0) {334 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckHead, &ckMainRIFF, MMIO_FINDLIST) != 0) { 272 335 //WARN("Can't find 'hdrl' list\n"); 273 336 return FALSE; … … 275 338 276 339 mmckInfo.ckid = mmioFOURCC('a', 'v', 'i', 'h'); 277 if ( mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckHead, MMIO_FINDCHUNK) != 0) {340 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckHead, MMIO_FINDCHUNK) != 0) { 278 341 //WARN("Can't find 'avih' chunk\n"); 279 342 return FALSE; 280 343 } 281 344 282 mmioRead(infoPtr->hMMio, (LPSTR)&infoPtr->mah, sizeof(infoPtr->mah));345 WINMM_mmioRead(infoPtr->hMMio, (LPSTR)&infoPtr->mah, sizeof(infoPtr->mah)); 283 346 //TRACE("mah.dwMicroSecPerFrame=%ld\n", infoPtr->mah.dwMicroSecPerFrame); 284 347 //TRACE("mah.dwMaxBytesPerSec=%ld\n", infoPtr->mah.dwMaxBytesPerSec); … … 291 354 //TRACE("mah.dwWidth=%ld\n", infoPtr->mah.dwWidth); 292 355 //TRACE("mah.dwHeight=%ld\n", infoPtr->mah.dwHeight); 293 mmioAscend(infoPtr->hMMio, &mmckInfo, 0);356 WINMM_mmioAscend(infoPtr->hMMio, &mmckInfo, 0); 294 357 295 358 mmckList.fccType = mmioFOURCC('s', 't', 'r', 'l'); 296 if ( mmioDescend(infoPtr->hMMio, &mmckList, &mmckHead, MMIO_FINDLIST) != 0) {359 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckList, &mmckHead, MMIO_FINDLIST) != 0) { 297 360 //WARN("Can't find 'strl' list\n"); 298 361 return FALSE; … … 300 363 301 364 mmckInfo.ckid = mmioFOURCC('s', 't', 'r', 'h'); 302 if ( mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, MMIO_FINDCHUNK) != 0) {365 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, MMIO_FINDCHUNK) != 0) { 303 366 //WARN("Can't find 'strh' chunk\n"); 304 367 return FALSE; 305 368 } 306 369 307 mmioRead(infoPtr->hMMio, (LPSTR)&infoPtr->ash, sizeof(infoPtr->ash));370 WINMM_mmioRead(infoPtr->hMMio, (LPSTR)&infoPtr->ash, sizeof(infoPtr->ash)); 308 371 //TRACE("ash.fccType='%c%c%c%c'\n", LOBYTE(LOWORD(infoPtr->ash.fccType)), 309 372 // HIBYTE(LOWORD(infoPtr->ash.fccType)), … … 327 390 //TRACE("ash.rcFrame=(%d,%d,%d,%d)\n", infoPtr->ash.rcFrame.top, infoPtr->ash.rcFrame.left, 328 391 // infoPtr->ash.rcFrame.bottom, infoPtr->ash.rcFrame.right); 329 mmioAscend(infoPtr->hMMio, &mmckInfo, 0);392 WINMM_mmioAscend(infoPtr->hMMio, &mmckInfo, 0); 330 393 331 394 mmckInfo.ckid = mmioFOURCC('s', 't', 'r', 'f'); 332 if ( mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, MMIO_FINDCHUNK) != 0) {395 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, MMIO_FINDCHUNK) != 0) { 333 396 //WARN("Can't find 'strh' chunk\n"); 334 397 return FALSE; … … 341 404 } 342 405 343 mmioRead(infoPtr->hMMio, (LPSTR)infoPtr->inbih, mmckInfo.cksize);406 WINMM_mmioRead(infoPtr->hMMio, (LPSTR)infoPtr->inbih, mmckInfo.cksize); 344 407 //TRACE("bih.biSize=%ld\n", infoPtr->inbih->biSize); 345 408 //TRACE("bih.biWidth=%ld\n", infoPtr->inbih->biWidth); … … 353 416 //TRACE("bih.biClrUsed=%ld\n", infoPtr->inbih->biClrUsed); 354 417 //TRACE("bih.biClrImportant=%ld\n", infoPtr->inbih->biClrImportant); 355 mmioAscend(infoPtr->hMMio, &mmckInfo, 0);356 357 mmioAscend(infoPtr->hMMio, &mmckList, 0);418 WINMM_mmioAscend(infoPtr->hMMio, &mmckInfo, 0); 419 420 WINMM_mmioAscend(infoPtr->hMMio, &mmckList, 0); 358 421 359 422 #if 0 … … 362 425 */ 363 426 mmckList.fccType = mmioFOURCC('s', 't', 'r', 'l'); 364 if ( mmioDescend(infoPtr->hMMio, &mmckList, &mmckHead, MMIO_FINDLIST) == 0) {427 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckList, &mmckHead, MMIO_FINDLIST) == 0) { 365 428 //WARN("There should be a single 'strl' list\n"); 366 429 return FALSE; … … 368 431 #endif 369 432 370 mmioAscend(infoPtr->hMMio, &mmckHead, 0);433 WINMM_mmioAscend(infoPtr->hMMio, &mmckHead, 0); 371 434 372 435 /* no need to read optional JUNK chunk */ 373 436 374 437 mmckList.fccType = mmioFOURCC('m', 'o', 'v', 'i'); 375 if ( mmioDescend(infoPtr->hMMio, &mmckList, &ckMainRIFF, MMIO_FINDLIST) != 0) {438 if (WINMM_mmioDescend(infoPtr->hMMio, &mmckList, &ckMainRIFF, MMIO_FINDLIST) != 0) { 376 439 //WARN("Can't find 'movi' list\n"); 377 440 return FALSE; … … 388 451 389 452 numFrame = insize = 0; 390 while ( mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, 0) == 0 &&453 while (WINMM_mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, 0) == 0 && 391 454 numFrame < infoPtr->mah.dwTotalFrames) { 392 455 infoPtr->lpIndex[numFrame] = mmckInfo.dwDataOffset; … … 394 457 insize = mmckInfo.cksize; 395 458 numFrame++; 396 mmioAscend(infoPtr->hMMio, &mmckInfo, 0);459 WINMM_mmioAscend(infoPtr->hMMio, &mmckInfo, 0); 397 460 } 398 461 if (numFrame != infoPtr->mah.dwTotalFrames) { … … 547 610 { 548 611 ANIMATE_INFO* infoPtr; 549 HMODULE hModule = LoadLibraryA("msvfw32.dll"); 550 551 if (!hModule) 552 return FALSE; 612 613 if (!ANIMATE_LoadWINMM()) return FALSE; 614 if (!ANIMATE_LoadMSVFW32()) return FALSE; 553 615 554 616 /* allocate memory for info structure */ … … 560 622 561 623 /* Temporary hack until we get dllglue up and running */ 562 *(VOID**)&infoPtr->fnICOpen = (VOID*)GetProcAddress(hM odule,"ICOpen");563 *(VOID**)&infoPtr->fnICClose = (VOID*)GetProcAddress(hM odule,"ICClose");564 *(VOID**)&infoPtr->fnICSendMessage = (VOID*)GetProcAddress(hM odule,"ICSendMessage");565 *(VOID**)&infoPtr->fnICDecompress = (VOID*)GetProcAddress(hM odule,"ICDecompress");624 *(VOID**)&infoPtr->fnICOpen = (VOID*)GetProcAddress(hMSVFW32,"ICOpen"); 625 *(VOID**)&infoPtr->fnICClose = (VOID*)GetProcAddress(hMSVFW32,"ICClose"); 626 *(VOID**)&infoPtr->fnICSendMessage = (VOID*)GetProcAddress(hMSVFW32,"ICSendMessage"); 627 *(VOID**)&infoPtr->fnICDecompress = (VOID*)GetProcAddress(hMSVFW32,"ICDecompress"); 566 628 567 629 //TRACE("Animate style=0x%08lx, parent=%08lx\n", GetWindowLongA(hWnd, GWL_STYLE), (DWORD)GetParent(hWnd));
Note:
See TracChangeset
for help on using the changeset viewer.