me-no-dev / ESPAsyncWebServer

Async Web Server for ESP8266 and ESP32
3.7k stars 1.21k forks source link

When Can I delete ESP32CAM Image Buffer After Serving with ESPAsyncWebServer? #1340

Open gfvalvo opened 1 year ago

gfvalvo commented 1 year ago

I'm using ESPAsyncWebServer to serve an ESP32CAM image to a web page (a pointer to the image buffer has been stored in a FreeRTOS queue by a different task):

void handleImageRequest(AsyncWebServerRequest *request) {
  camera_fb_t *photoBuffer;
  BaseType_t result = xQueueReceive(imageQueue, &photoBuffer, 0);
  if (result == pdPASS) {
    request->send_P(200, "image/jpeg", photoBuffer->buf, photoBuffer->len);
  } else {
    request->send(200, "text/plain", "No Photo Available");
  }
}

Now I want to delete the buffer and free the memory with: esp_camera_fb_return(photoBuffer); But I can't do it right after the call to send_P() because that function returns almost immediately while the buffer is still being served in the background.

So, does ESPAsyncWebServer provide a callback or other method to inform my code that the entire buffer has been served and may now be deleted?

Thanks.