mirror of
https://github.com/openmv/openmv.git
synced 2025-09-26 23:09:13 +08:00
Merge pull request #2597 from kwagyeman/kwabena/better_transpose_gpu_fix
Some checks are pending
🔎 Check Code Formatting / formatting-check (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_GIGA) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NANO_33_BLE_SENSE) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NANO_RP2040_CONNECT) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NICLA_VISION) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_PORTENTA_H7) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV2) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV3) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV4) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV4P) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMVPT) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV_RT1060) (push) Waiting to run
🔥 Firmware Build / code-size-report (push) Blocked by required conditions
🔥 Firmware Build / stable-release (push) Blocked by required conditions
🔥 Firmware Build / development-release (push) Blocked by required conditions
Some checks are pending
🔎 Check Code Formatting / formatting-check (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_GIGA) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NANO_33_BLE_SENSE) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NANO_RP2040_CONNECT) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NICLA_VISION) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_PORTENTA_H7) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV2) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV3) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV4) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV4P) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMVPT) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV_RT1060) (push) Waiting to run
🔥 Firmware Build / code-size-report (push) Blocked by required conditions
🔥 Firmware Build / stable-release (push) Blocked by required conditions
🔥 Firmware Build / development-release (push) Blocked by required conditions
ports/stm32: Move CLUT to DMA memory section.
This commit is contained in:
commit
62984c8342
@ -132,6 +132,8 @@ int omv_gpu_draw_image(image_t *src_img,
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
uint32_t OMV_ATTR_SECTION(OMV_ATTR_ALIGNED(CLUT_BUFFER[256], 32), ".dma_buffer");
|
||||
|
||||
int omv_gpu_draw_image(image_t *src_img,
|
||||
rectangle_t *src_rect,
|
||||
image_t *dst_img,
|
||||
@ -204,45 +206,41 @@ int omv_gpu_draw_image(image_t *src_img,
|
||||
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
|
||||
dma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_L8;
|
||||
dma2d.LayerCfg[1].AlphaMode = DMA2D_COMBINE_ALPHA;
|
||||
uint32_t *clut = fb_alloc(256 * sizeof(uint32_t), FB_ALLOC_CACHE_ALIGN);
|
||||
|
||||
if (!alpha_palette) {
|
||||
if (!color_palette) {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
clut[i] = (0xff << 24) | COLOR_Y_TO_RGB888(i);
|
||||
CLUT_BUFFER[i] = (0xff << 24) | COLOR_Y_TO_RGB888(i);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
int pixel = color_palette[i];
|
||||
clut[i] = (0xff << 24) |
|
||||
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
||||
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
||||
COLOR_RGB565_TO_B8(pixel);
|
||||
CLUT_BUFFER[i] = (0xff << 24) |
|
||||
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
||||
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
||||
COLOR_RGB565_TO_B8(pixel);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!color_palette) {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
clut[i] = (alpha_palette[i] << 24) | COLOR_Y_TO_RGB888(i);
|
||||
CLUT_BUFFER[i] = (alpha_palette[i] << 24) | COLOR_Y_TO_RGB888(i);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
int pixel = color_palette[i];
|
||||
clut[i] = (alpha_palette[i] << 24) |
|
||||
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
||||
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
||||
COLOR_RGB565_TO_B8(pixel);
|
||||
CLUT_BUFFER[i] = (alpha_palette[i] << 24) |
|
||||
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
||||
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
||||
COLOR_RGB565_TO_B8(pixel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DMA2D_CLUTCfgTypeDef cfg;
|
||||
cfg.pCLUT = clut;
|
||||
cfg.pCLUT = CLUT_BUFFER;
|
||||
cfg.CLUTColorMode = DMA2D_CCM_ARGB8888;
|
||||
cfg.Size = 255;
|
||||
#if __DCACHE_PRESENT
|
||||
SCB_CleanDCache_by_Addr(clut, 256 * sizeof(uint32_t));
|
||||
#endif
|
||||
HAL_DMA2D_CLUTLoad(&dma2d, cfg, 1);
|
||||
HAL_DMA2D_PollForTransfer(&dma2d, 1000);
|
||||
} else {
|
||||
@ -330,10 +328,6 @@ int omv_gpu_draw_image(image_t *src_img,
|
||||
|
||||
HAL_DMA2D_DeInit(&dma2d);
|
||||
|
||||
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
|
||||
fb_free(); // clut
|
||||
}
|
||||
|
||||
OMV_PROFILE_PRINT();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user