Skip to content

Commit 42be8c8

Browse files
committed
feat(dsi): can use gray8 image as input
1 parent eedbd9f commit 42be8c8

File tree

8 files changed

+99
-13
lines changed

8 files changed

+99
-13
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ repos:
3131
.*.pb-c.c|
3232
.*.yuv|
3333
.*.rgb|
34+
.*.gray|
3435
.*COPYING.*|
3536
docs/sphinx-known-warnings\.txt
3637
)$

components/esp_lcd/test_apps/mipi_dsi_lcd/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ project(mipi_dsi_lcd_panel_test)
99

1010
target_add_binary_data(mipi_dsi_lcd_panel_test.elf "resources/pictures/hello.yuv" BINARY)
1111
target_add_binary_data(mipi_dsi_lcd_panel_test.elf "resources/pictures/world.yuv" BINARY)
12+
target_add_binary_data(mipi_dsi_lcd_panel_test.elf "resources/pictures/hello.gray" BINARY)
13+
target_add_binary_data(mipi_dsi_lcd_panel_test.elf "resources/pictures/world.gray" BINARY)
1214

1315
idf_build_get_property(elf EXECUTABLE)
1416
if(CONFIG_COMPILER_DUMP_RTL_FILES)

components/esp_lcd/test_apps/mipi_dsi_lcd/main/test_mipi_dsi_panel.c

Lines changed: 81 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ TEST_CASE("MIPI DSI Pattern Generator (EK79007)", "[mipi_dsi]")
8888

8989
#define TEST_IMG_SIZE (100 * 100 * sizeof(uint16_t))
9090

91-
TEST_CASE("MIPI DSI draw bitmap (EK79007)", "[mipi_dsi]")
91+
TEST_CASE("MIPI DSI draw RGB bitmap (EK79007)", "[mipi_dsi]")
9292
{
9393
esp_lcd_dsi_bus_handle_t mipi_dsi_bus;
9494
esp_lcd_panel_io_handle_t mipi_dbi_io;
@@ -162,7 +162,7 @@ TEST_CASE("MIPI DSI draw bitmap (EK79007)", "[mipi_dsi]")
162162
test_bsp_disable_dsi_phy_power();
163163
}
164164

165-
TEST_CASE("MIPI DSI with multiple frame buffers (EK79007)", "[mipi_dsi]")
165+
TEST_CASE("MIPI DSI use multiple frame buffers (EK79007)", "[mipi_dsi]")
166166
{
167167
esp_lcd_dsi_bus_handle_t mipi_dsi_bus;
168168
esp_lcd_panel_io_handle_t mipi_dbi_io;
@@ -241,17 +241,14 @@ TEST_CASE("MIPI DSI with multiple frame buffers (EK79007)", "[mipi_dsi]")
241241
test_bsp_disable_dsi_phy_power();
242242
}
243243

