VirtualBox

Changeset 41216 in vbox for trunk


Ignore:
Timestamp:
May 8, 2012 6:05:41 PM (13 years ago)
Author:
vboxsync
Message:

Frontends: back out the Framebuffer cleanup, to be retried later

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/com/defs.h

    r41201 r41216  
    506506                         kTypeLibraryMajorVersion, kTypeLibraryMinorVersion>
    507507
     508#define VBOX_SCRIPTABLE_DISPATCH_IMPL(iface)                                 \
     509    STDMETHOD(QueryInterface)(REFIID riid , void **ppObj)                    \
     510    {                                                                        \
     511        if (riid == IID_##iface)                                             \
     512        {                                                                    \
     513            *ppObj = (iface*)this;                                           \
     514            AddRef();                                                        \
     515            return S_OK;                                                     \
     516        }                                                                    \
     517        if (riid == IID_IUnknown)                                            \
     518        {                                                                    \
     519            *ppObj = (IUnknown*)this;                                        \
     520            AddRef();                                                        \
     521            return S_OK;                                                     \
     522        }                                                                    \
     523        if (riid == IID_IDispatch)                                           \
     524        {                                                                    \
     525            *ppObj = (IDispatch*)this;                                       \
     526            AddRef();                                                        \
     527            return S_OK;                                                     \
     528        }                                                                    \
     529        *ppObj = NULL;                                                       \
     530        return E_NOINTERFACE;                                                \
     531    }
     532
     533
    508534#define VBOX_DEFAULT_INTERFACE_ENTRIES(iface)                                \
    509535        COM_INTERFACE_ENTRY(ISupportErrorInfo)                               \
     
    514540#define VBOX_SCRIPTABLE_IMPL(iface)                     \
    515541    public iface
     542#define VBOX_SCRIPTABLE_DISPATCH_IMPL(iface)
    516543#define VBOX_DEFAULT_INTERFACE_ENTRIES(iface)
    517544#endif
  • trunk/src/VBox/Frontends/VBoxHeadless/Framebuffer.h

    r41201 r41216  
    55
    66/*
    7  * Copyright (C) 2007-2012 Oracle Corporation
     7 * Copyright (C) 2010 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4242    }
    4343#endif
     44    VBOX_SCRIPTABLE_DISPATCH_IMPL(IFramebuffer)
    4445
    45     BEGIN_COM_MAP(VRDPFramebuffer)
    46         VBOX_DEFAULT_INTERFACE_ENTRIES(IFramebuffer)
    47     END_COM_MAP()
     46    NS_DECL_ISUPPORTS
    4847
    4948    STDMETHOD(COMGETTER(Width))(ULONG *width);
  • trunk/src/VBox/Frontends/VBoxHeadless/NullFramebuffer.h

    r41201 r41216  
    11/*
    2  * Copyright (C) 2007-2012 Oracle Corporation
     2 * Copyright (C) 2010 Oracle Corporation
    33 *
    44 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4646    }
    4747#endif
    48 
    49     BEGIN_COM_MAP(NullFB)
    50         VBOX_DEFAULT_INTERFACE_ENTRIES(IFramebuffer)
    51     END_COM_MAP()
     48    VBOX_SCRIPTABLE_DISPATCH_IMPL(IFramebuffer)
     49
     50    NS_DECL_ISUPPORTS
    5251
    5352    // public methods only for internal purposes
  • trunk/src/VBox/Frontends/VBoxHeadless/VideoCapture/FFmpegFB.h

    r41203 r41216  
    66
    77/*
    8  * Copyright (C) 2006-2012 Oracle Corporation
     8 * Copyright (C) 2006-2007 Oracle Corporation
    99 *
    1010 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    6060    }
    6161#endif
    62 
    63     BEGIN_COM_MAP(FFmpegFB)
    64         VBOX_DEFAULT_INTERFACE_ENTRIES(IFramebuffer)
    65     END_COM_MAP()
     62    VBOX_SCRIPTABLE_DISPATCH_IMPL(IFramebuffer)
     63
     64    NS_DECL_ISUPPORTS
    6665
    6766    // public methods only for internal purposes
  • trunk/src/VBox/Frontends/VBoxSDL/Framebuffer.cpp

    r41215 r41216  
    7575//
    7676
    77 HRESULT VBoxSDLFB::FinalConstruct()
    78 {
    79     return S_OK;
    80 }
    81 
    82 /**
    83  * SDL framebuffer init method. It is called from the main
     77/**
     78 * SDL framebuffer constructor. It is called from the main
    8479 * (i.e. SDL) thread. Therefore it is safe to use SDL calls
    8580 * here.
    86  * @returns COM status code
    8781 * @param fFullscreen    flag whether we start in fullscreen mode
    8882 * @param fResizable     flag whether the SDL window should be resizable
     
    9387 * @param iFixedHeight   fixed SDL height (-1 means not set)
    9488 */
    95 HRESULT VBoxSDLFB::init(uint32_t uScreenId,
    96                         bool fFullscreen, bool fResizable, bool fShowSDLConfig,
    97                         bool fKeepHostRes, uint32_t u32FixedWidth,
    98                         uint32_t u32FixedHeight, uint32_t u32FixedBPP)
     89VBoxSDLFB::VBoxSDLFB(uint32_t uScreenId,
     90                     bool fFullscreen, bool fResizable, bool fShowSDLConfig,
     91                     bool fKeepHostRes, uint32_t u32FixedWidth,
     92                     uint32_t u32FixedHeight, uint32_t u32FixedBPP)
    9993{
    10094    int rc;
    101     LogFlow(("VBoxSDLFB::init\n"));
     95    LogFlow(("VBoxSDLFB::VBoxSDLFB\n"));
     96
     97#if defined (RT_OS_WINDOWS)
     98    refcnt = 0;
     99#endif
    102100
    103101    mScreenId       = uScreenId;
     
    140138    Assert(mScreen);
    141139    mfInitialized = true;
    142 
    143     return S_OK;
    144 }
    145 
    146 void VBoxSDLFB::FinalRelease()
    147 {
    148     uninit();
    149 }
    150 
    151 void VBoxSDLFB::uninit()
    152 {
    153     LogFlow(("VBoxSDLFB::uninit\n"));
     140}
     141
     142VBoxSDLFB::~VBoxSDLFB()
     143{
     144    LogFlow(("VBoxSDLFB::~VBoxSDLFB\n"));
    154145    if (mSurfVRAM)
    155146    {
     
    169160}
    170161
    171 bool VBoxSDLFB::initSDL(bool fShowSDLConfig)
     162bool VBoxSDLFB::init(bool fShowSDLConfig)
    172163{
    173164    LogFlow(("VBoxSDLFB::init\n"));
     
    249240 * @remarks must be called from the SDL thread!
    250241 */
    251 void VBoxSDLFB::uninitSDL()
     242void VBoxSDLFB::uninit()
    252243{
    253244    if (gfSdlInitialized)
  • trunk/src/VBox/Frontends/VBoxSDL/Framebuffer.h

    r41215 r41216  
    66
    77/*
    8  * Copyright (C) 2006-2012 Oracle Corporation
     8 * Copyright (C) 2006-2007 Oracle Corporation
    99 *
    1010 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4343
    4444class VBoxSDLFB :
    45     public CComObjectRootEx<CComMultiThreadModelNoCS>,
    4645    VBOX_SCRIPTABLE_IMPL(IFramebuffer)
    4746{
    4847public:
    49     DECLARE_NOT_AGGREGATABLE(VBoxSDLFB)
    50 
    51     DECLARE_PROTECT_FINAL_CONSTRUCT()
    52 
    53     VBoxSDLFB() { /* empty */ }
    54     ~VBoxSDLFB() { /* empty */ }
    55 
    56     HRESULT FinalConstruct();
    57     void FinalRelease();
    58 
    59     HRESULT init(uint32_t uScreenId,
    60                  bool fFullscreen = false, bool fResizable = true, bool fShowSDLConfig = false,
    61                  bool fKeepHostRes = false, uint32_t u32FixedWidth = ~(uint32_t)0,
    62                  uint32_t u32FixedHeight = ~(uint32_t)0, uint32_t u32FixedBPP = ~(uint32_t)0);
    63     void uninit();
    64 
    65     static bool initSDL(bool fShowSDLConfig);
    66     static void uninitSDL();
    67 
    68     BEGIN_COM_MAP(VBoxSDLFB)
    69         VBOX_MINIMAL_INTERFACE_ENTRIES(IFramebuffer)
    70     END_COM_MAP()
     48    VBoxSDLFB(uint32_t uScreenId,
     49              bool fFullscreen = false, bool fResizable = true, bool fShowSDLConfig = false,
     50              bool fKeepHostRes = false, uint32_t u32FixedWidth = ~(uint32_t)0,
     51              uint32_t u32FixedHeight = ~(uint32_t)0, uint32_t u32FixedBPP = ~(uint32_t)0);
     52    virtual ~VBoxSDLFB();
     53
     54    static bool init(bool fShowSDLConfig);
     55    static void uninit();
     56
     57#ifdef RT_OS_WINDOWS
     58    STDMETHOD_(ULONG, AddRef)()
     59    {
     60        return ::InterlockedIncrement (&refcnt);
     61    }
     62    STDMETHOD_(ULONG, Release)()
     63    {
     64        long cnt = ::InterlockedDecrement (&refcnt);
     65        if (cnt == 0)
     66            delete this;
     67        return cnt;
     68    }
     69#endif
     70    VBOX_SCRIPTABLE_DISPATCH_IMPL(IFramebuffer)
     71
     72    NS_DECL_ISUPPORTS
    7173
    7274    STDMETHOD(COMGETTER(Width))(ULONG *width);
     
    185187    /** secure label offset from the top of the secure label */
    186188    uint32_t mLabelOffs;
    187 #endif
    188 
     189
     190#endif
     191#ifdef RT_OS_WINDOWS
     192    long refcnt;
     193#endif
    189194    SDL_Surface *mSurfVRAM;
    190195
     
    198203
    199204class VBoxSDLFBOverlay :
    200     public CComObjectRootEx<CComMultiThreadModelNoCS>,
    201     VBOX_SCRIPTABLE_IMPL(IFramebufferOverlay)
     205    public IFramebufferOverlay
    202206{
    203207public:
    204     DECLARE_NOT_AGGREGATABLE(VBoxSDLFBOverlay)
    205 
    206208    VBoxSDLFBOverlay(ULONG x, ULONG y, ULONG width, ULONG height, BOOL visible,
    207209                     VBoxSDLFB *aParent);
    208210    virtual ~VBoxSDLFBOverlay();
    209211
    210     BEGIN_COM_MAP(VBoxSDLFBOverlay)
    211         VBOX_MINIMAL_INTERFACE_ENTRIES(IFramebufferOverlay)
    212     END_COM_MAP()
     212#ifdef RT_OS_WINDOWS
     213    STDMETHOD_(ULONG, AddRef)()
     214    {
     215        return ::InterlockedIncrement (&refcnt);
     216    }
     217    STDMETHOD_(ULONG, Release)()
     218    {
     219        long cnt = ::InterlockedDecrement (&refcnt);
     220        if (cnt == 0)
     221            delete this;
     222        return cnt;
     223    }
     224#endif
     225    VBOX_SCRIPTABLE_DISPATCH_IMPL(IFramebuffer)
     226
     227    NS_DECL_ISUPPORTS
    213228
    214229    STDMETHOD(COMGETTER(X))(ULONG *x);
     
    260275    /** Additional SDL surface used for combining the framebuffer and the overlay */
    261276    SDL_Surface *mBlendedBits;
     277#ifdef RT_OS_WINDOWS
     278    long refcnt;
     279#endif
    262280};
    263281
  • trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp

    r41215 r41216  
    203203
    204204static ULONG       gcMonitors = 1;
    205 static ComObjPtr<VBoxSDLFB>  gpFramebuffer[64];
     205static VBoxSDLFB  *gpFramebuffer[64];
    206206static SDL_Cursor *gpDefaultCursor = NULL;
    207207#ifdef VBOXSDL_WITH_X11
     
    17801780
    17811781    /* static initialization of the SDL stuff */
    1782     if (!VBoxSDLFB::initSDL(fShowSDLConfig))
     1782    if (!VBoxSDLFB::init(fShowSDLConfig))
    17831783        goto leave;
    17841784
     
    17901790    {
    17911791        // create our SDL framebuffer instance
    1792         rc = gpFramebuffer[i].createObject();
    1793         if (SUCCEEDED(rc))
    1794             rc = gpFramebuffer[i]->init(i, fFullscreen, fResizable, fShowSDLConfig, false,
    1795                                         fixedWidth, fixedHeight, fixedBPP);
    1796 
    1797         if (FAILED(rc) || !gpFramebuffer[i])
     1792        gpFramebuffer[i] = new VBoxSDLFB(i, fFullscreen, fResizable, fShowSDLConfig, false,
     1793                                         fixedWidth, fixedHeight, fixedBPP);
     1794
     1795        if (!gpFramebuffer[i])
    17981796        {
    17991797            RTPrintf("Error: could not create framebuffer object!\n");
     
    28722870    }
    28732871
    2874     VBoxSDLFB::uninitSDL();
     2872    VBoxSDLFB::uninit();
    28752873
    28762874#ifdef VBOX_SECURELABEL
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp

    r41201 r41216  
    77
    88/*
    9  * Copyright (C) 2004-2012 Oracle Corporation
     9 * Copyright (C) 2010 Oracle Corporation
    1010 *
    1111 * This file is part of VirtualBox Open Source Edition (OSE), as
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h

    r41201 r41216  
    66
    77/*
    8  * Copyright (C) 2004-2012 Oracle Corporation
     8 * Copyright (C) 2010-2011 Oracle Corporation
    99 *
    1010 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    127127    void setDeleted(bool fIsDeleted) { m_fIsDeleted = fIsDeleted; }
    128128
    129 #if defined(Q_OS_WIN32)
     129    NS_DECL_ISUPPORTS
     130
     131#if defined (Q_OS_WIN32)
    130132    STDMETHOD_(ULONG, AddRef)()
    131133    {
     
    142144#endif
    143145
    144     BEGIN_COM_MAP(UIFrameBuffer)
    145         VBOX_DEFAULT_INTERFACE_ENTRIES(IFramebuffer)
    146     END_COM_MAP()
     146    VBOX_SCRIPTABLE_DISPATCH_IMPL(IFramebuffer)
    147147
    148148    /* IFramebuffer COM methods */
    149     STDMETHOD(COMGETTER(Address))(BYTE **ppAddress);
    150     STDMETHOD(COMGETTER(Width))(ULONG *puWidth);
    151     STDMETHOD(COMGETTER(Height))(ULONG *puHeight);
    152     STDMETHOD(COMGETTER(BitsPerPixel))(ULONG *puBitsPerPixel);
    153     STDMETHOD(COMGETTER(BytesPerLine))(ULONG *puBytesPerLine);
    154     STDMETHOD(COMGETTER(PixelFormat))(ULONG *puPixelFormat);
    155     STDMETHOD(COMGETTER(UsesGuestVRAM))(BOOL *pbUsesGuestVRAM);
    156     STDMETHOD(COMGETTER(HeightReduction))(ULONG *puHeightReduction);
    157     STDMETHOD(COMGETTER(Overlay))(IFramebufferOverlay **ppOverlay);
    158     STDMETHOD(COMGETTER(WinId))(LONG64 *pWinId);
     149    STDMETHOD(COMGETTER(Address)) (BYTE **ppAddress);
     150    STDMETHOD(COMGETTER(Width)) (ULONG *puWidth);
     151    STDMETHOD(COMGETTER(Height)) (ULONG *puHeight);
     152    STDMETHOD(COMGETTER(BitsPerPixel)) (ULONG *puBitsPerPixel);
     153    STDMETHOD(COMGETTER(BytesPerLine)) (ULONG *puBytesPerLine);
     154    STDMETHOD(COMGETTER(PixelFormat)) (ULONG *puPixelFormat);
     155    STDMETHOD(COMGETTER(UsesGuestVRAM)) (BOOL *pbUsesGuestVRAM);
     156    STDMETHOD(COMGETTER(HeightReduction)) (ULONG *puHeightReduction);
     157    STDMETHOD(COMGETTER(Overlay)) (IFramebufferOverlay **ppOverlay);
     158    STDMETHOD(COMGETTER(WinId)) (LONG64 *pWinId);
    159159
    160160    STDMETHOD(Lock)();
    161161    STDMETHOD(Unlock)();
    162162
    163     STDMETHOD(RequestResize)(ULONG uScreenId, ULONG uPixelFormat,
    164                              BYTE *pVRAM, ULONG uBitsPerPixel, ULONG uBytesPerLine,
    165                              ULONG uWidth, ULONG uHeight,
    166                              BOOL *pbFinished);
    167 
    168     STDMETHOD(VideoModeSupported)(ULONG uWidth, ULONG uHeight, ULONG uBPP,
    169                                   BOOL *pbSupported);
     163    STDMETHOD(RequestResize) (ULONG uScreenId, ULONG uPixelFormat,
     164                              BYTE *pVRAM, ULONG uBitsPerPixel, ULONG uBytesPerLine,
     165                              ULONG uWidth, ULONG uHeight,
     166                              BOOL *pbFinished);
     167
     168    STDMETHOD(VideoModeSupported) (ULONG uWidth, ULONG uHeight, ULONG uBPP,
     169                                   BOOL *pbSupported);
    170170
    171171    STDMETHOD(GetVisibleRegion)(BYTE *pRectangles, ULONG uCount, ULONG *puCountCopied);
     
    247247    bool m_fIsDeleted;
    248248
    249 #if defined(Q_OS_WIN32)
     249#if defined (Q_OS_WIN32)
    250250private:
    251251
  • trunk/src/VBox/Main/include/FramebufferImpl.h

    r41201 r41216  
    3232    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(Framebuffer, IFramebuffer)
    3333
    34     DECLARE_NOT_AGGREGATABLE(Framebuffer)
     34    DECLARE_NOT_AGGREGATABLE (Framebuffer)
    3535
    3636    DECLARE_PROTECT_FINAL_CONSTRUCT()
    3737
    38     BEGIN_COM_MAP(Framebuffer)
    39         VBOX_DEFAULT_INTERFACE_ENTRIES(IFramebuffer)
     38    BEGIN_COM_MAP (Framebuffer)
     39        VBOX_DEFAULT_INTERFACE_ENTRIES (IFramebuffer)
    4040    END_COM_MAP()
    4141
    42     DECLARE_EMPTY_CTOR_DTOR(Framebuffer)
     42    DECLARE_EMPTY_CTOR_DTOR (Framebuffer)
    4343
    4444    /* IFramebuffer properties */
    45     STDMETHOD(COMGETTER(Address))(BYTE **aAddress) = 0;
    46     STDMETHOD(COMGETTER(Width))(ULONG *aWidth) = 0;
    47     STDMETHOD(COMGETTER(Height))(ULONG *aHeight) = 0;
    48     STDMETHOD(COMGETTER(BitsPerPixel))(ULONG *aBitsPerPixel) = 0;
    49     STDMETHOD(COMGETTER(BytesPerLine))(ULONG *aBytesPerLine) = 0;
    50     STDMETHOD(COMGETTER(PixelFormat))(ULONG *aPixelFormat) = 0;
    51     STDMETHOD(COMGETTER(UsesGuestVRAM))(BOOL *aUsesGuestVRAM) = 0;
    52     STDMETHOD(COMGETTER(HeightReduction))(ULONG *aHeightReduction) = 0;
    53     STDMETHOD(COMGETTER(Overlay))(IFramebufferOverlay **aOverlay) = 0;
    54     STDMETHOD(COMGETTER(WinId))(ULONG64 *winId) = 0;
     45    STDMETHOD(COMGETTER(Address)) (BYTE **aAddress) = 0;
     46    STDMETHOD(COMGETTER(Width)) (ULONG *aWidth) = 0;
     47    STDMETHOD(COMGETTER(Height)) (ULONG *aHeight) = 0;
     48    STDMETHOD(COMGETTER(BitsPerPixel)) (ULONG *aBitsPerPixel) = 0;
     49    STDMETHOD(COMGETTER(BytesPerLine)) (ULONG *aBytesPerLine) = 0;
     50    STDMETHOD(COMGETTER(PixelFormat)) (ULONG *aPixelFormat) = 0;
     51    STDMETHOD(COMGETTER(UsesGuestVRAM)) (BOOL *aUsesGuestVRAM) = 0;
     52    STDMETHOD(COMGETTER(HeightReduction)) (ULONG *aHeightReduction) = 0;
     53    STDMETHOD(COMGETTER(Overlay)) (IFramebufferOverlay **aOverlay) = 0;
     54    STDMETHOD(COMGETTER(WinId)) (ULONG64 *winId) = 0;
    5555
    5656    /* IFramebuffer methods */
     
    5858    STDMETHOD(Unlock)() = 0;
    5959
    60     STDMETHOD(RequestResize)(ULONG aScreenId, ULONG aPixelFormat,
    61                              BYTE *aVRAM, ULONG aBitsPerPixel, ULONG aBytesPerLine,
    62                              ULONG aWidth, ULONG aHeight,
    63                              BOOL *aFinished) = 0;
     60    STDMETHOD(RequestResize) (ULONG aScreenId, ULONG aPixelFormat,
     61                              BYTE *aVRAM, ULONG aBitsPerPixel, ULONG aBytesPerLine,
     62                              ULONG aWidth, ULONG aHeight,
     63                              BOOL *aFinished) = 0;
    6464
    65     STDMETHOD(VideoModeSupported)(ULONG aWidth, ULONG aHeight, ULONG aBPP,
    66                                   BOOL *aSupported) = 0;
     65    STDMETHOD(VideoModeSupported) (ULONG aWidth, ULONG aHeight, ULONG aBPP,
     66                                   BOOL *aSupported) = 0;
    6767
    6868    STDMETHOD(GetVisibleRegion)(BYTE *aRectangles, ULONG aCount,
    69                                 ULONG *aCountCopied) = 0;
     69                               ULONG *aCountCopied) = 0;
    7070    STDMETHOD(SetVisibleRegion)(BYTE *aRectangles, ULONG aCount) = 0;
    7171
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