Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  uvc_configfs.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * uvc_configfs.h
 *
 * Configfs support for the uvc function.
 *
 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
 * http://www.samsung.com
 *
 * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
 */

#ifndef UVC_CONFIGFS_H
#define UVC_CONFIGFS_H

#include <linux/configfs.h>

#include "u_uvc.h"

static inline struct f_uvc_opts *to_f_uvc_opts(struct config_item *item)
{
 return container_of(to_config_group(item), struct f_uvc_opts,
       func_inst.group);
}

#define UVCG_STREAMING_CONTROL_SIZE 1

DECLARE_UVC_HEADER_DESCRIPTOR(1);

struct uvcg_control_header {
 struct config_item  item;
 struct UVC_HEADER_DESCRIPTOR(1) desc;
 unsigned   linked;
};

static inline struct uvcg_control_header *to_uvcg_control_header(struct config_item *item)
{
 return container_of(item, struct uvcg_control_header, item);
}

struct uvcg_color_matching {
 struct config_group group;
 struct uvc_color_matching_descriptor desc;
 unsigned int refcnt;
};

#define to_uvcg_color_matching(group_ptr) \
container_of(group_ptr, struct uvcg_color_matching, group)

enum uvcg_format_type {
 UVCG_UNCOMPRESSED = 0,
 UVCG_MJPEG,
 UVCG_FRAMEBASED,
};

struct uvcg_format {
 struct config_group  group;
 enum uvcg_format_type  type;
 unsigned   linked;
 struct list_head  frames;
 unsigned   num_frames;
 __u8    bmaControls[UVCG_STREAMING_CONTROL_SIZE];
 struct uvcg_color_matching *color_matching;
};

struct uvcg_format_ptr {
 struct uvcg_format *fmt;
 struct list_head entry;
};

static inline struct uvcg_format *to_uvcg_format(struct config_item *item)
{
 return container_of(to_config_group(item), struct uvcg_format, group);
}

struct uvcg_streaming_header {
 struct config_item    item;
 unsigned     linked;
 struct list_head    formats;
 unsigned     num_fmt;

 /* Must be last --ends in a flexible-array member. */
 struct uvc_input_header_descriptor  desc;
};

static inline struct uvcg_streaming_header *to_uvcg_streaming_header(struct config_item *item)
{
 return container_of(item, struct uvcg_streaming_header, item);
}

struct uvcg_frame_ptr {
 struct uvcg_frame *frm;
 struct list_head entry;
};

struct uvcg_frame {
 struct config_item item;
 enum uvcg_format_type fmt_type;
 struct {
  u8 b_length;
  u8 b_descriptor_type;
  u8 b_descriptor_subtype;
  u8 b_frame_index;
  u8 bm_capabilities;
  u16 w_width;
  u16 w_height;
  u32 dw_min_bit_rate;
  u32 dw_max_bit_rate;
  u32 dw_max_video_frame_buffer_size;
  u32 dw_default_frame_interval;
  u8 b_frame_interval_type;
  u32     dw_bytes_perline;
 } __attribute__((packed)) frame;
 u32 *dw_frame_interval;
};

static inline struct uvcg_frame *to_uvcg_frame(struct config_item *item)
{
 return container_of(item, struct uvcg_frame, item);
}

/* -----------------------------------------------------------------------------
 * streaming/uncompressed/<NAME>
 */


struct uvcg_uncompressed {
 struct uvcg_format  fmt;
 struct uvc_format_uncompressed desc;
};

static inline struct uvcg_uncompressed *to_uvcg_uncompressed(struct config_item *item)
{
 return container_of(to_uvcg_format(item), struct uvcg_uncompressed, fmt);
}

/* -----------------------------------------------------------------------------
 * streaming/mjpeg/<NAME>
 */


struct uvcg_mjpeg {
 struct uvcg_format  fmt;
 struct uvc_format_mjpeg  desc;
};

static inline struct uvcg_mjpeg *to_uvcg_mjpeg(struct config_item *item)
{
 return container_of(to_uvcg_format(item), struct uvcg_mjpeg, fmt);
}

/* -----------------------------------------------------------------------------
 * streaming/framebased/<NAME>
 */


struct uvcg_framebased {
 struct uvcg_format              fmt;
 struct uvc_format_framebased    desc;
};

static inline struct uvcg_framebased *to_uvcg_framebased(struct config_item *item)
{
 return container_of(to_uvcg_format(item), struct uvcg_framebased, fmt);
}

/* -----------------------------------------------------------------------------
 * control/extensions/<NAME>
 */


struct uvcg_extension_unit_descriptor {
 u8 bLength;
 u8 bDescriptorType;
 u8 bDescriptorSubType;
 u8 bUnitID;
 u8 guidExtensionCode[16];
 u8 bNumControls;
 u8 bNrInPins;
 u8 *baSourceID;
 u8 bControlSize;
 u8 *bmControls;
 u8 iExtension;
} __packed;

struct uvcg_extension {
 struct config_item item;
 struct list_head list;
 u8 string_descriptor_index;
 struct uvcg_extension_unit_descriptor desc;
};

static inline struct uvcg_extension *to_uvcg_extension(struct config_item *item)
{
 return container_of(item, struct uvcg_extension, item);
}

int uvcg_attach_configfs(struct f_uvc_opts *opts);

#endif /* UVC_CONFIGFS_H */

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge