mirror of
https://github.com/esphome/esphome.git
synced 2025-09-08 06:12:20 +01:00
Co-authored-by: J. Nick Koston <nick@koston.org> Co-authored-by: J. Nick Koston <nick@home-assistant.io> Co-authored-by: J. Nick Koston <nick+github@koston.org>
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
import esphome.codegen as cg
|
|
from esphome.components.esp32 import add_idf_component
|
|
import esphome.config_validation as cv
|
|
from esphome.const import CONF_BUFFER_SIZE, CONF_ID, CONF_TYPE
|
|
from esphome.core import CORE
|
|
from esphome.types import ConfigType
|
|
|
|
CODEOWNERS = ["@DT-art1"]
|
|
|
|
AUTO_LOAD = ["camera"]
|
|
|
|
CONF_BUFFER_EXPAND_SIZE = "buffer_expand_size"
|
|
CONF_ENCODER_BUFFER_ID = "encoder_buffer_id"
|
|
CONF_QUALITY = "quality"
|
|
|
|
ESP32_CAMERA_ENCODER = "esp32_camera"
|
|
|
|
camera_ns = cg.esphome_ns.namespace("camera")
|
|
camera_encoder_ns = cg.esphome_ns.namespace("camera_encoder")
|
|
|
|
Encoder = camera_ns.class_("Encoder")
|
|
EncoderBufferImpl = camera_encoder_ns.class_("EncoderBufferImpl")
|
|
|
|
ESP32CameraJPEGEncoder = camera_encoder_ns.class_("ESP32CameraJPEGEncoder", Encoder)
|
|
|
|
MAX_JPEG_BUFFER_SIZE_2MB = 2 * 1024 * 1024
|
|
|
|
ESP32_CAMERA_ENCODER_SCHEMA = cv.Schema(
|
|
{
|
|
cv.GenerateID(): cv.declare_id(ESP32CameraJPEGEncoder),
|
|
cv.Optional(CONF_QUALITY, default=80): cv.int_range(1, 100),
|
|
cv.Optional(CONF_BUFFER_SIZE, default=4096): cv.int_range(
|
|
1024, MAX_JPEG_BUFFER_SIZE_2MB
|
|
),
|
|
cv.Optional(CONF_BUFFER_EXPAND_SIZE, default=1024): cv.int_range(
|
|
0, MAX_JPEG_BUFFER_SIZE_2MB
|
|
),
|
|
cv.GenerateID(CONF_ENCODER_BUFFER_ID): cv.declare_id(EncoderBufferImpl),
|
|
}
|
|
)
|
|
|
|
CONFIG_SCHEMA = cv.typed_schema(
|
|
{
|
|
ESP32_CAMERA_ENCODER: ESP32_CAMERA_ENCODER_SCHEMA,
|
|
},
|
|
default_type=ESP32_CAMERA_ENCODER,
|
|
)
|
|
|
|
|
|
async def to_code(config: ConfigType) -> None:
|
|
buffer = cg.new_Pvariable(config[CONF_ENCODER_BUFFER_ID])
|
|
cg.add(buffer.set_buffer_size(config[CONF_BUFFER_SIZE]))
|
|
if config[CONF_TYPE] == ESP32_CAMERA_ENCODER:
|
|
if CORE.using_esp_idf:
|
|
add_idf_component(name="espressif/esp32-camera", ref="2.1.0")
|
|
cg.add_build_flag("-DUSE_ESP32_CAMERA_JPEG_ENCODER")
|
|
var = cg.new_Pvariable(
|
|
config[CONF_ID],
|
|
config[CONF_QUALITY],
|
|
buffer,
|
|
)
|
|
cg.add(var.set_buffer_expand_size(config[CONF_BUFFER_EXPAND_SIZE]))
|