sw_convert.c 935 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2020 Actions Technology Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <string.h>
  7. #include <display/sw_draw.h>
  8. #include <display/display_hal.h>
  9. static inline void cvt_buf_argb8888_to_bgr888(void * dest, const void * src, uint32_t len)
  10. {
  11. uint8_t *dest8 = dest;
  12. const uint8_t *src8 = src;
  13. for (; len > 0; len--) {
  14. *dest8++ = src8[2];
  15. *dest8++ = src8[1];
  16. *dest8++ = src8[0];
  17. src8 += 4;
  18. }
  19. }
  20. int sw_convert_color_buffer(void * dest_buf, uint32_t dest_cf, const void * src_buf, uint32_t src_cf, uint32_t len)
  21. {
  22. if (dest_cf == src_cf) {
  23. uint8_t px_size = hal_pixel_format_get_bits_per_pixel(dest_cf);
  24. memcpy(dest_buf, src_buf, px_size * len);
  25. return 0;
  26. }
  27. if (dest_cf == HAL_PIXEL_FORMAT_BGR_888) {
  28. if (src_cf == HAL_PIXEL_FORMAT_ARGB_8888 || src_cf == HAL_PIXEL_FORMAT_XRGB_8888) {
  29. cvt_buf_argb8888_to_bgr888(dest_buf, src_buf, len);
  30. return 0;
  31. }
  32. }
  33. return -ENOSYS;
  34. }