Skip to content

Commit 8778a0c

Browse files
committed
ERR_VI_INVALID_PARA (0xA0108003) happening at SetDevAttr, no idea why yet!
1 parent 406436d commit 8778a0c

File tree

8 files changed

+182
-233
lines changed

8 files changed

+182
-233
lines changed

src/hal/hisi/v4_common.h

+1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ typedef enum {
126126
typedef enum {
127127
V4_WDR_NONE,
128128
V4_WDR_BUILTIN,
129+
V4_WDR_QUDRA,
129130
V4_WDR_2TO1_LINE,
130131
V4_WDR_2TO1_FRAME,
131132
V4_WDR_2TO1_FRAME_FULLRATE,

src/hal/hisi/v4_config.h

+47-139
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,6 @@ extern v4_config_impl v4_config;
4343
static enum ConfigError v4_parse_config_lvds(
4444
struct IniConfig *ini, const char *section, v4_snr_lvds *lvds) {
4545
enum ConfigError err;
46-
err = parse_int(
47-
ini, section, "img_size_w", INT_MIN, INT_MAX, &lvds->capt.width);
48-
if (err != CONFIG_OK)
49-
return err;
50-
err = parse_int(
51-
ini, section, "img_size_h", INT_MIN, INT_MAX, &lvds->capt.height);
52-
if (err != CONFIG_OK)
53-
return err;
5446
{
5547
const char *possible_values[] = {
5648
"HI_WDR_MODE_NONE", "HI_WDR_MODE_2F", "HI_WDR_MODE_3F",
@@ -75,8 +67,9 @@ static enum ConfigError v4_parse_config_lvds(
7567
}
7668
{
7769
const char *possible_values[] = {
78-
"RAW_DATA_8BIT", "RAW_DATA_10BIT", "RAW_DATA_12BIT",
79-
"RAW_DATA_14BIT"};
70+
"RAW_DATA_8BIT", "RAW_DATA_10BIT", "RAW_DATA_12BIT",
71+
"RAW_DATA_14BIT", "RAW_DATA_16BIT", "RAW_DATA_YUV420_8BIT_NORMAL",
72+
"RAW_DATA_YUV420_8BIT_LEGACY", "RAW_DATA_YUV422_8BIT"};
8073
const int count = sizeof(possible_values) / sizeof(const char *);
8174
err = parse_enum(
8275
ini, section, "raw_data_type", (void*)&lvds->prec,
@@ -99,34 +92,29 @@ static enum ConfigError v4_parse_config_lvds(
9992
if (err != CONFIG_OK)
10093
return err;
10194
}
102-
err = parse_array(ini, section, "lane_id", lvds->laneId, 8);
103-
if (err != CONFIG_OK)
104-
return err;
105-
err = parse_int(
106-
ini, section, "lvds_lane_num", INT_MIN, INT_MAX, &lvds->laneNum);
107-
if (err != CONFIG_OK)
108-
return err;
109-
err = parse_int(
110-
ini, section, "wdr_vc_num", INT_MIN, INT_MAX, &lvds->wdrVcNum);
111-
if (err != CONFIG_OK)
112-
return err;
113-
err = parse_int(
114-
ini, section, "sync_code_num", INT_MIN, INT_MAX, &lvds->syncCodeNum);
95+
int laneId[4];
96+
err = parse_array(ini, section, "lane_id", laneId, 4);
11597
if (err != CONFIG_OK)
11698
return err;
99+
else for (char i = 0; i < 4; i++)
100+
lvds->laneId[i] = (short)laneId[i];
117101
char syncname[16];
102+
int synccode[128];
118103
for (int i = 0; i < 8; i++) {
119104
sprintf(syncname, "sync_code_%d", i);
120-
err = parse_array(ini, section, syncname, lvds->syncCode[i], 16);
105+
err = parse_array(ini, section, syncname, synccode + i * 16, 16);
121106
if (err != CONFIG_OK)
122107
return err;
123108
}
109+
for (int j = 0; j < 32; j++)
110+
lvds->syncCode[j] = (unsigned short)synccode[j];
124111
return CONFIG_OK;
125112
}
126113

127114
static enum ConfigError v4_parse_config_videv(
128115
struct IniConfig *ini, const char *section, v4_vi_dev *device) {
129116
enum ConfigError err;
117+
memset(device, 0, sizeof(*device));
130118
{
131119
const char *possible_values[] = {
132120
"VI_MODE_BT656", "VI_MODE_BT656_PACKED_YUV",
@@ -152,37 +140,7 @@ static enum ConfigError v4_parse_config_videv(
152140
ini, section, "work_mod", (void*)&device->work, possible_values,
153141
count, 0);
154142
if (err != CONFIG_OK)
155-
return err;
156-
}
157-
{
158-
const char *possible_values[] = {
159-
"VI_COMBINE_COMPOSITE", "VI_COMBINE_SEPARATE"};
160-
const int count = sizeof(possible_values) / sizeof(const char *);
161-
err = parse_enum(
162-
ini, section, "combine_mode", (void*)&device->separateOn,
163-
possible_values, count, 0);
164-
if (err != CONFIG_OK)
165-
return err;
166-
}
167-
{
168-
const char *possible_values[] = {
169-
"VI_COMP_MODE_SINGLE", "VI_COMP_MODE_DOUBLE"};
170-
const int count = sizeof(possible_values) / sizeof(const char *);
171-
err = parse_enum(
172-
ini, section, "comp_mode", (void*)&device->doubleCompOn,
173-
possible_values, count, 0);
174-
if (err != CONFIG_OK)
175-
return err;
176-
}
177-
{
178-
const char *possible_values[] = {
179-
"VI_CLK_EDGE_SINGLE_UP", "VI_CLK_EDGE_SINGLE_DOWN"};
180-
const int count = sizeof(possible_values) / sizeof(const char *);
181-
err = parse_enum(
182-
ini, section, "clock_edge", (void*)&device->clkDownOn,
183-
possible_values, count, 0);
184-
if (err != CONFIG_OK)
185-
return err;
143+
device->work = V4_VI_WORK_1MULTIPLEX;
186144
}
187145
err = parse_uint32(ini, section, "mask_0", 0, UINT_MAX - 1, &device->cmpntMask[0]);
188146
if (err != CONFIG_OK)
@@ -208,22 +166,15 @@ static enum ConfigError v4_parse_config_videv(
208166
}
209167
{
210168
const char *possible_values[] = {
211-
"VI_DATA_SEQ_VUVU", "VI_DATA_SEQ_UVUV"};
212-
const int count = sizeof(possible_values) / sizeof(const char *);
213-
err = parse_enum(
214-
ini, section, "data_seq", (void*)&device->input, possible_values,
215-
count, 0);
216-
if (err != CONFIG_OK) {
217-
const char *possible_values[] = {
218-
"VI_DATA_SEQ_UYVY", "VI_DATA_SEQ_VYUY",
219-
"VI_DATA_SEQ_YUYV", "VI_DATA_SEQ_YVYU"};
169+
"VI_DATA_SEQ_VUVU", "VI_DATA_SEQ_UVUV",
170+
"VI_DATA_SEQ_UYVY", "VI_DATA_SEQ_VYUY",
171+
"VI_DATA_SEQ_YUYV", "VI_DATA_SEQ_YVYU"};
220172
const int count = sizeof(possible_values) / sizeof(const char *);
221173
err = parse_enum(
222174
ini, section, "data_seq", (void*)&device->input,
223175
possible_values, count, 0);
224176
if (err != CONFIG_OK)
225177
return err;
226-
}
227178
}
228179
{
229180
const char *possible_values[] = {"VI_VSYNC_FIELD", "VI_VSYNC_PULSE"};
@@ -246,7 +197,7 @@ static enum ConfigError v4_parse_config_videv(
246197
}
247198
{
248199
const char *possible_values[] = {
249-
"VI_HSYNC_VALID_SINGNAL", "VI_HSYNC_PULSE"};
200+
"VI_HSYNC_VALID_SIGNAL", "VI_HSYNC_PULSE"};
250201
const int count = sizeof(possible_values) / sizeof(const char *);
251202
err = parse_enum(
252203
ini, section, "hsync", (void*)&device->sync.hsyncPulse, possible_values,
@@ -266,7 +217,7 @@ static enum ConfigError v4_parse_config_videv(
266217
}
267218
{
268219
const char *possible_values[] = {
269-
"VI_VSYNC_NORM_PULSE", "VI_VSYNC_VALID_SINGAL"};
220+
"VI_VSYNC_NORM_PULSE", "VI_VSYNC_VALID_SIGNAL"};
270221
const int count = sizeof(possible_values) / sizeof(const char *);
271222
err = parse_enum(
272223
ini, section, "vsyncvalid", (void*)&device->sync.vsyncValid,
@@ -329,60 +280,26 @@ static enum ConfigError v4_parse_config_videv(
329280
&device->sync.timing.vsyncIntrlBack);
330281
if (err != CONFIG_OK)
331282
return err;
332-
{
333-
const char *possible_values[] = {"BT656_FIXCODE_1", "BT656_FIXCODE_0"};
334-
const int count = sizeof(possible_values) / sizeof(const char *);
335-
parse_enum(
336-
ini, section, "fixcode", (void*)&device->codeZeroOn, possible_values,
337-
count, 0);
338-
if (err != CONFIG_OK)
339-
device->codeZeroOn = 0;
340-
}
341-
{
342-
const char *possible_values[] = {
343-
"BT656_FIELD_POLAR_STD", "BT656_FIELD_POLAR_NSTD"};
344-
const int count = sizeof(possible_values) / sizeof(const char *);
345-
err = parse_enum(
346-
ini, section, "fieldpolar", (void*)&device->polarNstdOn,
347-
possible_values, count, 0);
348-
if (err != CONFIG_OK)
349-
device->polarNstdOn = 0;
350-
}
351-
{
352-
const char *possible_values[] = {
353-
"VI_PATH_BYPASS", "VI_PATH_ISP", "VI_PATH_RAW"};
354-
const int count = sizeof(possible_values) / sizeof(const char *);
355-
err = parse_enum(
356-
ini, section, "datapath", (void*)&device->dataPath,
357-
possible_values, count, 0);
358-
if (err != CONFIG_OK)
359-
device->dataPath = 0;
360-
}
361-
{
362-
const char *possible_values[] = {
363-
"VI_DATA_TYPE_YUV", "VI_DATA_TYPE_RGB"};
364-
const int count = sizeof(possible_values) / sizeof(const char *);
365-
err = parse_enum(
366-
ini, section, "inputdatatype", &device->rgbModeOn,
367-
possible_values, count, 0);
368-
if (err != CONFIG_OK)
369-
device->rgbModeOn = 0;
370-
}
371-
err = parse_int(ini, section, "datarev", 0, INT_MAX, &device->dataRev);
283+
err = parse_int(ini, section, "datarev", 0, INT_MAX, &device->dataRevOn);
372284
if (err != CONFIG_OK)
373285
return err;
374-
err = parse_int(ini, section, "devrect_x", 0, INT_MAX, &device->capt.x);
286+
err = parse_int(ini, section, "devrect_x", 0, INT_MAX, &v4_config.vichn.capt.x);
375287
if (err != CONFIG_OK)
376288
return err;
377-
err = parse_int(ini, section, "devrect_y", 0, INT_MAX, &device->capt.y);
289+
err = parse_int(ini, section, "devrect_y", 0, INT_MAX, &v4_config.vichn.capt.y);
378290
if (err != CONFIG_OK)
379291
return err;
380-
err = parse_int(ini, section, "devrect_w", 0, INT_MAX, &device->capt.width);
292+
err = parse_int(ini, section, "devrect_w", 0, INT_MAX, &v4_config.vichn.capt.width);
381293
if (err != CONFIG_OK)
382294
return err;
383-
err = parse_int(ini, section, "devrect_h", 0, INT_MAX, &device->capt.height);
295+
err = parse_int(ini, section, "devrect_h", 0, INT_MAX, &v4_config.vichn.capt.height);
384296
if (err != CONFIG_OK)
385297
return err;
298+
299+
for (char i = 0; i < 4; i++)
300+
device->adChn[i] = -1;
301+
device->wdrCacheLine = v4_config.vichn.capt.width;
302+
386303
return CONFIG_OK;
387304
}
388305

@@ -393,24 +310,14 @@ static enum ConfigError v4_parse_config_vichn(
393310
if (err != CONFIG_OK)
394311
channel->capt.x = 0;
395312
parse_int(ini, section, "caprect_y", 0, INT_MAX, &channel->capt.y);
396-
if (err != CONFIG_OK)
397-
channel->capt.y = 0;
398313
parse_int(
399314
ini, section, "caprect_width", 0, INT_MAX, &channel->capt.width);
400-
if (err != CONFIG_OK)
401-
channel->capt.width = 0;
402315
parse_int(
403316
ini, section, "caprect_height", 0, INT_MAX, &channel->capt.height);
404-
if (err != CONFIG_OK)
405-
channel->capt.height = 0;
406317
parse_int(
407318
ini, section, "destsize_width", 0, INT_MAX, &channel->dest.width);
408-
if (err != CONFIG_OK)
409-
channel->dest.width = 0;
410319
parse_int(
411320
ini, section, "destsize_height", 0, INT_MAX, &channel->dest.height);
412-
if (err != CONFIG_OK)
413-
channel->dest.height = 0;
414321
{
415322
const char *possible_values[] = {
416323
"VI_CAPSEL_TOP", "VI_CAPSEL_BOTTOM", "VI_CAPSEL_BOTH"};
@@ -490,7 +397,7 @@ static enum ConfigError v4_parse_config_vichn(
490397
}
491398
{
492399
const char *possible_values[] = {
493-
"COMPRESS_MODE_NONE", "COMPRESS_MODE_SEG", "COMPRESS_MODE_SEG128",
400+
"COMPRESS_MODE_NONE", "COMPRESS_MODE_SEG", "COMPRESS_MODE_TILE",
494401
"COMPRESS_MODE_LINE", "COMPRESS_MODE_FRAME"};
495402
const int count = sizeof(possible_values) / sizeof(const char *);
496403
err = parse_enum(
@@ -588,6 +495,7 @@ static enum ConfigError v4_parse_sensor_config(char *path, v4_config_impl *confi
588495
const char *possible_values[] = {
589496
"WDR_MODE_NONE",
590497
"WDR_MODE_BUILT_IN",
498+
"WDR_MODE_QUDRA",
591499
"WDR_MODE_2To1_LINE",
592500
"WDR_MODE_2To1_FRAME",
593501
"WDR_MODE_2To1_FRAME_FULL_RATE",
@@ -602,7 +510,7 @@ static enum ConfigError v4_parse_sensor_config(char *path, v4_config_impl *confi
602510
&ini, "sensor", "mode", (void*)&config->mode, possible_values,
603511
count, 0);
604512
if (err != CONFIG_OK)
605-
goto RET_ERR;
513+
config->mode = V4_WDR_NONE;
606514
}
607515
err = parse_param_value(&ini, "sensor", "dllfile", config->dll_file);
608516
if (err != CONFIG_OK)
@@ -619,19 +527,19 @@ static enum ConfigError v4_parse_sensor_config(char *path, v4_config_impl *confi
619527
&ini, "mode", "input_mode", (void*)&config->input_mode,
620528
possible_values, count, 0);
621529
if (err != CONFIG_OK)
622-
goto RET_ERR;
530+
config->input_mode = V4_SNR_INPUT_MIPI;
623531
}
624532

625533
if (config->input_mode == V4_VI_INTF_MIPI) {
626534
// [mipi]
627535
{
628536
const char *possible_values[] = {
629-
"RAW_DATA_8BIT", "RAW_DATA_10BIT", "RAW_DATA_12BIT",
630-
"RAW_DATA_14BIT", "RAW_DATA_16BIT", "RAW_DATA_YUV420_8BIT_NORMAL",
631-
"RAW_DATA_YUV420_8BIT_LEGACY", "RAW_DATA_YUV422_8BIT"};
537+
"RAW_DATA_8BIT", "RAW_DATA_10BIT", "RAW_DATA_12BIT",
538+
"RAW_DATA_14BIT", "RAW_DATA_16BIT", "RAW_DATA_YUV420_8BIT_NORMAL",
539+
"RAW_DATA_YUV420_8BIT_LEGACY", "RAW_DATA_YUV422_8BIT"};
632540
const int count = sizeof(possible_values) / sizeof(const char *);
633541
err = parse_enum(
634-
&ini, "mipi", "data_type", (void*)&config->mipi.prec,
542+
&ini, "mode", "raw_bitness", (void*)&config->mipi.prec,
635543
possible_values, count, 0);
636544
if (err != CONFIG_OK)
637545
goto RET_ERR;
@@ -651,23 +559,15 @@ static enum ConfigError v4_parse_sensor_config(char *path, v4_config_impl *confi
651559
if (err != CONFIG_OK)
652560
goto RET_ERR;
653561

562+
// [vi_chn]
563+
v4_parse_config_vichn(&ini, "vi_chn", &config->vichn);
564+
654565
// [vi_dev]
655566
err = v4_parse_config_videv(&ini, "vi_dev", &config->videv);
656567
if (err != CONFIG_OK)
657568
goto RET_ERR;
658-
// [vi_chn]
659-
v4_parse_config_vichn(&ini, "vi_chn", &config->vichn);
660569

661570
// Fallbacks for default sensor configuration files
662-
if (!config->vichn.capt.x)
663-
config->vichn.capt.x = config->videv.capt.x;
664-
if (!config->vichn.capt.y)
665-
config->vichn.capt.y = config->videv.capt.y;
666-
if (!config->vichn.capt.width)
667-
config->vichn.capt.width = config->videv.capt.width;
668-
if (!config->vichn.capt.height)
669-
config->vichn.capt.height = config->videv.capt.height;
670-
671571
if (!config->isp.capt.x)
672572
config->isp.capt.x = config->vichn.capt.x;
673573
if (!config->isp.capt.y)
@@ -677,6 +577,14 @@ static enum ConfigError v4_parse_sensor_config(char *path, v4_config_impl *confi
677577
if (!config->isp.capt.height)
678578
config->isp.capt.height = config->vichn.capt.height;
679579

580+
if (!config->isp.size.width)
581+
config->isp.size.width = config->vichn.capt.width;
582+
if (!config->isp.size.height)
583+
config->isp.size.height = config->vichn.capt.height;
584+
585+
if (!config->isp.wdr)
586+
config->isp.wdr = config->mode;
587+
680588
v4_config = *config;
681589
free(ini.str);
682590
return CONFIG_OK;

0 commit comments

Comments
 (0)