| .. -*- coding: utf-8; mode: rst -*- |
| |
| ******************************** |
| Comparison with old cropping API |
| ******************************** |
| |
| The selection API was introduced to cope with deficiencies of previous |
| :ref:`API <crop>`, that was designed to control simple capture |
| devices. Later the cropping API was adopted by video output drivers. The |
| ioctls are used to select a part of the display were the video signal is |
| inserted. It should be considered as an API abuse because the described |
| operation is actually the composing. The selection API makes a clear |
| distinction between composing and cropping operations by setting the |
| appropriate targets. The V4L2 API lacks any support for composing to and |
| cropping from an image inside a memory buffer. The application could |
| configure a capture device to fill only a part of an image by abusing |
| V4L2 API. Cropping a smaller image from a larger one is achieved by |
| setting the field ``bytesperline`` at struct |
| :c:type:`v4l2_pix_format`. |
| Introducing an image offsets could be done by modifying field ``m_userptr`` |
| at struct |
| :c:type:`v4l2_buffer` before calling |
| :ref:`VIDIOC_QBUF`. Those operations should be avoided because they are not |
| portable (endianness), and do not work for macroblock and Bayer formats |
| and mmap buffers. The selection API deals with configuration of buffer |
| cropping/composing in a clear, intuitive and portable way. Next, with |
| the selection API the concepts of the padded target and constraints |
| flags are introduced. Finally, struct :c:type:`v4l2_crop` |
| and struct :c:type:`v4l2_cropcap` have no reserved |
| fields. Therefore there is no way to extend their functionality. The new |
| struct :c:type:`v4l2_selection` provides a lot of place |
| for future extensions. Driver developers are encouraged to implement |
| only selection API. The former cropping API would be simulated using the |
| new one. |