My code for getting the image difference is:
Code: Select all
static esp_err_t stream_handler(httpd_req_t *req){
int frame_nr = 1;
int prev_image_size = -1;
uint8_t * _jpg_buf_prev = NULL;
uint8_t * _jpg_buf_diff = NULL;
...
while(true){
frame_nr = frame_nr + 1;
fb = esp_camera_fb_get();
...
if(res == ESP_OK){
if ((frame_nr % 2) == 0){
if (_jpg_buf != NULL){
if (_jpg_buf_prev == NULL){
prev_image_size = _jpg_buf_len;
_jpg_buf_prev = (uint8_t*)malloc(sizeof(uint8_t)*_jpg_buf_len);
}
for (int i = 0; i < _jpg_buf_len; i++){
_jpg_buf_prev[i] = _jpg_buf[i];
}
}
res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
}else{
_jpg_buf_diff = (uint8_t*)malloc(sizeof(uint8_t)*min(prev_image_size,_jpg_buf_len));
if (_jpg_buf_prev != NULL){
for (int i = 0; i < min(prev_image_size,_jpg_buf_len); i++){
int temp = abs((int)_jpg_buf[i] - (int)_jpg_buf_prev[i]);
_jpg_buf_diff[i] = (uint8_t)temp;
}
res = httpd_resp_send_chunk(req, (const char *)_jpg_buf_diff, min(prev_image_size,_jpg_buf_len));
}else{
Serial.println("something else");
}
}
delay(3000);
}
...
}
As a result, I see the first frame in the created web server viewer, but all the consecutive frames are just black
What could be a problem?