Skip to content

Commit 9e8ce78

Browse files
committed
Sensor mirror/flip on all SigmaStar platforms, exchaging commands with drivers
1 parent ae7df3d commit 9e8ce78

File tree

8 files changed

+50
-18
lines changed

8 files changed

+50
-18
lines changed

src/hal/star/i6_snr.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ typedef struct {
8888
int (*fnGetResolution)(unsigned int sensor, unsigned char index, i6_snr_res *resolution);
8989
int (*fnGetResolutionCount)(unsigned int sensor, unsigned int *count);
9090
int (*fnSetResolution)(unsigned int sensor, unsigned char index);
91+
92+
int (*fnCustomFunction)(unsigned int sensor, unsigned int command, unsigned int size, void *data, int drvOrUsr);
9193
} i6_snr_impl;
9294

9395
static int i6_snr_load(i6_snr_impl *snr_lib) {
@@ -138,6 +140,10 @@ static int i6_snr_load(i6_snr_impl *snr_lib) {
138140
hal_symbol_load("i6_snr", snr_lib->handle, "MI_SNR_SetRes")))
139141
return EXIT_FAILURE;
140142

143+
if (!(snr_lib->fnCustomFunction = (int(*)(unsigned int sensor, unsigned int command, unsigned int size, void *data, int drvOrUsr))
144+
hal_symbol_load("i6_snr", snr_lib->handle, "MI_SNR_CustFunction")))
145+
return EXIT_FAILURE;
146+
141147
return EXIT_SUCCESS;
142148
}
143149

src/hal/star/i6c_hal.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ int i6c_channel_bind(char index, char framerate)
179179
return EXIT_SUCCESS;
180180
}
181181

182-
int i6c_channel_create(char index, short width, short height, char mirror, char flip, char jpeg)
182+
int i6c_channel_create(char index, short width, short height, char jpeg)
183183
{
184184
i6c_scl_port port;
185185
port.crop.x = 0;
@@ -188,8 +188,8 @@ int i6c_channel_create(char index, short width, short height, char mirror, char
188188
port.crop.height = 0;
189189
port.output.width = width;
190190
port.output.height = height;
191-
port.mirror = mirror;
192-
port.flip = flip;
191+
port.mirror = 0;
192+
port.flip = 0;
193193
port.compress = jpeg ? I6C_COMPR_NONE : I6C_COMPR_IFC;
194194
port.pixFmt = jpeg ? I6C_PIXFMT_YUV422_YUYV : I6C_PIXFMT_YUV420SP;
195195

@@ -225,7 +225,7 @@ int i6c_config_load(char *path)
225225
return i6c_isp.fnLoadChannelConfig(_i6c_isp_dev, _i6c_isp_chn, path, 1234);
226226
}
227227

228-
int i6c_pipeline_create(char sensor, short width, short height, char framerate)
228+
int i6c_pipeline_create(char sensor, short width, short height, char mirror, char flip, char framerate)
229229
{
230230
int ret;
231231

@@ -261,6 +261,9 @@ int i6c_pipeline_create(char sensor, short width, short height, char framerate)
261261
return EXIT_FAILURE;
262262
}
263263

264+
if (ret = i6c_snr.fnSetOrientation(_i6c_snr_index, mirror, flip))
265+
return ret;
266+
264267
if (ret = i6c_snr.fnGetPadInfo(_i6c_snr_index, &_i6c_snr_pad))
265268
return ret;
266269
if (ret = i6c_snr.fnGetPlaneInfo(_i6c_snr_index, 0, &_i6c_snr_plane))

src/hal/star/i6c_hal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ int i6c_audio_init(int samplerate, int gain);
2828
void *i6c_audio_thread(void);
2929

3030
int i6c_channel_bind(char index, char framerate);
31-
int i6c_channel_create(char index, short width, short height, char mirror, char flip, char jpeg);
31+
int i6c_channel_create(char index, short width, short height, char jpeg);
3232
int i6c_channel_grayscale(char enable);
3333
int i6c_channel_unbind(char index);
3434

3535
int i6c_config_load(char *path);
3636

37-
int i6c_pipeline_create(char sensor, short width, short height, char framerate);
37+
int i6c_pipeline_create(char sensor, short width, short height, char mirror, char flip, char framerate);
3838
void i6c_pipeline_destroy(void);
3939

4040
int i6c_region_create(char handle, hal_rect rect, short opacity);

src/hal/star/i6c_snr.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ typedef struct {
8787
int (*fnEnable)(unsigned int sensor);
8888

8989
int (*fnSetFramerate)(unsigned int sensor, unsigned int framerate);
90+
int (*fnSetOrientation)(unsigned int sensor, unsigned char mirror, unsigned char flip);
9091

9192
int (*fnGetPadInfo)(unsigned int sensor, i6c_snr_pad *info);
9293
int (*fnGetPlaneInfo)(unsigned int sensor, unsigned int index, i6c_snr_plane *info);
@@ -96,6 +97,8 @@ typedef struct {
9697
int (*fnGetResolution)(unsigned int sensor, unsigned char index, i6c_snr_res *resolution);
9798
int (*fnGetResolutionCount)(unsigned int sensor, unsigned int *count);
9899
int (*fnSetResolution)(unsigned int sensor, unsigned char index);
100+
101+
int (*fnCustomFunction)(unsigned int sensor, unsigned int command, unsigned int size, void *data, int drvOrUsr);
99102
} i6c_snr_impl;
100103

101104
static int i6c_snr_load(i6c_snr_impl *snr_lib) {
@@ -114,6 +117,10 @@ static int i6c_snr_load(i6c_snr_impl *snr_lib) {
114117
hal_symbol_load("i6c_snr", snr_lib->handle, "MI_SNR_SetFps")))
115118
return EXIT_FAILURE;
116119

120+
if (!(snr_lib->fnSetOrientation = (int(*)(unsigned int sensor, unsigned char mirror, unsigned char flip))
121+
hal_symbol_load("i6c_snr", snr_lib->handle, "MI_SNR_SetOrien")))
122+
return EXIT_FAILURE;
123+
117124
if (!(snr_lib->fnGetPadInfo = (int(*)(unsigned int sensor, i6c_snr_pad *info))
118125
hal_symbol_load("i6c_snr", snr_lib->handle, "MI_SNR_GetPadInfo")))
119126
return EXIT_FAILURE;
@@ -142,6 +149,10 @@ static int i6c_snr_load(i6c_snr_impl *snr_lib) {
142149
hal_symbol_load("i6c_snr", snr_lib->handle, "MI_SNR_SetRes")))
143150
return EXIT_FAILURE;
144151

152+
if (!(snr_lib->fnCustomFunction = (int(*)(unsigned int sensor, unsigned int command, unsigned int size, void *data, int drvOrUsr))
153+
hal_symbol_load("i6c_snr", snr_lib->handle, "MI_SNR_CustFunction")))
154+
return EXIT_FAILURE;
155+
145156
return EXIT_SUCCESS;
146157
}
147158

