# Listen for video events

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

The Video SDK for Linux fires video-related callbacks through `IZoomVideoSDKDelegate`. Implement the callbacks below to react to video state changes in your session. For details on setting up a delegate, see [callback events](/docs/video-sdk/linux/integrate/#callback-events).

## User video status

`onUserVideoStatusChanged` fires when a user starts or stops their video.

```cpp
void CExampleListener::onUserVideoStatusChanged(IZoomVideoSDKVideoHelper* pVideoHelper, IVideoSDKVector<IZoomVideoSDKUser*>* userList)
{
    IZoomVideoSDKUser* pUser;
    int count = userList->GetCount();

    for (int i = 0; i < count; i++)
    {
        pUser = userList->GetItem(i);
        bool isVideoOn = pUser->getVideoStatus().isOn;
    }
}
```

## Spotlight changes

`onSpotlightVideoChanged` fires when the set of spotlighted users changes. For the spotlight controls, see [Spotlight a user](/docs/video-sdk/linux/video/spotlight/).

```cpp
void CExampleListener::onSpotlightVideoChanged(IZoomVideoSDKVideoHelper* pVideoHelper, IVideoSDKVector<IZoomVideoSDKUser*>* userList)
{
    // userList contains the currently spotlighted users.
}
```

## Multi-camera stream status

`onMultiCameraStreamStatusChanged` fires when a user enables, mutes, or disables an additional camera stream. The callback passes the stream's status, the user, and the `IZoomVideoSDKRawDataPipe` for that stream. For details, see [Multiple camera support](/docs/video-sdk/linux/video/multiple-cameras/).

```cpp
void CExampleListener::onMultiCameraStreamStatusChanged(ZoomVideoSDKMultiCameraStreamStatus status, IZoomVideoSDKUser* pUser, IZoomVideoSDKRawDataPipe* pVideoPipe)
{
    // Subscribe to or unsubscribe from pVideoPipe based on status.
}
```

## Alpha channel mode

`onVideoAlphaChannelStatusChanged` fires when alpha channel mode turns on or off. For details, see [Raw video with alpha channel](/docs/video-sdk/linux/raw-data/raw-video-alpha-channel/).

```cpp
void CExampleListener::onVideoAlphaChannelStatusChanged(bool isAlphaModeOn)
{
    // Respond to the alpha channel mode change.
}
```

## Camera control requests

When a user requests control of the local user's camera, the SDK calls `onCameraControlRequestReceived` with a handler you use to approve or decline. When a control request you sent is answered, the SDK calls `onCameraControlRequestResult`. For details, see [Remote camera control](/docs/video-sdk/linux/video/remote-camera-control/).

```cpp
void CExampleListener::onCameraControlRequestReceived(IZoomVideoSDKUser* pUser, ZoomVideoSDKCameraControlRequestType requestType, IZoomVideoSDKCameraControlRequestHandler* pCameraControlRequestHandler)
{
    // Call pCameraControlRequestHandler->approve() or decline().
}

void CExampleListener::onCameraControlRequestResult(IZoomVideoSDKUser* pUser, bool isApproved)
{
    // isApproved indicates whether your request was granted.
}
```
