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


Quelle  mxc-jpeg.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * i.MX8QXP/i.MX8QM JPEG encoder/decoder v4l2 driver
 *
 * Copyright 2018-2019 NXP
 */


#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fh.h>

#ifndef _MXC_JPEG_CORE_H
#define _MXC_JPEG_CORE_H

#define MXC_JPEG_NAME   "mxc-jpeg"
#define MXC_JPEG_FMT_TYPE_ENC  0
#define MXC_JPEG_FMT_TYPE_RAW  1
#define MXC_JPEG_DEFAULT_WIDTH  1280
#define MXC_JPEG_DEFAULT_HEIGHT  720
#define MXC_JPEG_DEFAULT_PFMT  V4L2_PIX_FMT_BGR24
#define MXC_JPEG_MIN_WIDTH  64
#define MXC_JPEG_MIN_HEIGHT  64
#define MXC_JPEG_MAX_WIDTH  0x2000
#define MXC_JPEG_MAX_HEIGHT  0x2000
#define MXC_JPEG_MAX_LINE  0x8000
#define MXC_JPEG_MAX_CFG_STREAM  0x1000
#define MXC_JPEG_H_ALIGN  3
#define MXC_JPEG_W_ALIGN  3
#define MXC_JPEG_MAX_SIZEIMAGE  0xFFFFFC00
#define MXC_JPEG_MAX_PLANES  2
#define MXC_JPEG_PATTERN_WIDTH  128
#define MXC_JPEG_PATTERN_HEIGHT  64
#define MXC_JPEG_ADDR_ALIGNMENT  16

enum mxc_jpeg_enc_state {
 MXC_JPEG_ENCODING = 0, /* jpeg encode phase */
 MXC_JPEG_ENC_CONF = 1, /* jpeg encoder config phase */
};

enum mxc_jpeg_mode {
 MXC_JPEG_DECODE = 0, /* jpeg decode mode */
 MXC_JPEG_ENCODE = 1, /* jpeg encode mode */
};

/**
 * struct mxc_jpeg_fmt - driver's internal color format data
 * @name: format description
 * @fourcc: fourcc code, 0 if not applicable
 * @subsampling: subsampling of jpeg components
 * @nc: number of color components
 * @depth: number of bits per pixel
 * @mem_planes: number of memory planes (1 for packed formats)
 * @comp_planes:number of component planes, which includes the alpha plane (1 to 4).
 * @h_align: horizontal alignment order (align to 2^h_align)
 * @v_align: vertical alignment order (align to 2^v_align)
 * @flags: flags describing format applicability
 * @precision:  jpeg sample precision
 * @is_rgb:     is an RGB pixel format
 */

struct mxc_jpeg_fmt {
 const char    *name;
 u32     fourcc;
 enum v4l2_jpeg_chroma_subsampling subsampling;
 int     nc;
 int     depth;
 int     mem_planes;
 int     comp_planes;
 int     h_align;
 int     v_align;
 u32     flags;
 u8     precision;
 u8     is_rgb;
};

struct mxc_jpeg_desc {
 u32 next_descpt_ptr;
 u32 buf_base0;
 u32 buf_base1;
 u32 line_pitch;
 u32 stm_bufbase;
 u32 stm_bufsize;
 u32 imgsize;
 u32 stm_ctrl;
} __packed;

struct mxc_jpeg_q_data {
 const struct mxc_jpeg_fmt *fmt;
 u32    sizeimage[MXC_JPEG_MAX_PLANES];
 u32    bytesperline[MXC_JPEG_MAX_PLANES];
 int    w;
 int    w_adjusted;
 int    h;
 int    h_adjusted;
 unsigned int   sequence;
 struct v4l2_rect  crop;
};

struct mxc_jpeg_ctx {
 struct mxc_jpeg_dev  *mxc_jpeg;
 struct mxc_jpeg_q_data  out_q;
 struct mxc_jpeg_q_data  cap_q;
 struct v4l2_fh   fh;
 enum mxc_jpeg_enc_state  enc_state;
 int    slot;
 unsigned int   source_change;
 bool    need_initial_source_change_evt;
 bool    header_parsed;
 struct v4l2_ctrl_handler ctrl_handler;
 u8    jpeg_quality;
 struct delayed_work  task_timer;
};

struct mxc_jpeg_slot_data {
 int slot;
 bool used;
 struct mxc_jpeg_desc *desc; // enc/dec descriptor
 struct mxc_jpeg_desc *cfg_desc; // configuration descriptor
 void *cfg_stream_vaddr; // configuration bitstream virtual address
 unsigned int cfg_stream_size;
 dma_addr_t desc_handle;
 dma_addr_t cfg_desc_handle; // configuration descriptor dma address
 dma_addr_t cfg_stream_handle; // configuration bitstream dma address
 dma_addr_t cfg_dec_size;
 void *cfg_dec_vaddr;
 dma_addr_t cfg_dec_daddr;
};

struct mxc_jpeg_dev {
 spinlock_t   hw_lock; /* hardware access lock */
 unsigned int   mode;
 struct mutex   lock; /* v4l2 ioctls serialization */
 struct clk_bulk_data  *clks;
 int    num_clks;
 struct platform_device  *pdev;
 struct device   *dev;
 void __iomem   *base_reg;
 struct v4l2_device  v4l2_dev;
 struct v4l2_m2m_dev  *m2m_dev;
 struct video_device  *dec_vdev;
 struct mxc_jpeg_slot_data slot_data;
 int    num_domains;
 struct device   **pd_dev;
 struct device_link  **pd_link;
};

/**
 * struct mxc_jpeg_sof_comp - JPEG Start Of Frame component fields
 * @id: component id
 * @v: vertical sampling
 * @h: horizontal sampling
 * @quantization_table_no: id of quantization table
 */

struct mxc_jpeg_sof_comp {
 u8 id;
 u8 v :4;
 u8 h :4;
 u8 quantization_table_no;
} __packed;

#define MXC_JPEG_MAX_COMPONENTS 4
/**
 * struct mxc_jpeg_sof - JPEG Start Of Frame marker fields
 * @length: Start of Frame length
 * @precision: precision (bits per pixel per color component)
 * @height: image height
 * @width: image width
 * @components_no: number of color components
 * @comp: component fields for each color component
 */

struct mxc_jpeg_sof {
 u16 length;
 u8 precision;
 u16 height, width;
 u8 components_no;
 struct mxc_jpeg_sof_comp comp[MXC_JPEG_MAX_COMPONENTS];
} __packed;

/**
 * struct mxc_jpeg_sos_comp - JPEG Start Of Scan component fields
 * @id: component id
 * @huffman_table_no: id of the Huffman table
 */

struct mxc_jpeg_sos_comp {
 u8 id; /*component id*/
 u8 huffman_table_no;
} __packed;

/**
 * struct mxc_jpeg_sos - JPEG Start Of Scan marker fields
 * @length: Start of Frame length
 * @components_no: number of color components
 * @comp: SOS component fields for each color component
 * @ignorable_bytes: ignorable bytes
 */

struct mxc_jpeg_sos {
 u16 length;
 u8 components_no;
 struct mxc_jpeg_sos_comp comp[MXC_JPEG_MAX_COMPONENTS];
 u8 ignorable_bytes[3];
} __packed;

#endif

Messung V0.5
C=92 H=100 G=95

¤ Dauer der Verarbeitung: 0.1 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