diff options
Diffstat (limited to 'apps/plugins/pictureflow/pictureflow.c')
-rw-r--r-- | apps/plugins/pictureflow/pictureflow.c | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 796b66a48d..1003b0c65c 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c | |||
@@ -470,7 +470,6 @@ static int pf_state; | |||
470 | 470 | ||
471 | /** code */ | 471 | /** code */ |
472 | static bool free_slide_prio(int prio); | 472 | static bool free_slide_prio(int prio); |
473 | static inline unsigned fade_color(pix_t c, unsigned a); | ||
474 | bool load_new_slide(void); | 473 | bool load_new_slide(void); |
475 | int load_surface(int); | 474 | int load_surface(int); |
476 | 475 | ||
@@ -646,10 +645,15 @@ static inline PFreal fcos(int iangle) | |||
646 | return fsin(iangle + (IANGLE_MAX >> 2)); | 645 | return fsin(iangle + (IANGLE_MAX >> 2)); |
647 | } | 646 | } |
648 | 647 | ||
649 | static inline unsigned scale_val(unsigned val, unsigned bits) | 648 | /* scales the 8bit subpixel value to native lcd format, indicated by bits */ |
649 | static inline unsigned scale_subpixel_lcd(unsigned val, unsigned bits) | ||
650 | { | 650 | { |
651 | (void) bits; | ||
652 | #if LCD_PIXELFORMAT != RGB888 | ||
651 | val = val * ((1 << bits) - 1); | 653 | val = val * ((1 << bits) - 1); |
652 | return ((val >> 8) + val + 128) >> 8; | 654 | val = ((val >> 8) + val + 128) >> 8; |
655 | #endif | ||
656 | return val; | ||
653 | } | 657 | } |
654 | 658 | ||
655 | static void output_row_8_transposed(uint32_t row, void * row_in, | 659 | static void output_row_8_transposed(uint32_t row, void * row_in, |
@@ -666,10 +670,10 @@ static void output_row_8_transposed(uint32_t row, void * row_in, | |||
666 | unsigned r, g, b; | 670 | unsigned r, g, b; |
667 | for (; dest < end; dest += ctx->bm->height) | 671 | for (; dest < end; dest += ctx->bm->height) |
668 | { | 672 | { |
669 | r = scale_val(qp->red, 5); | 673 | r = scale_subpixel_lcd(qp->red, 5); |
670 | g = scale_val(qp->green, 6); | 674 | g = scale_subpixel_lcd(qp->green, 6); |
671 | b = scale_val((qp++)->blue, 5); | 675 | b = scale_subpixel_lcd((qp++)->blue, 5); |
672 | *dest = LCD_RGBPACK_LCD(r,g,b); | 676 | *dest = FB_RGBPACK_LCD(r,g,b); |
673 | } | 677 | } |
674 | #endif | 678 | #endif |
675 | } | 679 | } |
@@ -690,11 +694,11 @@ static void output_row_32_transposed(uint32_t row, void * row_in, | |||
690 | int r, g, b; | 694 | int r, g, b; |
691 | for (; dest < end; dest += ctx->bm->height) | 695 | for (; dest < end; dest += ctx->bm->height) |
692 | { | 696 | { |
693 | r = scale_val(SC_OUT(qp->r, ctx), 5); | 697 | r = scale_subpixel_lcd(SC_OUT(qp->r, ctx), 5); |
694 | g = scale_val(SC_OUT(qp->g, ctx), 6); | 698 | g = scale_subpixel_lcd(SC_OUT(qp->g, ctx), 6); |
695 | b = scale_val(SC_OUT(qp->b, ctx), 5); | 699 | b = scale_subpixel_lcd(SC_OUT(qp->b, ctx), 5); |
696 | qp++; | 700 | qp++; |
697 | *dest = LCD_RGBPACK_LCD(r,g,b); | 701 | *dest = FB_RGBPACK_LCD(r,g,b); |
698 | } | 702 | } |
699 | #endif | 703 | #endif |
700 | } | 704 | } |
@@ -714,10 +718,10 @@ static void output_row_32_transposed_fromyuv(uint32_t row, void * row_in, | |||
714 | v = SC_OUT(qp->r, ctx); | 718 | v = SC_OUT(qp->r, ctx); |
715 | qp++; | 719 | qp++; |
716 | yuv_to_rgb(y, u, v, &r, &g, &b); | 720 | yuv_to_rgb(y, u, v, &r, &g, &b); |
717 | r = scale_val(r, 5); | 721 | r = scale_subpixel_lcd(r, 5); |
718 | g = scale_val(g, 6); | 722 | g = scale_subpixel_lcd(g, 6); |
719 | b = scale_val(b, 5); | 723 | b = scale_subpixel_lcd(b, 5); |
720 | *dest = LCD_RGBPACK_LCD(r, g, b); | 724 | *dest = FB_RGBPACK_LCD(r, g, b); |
721 | } | 725 | } |
722 | } | 726 | } |
723 | #endif | 727 | #endif |
@@ -1793,14 +1797,13 @@ static void recalc_offsets(void) | |||
1793 | offsetY = DISPLAY_WIDTH / 2 * (fsin(itilt) + PFREAL_ONE / 2); | 1797 | offsetY = DISPLAY_WIDTH / 2 * (fsin(itilt) + PFREAL_ONE / 2); |
1794 | } | 1798 | } |
1795 | 1799 | ||
1796 | |||
1797 | /** | 1800 | /** |
1798 | Fade the given color by spreading the fb_data (ushort) | 1801 | Fade the given color by spreading the fb_data |
1799 | to an uint, multiply and compress the result back to a ushort. | 1802 | to an uint, multiply and compress the result back to a fb_data. |
1800 | */ | 1803 | */ |
1801 | #if (LCD_PIXELFORMAT == RGB565SWAPPED) | 1804 | static inline pix_t fade_color(pix_t c, unsigned a) |
1802 | static inline unsigned fade_color(pix_t c, unsigned a) | ||
1803 | { | 1805 | { |
1806 | #if (LCD_PIXELFORMAT == RGB565SWAPPED) | ||
1804 | unsigned int result; | 1807 | unsigned int result; |
1805 | c = swap16(c); | 1808 | c = swap16(c); |
1806 | a = (a + 2) & 0x1fc; | 1809 | a = (a + 2) & 0x1fc; |
@@ -1808,24 +1811,29 @@ static inline unsigned fade_color(pix_t c, unsigned a) | |||
1808 | result |= ((c & 0x7e0) * a) & 0x7e000; | 1811 | result |= ((c & 0x7e0) * a) & 0x7e000; |
1809 | result >>= 8; | 1812 | result >>= 8; |
1810 | return swap16(result); | 1813 | return swap16(result); |
1811 | } | 1814 | |
1812 | #elif LCD_PIXELFORMAT == RGB565 | 1815 | #elif LCD_PIXELFORMAT == RGB565 |
1813 | static inline unsigned fade_color(pix_t c, unsigned a) | ||
1814 | { | ||
1815 | unsigned int result; | 1816 | unsigned int result; |
1816 | a = (a + 2) & 0x1fc; | 1817 | a = (a + 2) & 0x1fc; |
1817 | result = ((c & 0xf81f) * a) & 0xf81f00; | 1818 | result = ((c & 0xf81f) * a) & 0xf81f00; |
1818 | result |= ((c & 0x7e0) * a) & 0x7e000; | 1819 | result |= ((c & 0x7e0) * a) & 0x7e000; |
1819 | result >>= 8; | 1820 | result >>= 8; |
1820 | return result; | 1821 | return result; |
1821 | } | 1822 | |
1823 | #elif LCD_PIXELFORMAT == RGB888 | ||
1824 | unsigned int pixel = FB_UNPACK_SCALAR_LCD(c); | ||
1825 | unsigned int result; | ||
1826 | a = (a + 2) & 0x1fc; | ||
1827 | result = ((pixel & 0xff00ff) * a) & 0xff00ff00; | ||
1828 | result |= ((pixel & 0x00ff00) * a) & 0x00ff0000; | ||
1829 | result >>= 8; | ||
1830 | return FB_SCALARPACK(result); | ||
1831 | |||
1822 | #else | 1832 | #else |
1823 | static inline unsigned fade_color(pix_t c, unsigned a) | ||
1824 | { | ||
1825 | unsigned val = c; | 1833 | unsigned val = c; |
1826 | return MULUQ(val, a) >> 8; | 1834 | return MULUQ(val, a) >> 8; |
1827 | } | ||
1828 | #endif | 1835 | #endif |
1836 | } | ||
1829 | 1837 | ||
1830 | /** | 1838 | /** |
1831 | * Render a single slide | 1839 | * Render a single slide |