| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include "save_picture.h"
- void save_picture() {
- sensor_t* cam = esp_camera_sensor_get();
- // Check if the sensor is valid.
- if (!cam) {
- Serial.println("Failed to acquire camera sensor");
- return;
- }
- // Set pixel format to JPEG for saving picture.
- cam->set_pixformat(cam, PIXFORMAT_JPEG);
- // Set frame size based on available PSRAM.
- if (psramFound()) {
- cam->set_framesize(cam, FRAMESIZE_UXGA);
- } else {
- cam->set_framesize(cam, FRAMESIZE_SVGA);
- }
- // Get a frame buffer from camera.
- camera_fb_t* frame_buffer = esp_camera_fb_get();
- if (!frame_buffer) {
- // Camera capture failed
- return;
- }
- if (!SD_MMC.begin()) {
- // SD Card Mount Failed.
- esp_camera_fb_return(frame_buffer);
- return;
- }
- // Generate a unique filename.
- String path = "/picture";
- path += String(millis());
- path += ".jpg";
- fs::FS& fs = SD_MMC;
- File file = fs.open(path.c_str(), FILE_WRITE);
- if (!file) {
- // Failed to open file in writing mode
- } else {
- if (file.write(frame_buffer->buf, frame_buffer->len) !=
- frame_buffer->len) {
- // Failed to write the image to the file
- }
- file.close(); // Close the file in any case.
- }
- // Update framesize back to the default.
- cam->set_framesize(cam, FRAMESIZE_QQVGA);
- // Return the frame buffer back to the camera driver.
- esp_camera_fb_return(frame_buffer);
- }
|