/* SPDX-License-Identifier: GPL-2.0 */
/*
* Imagination E5010 JPEG Encoder driver.
*
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
*
* Author: David Huang <d-huang@ti.com>
* Author: Devarsh Thakkar <devarsht@ti.com>
*/
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fh.h>
#ifndef _E5010_JPEG_ENC_H
#define _E5010_JPEG_ENC_H
#define MAX_PLANES
2
#define HEADER_SIZE
0 x025D
#define MIN_DIMENSION
64
#define MAX_DIMENSION
8192
#define DEFAULT_WIDTH
640
#define DEFAULT_HEIGHT
480
#define E5010_MODULE_NAME
"e5010"
#define JPEG_MAX_BYTES_PER_PIXEL
2
/* JPEG marker definitions */
#define START_OF_IMAGE
0 xFFD8
#define SOF_BASELINE_DCT
0 xFFC0
#define END_OF_IMAGE
0 xFFD9
#define START_OF_SCAN
0 xFFDA
/* Definitions for the huffman table specification in the Marker segment */
#define DHT_MARKER
0 xFFC4
#define LH_DC
0 x001F
#define LH_AC
0 x00B5
/* Definitions for the quantization table specification in the Marker segment */
#define DQT_MARKER
0 xFFDB
#define ACMAX
0 x03FF
#define DCMAX
0 x07FF
/* Length and precision of the quantization table parameters */
#define LQPQ
0 x00430
#define QMAX
255
/* Misc JPEG header definitions */
#define UC_NUM_COMP
3
#define PRECISION
8
#define HORZ_SAMPLING_FACTOR (
2 <<
4 )
#define VERT_SAMPLING_FACTOR_422
1
#define VERT_SAMPLING_FACTOR_420
2
#define COMPONENTS_IN_SCAN
3
#define PELS_IN_BLOCK
64
/* Used for Qp table generation */
#define LUMINOSITY
10
#define CONTRAST
1
#define INCREASE
2
#define QP_TABLE_SIZE (
8 *
8 )
#define QP_TABLE_FIELD_OFFSET
0 x04
/*
* vb2 queue structure
* contains queue data information
*
* @fmt: format info
* @width: frame width
* @height: frame height
* @bytesperline: bytes per line in memory
* @size_image: image size in memory
*/
struct e5010_q_data {
struct e5010_fmt *fmt;
u32 width;
u32 height;
u32 width_adjusted;
u32 height_adjusted;
u32 sizeimage[MAX_PLANES];
u32 bytesperline[MAX_PLANES];
u32 sequence;
struct v4l2_rect crop;
bool crop_set;
};
/*
* Driver device structure
* Holds all memory handles and global parameters
* Shared by all instances
*/
struct e5010_dev {
struct device *dev;
struct v4l2_device v4l2_dev;
struct v4l2_m2m_dev *m2m_dev;
struct video_device *vdev;
void __iomem *core_base;
void __iomem *mmu_base;
struct clk *clk;
struct e5010_context *last_context_run;
/* Protect access to device data */
struct mutex mutex;
/* Protect access to hardware*/
spinlock_t hw_lock;
};
/*
* Driver context structure
* One of these exists for every m2m context
* Holds context specific data
*/
struct e5010_context {
struct v4l2_fh fh;
struct e5010_dev *e5010;
struct e5010_q_data out_queue;
struct e5010_q_data cap_queue;
int quality;
bool update_qp;
struct v4l2_ctrl_handler ctrl_handler;
u8 luma_qp[QP_TABLE_SIZE];
u8 chroma_qp[QP_TABLE_SIZE];
};
/*
* Buffer structure
* Contains info for all buffers
*/
struct e5010_buffer {
struct v4l2_m2m_buffer buffer;
};
enum {
CHROMA_ORDER_CB_CR =
0 ,
//UV ordering
CHROMA_ORDER_CR_CB =
1 ,
//VU ordering
};
enum {
SUBSAMPLING_420 =
1 ,
SUBSAMPLING_422 =
2 ,
};
/*
* e5010 format structure
* contains format information
*/
struct e5010_fmt {
u32 fourcc;
unsigned int num_planes;
unsigned int type;
u32 subsampling;
u32 chroma_order;
const struct v4l2_frmsize_stepwise frmsize;
};
/*
* struct e5010_ctrl - contains info for each supported v4l2 control
*/
struct e5010_ctrl {
unsigned int cid;
enum v4l2_ctrl_type type;
unsigned char name[
32 ];
int minimum;
int maximum;
int step;
int default_value;
unsigned char compound;
};
#endif
Messung V0.5 in Prozent C=95 H=98 G=96
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland