| .. _video_api: | 
 |  | 
 |  | 
 | Video | 
 | ##### | 
 |  | 
 | The video driver API offers a generic interface to video devices. | 
 |  | 
 | Basic Operation | 
 | *************** | 
 |  | 
 | Video Device | 
 | ============ | 
 |  | 
 | A video device is the abstraction of a hardware or software video function, | 
 | which can produce, process, consume or transform video data. The video API is | 
 | designed to offer flexible way to create, handle and combine various video | 
 | devices. | 
 |  | 
 | Endpoint | 
 | ======== | 
 |  | 
 | Each video device can have one or more endpoints. Output endpoints configure | 
 | video output function and generate data. Input endpoints configure video input | 
 | function and consume data. | 
 |  | 
 | Video Buffer | 
 | ============ | 
 |  | 
 | A video buffer provides the transport mechanism for the data. There is no | 
 | particular requirement on the content. The requirement for the content is | 
 | defined by the endpoint format. A video buffer can be queued to a device | 
 | endpoint for filling (input ep) or consuming (output ep) operation, once | 
 | the operation is achieved, buffer can be dequeued for post-processing, | 
 | release or reuse. | 
 |  | 
 | Controls | 
 | ======== | 
 |  | 
 | A video control is accessed and identified by a CID (control identifier). It | 
 | represents a video control property. Different devices will have different | 
 | controls available which can be generic, related to a device class or vendor | 
 | specific. The set/get control functions provide a generic scalable interface | 
 | to handle and create controls. | 
 |  | 
 | Configuration Options | 
 | ********************* | 
 |  | 
 | Related configuration options: | 
 |  | 
 | * :option:`CONFIG_VIDEO` | 
 |  | 
 | API Reference | 
 | ************* | 
 |  | 
 | .. doxygengroup:: video_interface | 
 |    :project: Zephyr | 
 |  | 
 | .. doxygengroup:: video_controls | 
 |    :project: Zephyr |