src/hal/star/m6_hal.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ int m6_channel_bind(char index, char framerate)
172172
return EXIT_SUCCESS;
173173
}
174174

175-
int m6_channel_create(char index, short width, short height, char mirror, char flip, char jpeg)
175+
int m6_channel_create(char index, short width, short height, char jpeg)
176176
{
177177
m6_scl_port port;
178178
port.crop.x = 0;
@@ -181,8 +181,8 @@ int m6_channel_create(char index, short width, short height, char mirror, char f
181181
port.crop.height = 0;
182182
port.output.width = width;
183183
port.output.height = height;
184-
port.mirror = mirror;
185-
port.flip = flip;
184+
port.mirror = 0;
185+
port.flip = 0;
186186
port.compress = M6_COMPR_NONE;
187187
port.pixFmt = jpeg ? M6_PIXFMT_YUV422_YUYV : M6_PIXFMT_YUV420SP;
188188

@@ -218,7 +218,7 @@ int m6_config_load(char *path)
218218
return m6_isp.fnLoadChannelConfig(_m6_isp_dev, _m6_isp_chn, path, 1234);
219219
}
220220

221-
int m6_pipeline_create(char sensor, short width, short height, char framerate)
221+
int m6_pipeline_create(char sensor, short width, short height, char mirror, char flip, char framerate)
222222
{
223223
int ret;
224224

@@ -254,6 +254,9 @@ int m6_pipeline_create(char sensor, short width, short height, char framerate)
254254
return EXIT_FAILURE;
255255
}
256256

257+
if (ret = m6_snr.fnSetOrientation(_m6_snr_index, mirror, flip))
258+
return ret;
259+
257260
if (ret = m6_snr.fnGetPadInfo(_m6_snr_index, &_m6_snr_pad))
258261
return ret;
259262
if (ret = m6_snr.fnGetPlaneInfo(_m6_snr_index, 0, &_m6_snr_plane))

src/hal/star/m6_hal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ int m6_audio_init(int samplerate, int gain);
2626
void *m6_audio_thread(void);
2727

2828
int m6_channel_bind(char index, char framerate);
29-
int m6_channel_create(char index, short width, short height, char mirror, char flip, char jpeg);
29+
int m6_channel_create(char index, short width, short height, char jpeg);
3030
int m6_channel_grayscale(char enable);
3131
int m6_channel_unbind(char index);
3232

3333
int m6_config_load(char *path);
3434

35-
int m6_pipeline_create(char sensor, short width, short height, char framerate);
35+
int m6_pipeline_create(char sensor, short width, short height, char mirror, char flip, char framerate);
3636
void m6_pipeline_destroy(void);
3737

3838
int m6_region_create(char handle, hal_rect rect, short opacity);

src/hal/star/m6_snr.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ typedef struct {
8787
int (*fnEnable)(unsigned int sensor);
8888

8989
int (*fnSetFramerate)(unsigned int sensor, unsigned int framerate);
90+
int (*fnSetOrientation)(unsigned int sensor, unsigned char mirror, unsigned char flip);
9091

9192
int (*fnGetPadInfo)(unsigned int sensor, m6_snr_pad *info);
9293
int (*fnGetPlaneInfo)(unsigned int sensor, unsigned int index, m6_snr_plane *info);
@@ -96,6 +97,8 @@ typedef struct {
9697
int (*fnGetResolution)(unsigned int sensor, unsigned char index, m6_snr_res *resolution);
9798
int (*fnGetResolutionCount)(unsigned int sensor, unsigned int *count);
9899
int (*fnSetResolution)(unsigned int sensor, unsigned char index);
100+
101+
int (*fnCustomFunction)(unsigned int sensor, unsigned int command, unsigned int size, void *data, int drvOrUsr);
99102
} m6_snr_impl;
100103

101104
static int m6_snr_load(m6_snr_impl *snr_lib) {
@@ -114,6 +117,10 @@ static int m6_snr_load(m6_snr_impl *snr_lib) {
114117
hal_symbol_load("m6_snr", snr_lib->handle, "MI_SNR_SetFps")))
115118
return EXIT_FAILURE;
116119

120+
if (!(snr_lib->fnSetOrientation = (int(*)(unsigned int sensor, unsigned char mirror, unsigned char flip))
121+
hal_symbol_load("m6_snr", snr_lib->handle, "MI_SNR_SetOrien")))
122+
return EXIT_FAILURE;
123+
117124
if (!(snr_lib->fnGetPadInfo = (int(*)(unsigned int sensor, m6_snr_pad *info))
118125
hal_symbol_load("m6_snr", snr_lib->handle, "MI_SNR_GetPadInfo")))
119126
return EXIT_FAILURE;
@@ -142,6 +149,10 @@ static int m6_snr_load(m6_snr_impl *snr_lib) {
142149
hal_symbol_load("m6_snr", snr_lib->handle, "MI_SNR_SetRes")))
143150
return EXIT_FAILURE;
144151

152+
if (!(snr_lib->fnCustomFunction = (int(*)(unsigned int sensor, unsigned int command, unsigned int size, void *data, int drvOrUsr))
153+
hal_symbol_load("m6_snr", snr_lib->handle, "MI_SNR_CustFunction")))
154+
return EXIT_FAILURE;
155+
145156
return EXIT_SUCCESS;
146157
}
147158

