/* * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ * * This file is licensed under the terms of the GNU General Public License * version 2. This program is licensed "as is" without any warranty of any * kind, whether express or implied. * * This file specifies the custom ioctl API between a client "consumer" * process and the V4L2-GFX driver. The consumer process should only use * these APIs and will typically/ultimately be a GL application. * * There will also be a "producer" process which queues multimedia * content to the driver, however, this will only use standard V4L2 APIs. */ #ifndef _OMAP_V4L2_GFX_H_ #define _OMAP_V4L2_GFX_H_ #include /* * @see V4L2_GFX_IOC_CONSUMER, struct v4l2_gfx_consumer_params */ enum v4l2_gfx_consumer_type { /* * Wait for the producer process to activate a video stream */ V4L2_GFX_CONSUMER_WAITSTREAM, }; /* * @see V4L2_GFX_IOC_CONSUMER */ struct v4l2_gfx_consumer_params { /* * @see v4l2_gfx_consumer_type */ int type; /* w */ /* * If the consumer process is waiting the ioctl will block until the * timeout expires or the expected event occurs, see the type field */ unsigned int timeout_ms; /* w */ /* * If acquire_timeout_ms > 0 and no streaming activity has been detected * for acquire_timeout_ms milliseconds the V4L2_GFX_IOC_ACQ ioctl will * return with ETIMEOUT */ unsigned int acquire_timeout_ms; /* w */ }; /* * @see V4L2_GFX_IOC_INFO */ struct v4l2_gfx_info_params { /* * Return how many times the device has been opened, this number will * decrement when the device is closed. * * One use for this might be to detect if a consumer or producer is * active and in the process of setting up a stream. However this could * be unreliable if the processes are in the process of closing / crashing. * * Obviously this value will always be at least one i.e. the process * issuing the ioctl opens the device. */ unsigned int opencnt; /* r */ }; /* * @see V4L2_GFX_IOC_PRODUCER */ struct v4l2_gfx_producer_params { /* * If set mark the producer side as open, if not set mark as closed. * For Android we need this because the mediaserver won't close the * driver. */ #define V4L2_GFX_PRODUCER_MASK_OPEN 0x1 unsigned int flags; /* w */ }; struct v4l2_gfx_buf_params { /* * Buffer index. * * On acquire, when the ioctl returns the bufid field will be filled in * with the next buffer with data available. * * On release, the consumer process just specifies the buffer to release * which usually is the last acquired buffer index. */ int bufid; /* r/w */ /* * Cropping information * For the acquire ioctl only */ int crop_top; /* r */ int crop_left; /* r */ int crop_width; /* r */ int crop_height; /* r */ }; /* * This ioctl should be issued once by the consumer process before starting * any rendering loop. It allows the process to wait for the producer process * to become ready. * * @see struct v4l2_gfx_consumer_params * * Return value: * Returns 0 if successful, or -1 on error, in which case errno indicates * the error. */ #define V4L2_GFX_IOC_CONSUMER _IOWR ('v', BASE_VIDIOCPRIVATE+0, \ struct v4l2_gfx_consumer_params) /* * Acquire the buffer to be rendered and its properties. * * @see struct v4l2_gfx_buf_params * * Return value: * Returns 0 if successful, or -1 on error, in which case errno indicates * the error. * * ETIMEDOUT If acquire_timeout_ms is set via V4L2_GFX_IOC_CONSUMER * this error code can be returned. * ENODEV If the producer side of the stream stops this error will * be returned. */ #define V4L2_GFX_IOC_ACQ _IOR ('v', BASE_VIDIOCPRIVATE+1, \ struct v4l2_gfx_buf_params) /* * Release the buffer that was rendered * * @see struct v4l2_gfx_buf_params * * Return value: * Returns 0 if successful, or -1 on error, in which case errno indicates * the error. * * ETIMEDOUT It took longer than 16ms for the app to render the frame * (This will probably go away to avoid render loop stalls) * EINVAL Attempted to release an invalid buffer index. */ #define V4L2_GFX_IOC_REL _IOW ('v', BASE_VIDIOCPRIVATE+2, \ struct v4l2_gfx_buf_params) /* * Ioctl used to get information about the device * * @see struct v4l2_gfx_info_params * * Return value: * Returns 0 if successful, or -1 on error, in which case errno indicates * the error. */ #define V4L2_GFX_IOC_INFO _IOWR ('v', BASE_VIDIOCPRIVATE+3, \ struct v4l2_gfx_info_params) /* * Ioctl used to set producer params * * @see struct v4l2_gfx_producer_params * * Return value: * Returns 0 if successful, or -1 on error, in which case errno indicates * the error. */ #define V4L2_GFX_IOC_PRODUCER _IOWR ('v', BASE_VIDIOCPRIVATE+4, \ struct v4l2_gfx_producer_params) #endif // _OMAP_V4L2_GFX_H_