VirtualBox

Changeset 46123 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
May 16, 2013 1:40:20 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
85814
Message:

Main/VPX, VBoxManage: added IMachine::VideoCaptureScreens and IDisplay::{enableVideoCapture,disableVideoCapture}

Location:
trunk/src/VBox/Frontends/VBoxManage
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp

    r45190 r46123  
    13011301            }
    13021302            int vrc;
    1303             uint32_t displayIdx = 0;
     1303            uint32_t iScreen = 0;
    13041304            if (a->argc == 4)
    13051305            {
    1306                 vrc = RTStrToUInt32Ex(a->argv[3], NULL, 0, &displayIdx);
     1306                vrc = RTStrToUInt32Ex(a->argv[3], NULL, 0, &iScreen);
    13071307                if (vrc != VINF_SUCCESS)
    13081308                {
     
    13211321            }
    13221322            ULONG width, height, bpp;
    1323             CHECK_ERROR_BREAK(pDisplay, GetScreenResolution(displayIdx, &width, &height, &bpp));
     1323            CHECK_ERROR_BREAK(pDisplay, GetScreenResolution(iScreen, &width, &height, &bpp));
    13241324            com::SafeArray<BYTE> saScreenshot;
    1325             CHECK_ERROR_BREAK(pDisplay, TakeScreenShotPNGToArray(displayIdx, width, height, ComSafeArrayAsOutParam(saScreenshot)));
     1325            CHECK_ERROR_BREAK(pDisplay, TakeScreenShotPNGToArray(iScreen, width, height, ComSafeArrayAsOutParam(saScreenshot)));
    13261326            RTFILE pngFile = NIL_RTFILE;
    13271327            vrc = RTFileOpen(&pngFile, a->argv[2], RTFILE_O_OPEN_CREATE | RTFILE_O_WRITE | RTFILE_O_TRUNCATE | RTFILE_O_DENY_ALL);
     
    13401340            RTFileClose(pngFile);
    13411341        }
     1342        else if (   !strcmp(a->argv[1], "enablevideocapture")
     1343                 || !strcmp(a->argv[1], "disablevideocapture"))
     1344        {
     1345            ULONG cMonitors = 64;
     1346            CHECK_ERROR_BREAK(machine, COMGETTER(MonitorCount)(&cMonitors));
     1347            com::SafeArray<BOOL> saScreenIds(cMonitors);
     1348            if (a->argc < 3)
     1349            {
     1350                /* default: handle all screens */
     1351                for (unsigned i = 0; i < cMonitors; i++)
     1352                    saScreenIds[i] = true;
     1353            }
     1354            else
     1355            {
     1356                /* handle selected screens */
     1357                for (unsigned i = 0; i < cMonitors; i++)
     1358                    saScreenIds[i] = false;
     1359                for (int i = 2; SUCCEEDED(rc) && i < a->argc; i++)
     1360                {
     1361                    uint32_t iScreen;
     1362                    int vrc = RTStrToUInt32Ex(a->argv[i], NULL, 0, &iScreen);
     1363                    RTPrintf("i = %d => %d => %Rrc\n", i, iScreen, vrc);
     1364                    if (vrc != VINF_SUCCESS)
     1365                    {
     1366                        errorArgument("Error parsing display number '%s'", a->argv[i]);
     1367                        rc = E_FAIL;
     1368                        break;
     1369                    }
     1370                    if (iScreen >= cMonitors)
     1371                    {
     1372                        errorArgument("Invalid screen ID specified '%u'", iScreen);
     1373                        rc = E_FAIL;
     1374                        break;
     1375                    }
     1376                    saScreenIds[iScreen] = true;
     1377                }
     1378            }
     1379            for (unsigned i = 0; i < cMonitors; i++)
     1380                RTPrintf("  %d\n", saScreenIds[i]);
     1381            ComPtr<IDisplay> pDisplay;
     1382            CHECK_ERROR_BREAK(console, COMGETTER(Display)(pDisplay.asOutParam()));
     1383            if (!pDisplay)
     1384            {
     1385                RTMsgError("Guest not running");
     1386                rc = E_FAIL;
     1387                break;
     1388            }
     1389            if (!strcmp(a->argv[1], "enablevideocapture"))
     1390                CHECK_ERROR_BREAK(pDisplay, EnableVideoCapture(ComSafeArrayAsInParam(saScreenIds)));
     1391            else
     1392                CHECK_ERROR_BREAK(pDisplay, DisableVideoCapture(ComSafeArrayAsInParam(saScreenIds)));
     1393        }
    13421394        else
    13431395        {
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r46036 r46123  
    371371#ifdef VBOX_WITH_VPX
    372372                     "                            [--vcpenabled on|off]\n"
     373                     "                            [--vcpscreens [<display>],...\n"
    373374                     "                            [--vcpfile <filename>]\n"
    374375                     "                            [--vcpwidth <width>]\n"
     
    468469                     "                                              [<xorigin> <yorigin>]]] |\n"
    469470                     "                            screenshotpng <file> [display] |\n"
     471                     "                            enablevideocapture <screen>,[<screen>...]\n"
     472                     "                            disablevideocapture <screen>,[<screen>...]\n"
    470473                     "                            setcredentials <username>\n"
    471474                     "                                           --passwordfile <file> | <password>\n"
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp

    r46036 r46123  
    23062306        BOOL bActive = FALSE;
    23072307        CHECK_ERROR_RET(machine, COMGETTER(VideoCaptureEnabled)(&bActive), rc);
     2308        com::SafeArray<BOOL> screens;
     2309        CHECK_ERROR_RET(machine, COMGETTER(VideoCaptureScreens)(ComSafeArrayAsOutParam(screens)), rc);
    23082310        ULONG Width;
    23092311        CHECK_ERROR_RET(machine, COMGETTER(VideoCaptureWidth)(&Width), rc);
     
    23192321        {
    23202322            RTPrintf("VideoCaptureEnabled=\"%s\"\n", bActive ? "on" : "off");
     2323            RTPrintf("VideoCaptureScreens=");
     2324            bool fComma = false;
     2325            for (unsigned i = 0; i < screens.size(); i++)
     2326                if (screens[i])
     2327                {
     2328                    RTPrintf("%s%u", fComma ? "," : "", i);
     2329                    fComma = true;
     2330                }
     2331            RTPrintf("\n");
    23212332            RTPrintf("VideoCaptureWidth=%u\n", (unsigned)Width);
    23222333            RTPrintf("VideoCaptureFile=\"%ls\"\n", File.raw());
     
    23282339        {
    23292340            RTPrintf("Video capturing:    %s\n", bActive ? "active" : "not active");
     2341            RTPrintf("Capture screens:    ");
     2342            bool fComma = false;
     2343            for (unsigned i = 0; i < screens.size(); i++)
     2344                if (screens[i])
     2345                {
     2346                    RTPrintf("%s%u", fComma ? "," : "", i);
     2347                    fComma = true;
     2348                }
     2349            RTPrintf("\n");
    23302350            RTPrintf("Capture file:       %ls\n", File.raw());
    23312351            RTPrintf("Capture dimensions: %ux%u\n", Width, Height);
    2332             RTPrintf("Capture rate:       %ukbps\n", Rate);
     2352            RTPrintf("Capture rate:       %u kbps\n", Rate);
    23332353            RTPrintf("Capture FPS:        %u\n", Fps);
    23342354            RTPrintf("\n");
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp

    r46036 r46123  
    196196#ifdef VBOX_WITH_VPX
    197197    MODIFYVM_VCP,
     198    MODIFYVM_VCP_SCREENS,
    198199    MODIFYVM_VCP_FILENAME,
    199200    MODIFYVM_VCP_WIDTH,
     
    344345#ifdef VBOX_WITH_VPX
    345346    { "--vcpenabled",               MODIFYVM_VCP,                       RTGETOPT_REQ_BOOL_ONOFF },
     347    { "--vcpscreens",               MODIFYVM_VCP_SCREENS,               RTGETOPT_REQ_STRING },
    346348    { "--vcpfile",                  MODIFYVM_VCP_FILENAME,              RTGETOPT_REQ_STRING },
    347349    { "--vcpwidth",                 MODIFYVM_VCP_WIDTH,                 RTGETOPT_REQ_UINT32 },
     
    409411        }
    410412    }
     413}
     414
     415int parseScreens(const char *pcszScreens, com::SafeArray<BOOL> *pScreens)
     416{
     417    while (pcszScreens && *pcszScreens)
     418    {
     419        char *pszNext;
     420        uint32_t iScreen;
     421        int rc = RTStrToUInt32Ex(pcszScreens, &pszNext, 0, &iScreen);
     422        if (RT_FAILURE(rc))
     423            return 1;
     424        if (iScreen >= pScreens->size())
     425            return 1;
     426        if (pszNext && *pszNext)
     427        {
     428            pszNext = RTStrStripL(pszNext);
     429            if (*pszNext != ',')
     430                return 1;
     431            pszNext++;
     432        }
     433        (*pScreens)[iScreen] = true;
     434        pcszScreens = pszNext;
     435    }
     436    return 0;
    411437}
    412438
     
    24492475                break;
    24502476            }
     2477            case MODIFYVM_VCP_SCREENS:
     2478            {
     2479                ULONG cMonitors = 64;
     2480                CHECK_ERROR(machine, COMGETTER(MonitorCount)(&cMonitors));
     2481                com::SafeArray<BOOL> screens(cMonitors);
     2482                if (parseScreens(ValueUnion.psz, &screens))
     2483                {
     2484                    errorArgument("Invalid list of screens specified\n");
     2485                    rc = E_FAIL;
     2486                    break;
     2487                }
     2488                CHECK_ERROR(machine, COMSETTER(VideoCaptureScreens)(ComSafeArrayAsInParam(screens)));
     2489                break;
     2490            }
    24512491            case MODIFYVM_VCP_FILENAME:
    24522492            {
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette