summaryrefslogtreecommitdiff
path: root/drivers/amvdec_ports/utils/common.c (plain)
blob: aa5c71b4ee65797d7d01235f4dfa232f8358fc72
1#include <linux/kernel.h>
2#include <linux/types.h>
3#include <linux/vmalloc.h>
4#include <linux/mm.h>
5#include <linux/string.h>
6
7#include "common.h"
8#include "pixfmt.h"
9
10const u8 ff_zigzag_direct[64] = {
11 0, 1, 8, 16, 9, 2, 3, 10,
12 17, 24, 32, 25, 18, 11, 4, 5,
13 12, 19, 26, 33, 40, 48, 41, 34,
14 27, 20, 13, 6, 7, 14, 21, 28,
15 35, 42, 49, 56, 57, 50, 43, 36,
16 29, 22, 15, 23, 30, 37, 44, 51,
17 58, 59, 52, 45, 38, 31, 39, 46,
18 53, 60, 61, 54, 47, 55, 62, 63
19};
20
21const u8 ff_zigzag_scan[16 + 1] = {
22 0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4,
23 1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4,
24 1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4,
25 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4,
26};
27
28const char * const color_space_names[] = {
29 [AVCOL_SPC_RGB] = "gbr",
30 [AVCOL_SPC_BT709] = "bt709",
31 [AVCOL_SPC_UNSPECIFIED] = "unknown",
32 [AVCOL_SPC_RESERVED] = "reserved",
33 [AVCOL_SPC_FCC] = "fcc",
34 [AVCOL_SPC_BT470BG] = "bt470bg",
35 [AVCOL_SPC_SMPTE170M] = "smpte170m",
36 [AVCOL_SPC_SMPTE240M] = "smpte240m",
37 [AVCOL_SPC_YCGCO] = "ycgco",
38 [AVCOL_SPC_BT2020_NCL] = "bt2020nc",
39 [AVCOL_SPC_BT2020_CL] = "bt2020c",
40 [AVCOL_SPC_SMPTE2085] = "smpte2085",
41 [AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc",
42 [AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c",
43 [AVCOL_SPC_ICTCP] = "ictcp",
44};
45
46const char *av_color_space_name(enum AVColorSpace space)
47{
48 return (unsigned) space < AVCOL_SPC_NB ?
49 color_space_names[space] : NULL;
50}
51
52const char * const color_primaries_names[AVCOL_PRI_NB] = {
53 [AVCOL_PRI_RESERVED0] = "reserved",
54 [AVCOL_PRI_BT709] = "bt709",
55 [AVCOL_PRI_UNSPECIFIED] = "unknown",
56 [AVCOL_PRI_RESERVED] = "reserved",
57 [AVCOL_PRI_BT470M] = "bt470m",
58 [AVCOL_PRI_BT470BG] = "bt470bg",
59 [AVCOL_PRI_SMPTE170M] = "smpte170m",
60 [AVCOL_PRI_SMPTE240M] = "smpte240m",
61 [AVCOL_PRI_FILM] = "film",
62 [AVCOL_PRI_BT2020] = "bt2020",
63 [AVCOL_PRI_SMPTE428] = "smpte428",
64 [AVCOL_PRI_SMPTE431] = "smpte431",
65 [AVCOL_PRI_SMPTE432] = "smpte432",
66 [AVCOL_PRI_JEDEC_P22] = "jedec-p22",
67};
68
69const char *av_color_primaries_name(enum AVColorPrimaries primaries)
70{
71 return (unsigned) primaries < AVCOL_PRI_NB ?
72 color_primaries_names[primaries] : NULL;
73}
74
75const char * const color_transfer_names[] = {
76 [AVCOL_TRC_RESERVED0] = "reserved",
77 [AVCOL_TRC_BT709] = "bt709",
78 [AVCOL_TRC_UNSPECIFIED] = "unknown",
79 [AVCOL_TRC_RESERVED] = "reserved",
80 [AVCOL_TRC_GAMMA22] = "bt470m",
81 [AVCOL_TRC_GAMMA28] = "bt470bg",
82 [AVCOL_TRC_SMPTE170M] = "smpte170m",
83 [AVCOL_TRC_SMPTE240M] = "smpte240m",
84 [AVCOL_TRC_LINEAR] = "linear",
85 [AVCOL_TRC_LOG] = "log100",
86 [AVCOL_TRC_LOG_SQRT] = "log316",
87 [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
88 [AVCOL_TRC_BT1361_ECG] = "bt1361e",
89 [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
90 [AVCOL_TRC_BT2020_10] = "bt2020-10",
91 [AVCOL_TRC_BT2020_12] = "bt2020-12",
92 [AVCOL_TRC_SMPTE2084] = "smpte2084",
93 [AVCOL_TRC_SMPTE428] = "smpte428",
94 [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
95};
96
97const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
98{
99 return (unsigned) transfer < AVCOL_TRC_NB ?
100 color_transfer_names[transfer] : NULL;
101}
102
103//math
104const u8 ff_log2_tab[256]={
105 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
106 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
107 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
108 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
109 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
110 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
111 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
112 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
113};
114
115int av_log2(u32 v)
116{
117 int n = 0;
118
119 if (v & 0xffff0000) {
120 v >>= 16;
121 n += 16;
122 }
123 if (v & 0xff00) {
124 v >>= 8;
125 n += 8;
126 }
127 n += ff_log2_tab[v];
128
129 return n;
130}
131
132//bitstream
133int find_start_code(u8 *data, int data_sz)
134{
135 if (data_sz > 3 && data[0] == 0 && data[1] == 0 && data[2] == 1)
136 return 3;
137
138 if (data_sz > 4 && data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 1)
139 return 4;
140
141 return -1;
142}
143
144int calc_nal_len(u8 *data, int len)
145{
146 int i;
147
148 for (i = 0; i < len - 4; i++) {
149 if (data[i])
150 continue;
151
152 if ((data[i] == 0 && data[i + 1] == 0 && data[i + 2] == 1) ||
153 (data[i] == 0 && data[i + 1] == 0 &&
154 data[i + 2]==0 && data[i + 3] == 1))
155 return i;
156 }
157 return len; //Not find the end of nalu
158}
159
160u8 *nal_unit_extract_rbsp(const u8 *src, u32 src_len, u32 *dst_len)
161{
162 u8 *dst;
163 u32 i, len;
164
165 dst = vmalloc(src_len + AV_INPUT_BUFFER_PADDING_SIZE);
166 if (!dst)
167 return NULL;
168
169 /* NAL unit header (2 bytes) */
170 i = len = 0;
171 while (i < 2 && i < src_len)
172 dst[len++] = src[i++];
173
174 while (i + 2 < src_len)
175 if (!src[i] && !src[i + 1] && src[i + 2] == 3) {
176 dst[len++] = src[i++];
177 dst[len++] = src[i++];
178 i++; // remove emulation_prevention_three_byte
179 } else
180 dst[len++] = src[i++];
181
182 while (i < src_len)
183 dst[len++] = src[i++];
184
185 memset(dst + len, 0, AV_INPUT_BUFFER_PADDING_SIZE);
186
187 *dst_len = len;
188
189 return dst;
190}
191
192//debug
193static void _pr_hex(const char *fmt, ...)
194{
195 u8 buf[512];
196 int len = 0;
197
198 va_list args;
199 va_start(args, fmt);
200 vsnprintf(buf + len, 512 - len, fmt, args);
201 printk("%s", buf);
202 va_end(args);
203}
204
205void print_hex_debug(u8 *data, u32 len, int max)
206{
207 int i, l;
208
209 l = len > max ? max : len;
210
211 for (i = 0; i < l; i++) {
212 if ((i & 0xf) == 0)
213 _pr_hex("%06x:", i);
214 _pr_hex("%02x ", data[i]);
215 if ((((i + 1) & 0xf) == 0) || ((i + 1) == l))
216 _pr_hex("\n");
217 }
218
219 _pr_hex("print hex ending. len %d\n\n", l);
220}
221
222