32
32
#endif // ESP_IDF_VERSION_MAJOR
33
33
#define ESP_CAMERA_ETS_PRINTF ets_printf
34
34
35
+ #if CONFIG_CAM_TASK_STACK_SIZE
36
+ #define CAM_TASK_STACK CONFIG_CAM_TASK_STACK_SIZE
37
+ #else
38
+ #define CAM_TASK_STACK (2*1024)
39
+ #endif
40
+
35
41
static const char * TAG = "cam_hal" ;
36
42
static cam_obj_t * cam_obj = NULL ;
37
43
@@ -45,7 +51,7 @@ static int cam_verify_jpeg_soi(const uint8_t *inbuf, uint32_t length)
45
51
for (uint32_t i = 0 ; i < length ; i ++ ) {
46
52
sig = * ((uint32_t * )(& inbuf [i ])) & 0xFFFFFF ;
47
53
if (sig == JPEG_SOI_MARKER ) {
48
- ESP_LOGW (TAG , "SOI: %d" , i );
54
+ ESP_LOGW (TAG , "SOI: %d" , ( int ) i );
49
55
return i ;
50
56
}
51
57
}
@@ -117,7 +123,7 @@ static void cam_task(void *arg)
117
123
int frame_pos = 0 ;
118
124
cam_obj -> state = CAM_STATE_IDLE ;
119
125
cam_event_t cam_event = 0 ;
120
-
126
+
121
127
xQueueReset (cam_obj -> event_queue );
122
128
123
129
while (1 ) {
@@ -140,7 +146,7 @@ static void cam_task(void *arg)
140
146
case CAM_STATE_READ_BUF : {
141
147
camera_fb_t * frame_buffer_event = & cam_obj -> frames [frame_pos ].fb ;
142
148
size_t pixels_per_dma = (cam_obj -> dma_half_buffer_size * cam_obj -> fb_bytes_per_pixel ) / (cam_obj -> dma_bytes_per_item * cam_obj -> in_bytes_per_pixel );
143
-
149
+
144
150
if (cam_event == CAM_IN_SUC_EOF_EVENT ) {
145
151
if (!cam_obj -> psram_mode ){
146
152
if (cam_obj -> fb_size < (frame_buffer_event -> len + pixels_per_dma )) {
@@ -150,8 +156,8 @@ static void cam_task(void *arg)
150
156
continue ;
151
157
}
152
158
frame_buffer_event -> len += ll_cam_memcpy (cam_obj ,
153
- & frame_buffer_event -> buf [frame_buffer_event -> len ],
154
- & cam_obj -> dma_buffer [(cnt % cam_obj -> dma_half_buffer_cnt ) * cam_obj -> dma_half_buffer_size ],
159
+ & frame_buffer_event -> buf [frame_buffer_event -> len ],
160
+ & cam_obj -> dma_buffer [(cnt % cam_obj -> dma_half_buffer_cnt ) * cam_obj -> dma_half_buffer_size ],
155
161
cam_obj -> dma_half_buffer_size );
156
162
}
157
163
//Check for JPEG SOI in the first buffer. stop if not found
@@ -173,8 +179,8 @@ static void cam_task(void *arg)
173
179
cnt -- ;
174
180
} else {
175
181
frame_buffer_event -> len += ll_cam_memcpy (cam_obj ,
176
- & frame_buffer_event -> buf [frame_buffer_event -> len ],
177
- & cam_obj -> dma_buffer [(cnt % cam_obj -> dma_half_buffer_cnt ) * cam_obj -> dma_half_buffer_size ],
182
+ & frame_buffer_event -> buf [frame_buffer_event -> len ],
183
+ & cam_obj -> dma_buffer [(cnt % cam_obj -> dma_half_buffer_cnt ) * cam_obj -> dma_half_buffer_size ],
178
184
cam_obj -> dma_half_buffer_size );
179
185
}
180
186
}
@@ -192,7 +198,7 @@ static void cam_task(void *arg)
192
198
} else if (!cam_obj -> jpeg_mode ) {
193
199
if (frame_buffer_event -> len != cam_obj -> fb_size ) {
194
200
cam_obj -> frames [frame_pos ].en = 1 ;
195
- ESP_LOGE (TAG , "FB-SIZE: %u != %u" , frame_buffer_event -> len , cam_obj -> fb_size );
201
+ ESP_LOGE (TAG , "FB-SIZE: %u != %u" , frame_buffer_event -> len , ( unsigned ) cam_obj -> fb_size );
196
202
}
197
203
}
198
204
//send frame
@@ -258,8 +264,9 @@ static esp_err_t cam_dma_config(const camera_config_t *config)
258
264
cam_obj -> dma_node_cnt = (cam_obj -> dma_buffer_size ) / cam_obj -> dma_node_buffer_size ; // Number of DMA nodes
259
265
cam_obj -> frame_copy_cnt = cam_obj -> recv_size / cam_obj -> dma_half_buffer_size ; // Number of interrupted copies, ping-pong copy
260
266
261
- ESP_LOGI (TAG , "buffer_size: %d, half_buffer_size: %d, node_buffer_size: %d, node_cnt: %d, total_cnt: %d" ,
262
- cam_obj -> dma_buffer_size , cam_obj -> dma_half_buffer_size , cam_obj -> dma_node_buffer_size , cam_obj -> dma_node_cnt , cam_obj -> frame_copy_cnt );
267
+ ESP_LOGI (TAG , "buffer_size: %d, half_buffer_size: %d, node_buffer_size: %d, node_cnt: %d, total_cnt: %d" ,
268
+ (int ) cam_obj -> dma_buffer_size , (int ) cam_obj -> dma_half_buffer_size , (int ) cam_obj -> dma_node_buffer_size ,
269
+ (int ) cam_obj -> dma_node_cnt , (int ) cam_obj -> frame_copy_cnt );
263
270
264
271
cam_obj -> dma_buffer = NULL ;
265
272
cam_obj -> dma = NULL ;
@@ -295,7 +302,7 @@ static esp_err_t cam_dma_config(const camera_config_t *config)
295
302
//align PSRAM buffer. TODO: save the offset so proper address can be freed later
296
303
cam_obj -> frames [x ].fb_offset = dma_align - ((uint32_t )cam_obj -> frames [x ].fb .buf & (dma_align - 1 ));
297
304
cam_obj -> frames [x ].fb .buf += cam_obj -> frames [x ].fb_offset ;
298
- ESP_LOGI (TAG , "Frame[%d]: Offset: %u, Addr: 0x%08X" , x , cam_obj -> frames [x ].fb_offset , (uint32_t ) cam_obj -> frames [x ].fb .buf );
305
+ ESP_LOGI (TAG , "Frame[%d]: Offset: %u, Addr: 0x%08X" , x , cam_obj -> frames [x ].fb_offset , (unsigned ) cam_obj -> frames [x ].fb .buf );
299
306
cam_obj -> frames [x ].dma = allocate_dma_descriptors (cam_obj -> dma_node_cnt , cam_obj -> dma_node_buffer_size , cam_obj -> frames [x ].fb .buf );
300
307
CAM_CHECK (cam_obj -> frames [x ].dma != NULL , "frame dma malloc failed" , ESP_FAIL );
301
308
}
@@ -305,8 +312,8 @@ static esp_err_t cam_dma_config(const camera_config_t *config)
305
312
if (!cam_obj -> psram_mode ) {
306
313
cam_obj -> dma_buffer = (uint8_t * )heap_caps_malloc (cam_obj -> dma_buffer_size * sizeof (uint8_t ), MALLOC_CAP_DMA );
307
314
if (NULL == cam_obj -> dma_buffer ) {
308
- ESP_LOGE (TAG ,"%s(%d): DMA buffer %d Byte malloc failed, the current largest free block:%d Byte" , __FUNCTION__ , __LINE__ ,
309
- cam_obj -> dma_buffer_size , heap_caps_get_largest_free_block (MALLOC_CAP_DMA ));
315
+ ESP_LOGE (TAG ,"%s(%d): DMA buffer %d Byte malloc failed, the current largest free block:%d Byte" , __FUNCTION__ , __LINE__ ,
316
+ ( int ) cam_obj -> dma_buffer_size , ( int ) heap_caps_get_largest_free_block (MALLOC_CAP_DMA ));
310
317
return ESP_FAIL ;
311
318
}
312
319
@@ -372,7 +379,7 @@ esp_err_t cam_config(const camera_config_t *config, framesize_t frame_size, uint
372
379
cam_obj -> recv_size = cam_obj -> width * cam_obj -> height * cam_obj -> in_bytes_per_pixel ;
373
380
cam_obj -> fb_size = cam_obj -> width * cam_obj -> height * cam_obj -> fb_bytes_per_pixel ;
374
381
}
375
-
382
+
376
383
ret = cam_dma_config (config );
377
384
CAM_CHECK_GOTO (ret == ESP_OK , "cam_dma_config failed" , err );
378
385
@@ -389,13 +396,13 @@ esp_err_t cam_config(const camera_config_t *config, framesize_t frame_size, uint
389
396
ret = ll_cam_init_isr (cam_obj );
390
397
CAM_CHECK_GOTO (ret == ESP_OK , "cam intr alloc failed" , err );
391
398
392
-
399
+
393
400
#if CONFIG_CAMERA_CORE0
394
- xTaskCreatePinnedToCore (cam_task , "cam_task" , 2048 , NULL , configMAX_PRIORITIES - 2 , & cam_obj -> task_handle , 0 );
401
+ xTaskCreatePinnedToCore (cam_task , "cam_task" , CAM_TASK_STACK , NULL , configMAX_PRIORITIES - 2 , & cam_obj -> task_handle , 0 );
395
402
#elif CONFIG_CAMERA_CORE1
396
- xTaskCreatePinnedToCore (cam_task , "cam_task" , 2048 , NULL , configMAX_PRIORITIES - 2 , & cam_obj -> task_handle , 1 );
403
+ xTaskCreatePinnedToCore (cam_task , "cam_task" , CAM_TASK_STACK , NULL , configMAX_PRIORITIES - 2 , & cam_obj -> task_handle , 1 );
397
404
#else
398
- xTaskCreate (cam_task , "cam_task" , 2048 , NULL , configMAX_PRIORITIES - 2 , & cam_obj -> task_handle );
405
+ xTaskCreate (cam_task , "cam_task" , CAM_TASK_STACK , NULL , configMAX_PRIORITIES - 2 , & cam_obj -> task_handle );
399
406
#endif
400
407
401
408
ESP_LOGI (TAG , "cam config ok" );
0 commit comments