VirtualBox

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


Ignore:
Timestamp:
May 19, 2009 12:16:28 PM (16 years ago)
Author:
vboxsync
Message:

IFramebuffer cleanup next part:

  • removed obsolete internal framebuffer
  • removed IFramebuffer::setupInternalFramebuffer(), IFramebuffer::lockFramebuffer(), IFramebuffer::unlockFramebuffer(), IFramebuffer::registerExternalFramebuffer()
  • removed unused finished parameter of IFramebuffer::NotifyUpdate()
Location:
trunk/src/VBox/Frontends
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp

    r19300 r19817  
    9393    mcbVbvaPartial = 0;
    9494
    95     RTSemEventMultiCreate(&mUpdateSem);
    96 
    97     // reset the event sems
    98     RTSemEventMultiReset(mUpdateSem);
    99 
    10095    // by default, we have an internal Framebuffer which is
    10196    // NULL, i.e. a black hole for no display output
     97    mFramebuffer = NULL;
     98    mFramebufferOpened = false;
     99
     100    mu32ResizeStatus = ResizeStatus_Void;
     101}
     102
     103VMDisplay::~VMDisplay()
     104{
    102105    mFramebuffer = 0;
    103     mInternalFramebuffer = true;
    104     mFramebufferOpened = false;
    105 
    106     mu32ResizeStatus = ResizeStatus_Void;
    107 }
    108 
    109 VMDisplay::~VMDisplay()
    110 {
    111     mFramebuffer = 0;
    112     RTSemEventMultiDestroy(mUpdateSem);
    113106}
    114107
     
    201194
    202195    // this is only valid for external framebuffers
    203     if (mInternalFramebuffer)
     196    if (!mFramebuffer)
    204197        return E_FAIL;
    205198
     
    259252    }
    260253
    261     // special processing for the internal Framebuffer
    262     if (mInternalFramebuffer)
    263     {
    264         mFramebuffer->Unlock();
    265     }
    266     else
    267     {
    268         // callback into the Framebuffer to notify it
    269         BOOL finished;
    270 
    271         RTSemEventMultiReset(mUpdateSem);
    272 
    273         mFramebuffer->NotifyUpdate(x, y, w, h, &finished);
    274         mFramebuffer->Unlock();
    275 
    276         if (!finished)
    277         {
    278             // the Framebuffer needs more time to process
    279             // the event so we have to halt the VM until it's done
    280             RTSemEventMultiWait(mUpdateSem, RT_INDEFINITE_WAIT);
    281         }
    282     }
     254    mFramebuffer->NotifyUpdate(x, y, w, h);
     255    mFramebuffer->Unlock();
    283256}
    284257
     
    336309 * @param Framebuffer external Framebuffer object
    337310 */
    338 STDMETHODIMP VMDisplay::RegisterExternalFramebuffer(Framebuffer *Framebuffer)
     311STDMETHODIMP VMDisplay::SetFramebuffer(unsigned iScreenID, Framebuffer *Framebuffer)
    339312{
    340313    if (!Framebuffer)
     
    343316    // free current Framebuffer (if there is any)
    344317    mFramebuffer = 0;
    345     mInternalFramebuffer = false;
    346318    mFramebuffer = Framebuffer;
    347319    updateDisplayData();
  • trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.h

    r8155 r19817  
    5555    uint32_t getBitsPerPixel();
    5656
    57     STDMETHODIMP RegisterExternalFramebuffer(Framebuffer *Framebuffer);
     57    STDMETHODIMP SetFramebuffer(unsigned iScreenID, Framebuffer *Framebuffer);
    5858    STDMETHODIMP InvalidateAndUpdate();
    5959    STDMETHODIMP ResizeCompleted();
     
    8484
    8585    Framebuffer *mFramebuffer;
    86     bool mInternalFramebuffer, mFramebufferOpened;
     86    bool mFramebufferOpened;
    8787
    8888    ULONG mSupportedAccelOps;
    89     RTSEMEVENTMULTI mUpdateSem;
    9089
    9190    struct _VBVAMEMORY *mpVbvaMemory;
  • trunk/src/VBox/Frontends/VBoxBFE/Framebuffer.h

    r19798 r19817  
    4444    virtual HRESULT getBitsPerPixel(ULONG *bitsPerPixel) = 0;
    4545    virtual HRESULT getLineSize(ULONG *lineSize) = 0;
    46     virtual HRESULT NotifyUpdate(ULONG x, ULONG y,
    47                             ULONG w, ULONG h, BOOL *finished) = 0;
     46    virtual HRESULT NotifyUpdate(ULONG x, ULONG y, ULONG w, ULONG h) = 0;
    4847    virtual HRESULT RequestResize(ULONG w, ULONG h, BOOL *finished) = 0;
    4948
  • trunk/src/VBox/Frontends/VBoxBFE/SDLFramebuffer.cpp

    r19798 r19817  
    228228 */
    229229HRESULT SDLFramebuffer::NotifyUpdate(ULONG x, ULONG y,
    230                                      ULONG w, ULONG h, BOOL *finished)
     230                                     ULONG w, ULONG h)
    231231{
    232232    LogFlow(("SDLFramebuffer::NotifyUpdate: x = %d, y = %d, w = %d, h = %d\n",
     
    258258#endif /* !VBOXBFE_WITH_X11 */
    259259
    260     /*
    261      * The Display thread can continue as we will lock the framebuffer
    262      * from the SDL thread when we get to actually doing the update.
    263      */
    264     if (finished)
    265         *finished = TRUE;
    266260    return S_OK;
    267261}
  • trunk/src/VBox/Frontends/VBoxBFE/SDLFramebuffer.h

    r19798 r19817  
    5050    virtual HRESULT getBitsPerPixel(ULONG *bitsPerPixel);
    5151    virtual HRESULT getLineSize(ULONG *lineSize);
    52     virtual HRESULT NotifyUpdate(ULONG x, ULONG y,
    53                             ULONG w, ULONG h, BOOL *finished);
     52    virtual HRESULT NotifyUpdate(ULONG x, ULONG y, ULONG w, ULONG h);
    5453    virtual HRESULT RequestResize(ULONG w, ULONG h, BOOL *finished);
    5554    virtual HRESULT GetVisibleRegion(BYTE *aRectangles, ULONG aCount, ULONG *aCountCopied);
  • trunk/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp

    r19300 r19817  
    803803    if (!gConsole->initialized())
    804804        goto leave;
    805     gDisplay->RegisterExternalFramebuffer(gFramebuffer);
     805    gDisplay->SetFramebuffer(0, gFramebuffer);
    806806
    807807    /* start with something in the titlebar */
  • trunk/src/VBox/Frontends/VBoxFB/Framebuffer.cpp

    r8155 r19817  
    187187
    188188NS_IMETHODIMP VBoxDirectFB::NotifyUpdate(uint32_t x, uint32_t y,
    189                                          uint32_t w, uint32_t h, PRBool *finished)
     189                                         uint32_t w, uint32_t h)
    190190{
    191191    // we only need to take action if we have a memory framebuffer
     
    209209            DFBCHECK(surface->StretchBlit(surface, fbInternalSurface,
    210210                                          &blitRectangle, &hostRectangle));
    211         } else
     211        }
     212        else
    212213        {
    213214            DFBCHECK(surface->Blit(surface, fbInternalSurface, &blitRectangle,
     
    216217        }
    217218    }
    218     if (finished)
    219         *finished = true;
    220219    return NS_OK;
    221220}
  • trunk/src/VBox/Frontends/VBoxFB/Framebuffer.h

    r8155 r19817  
    4444    NS_IMETHOD GetUsesGuestVRAM(BOOL *usesGuestVRAM);
    4545    NS_IMETHOD NotifyUpdate(uint32_t x, uint32_t y,
    46                            uint32_t w, uint32_t h, PRBool *finished);
     46                            uint32_t w, uint32_t h);
    4747    NS_IMETHOD RequestResize(ULONG aScreenId, ULONG pixelFormat, uint32_t vram,
    4848                             uint32_t bitsPerPixel, uint32_t bytesPerLine,
  • trunk/src/VBox/Frontends/VBoxFB/VBoxFB.cpp

    r13835 r19817  
    342342    // register our framebuffer
    343343    frameBuffer = new VBoxDirectFB(dfb, surface);
    344     display->RegisterExternalFramebuffer(frameBuffer);
     344    display->SetFramebuffer(VBOX_VIDEO_PRIMARY_SCREEN, frameBuffer);
    345345
    346346    /**
  • trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp

    r19239 r19817  
    4646#include <iprt/env.h>
    4747#include <VBox/err.h>
     48#include <VBox/VBoxVideo.h>
    4849
    4950#ifdef VBOX_FFMPEG
     
    744745                Log2(("VBoxHeadless: Registering framebuffer\n"));
    745746                pFramebuffer->AddRef();
    746                 display->RegisterExternalFramebuffer(pFramebuffer);
     747                display->SetFramebuffer(VBOX_VIDEO_PRIMARY_SCREEN, pFramebuffer);
    747748            }
    748749            if (!RT_SUCCESS(rrc) || (rcc != S_OK))
  • trunk/src/VBox/Frontends/VBoxHeadless/VideoCapture/FFmpegFB.cpp

    r19798 r19817  
    142142        {
    143143            /* Dummy update to make sure we get all the frame (timing). */
    144             BOOL dummy;
    145             NotifyUpdate(0, 0, 0, 0, &dummy);
     144            NotifyUpdate(0, 0, 0, 0);
    146145            /* Write the last pending frame before exiting */
    147146            int rc = do_rgb_to_yuv_conversion();
     
    431430 * @param w        width of the area which has been updated
    432431 * @param h        height of the area which has been updated
    433  * @param finished
    434  */
    435 STDMETHODIMP FFmpegFB::NotifyUpdate(ULONG x, ULONG y, ULONG w, ULONG h,
    436                                     BOOL *finished)
     432 */
     433STDMETHODIMP FFmpegFB::NotifyUpdate(ULONG x, ULONG y, ULONG w, ULONG h)
    437434{
    438435    int rc;
     
    442439              (unsigned long) x,  (unsigned long) y,  (unsigned long) w,
    443440               (unsigned long) h));
    444     if (!finished)
    445         return E_POINTER;
    446     /* For now we will do things synchronously */
    447     *finished = true;
     441
    448442    /* We always leave at least one frame update pending, which we
    449443       process when the time until the next frame has elapsed. */
  • trunk/src/VBox/Frontends/VBoxHeadless/VideoCapture/FFmpegFB.h

    r19798 r19817  
    100100    STDMETHOD(COMGETTER(WinId)) (ULONG64 *winId);
    101101
    102     STDMETHOD(NotifyUpdate)(ULONG x, ULONG y,
    103                             ULONG w, ULONG h, BOOL *finished);
     102    STDMETHOD(NotifyUpdate)(ULONG x, ULONG y, ULONG w, ULONG h);
    104103    STDMETHOD(RequestResize)(ULONG aScreenId, ULONG pixelFormat, BYTE *vram,
    105104                             ULONG bitsPerPixel, ULONG bytesPerLine,
  • trunk/src/VBox/Frontends/VBoxSDL/Framebuffer.cpp

    r19798 r19817  
    408408 */
    409409STDMETHODIMP VBoxSDLFB::NotifyUpdate(ULONG x, ULONG y,
    410                                      ULONG w, ULONG h, BOOL *finished)
     410                                     ULONG w, ULONG h)
    411411{
    412412    /*
     
    434434#endif /* !VBOXSDL_WITH_X11 */
    435435
    436     /*
    437      * The Display thread can continue as we will lock the framebuffer
    438      * from the SDL thread when we get to actually doing the update.
    439      */
    440     if (finished)
    441         *finished = TRUE;
    442436    return S_OK;
    443437}
     
    14541448 */
    14551449STDMETHODIMP VBoxSDLFBOverlay::NotifyUpdate(ULONG x, ULONG y,
    1456                             ULONG w, ULONG h, BOOL *finished)
    1457 {
    1458     return mParent->NotifyUpdate(x + mOverlayX, y + mOverlayY, w, h, finished);
     1450                            ULONG w, ULONG h)
     1451{
     1452    return mParent->NotifyUpdate(x + mOverlayX, y + mOverlayY, w, h);
    14591453}
    14601454
  • trunk/src/VBox/Frontends/VBoxSDL/Framebuffer.h

    r19798 r19817  
    101101    STDMETHOD(COMGETTER(WinId)) (uint64_t *winId);
    102102
    103     STDMETHOD(NotifyUpdate)(ULONG x, ULONG y,
    104                             ULONG w, ULONG h, BOOL *finished);
     103    STDMETHOD(NotifyUpdate)(ULONG x, ULONG y, ULONG w, ULONG h);
    105104    STDMETHOD(RequestResize)(ULONG aScreenId, ULONG pixelFormat, BYTE *vram,
    106105                             ULONG bitsPerPixel, ULONG bytesPerLine,
     
    268267    STDMETHOD(Unlock)();
    269268    STDMETHOD(Move)(ULONG x, ULONG y);
    270     STDMETHOD(NotifyUpdate)(ULONG x, ULONG y,
    271                             ULONG w, ULONG h, BOOL *finished);
     269    STDMETHOD(NotifyUpdate)(ULONG x, ULONG y, ULONG w, ULONG h);
    272270    STDMETHOD(RequestResize)(ULONG aScreenId, ULONG pixelFormat, ULONG vram,
    273271                             ULONG bitsPerPixel, ULONG bytesPerLine,
  • trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp

    r19579 r19817  
    5959#include <VBox/log.h>
    6060#include <VBox/version.h>
     61#include <VBox/VBoxVideo.h>
    6162
    6263#include <iprt/alloca.h>
     
    20372038
    20382039    // register our framebuffer
    2039     rc = gDisplay->RegisterExternalFramebuffer(gpFrameBuffer);
     2040    rc = gDisplay->SetFramebuffer(VBOX_VIDEO_PRIMARY_SCREEN, gpFrameBuffer);
    20402041    if (rc != S_OK)
    20412042    {
     
    28852886    LogFlow(("Releasing mouse, keyboard, vrdpserver, display, console...\n"));
    28862887    if (gDisplay)
    2887         gDisplay->SetupInternalFramebuffer(0);
     2888        gDisplay->SetFramebuffer(VBOX_VIDEO_PRIMARY_SCREEN, NULL);
    28882889    gMouse = NULL;
    28892890    gKeyboard = NULL;
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxFrameBuffer.h

    r19798 r19817  
    273273
    274274    STDMETHOD(NotifyUpdate) (ULONG aX, ULONG aY,
    275                              ULONG aW, ULONG aH,
    276                              BOOL *aFinished);
     275                             ULONG aW, ULONG aH);
    277276
    278277    ulong pixelFormat() { return mPixelFormat; }
     
    308307
    309308    STDMETHOD(NotifyUpdate) (ULONG aX, ULONG aY,
    310                              ULONG aW, ULONG aH,
    311                              BOOL *aFinished);
     309                             ULONG aW, ULONG aH);
    312310
    313311    uchar *address()
     
    364362
    365363    STDMETHOD(NotifyUpdate) (ULONG aX, ULONG aY,
    366                              ULONG aW, ULONG aH,
    367                              BOOL *aFinished);
     364                             ULONG aW, ULONG aH);
    368365
    369366    uchar *address() { return (uchar *) mSurfaceDesc.lpSurface; }
     
    422419
    423420    STDMETHOD (NotifyUpdate) (ULONG aX, ULONG aY,
    424                               ULONG aW, ULONG aH,
    425                               BOOL *aFinished);
     421                              ULONG aW, ULONG aH);
    426422    STDMETHOD (SetVisibleRegion) (BYTE *aRectangles, ULONG aCount);
    427423
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp

    r19684 r19817  
    2020 * additional information or have any questions.
    2121 */
     22
     23#include <VBox/VBoxVideo.h>
    2224
    2325#include "VBoxConsoleView.h"
     
    876878    {
    877879        mFrameBuf->AddRef();
    878         display.RegisterExternalFramebuffer (CFramebuffer (mFrameBuf));
     880        display.SetFramebuffer (VBOX_VIDEO_PRIMARY_SCREEN, CFramebuffer (mFrameBuf));
    879881    }
    880882
     
    950952        CDisplay display = mConsole.GetDisplay();
    951953        Assert (!display.isNull());
    952         display.SetupInternalFramebuffer (0);
     954        display.SetFramebuffer (VBOX_VIDEO_PRIMARY_SCREEN, CFramebuffer(NULL));
    953955        /* release the reference */
    954956        mFrameBuf->Release();
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBDDRAW.cpp

    r10149 r19817  
    229229/** @note This method is called on EMT from under this object's lock */
    230230STDMETHODIMP VBoxDDRAWFrameBuffer::NotifyUpdate (ULONG aX, ULONG aY,
    231                                                  ULONG aW, ULONG aH,
    232                                                  BOOL *aFinished)
     231                                                 ULONG aW, ULONG aH)
    233232{
    234233    LOGDDRAW(("DDRAW: NotifyUpdate %d,%d %dx%d\n", aX, aY, aW, aH));
     
    243242        drawRect (aX, aY, aW, aH);
    244243    }
    245 
    246     *aFinished = TRUE;
    247244
    248245    return S_OK;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBQuartz2D.cpp

    r17201 r19817  
    6464/** @note This method is called on EMT from under this object's lock */
    6565STDMETHODIMP VBoxQuartz2DFrameBuffer::NotifyUpdate (ULONG aX, ULONG aY,
    66                                                  ULONG aW, ULONG aH,
    67                                                  BOOL *aFinished)
     66                                                 ULONG aW, ULONG aH)
    6867{
    6968/*    Log (("Quartz2D: NotifyUpdate %d,%d %dx%d\n", aX, aY, aW, aH));*/
     
    7170    QApplication::postEvent (mView,
    7271                             new VBoxRepaintEvent (aX, aY, aW, aH));
    73     /* the update has been finished, return TRUE */
    74     *aFinished = TRUE;
    75 
    7672    return S_OK;
    7773}
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFrameBuffer.cpp

    r19798 r19817  
    282282/** @note This method is called on EMT from under this object's lock */
    283283STDMETHODIMP VBoxQImageFrameBuffer::NotifyUpdate (ULONG aX, ULONG aY,
    284                                                   ULONG aW, ULONG aH,
    285                                                   BOOL *aFinished)
     284                                                  ULONG aW, ULONG aH)
    286285{
    287286    /* We're not on the GUI thread and update() isn't thread safe in
     
    292291                             new VBoxRepaintEvent (aX, aY, aW, aH));
    293292
    294     /* The update has been finished, return TRUE */
    295     *aFinished = TRUE;
    296293    return S_OK;
    297294}
     
    465462/** @note This method is called on EMT from under this object's lock */
    466463STDMETHODIMP VBoxSDLFrameBuffer::NotifyUpdate (ULONG aX, ULONG aY,
    467                                                ULONG aW, ULONG aH,
    468                                                BOOL *aFinished)
     464                                               ULONG aW, ULONG aH)
    469465{
    470466#if !defined (Q_WS_WIN) && !defined (Q_WS_PM)
     
    480476                               aW, aH);
    481477#endif
    482     /* the update has been finished, return TRUE */
    483     *aFinished = TRUE;
    484478    return S_OK;
    485479}
Note: See TracChangeset for help on using the changeset viewer.

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