VirtualBox

Changeset 47416 in vbox for trunk


Ignore:
Timestamp:
Jul 26, 2013 6:55:18 AM (11 years ago)
Author:
vboxsync
Message:

include,Main,Extpack: emulated webcam updates

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/pdmwebcaminfs.h

    r44758 r47416  
    3232typedef struct PDMIWEBCAM_DEVICEDESC PDMIWEBCAM_DEVICEDESC;
    3333typedef struct PDMIWEBCAM_CTRLHDR PDMIWEBCAM_CTRLHDR;
     34typedef struct PDMIWEBCAM_FRAMEHDR PDMIWEBCAM_FRAMEHDR;
    3435
    3536
    36 #define PDMIWEBCAMDOWN_IID "0846959f-8b4a-4b2c-be78-9903b2ae9de5"
     37#define PDMIWEBCAMDOWN_IID "0d29b9a1-f4cd-4719-a564-38d5634ba9f8"
    3738typedef struct PDMIWEBCAMDOWN *PPDMIWEBCAMDOWN;
    3839typedef struct PDMIWEBCAMDOWN
    3940{
     41    /*
     42     * The PDM device is ready to get webcam notifications.
     43     *
     44     * @param pInterface  Pointer to the interface.
     45     * @param fReady      Whether the device is ready.
     46     */
     47    DECLR3CALLBACKMEMBER(void, pfnWebcamDownReady, (PPDMIWEBCAMDOWN pInterface,
     48                                                    bool fReady));
     49
    4050    /*
    4151     * Send a control request to the webcam.
     
    5666
    5767
    58 #define PDMIWEBCAMUP_IID "476c5d41-7bd1-4997-825e-722a72577af3"
     68#define PDMIWEBCAMUP_IID "6ac03e3c-f56c-4a35-80af-c13ce47a9dd7"
    5969typedef struct PDMIWEBCAMUP *PPDMIWEBCAMUP;
    6070typedef struct PDMIWEBCAMUP
     
    108118     * @param pInterface   Pointer to the interface.
    109119     * @param u64DeviceId  Unique id for the reported webcam assigned by the driver.
    110      * @param pu8Frame     The frame data including the payload header and the image data.
    111      * @param cbFrame      The size of the frame data.
     120     * @param pHeader      Payload header.
     121     * @param cbHeader     Size of the payload header.
     122     * @param pvFrame      Frame (image) data.
     123     * @param cbFrame      Size of the image data.
    112124     */
    113125    DECLR3CALLBACKMEMBER(void, pfnWebcamUpFrame,(PPDMIWEBCAMUP pInterface,
    114126                                                 uint64_t u64DeviceId,
    115                                                  const uint8_t *pu8Frame,
     127                                                 PDMIWEBCAM_FRAMEHDR *pHeader,
     128                                                 uint32_t cbHeader,
     129                                                 const void *pvFrame,
    116130                                                 uint32_t cbFrame));
    117131} PDMIWEBCAMUP;
  • trunk/src/VBox/Main/src-client/UsbWebcamInterface.cpp

    r45029 r47416  
    5151
    5252
     53static DECLCALLBACK(void) drvEmWebcamReady(PPDMIWEBCAMDOWN pInterface,
     54                                           bool fReady)
     55{
     56    PEMWEBCAMDRV pThis = RT_FROM_MEMBER(pInterface, EMWEBCAMDRV, IWebcamDown);
     57    NOREF(pThis);
     58    NOREF(fReady);
     59}
     60
    5361static DECLCALLBACK(int) drvEmWebcamControl(PPDMIWEBCAMDOWN pInterface,
    5462                                            void *pvUser,
     
    270278    if (mpDrv && mpDrv->pIWebcamUp)
    271279    {
    272         mpDrv->pIWebcamUp->pfnWebcamUpFrame(mpDrv->pIWebcamUp,
    273                                             mpRemote->u64DeviceId,
    274                                             (const uint8_t *)pFrame,
    275                                             cbFrame);
     280        if (   cbFrame >= sizeof(VRDEVIDEOINPAYLOADHDR)
     281            && cbFrame >= pFrame->u8HeaderLength)
     282        {
     283            uint32_t cbImage = cbFrame - pFrame->u8HeaderLength;
     284            const uint8_t *pu8Image = cbImage > 0? (const uint8_t *)pFrame + pFrame->u8HeaderLength: NULL;
     285
     286            mpDrv->pIWebcamUp->pfnWebcamUpFrame(mpDrv->pIWebcamUp,
     287                                                mpRemote->u64DeviceId,
     288                                                (PDMIWEBCAM_FRAMEHDR *)pFrame,
     289                                                pFrame->u8HeaderLength,
     290                                                pu8Image,
     291                                                cbImage);
     292        }
    276293    }
    277294}
     
    380397    pDrvIns->IBase.pfnQueryInterface = drvQueryInterface;
    381398
     399    pThis->IWebcamDown.pfnWebcamDownReady = drvEmWebcamReady;
    382400    pThis->IWebcamDown.pfnWebcamDownControl = drvEmWebcamControl;
    383401
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