---
title: "VTCompressionSessionEncodeFrame(_:imageBuffer:presentationTimeStamp:duration:frameProperties:sourceFrameRefcon:infoFlagsOut:)"
framework: videotoolbox
role: symbol
role_heading: Function
path: "videotoolbox/vtcompressionsessionencodeframe(_:imagebuffer:presentationtimestamp:duration:frameproperties:sourceframerefcon:infoflagsout:)"
---

# VTCompressionSessionEncodeFrame(_:imageBuffer:presentationTimeStamp:duration:frameProperties:sourceFrameRefcon:infoFlagsOut:)

Presents frames to the compression session.

## Declaration

```swift
func VTCompressionSessionEncodeFrame(_ session: VTCompressionSession, imageBuffer: CVImageBuffer, presentationTimeStamp: CMTime, duration: CMTime, frameProperties: CFDictionary?, sourceFrameRefcon: UnsafeMutableRawPointer?, infoFlagsOut: UnsafeMutablePointer<VTEncodeInfoFlags>?) -> OSStatus
```

## Parameters

- `session`: The compression session.
- `imageBuffer`: A Core Video image buffer (doc://com.apple.documentation/documentation/CoreVideo/CVImageBuffer) containing a video frame to be compressed. The buffer must have a nonzero reference count.
- `presentationTimeStamp`: The presentation timestamp for this frame, to be attached to the sample buffer. Each presentation timestamp passed to a session must be greater than the previous one.
- `duration`: The presentation duration for this frame, to be attached to the sample buffer. If you do not have duration information, pass doc://com.apple.documentation/documentation/CoreMedia/CMTime/invalid.
- `frameProperties`: Key/value pairs specifying additional properties for encoding this frame. Note that some session properties may also be changed between frames. Such changes affect subsequently encoded frames.
- `sourceFrameRefcon`: Your reference value for the frame, which will be passed to the output callback function.
- `infoFlagsOut`: A pointer to a VTEncodeInfoFlags to receive information about the encode operation. The doc://com.apple.videotoolbox/documentation/VideoToolbox/VTEncodeInfoFlags/asynchronous bit may be set if the encode is (or was) running asynchronously. The doc://com.apple.videotoolbox/documentation/VideoToolbox/VTEncodeInfoFlags/frameDropped bit may be set if the frame was dropped (synchronously). Pass NULL if you do not want to receive this information.

## Discussion

Discussion Encoded frames may or may not be output before the function returns. The client should not modify the pixel data after making this call. The session and/or encoder retains the image buffer as long as necessary.

## See Also

### Encoding Frames

- [VTCompressionSessionGetPixelBufferPool(_:)](videotoolbox/vtcompressionsessiongetpixelbufferpool(_:).md)
- [VTCompressionSessionPrepareToEncodeFrames(_:)](videotoolbox/vtcompressionsessionpreparetoencodeframes(_:).md)
- [VTCompressionSessionEncodeFrame(_:imageBuffer:presentationTimeStamp:duration:frameProperties:infoFlagsOut:outputHandler:)](videotoolbox/vtcompressionsessionencodeframe(_:imagebuffer:presentationtimestamp:duration:frameproperties:infoflagsout:outputhandler:).md)
- [VTCompressionSessionCompleteFrames(_:untilPresentationTimeStamp:)](videotoolbox/vtcompressionsessioncompleteframes(_:untilpresentationtimestamp:).md)
