1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* Copyright (c) 2006-2024, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2024-5-1 GuEe-GUI first version
*/
#ifndef __JPU_H__
#define __JPU_H__
#include <stdint.h>
#include <sys/ioctl.h>
#define JPU_NAME "jpu"
#define JPU_BUFFER_MAX_SIZE (32U * 1024U * 1024U)
#define JPU_STREAM_PADDING 1024U
#define JPU_HUFF_TABLE_NUM 4
#define JPU_HUFF_BITS_NUM 16
#define JPU_HUFF_VALUES_NUM 162
#define JPU_QUANT_COMPONENT_NUM 3
#define JPU_QUANT_VALUES_NUM 64
enum jpu_format
{
JPU_FORMAT_420 = 0,
JPU_FORMAT_422,
JPU_FORMAT_440,
JPU_FORMAT_444,
JPU_FORMAT_400,
};
struct jpu_dec_tables
{
uint8_t huff_bits[JPU_HUFF_TABLE_NUM][JPU_HUFF_BITS_NUM];
uint8_t huff_values[JPU_HUFF_TABLE_NUM][JPU_HUFF_VALUES_NUM];
uint16_t quant[JPU_QUANT_COMPONENT_NUM][JPU_QUANT_VALUES_NUM];
};
struct jpu_buffer
{
uint32_t size;
uint64_t phys_addr;
void *virt_addr;
};
/*
* width, height and format are inputs. The remaining fields are returned by
* JPU_QUERY_FRAME and describe the decoder's planar output buffer.
*/
struct jpu_frame_info
{
uint16_t width;
uint16_t height;
uint8_t format;
uint8_t reserved[3];
uint16_t aligned_width;
uint16_t aligned_height;
uint16_t y_stride;
uint16_t c_stride;
uint16_t c_height;
uint16_t reserved2;
uint32_t size;
};
struct jpu_decode_request
{
struct jpu_frame_info frame;
struct jpu_dec_tables tables;
uint64_t stream_phys;
uint64_t frame_phys;
uint32_t stream_size;
uint32_t stream_capacity;
uint32_t frame_capacity;
uint32_t entropy_offset;
uint16_t restart_interval;
uint8_t components;
uint8_t dc_selector[3];
uint8_t ac_selector[3];
uint32_t irq_status;
uint32_t picture_status;
uint32_t error_mcu;
uint32_t cycles;
};
#define JPU_IOC_MAGIC 'J'
#define JPU_DECODE _IOWR(JPU_IOC_MAGIC, 0, struct jpu_decode_request)
#define JPU_QUERY_FRAME _IOWR(JPU_IOC_MAGIC, 1, struct jpu_frame_info)
#define JPU_ALLOC_BUFFER _IOWR(JPU_IOC_MAGIC, 2, struct jpu_buffer)
#define JPU_FREE_BUFFER _IOW(JPU_IOC_MAGIC, 3, struct jpu_buffer)
#define JPU_RESET _IO(JPU_IOC_MAGIC, 5)
#define JPU_GET_MMU_VERSION _IOR(JPU_IOC_MAGIC, 7, uint32_t)
#endif /* __JPU_H__ */
|