mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +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;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
uint32_t OMV_ATTR_SECTION(OMV_ATTR_ALIGNED(CLUT_BUFFER[256], 32), ".dma_buffer");
|
||||||
|
|
||||||
int omv_gpu_draw_image(image_t *src_img,
|
int omv_gpu_draw_image(image_t *src_img,
|
||||||
rectangle_t *src_rect,
|
rectangle_t *src_rect,
|
||||||
image_t *dst_img,
|
image_t *dst_img,
|
||||||
@ -204,45 +206,41 @@ int omv_gpu_draw_image(image_t *src_img,
|
|||||||
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
|
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
|
||||||
dma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_L8;
|
dma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_L8;
|
||||||
dma2d.LayerCfg[1].AlphaMode = DMA2D_COMBINE_ALPHA;
|
dma2d.LayerCfg[1].AlphaMode = DMA2D_COMBINE_ALPHA;
|
||||||
uint32_t *clut = fb_alloc(256 * sizeof(uint32_t), FB_ALLOC_CACHE_ALIGN);
|
|
||||||
|
|
||||||
if (!alpha_palette) {
|
if (!alpha_palette) {
|
||||||
if (!color_palette) {
|
if (!color_palette) {
|
||||||
for (int i = 0; i < 256; i++) {
|
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 {
|
} else {
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
int pixel = color_palette[i];
|
int pixel = color_palette[i];
|
||||||
clut[i] = (0xff << 24) |
|
CLUT_BUFFER[i] = (0xff << 24) |
|
||||||
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
||||||
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
||||||
COLOR_RGB565_TO_B8(pixel);
|
COLOR_RGB565_TO_B8(pixel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!color_palette) {
|
if (!color_palette) {
|
||||||
for (int i = 0; i < 256; i++) {
|
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 {
|
} else {
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
int pixel = color_palette[i];
|
int pixel = color_palette[i];
|
||||||
clut[i] = (alpha_palette[i] << 24) |
|
CLUT_BUFFER[i] = (alpha_palette[i] << 24) |
|
||||||
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
(COLOR_RGB565_TO_R8(pixel) << 16) |
|
||||||
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
(COLOR_RGB565_TO_G8(pixel) << 8) |
|
||||||
COLOR_RGB565_TO_B8(pixel);
|
COLOR_RGB565_TO_B8(pixel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DMA2D_CLUTCfgTypeDef cfg;
|
DMA2D_CLUTCfgTypeDef cfg;
|
||||||
cfg.pCLUT = clut;
|
cfg.pCLUT = CLUT_BUFFER;
|
||||||
cfg.CLUTColorMode = DMA2D_CCM_ARGB8888;
|
cfg.CLUTColorMode = DMA2D_CCM_ARGB8888;
|
||||||
cfg.Size = 255;
|
cfg.Size = 255;
|
||||||
#if __DCACHE_PRESENT
|
|
||||||
SCB_CleanDCache_by_Addr(clut, 256 * sizeof(uint32_t));
|
|
||||||
#endif
|
|
||||||
HAL_DMA2D_CLUTLoad(&dma2d, cfg, 1);
|
HAL_DMA2D_CLUTLoad(&dma2d, cfg, 1);
|
||||||
HAL_DMA2D_PollForTransfer(&dma2d, 1000);
|
HAL_DMA2D_PollForTransfer(&dma2d, 1000);
|
||||||
} else {
|
} else {
|
||||||
@ -330,10 +328,6 @@ int omv_gpu_draw_image(image_t *src_img,
|
|||||||
|
|
||||||
HAL_DMA2D_DeInit(&dma2d);
|
HAL_DMA2D_DeInit(&dma2d);
|
||||||
|
|
||||||
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
|
|
||||||
fb_free(); // clut
|
|
||||||
}
|
|
||||||
|
|
||||||
OMV_PROFILE_PRINT();
|
OMV_PROFILE_PRINT();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user