有没有办法减少在 ESP32-Cam esp_camera_init 期间用完的 SPI PSRAM 内存的数量

Is there a way to reduce the amont of SPI PSRAM memory used up during esp_camera_init on ESP32-Cam

以下代码:-

Serial.printf("Before camera config ... SPIRam Total heap %d, SPIRam Free Heap %d", ESP.getPsramSize(), ESP.getFreePsram())
cam_err = esp_camera_init(&config);
Serial.printf("After camera config ... SPIRam Total heap %d, SPIRam Free Heap %d", ESP.getPsramSize(), ESP.getFreePsram())

将给出以下打印:-

Before camera config ... SPIRam Total heap   4194252, SPIRam Free Heap   4194252
After  camera config ... SPIRam Total heap   4194204, SPIRam Free Heap   1314204

所以在 4MB 中,esp_camera_init 后还有 1.3MB 空闲。有没有可能这样可以减少,并且在PSRAM中有相对较大的空闲内存量。

我正在使用 AI-Thinker 开发板 ESP32-Cam。

(我正在遵循此代码:https://github.com/jameszah/ESP32-CAM-Video-Recorder-junior

是的,您可以减少相机使用的 SPI PSRAM 的数量。

答案在 esp_camera_init()config 参数中,您没有在问题中包含的内容。

相机驱动程序在 PSRAM 中分配帧缓冲区。您可以在配置结构中控制帧缓冲区的数量 (.fb_count) 和帧缓冲区的大小 (.frame_size)。如果您想使用更少的 PSRAM,请减少这些数字。

减少帧缓冲区的数量会降低相机捕获帧的速度。减小帧大小会明显降低捕获的分辨率。

您还可以将相机配置为使用 non-PSRAM DRAM 作为帧缓冲区,但是开始时它的资源非常有限,除了低分辨率外,您将无法使用它。 .fb_location 属性对此进行控制。将其设置为 CAMERA_FB_IN_DRAM 以使用常规 RAM 但同样,不要指望它适用于最低分辨率以外的任何东西。

是的,相机占用大量存储空间。视频存储需求随着分辨率的提高而迅速增加。

ESP32 相机代码是开源的,因此您可以阅读 esp_camera_init() to learn what it does, and the code for cam_dma_config() 的代码,它分配帧缓冲区。