Changeset 41595 in vbox for trunk/src/VBox/Main/src-client
- Timestamp:
- Jun 6, 2012 9:58:30 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/src-client/DisplayImpl.cpp
r41492 r41595 241 241 /* Prepare a small thumbnail and a PNG screenshot. */ 242 242 displayMakeThumbnail(pu8Data, cx, cy, &pu8Thumbnail, &cbThumbnail, &cxThumbnail, &cyThumbnail); 243 DisplayMakePNG(pu8Data, cx, cy, &pu8PNG, &cbPNG, &cxPNG, &cyPNG, 1); 243 rc = DisplayMakePNG(pu8Data, cx, cy, &pu8PNG, &cbPNG, &cxPNG, &cyPNG, 1); 244 if (RT_FAILURE(rc)) 245 { 246 if (pu8PNG) 247 { 248 RTMemFree(pu8PNG); 249 pu8PNG = NULL; 250 } 251 cbPNG = 0; 252 cxPNG = 0; 253 cyPNG = 0; 254 } 244 255 245 256 /* This can be called from any thread. */ 246 that->mpDrv->pUpPort->pfnFreeScreenshot 257 that->mpDrv->pUpPort->pfnFreeScreenshot(that->mpDrv->pUpPort, pu8Data); 247 258 } 248 259 } … … 2323 2334 int iDeltaLine = cx * 4; 2324 2335 2325 BitmapScale32 2326 2327 2328 2329 2336 BitmapScale32(dst, 2337 dstW, dstH, 2338 src, 2339 iDeltaLine, 2340 srcW, srcH); 2330 2341 } 2331 2342 … … 2333 2344 { 2334 2345 /* This can be called from any thread. */ 2335 pDrv->pUpPort->pfnFreeScreenshot 2346 pDrv->pUpPort->pfnFreeScreenshot(pDrv->pUpPort, pu8Data); 2336 2347 } 2337 2348 else … … 2344 2355 } 2345 2356 2346 STDMETHODIMP Display::TakeScreenShot 2357 STDMETHODIMP Display::TakeScreenShot(ULONG aScreenId, BYTE *address, ULONG width, ULONG height) 2347 2358 { 2348 2359 /// @todo (r=dmik) this function may take too long to complete if the VM … … 2352 2363 // within the Console lock to make it atomic). 2353 2364 2354 LogRelFlowFunc 2355 address, width, height));2365 LogRelFlowFunc(("address=%p, width=%d, height=%d\n", 2366 address, width, height)); 2356 2367 2357 2368 CheckComArgNotNull(address); … … 2370 2381 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 2371 2382 2372 CHECK_CONSOLE_DRV 2383 CHECK_CONSOLE_DRV(mpDrv); 2373 2384 2374 2385 Console::SafeVMPtr pVM(mParent); … … 2377 2388 HRESULT rc = S_OK; 2378 2389 2379 LogRelFlowFunc 2390 LogRelFlowFunc(("Sending SCREENSHOT request\n")); 2380 2391 2381 2392 /* Release lock because other thread (EMT) is called and it may initiate a resize … … 2398 2409 tr("Could not take a screenshot (%Rrc)"), vrc); 2399 2410 2400 LogRelFlowFunc 2411 LogRelFlowFunc(("rc=%08X\n", rc)); 2401 2412 return rc; 2402 2413 } 2403 2414 2404 STDMETHODIMP Display::TakeScreenShotToArray (ULONG aScreenId, ULONG width, ULONG height, 2405 ComSafeArrayOut(BYTE, aScreenData)) 2406 { 2407 LogRelFlowFunc (("width=%d, height=%d\n", 2408 width, height)); 2415 STDMETHODIMP Display::TakeScreenShotToArray(ULONG aScreenId, ULONG width, ULONG height, 2416 ComSafeArrayOut(BYTE, aScreenData)) 2417 { 2418 LogRelFlowFunc(("width=%d, height=%d\n", width, height)); 2409 2419 2410 2420 CheckComArgOutSafeArrayPointerValid(aScreenData); … … 2423 2433 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 2424 2434 2425 CHECK_CONSOLE_DRV 2435 CHECK_CONSOLE_DRV(mpDrv); 2426 2436 2427 2437 Console::SafeVMPtr pVM(mParent); … … 2430 2440 HRESULT rc = S_OK; 2431 2441 2432 LogRelFlowFunc 2442 LogRelFlowFunc(("Sending SCREENSHOT request\n")); 2433 2443 2434 2444 /* Release lock because other thread (EMT) is called and it may initiate a resize … … 2462 2472 } 2463 2473 2464 com::SafeArray<BYTE> screenData 2474 com::SafeArray<BYTE> screenData(cbData); 2465 2475 screenData.initFrom(pu8Data, cbData); 2466 2476 screenData.detachTo(ComSafeArrayOutArg(aScreenData)); … … 2475 2485 RTMemFree(pu8Data); 2476 2486 2477 LogRelFlowFunc 2487 LogRelFlowFunc(("rc=%08X\n", rc)); 2478 2488 return rc; 2479 2489 } 2480 2490 2481 STDMETHODIMP Display::TakeScreenShotPNGToArray (ULONG aScreenId, ULONG width, ULONG height, 2482 ComSafeArrayOut(BYTE, aScreenData)) 2483 { 2484 LogRelFlowFunc (("width=%d, height=%d\n", 2485 width, height)); 2491 STDMETHODIMP Display::TakeScreenShotPNGToArray(ULONG aScreenId, ULONG width, ULONG height, 2492 ComSafeArrayOut(BYTE, aScreenData)) 2493 { 2494 LogRelFlowFunc(("width=%d, height=%d\n", width, height)); 2486 2495 2487 2496 CheckComArgOutSafeArrayPointerValid(aScreenData); … … 2500 2509 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 2501 2510 2502 CHECK_CONSOLE_DRV 2511 CHECK_CONSOLE_DRV(mpDrv); 2503 2512 2504 2513 Console::SafeVMPtr pVM(mParent); … … 2507 2516 HRESULT rc = S_OK; 2508 2517 2509 LogRelFlowFunc 2518 LogRelFlowFunc(("Sending SCREENSHOT request\n")); 2510 2519 2511 2520 /* Release lock because other thread (EMT) is called and it may initiate a resize … … 2531 2540 uint32_t cyPNG = 0; 2532 2541 2533 DisplayMakePNG(pu8Data, width, height, &pu8PNG, &cbPNG, &cxPNG, &cyPNG, 0); 2534 2535 com::SafeArray<BYTE> screenData (cbPNG); 2536 screenData.initFrom(pu8PNG, cbPNG); 2537 RTMemFree(pu8PNG); 2538 2539 screenData.detachTo(ComSafeArrayOutArg(aScreenData)); 2542 vrc = DisplayMakePNG(pu8Data, width, height, &pu8PNG, &cbPNG, &cxPNG, &cyPNG, 0); 2543 if (RT_SUCCESS(vrc)) 2544 { 2545 com::SafeArray<BYTE> screenData(cbPNG); 2546 screenData.initFrom(pu8PNG, cbPNG); 2547 if (pu8PNG) 2548 RTMemFree(pu8PNG); 2549 2550 screenData.detachTo(ComSafeArrayOutArg(aScreenData)); 2551 } 2552 else 2553 { 2554 if (pu8PNG) 2555 RTMemFree(pu8PNG); 2556 rc = setError(VBOX_E_IPRT_ERROR, 2557 tr("Could not convert screenshot to PNG (%Rrc)"), vrc); 2558 } 2540 2559 } 2541 2560 else if (vrc == VERR_NOT_IMPLEMENTED) … … 2548 2567 RTMemFree(pu8Data); 2549 2568 2550 LogRelFlowFunc 2569 LogRelFlowFunc(("rc=%08X\n", rc)); 2551 2570 return rc; 2552 2571 }
Note:
See TracChangeset
for help on using the changeset viewer.