gstreamer/subprojects/gst-plugins-bad/sys/uvcgadget/configfs.h
Michael Grzeschik 6ef14df09b uvcsink: configfs.{c,h}: add helper function to parse by videodev
- add helper function video_find_config_name
- add helper function configfs_parse_uvc_videodev

With these helper functions it is possible to parse the
configfs entry corresponding to the used videodev.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1304>
2023-06-01 19:19:05 +00:00

120 lines
3 KiB
C

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* ConfigFS Gadget device handling
*
* Copyright (C) 2018 Kieran Bingham
*
* Contact: Kieran Bingham <kieran.bingham@ideasonboard.com>
*/
#ifndef __CONFIGFS_H__
#define __CONFIGFS_H__
#include <stdint.h>
/*
* struct uvc_function_config_endpoint - Endpoint parameters
* @bInterval: Transfer interval (interrupt and isochronous only)
* @bMaxBurst: Transfer burst size (super-speed only)
* @wMaxPacketSize: Maximum packet size (including the multiplier)
*/
struct uvc_function_config_endpoint
{
unsigned int bInterval;
unsigned int bMaxBurst;
unsigned int wMaxPacketSize;
};
/*
* struct uvc_function_config_interface - Interface parameters
* @bInterfaceNumber: Interface number
*/
struct uvc_function_config_interface
{
unsigned int bInterfaceNumber;
};
/*
* struct uvc_function_config_control - Control interface parameters
* @intf: Generic interface parameters
*/
struct uvc_function_config_control
{
struct uvc_function_config_interface intf;
};
/*
* struct uvc_function_config_frame - Streaming frame parameters
* @index: Frame index in the UVC descriptors
* @width: Frame width in pixels
* @height: Frame height in pixels
* @num_intervals: Number of entries in the intervals array
* @intervals: Array of frame intervals
*/
struct uvc_function_config_frame
{
unsigned int index;
unsigned int width;
unsigned int height;
unsigned int num_intervals;
unsigned int *intervals;
unsigned int maxvideofbsize;
};
/*
* struct uvc_function_config_format - Streaming format parameters
* @index: Format index in the UVC descriptors
* @guid: Format GUID
* @fcc: V4L2 pixel format
* @num_frames: Number of entries in the frames array
* @frames: Array of frame descriptors
*/
struct uvc_function_config_format
{
unsigned int index;
uint8_t guid[16];
unsigned int fcc;
unsigned int num_frames;
struct uvc_function_config_frame *frames;
};
/*
* struct uvc_function_config_streaming - Streaming interface parameters
* @intf: Generic interface parameters
* @ep: Endpoint parameters
* @num_formats: Number of entries in the formats array
* @formats: Array of format descriptors
*/
struct uvc_function_config_streaming
{
struct uvc_function_config_interface intf;
struct uvc_function_config_endpoint ep;
unsigned int num_formats;
struct uvc_function_config_format *formats;
};
/*
* struct uvc_function_config - UVC function configuration parameters
* @video: Full path to the video device node
* @udc: UDC name
* @control: Control interface configuration
* @streaming: Streaming interface configuration
*/
struct uvc_function_config
{
char *video;
char *udc;
struct uvc_function_config_control control;
struct uvc_function_config_streaming streaming;
};
struct uvc_function_config *configfs_parse_uvc_function (const char *function);
void configfs_free_uvc_function (struct uvc_function_config *fc);
struct uvc_function_config *configfs_parse_uvc_videodev (int fd,
const char *video);
#endif