src/media.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,8 @@ int create_channel(char index, short width, short height, char framerate, char j
276276
switch (plat) {
277277
#if defined(__ARM_PCS_VFP)
278278
case HAL_PLATFORM_I6: return i6_channel_create(index, width, height, jpeg);
279-
case HAL_PLATFORM_I6C: return i6c_channel_create(index, width, height,
280-
app_config.mirror, app_config.flip, jpeg);
281-
case HAL_PLATFORM_M6: return m6_channel_create(index, width, height,
282-
app_config.mirror, app_config.flip, jpeg);
279+
case HAL_PLATFORM_I6C: return i6c_channel_create(index, width, height, jpeg);
280+
case HAL_PLATFORM_M6: return m6_channel_create(index, width, height, jpeg);
283281
case HAL_PLATFORM_RK: return rk_channel_create(index, width, height,
284282
app_config.mirror, app_config.flip);
285283
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
@@ -748,9 +746,9 @@ int start_sdk(void) {
748746
case HAL_PLATFORM_I6: ret = i6_pipeline_create(0, width,
749747
height, app_config.mirror, app_config.flip, framerate); break;
750748
case HAL_PLATFORM_I6C: ret = i6c_pipeline_create(0, width,
751-
height, framerate); break;
749+
height, app_config.mirror, app_config.flip, framerate); break;
752750
case HAL_PLATFORM_M6: ret = m6_pipeline_create(0, width,
753-
height, framerate); break;
751+
height, app_config.mirror, app_config.flip, framerate); break;
754752
case HAL_PLATFORM_RK: ret = rk_pipeline_create(width, height); break;
755753
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
756754
case HAL_PLATFORM_AK: ret = ak_pipeline_create(app_config.mirror,

0 commit comments

Comments
 (0)