244-
TEST_CASE("MIPI DSI draw YUV422 (EK79007)", "[mipi_dsi]")
244+
TEST_CASE("MIPI DSI draw YUV422 image (EK79007)", "[mipi_dsi]")
245245
{
246246
esp_lcd_dsi_bus_handle_t mipi_dsi_bus;
247247
esp_lcd_panel_io_handle_t mipi_dbi_io;
248248
esp_lcd_panel_handle_t mipi_dpi_panel;
249249

250250
test_bsp_enable_dsi_phy_power();
251251

252-
uint8_t *img = malloc(TEST_IMG_SIZE);
253-
TEST_ASSERT_NOT_NULL(img);
254-
255252
esp_lcd_dsi_bus_config_t bus_config = {
256253
.bus_id = 0,
257254
.num_data_lanes = 2,
@@ -285,10 +282,6 @@ TEST_CASE("MIPI DSI draw YUV422 (EK79007)", "[mipi_dsi]")
285282
.vsync_pulse_width = MIPI_DSI_LCD_VSYNC,
286283
.vsync_front_porch = MIPI_DSI_LCD_VFP,
287284
},
288-
289-
.flags = {
290-
.use_dma2d = true,
291-
}
292285
};
293286
ek79007_vendor_config_t vendor_config = {
294287
.mipi_config = {
@@ -333,7 +326,84 @@ TEST_CASE("MIPI DSI draw YUV422 (EK79007)", "[mipi_dsi]")
333326
TEST_ESP_OK(esp_lcd_panel_del(mipi_dpi_panel));
334327
TEST_ESP_OK(esp_lcd_panel_io_del(mipi_dbi_io));
335328
TEST_ESP_OK(esp_lcd_del_dsi_bus(mipi_dsi_bus));
336-
free(img);
329+
330+
test_bsp_disable_dsi_phy_power();
331+
}
332+
333+
TEST_CASE("MIPI DSI draw Gray8 image (EK79007)", "[mipi_dsi]")
334+
{
335+
esp_lcd_dsi_bus_handle_t mipi_dsi_bus;
336+
esp_lcd_panel_io_handle_t mipi_dbi_io;
337+
esp_lcd_panel_handle_t mipi_dpi_panel;
338+
339+
test_bsp_enable_dsi_phy_power();
340+
341+
esp_lcd_dsi_bus_config_t bus_config = {
342+
.bus_id = 0,
343+
.num_data_lanes = 2,
344+
.lane_bit_rate_mbps = 1000, // 1000 Mbps
345+
};
346+
TEST_ESP_OK(esp_lcd_new_dsi_bus(&bus_config, &mipi_dsi_bus));
347+
348+
esp_lcd_dbi_io_config_t dbi_config = {
349+
.virtual_channel = 0,
350+
.lcd_cmd_bits = 8,
351+
.lcd_param_bits = 8,
352+
};
353+
TEST_ESP_OK(esp_lcd_new_panel_io_dbi(mipi_dsi_bus, &dbi_config, &mipi_dbi_io));
354+
355+
esp_lcd_dpi_panel_config_t dpi_config = {
356+
.dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT,
357+
.dpi_clock_freq_mhz = MIPI_DSI_DPI_CLK_MHZ,
358+
.virtual_channel = 0,
359+
360+
// Gray8 -> RGB888
361+
.in_color_format = LCD_COLOR_FMT_GRAY8,
362+
.out_color_format = LCD_COLOR_FMT_RGB888,
363+
364+
.video_timing = {
365+
.h_size = MIPI_DSI_LCD_H_RES,
366+
.v_size = MIPI_DSI_LCD_V_RES,
367+
.hsync_back_porch = MIPI_DSI_LCD_HBP,
368+
.hsync_pulse_width = MIPI_DSI_LCD_HSYNC,
369+
.hsync_front_porch = MIPI_DSI_LCD_HFP,
370+
.vsync_back_porch = MIPI_DSI_LCD_VBP,
371+
.vsync_pulse_width = MIPI_DSI_LCD_VSYNC,
372+
.vsync_front_porch = MIPI_DSI_LCD_VFP,
373+
},
374+
};
375+
ek79007_vendor_config_t vendor_config = {
376+
.mipi_config = {
377+
.dsi_bus = mipi_dsi_bus,
378+
.dpi_config = &dpi_config,
379+
},
380+
};
381+
esp_lcd_panel_dev_config_t lcd_dev_config = {
382+
.reset_gpio_num = -1,
383+
.rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB,
384+
.bits_per_pixel = 24,
385+
.vendor_config = &vendor_config,
386+
};
387+
TEST_ESP_OK(esp_lcd_new_panel_ek79007(mipi_dbi_io, &lcd_dev_config, &mipi_dpi_panel));
388+
389+
TEST_ESP_OK(esp_lcd_panel_reset(mipi_dpi_panel));
390+
TEST_ESP_OK(esp_lcd_panel_init(mipi_dpi_panel));
391+
392+
// YUV images are embedded in the firmware binary
393+
extern const uint8_t image_hello_gray_start[] asm("_binary_hello_gray_start");
394+
extern const uint8_t image_world_gray_start[] asm("_binary_world_gray_start");
395+
396+
printf("Draw Gray8 images\r\n");
397+
for (int i = 0; i < 4; i++) {
398+
TEST_ESP_OK(esp_lcd_panel_draw_bitmap(mipi_dpi_panel, 0, 0, 320, 320, image_hello_gray_start));
399+
vTaskDelay(pdMS_TO_TICKS(1000));
400+
TEST_ESP_OK(esp_lcd_panel_draw_bitmap(mipi_dpi_panel, 0, 0, 320, 320, image_world_gray_start));
401+
vTaskDelay(pdMS_TO_TICKS(1000));
402+
}
403+
404+
TEST_ESP_OK(esp_lcd_panel_del(mipi_dpi_panel));
405+
TEST_ESP_OK(esp_lcd_panel_io_del(mipi_dbi_io));
406+
TEST_ESP_OK(esp_lcd_del_dsi_bus(mipi_dsi_bus));
337407

338408
test_bsp_disable_dsi_phy_power();
339409
}
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# How to generate the YUV image from the PNG image
1+
# How to get a YUV image from a PNG image
22

33
```bash
4-
ffmpeg -i hello.png -pix_fmt yuyv422 hello.yuv
4+
ffmpeg -i hello.png -pix_fmt yuyv422 -f rawvideo hello.yuv
55
```
66

77
## Supported YUV422 packing order
@@ -11,3 +11,9 @@ ffmpeg -i hello.png -pix_fmt yuyv422 hello.yuv
1111
| yuyv422 | 3 | 16 | 8-8-8 |
1212
| yvyu422 | 3 | 16 | 8-8-8 |
1313
| uyvy422 | 3 | 16 | 8-8-8 |
14+
15+
# How to get a gray8 raw image from a PNG image
16+
17+
```bash
18+
ffmpeg -i hello.png -vf format=gray -pix_fmt gray -f rawvideo hello.gray
19+
```

components/esp_lcd/test_apps/mipi_dsi_lcd/resources/pictures/hello.gray

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

components/esp_lcd/test_apps/mipi_dsi_lcd/resources/pictures/world.gray

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

components/hal/esp32p4/include/hal/mipi_dsi_brg_ll.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,10 @@ static inline void mipi_dsi_brg_ll_set_input_color_format(dsi_brg_dev_t *dev, lc
361361
dev->pixel_type.raw_type = 9;
362362
dev->pixel_type.data_in_type = 1;
363363
break;
364+
case LCD_COLOR_FMT_GRAY8:
365+
dev->pixel_type.raw_type = 12;
366+
dev->pixel_type.data_in_type = 0;
367+
break;
364368
default:
365369
abort();
366370
}

components/hal/include/hal/lcd_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ typedef enum {
5656
LCD_COLOR_FMT_RGB666 = COLOR_TYPE_ID(COLOR_SPACE_RGB, COLOR_PIXEL_RGB666), ///< RGB666
5757
LCD_COLOR_FMT_RGB888 = COLOR_TYPE_ID(COLOR_SPACE_RGB, COLOR_PIXEL_RGB888), ///< RGB888
5858
LCD_COLOR_FMT_YUV422 = COLOR_TYPE_ID(COLOR_SPACE_YUV, COLOR_PIXEL_YUV422), ///< YUV422
59+
LCD_COLOR_FMT_GRAY8 = COLOR_TYPE_ID(COLOR_SPACE_GRAY, COLOR_PIXEL_GRAY8), ///< 8-bit gray scale
5960
} lcd_color_format_t;
6061

6162
/**

0 commit comments

Comments
 (0)