fix(voice): preview generated png and recover shared spi display/print
This commit is contained in:
@@ -182,6 +182,11 @@ esp_err_t screen_preview_show_raster(const uint8_t *raster,
|
||||
uint32_t timeout_ms,
|
||||
char *err,
|
||||
size_t err_len);
|
||||
esp_err_t screen_preview_show_png(const uint8_t *png,
|
||||
size_t png_len,
|
||||
uint32_t timeout_ms,
|
||||
char *err,
|
||||
size_t err_len);
|
||||
|
||||
// ---------- printer_protocol ----------
|
||||
typedef enum {
|
||||
|
||||
@@ -11,3 +11,12 @@ esp_err_t screen_preview_show_raster(const uint8_t *raster,
|
||||
{
|
||||
return platform_display_show_raster_1bpp(raster, raster_len, width, height, timeout_ms, err, err_len);
|
||||
}
|
||||
|
||||
esp_err_t screen_preview_show_png(const uint8_t *png,
|
||||
size_t png_len,
|
||||
uint32_t timeout_ms,
|
||||
char *err,
|
||||
size_t err_len)
|
||||
{
|
||||
return platform_display_show_png(png, png_len, timeout_ms, err, err_len);
|
||||
}
|
||||
|
||||
@@ -17,8 +17,9 @@ static const char *TAG = "voice_interaction";
|
||||
#define VOICE_IMAGE_MARKER_REPEAT_SUPPRESS_MS 45000
|
||||
#define VOICE_IMAGE_PRINT_THRESHOLD 160
|
||||
#define VOICE_IMAGE_PRINT_MAX_HEIGHT 2200
|
||||
#define VOICE_IMAGE_PREVIEW_TIMEOUT_MS 200
|
||||
#define VOICE_IMAGE_MARKER_TEMPLATE \
|
||||
"%s,黑白线稿风格,白色背景,主体居中,边缘清晰,细节简洁,高对比,避免大面积阴影和灰度渐变,适配热敏打印机打印。"
|
||||
"%s,线稿风格,白色背景,边缘清晰,细节简洁,高对比,避免大面积阴影和灰度渐变,适配热敏打印机打印。"
|
||||
#define VOICE_IMAGE_MARKER_TEMPLATE_FALLBACK_SUBJECT "简洁卡通图案"
|
||||
|
||||
typedef struct {
|
||||
@@ -228,6 +229,38 @@ static void voice_build_marker_image_prompt(const char *subject,
|
||||
}
|
||||
}
|
||||
|
||||
static void voice_try_preview_marker_png(const voice_image_generation_task_arg_t *task_arg,
|
||||
const uint8_t *png,
|
||||
size_t png_len) {
|
||||
if (task_arg == NULL || png == NULL || png_len == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
char preview_err[96] = {0};
|
||||
esp_err_t preview_rc = screen_preview_show_png(png,
|
||||
png_len,
|
||||
VOICE_IMAGE_PREVIEW_TIMEOUT_MS,
|
||||
preview_err,
|
||||
sizeof(preview_err));
|
||||
if (preview_rc == ESP_OK) {
|
||||
ESP_LOGI(TAG,
|
||||
"[stage] marker_image_preview_ok: dialog_id=%s png_bytes=%u",
|
||||
task_arg->dialog_id[0] != '\0' ? task_arg->dialog_id : "-",
|
||||
(unsigned)png_len);
|
||||
return;
|
||||
}
|
||||
|
||||
if (preview_rc == ESP_ERR_NOT_SUPPORTED) {
|
||||
return;
|
||||
}
|
||||
|
||||
ESP_LOGW(TAG,
|
||||
"[stage] marker_image_preview_failed: dialog_id=%s rc=0x%x msg=%s",
|
||||
task_arg->dialog_id[0] != '\0' ? task_arg->dialog_id : "-",
|
||||
(unsigned)preview_rc,
|
||||
preview_err[0] != '\0' ? preview_err : "preview failed");
|
||||
}
|
||||
|
||||
static esp_err_t voice_submit_marker_generated_image(const voice_image_generation_task_arg_t *task_arg,
|
||||
const image_generation_result_t *result,
|
||||
char *err,
|
||||
@@ -237,6 +270,8 @@ static esp_err_t voice_submit_marker_generated_image(const voice_image_generatio
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
voice_try_preview_marker_png(task_arg, result->png, result->png_len);
|
||||
|
||||
uint16_t raster_width = 0;
|
||||
uint16_t raster_height = 0;
|
||||
uint8_t *raster = NULL;
|
||||
@@ -280,14 +315,18 @@ static esp_err_t voice_submit_marker_generated_image(const voice_image_generatio
|
||||
|
||||
uint32_t job_id = 0;
|
||||
char submit_err[128] = {0};
|
||||
esp_err_t submit_rc = printer_protocol_submit_raster_job(raster,
|
||||
raster_len,
|
||||
raster_width,
|
||||
raster_height,
|
||||
NULL,
|
||||
&job_id,
|
||||
submit_err,
|
||||
sizeof(submit_err));
|
||||
printer_print_options_t print_opt = {
|
||||
.direct_ignore_precheck = true,
|
||||
};
|
||||
esp_err_t submit_rc = printer_protocol_submit_raster_job_ex(raster,
|
||||
raster_len,
|
||||
raster_width,
|
||||
raster_height,
|
||||
NULL,
|
||||
&print_opt,
|
||||
&job_id,
|
||||
submit_err,
|
||||
sizeof(submit_err));
|
||||
if (submit_rc != ESP_OK) {
|
||||
voice_fill_err(err,
|
||||
err_len,
|
||||
@@ -371,7 +410,6 @@ static void voice_image_generation_task(void *arg) {
|
||||
gen_err[0] != '\0' ? gen_err : "image generation failed");
|
||||
}
|
||||
|
||||
printer_protocol_status_poll_pause_release(&status_poll_pause_token);
|
||||
image_generation_result_free(&result);
|
||||
voice_marker_image_generation_release();
|
||||
image_generation_schedule_prewarm();
|
||||
|
||||
Reference in New Issue
Block a user