summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/jpeg.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c
index 28c7aebbe8..7d29f353fe 100644
--- a/apps/plugins/jpeg.c
+++ b/apps/plugins/jpeg.c
@@ -1785,6 +1785,8 @@ int root_size;
1785#define BUFAC 14118 /* 31 * 257 * 1.772 */ 1785#define BUFAC 14118 /* 31 * 257 * 1.772 */
1786#endif 1786#endif
1787 1787
1788#define ROUNDOFFS (127*257)
1789
1788/* Draw a partial YUV colour bitmap */ 1790/* Draw a partial YUV colour bitmap */
1789void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y, 1791void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y,
1790 int src_x, int src_y, int stride, 1792 int src_x, int src_y, int stride,
@@ -1839,9 +1841,9 @@ void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y,
1839 1841
1840 u = *usrc++ - 128; 1842 u = *usrc++ - 128;
1841 v = *vsrc++ - 128; 1843 v = *vsrc++ - 128;
1842 rc = RVFAC * v + 32639; 1844 rc = RVFAC * v + ROUNDOFFS;
1843 gc = GVFAC * v + GUFAC * u + 32639; 1845 gc = GVFAC * v + GUFAC * u + ROUNDOFFS;
1844 bc = BUFAC * u + 32639; 1846 bc = BUFAC * u + ROUNDOFFS;
1845 1847
1846 do 1848 do
1847 { 1849 {
@@ -1850,26 +1852,26 @@ void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y,
1850 green = GYFAC * y + gc; 1852 green = GYFAC * y + gc;
1851 blue = BYFAC * y + bc; 1853 blue = BYFAC * y + bc;
1852 1854
1853 if ((unsigned)red > (RYFAC*255+32639)) 1855 if ((unsigned)red > (RYFAC*255+ROUNDOFFS))
1854 { 1856 {
1855 if (red < 0) 1857 if (red < 0)
1856 red = 0; 1858 red = 0;
1857 else 1859 else
1858 red = (RYFAC*255+32639); 1860 red = (RYFAC*255+ROUNDOFFS);
1859 } 1861 }
1860 if ((unsigned)green > (GYFAC*255+32639)) 1862 if ((unsigned)green > (GYFAC*255+ROUNDOFFS))
1861 { 1863 {
1862 if (green < 0) 1864 if (green < 0)
1863 green = 0; 1865 green = 0;
1864 else 1866 else
1865 green = (GYFAC*255+32639); 1867 green = (GYFAC*255+ROUNDOFFS);
1866 } 1868 }
1867 if ((unsigned)blue > (BYFAC*255+32639)) 1869 if ((unsigned)blue > (BYFAC*255+ROUNDOFFS))
1868 { 1870 {
1869 if (blue < 0) 1871 if (blue < 0)
1870 blue = 0; 1872 blue = 0;
1871 else 1873 else
1872 blue = (BYFAC*255+32639); 1874 blue = (BYFAC*255+ROUNDOFFS);
1873 } 1875 }
1874 rbits = ((unsigned)red) >> 16 ; 1876 rbits = ((unsigned)red) >> 16 ;
1875 gbits = ((unsigned)green) >> 16 ; 1877 gbits = ((unsigned)green) >> 16 ;
@@ -1884,9 +1886,9 @@ void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y,
1884 { 1886 {
1885 u = *usrc++ - 128; 1887 u = *usrc++ - 128;
1886 v = *vsrc++ - 128; 1888 v = *vsrc++ - 128;
1887 rc = RVFAC * v + 32639; 1889 rc = RVFAC * v + ROUNDOFFS;
1888 gc = GVFAC * v + GUFAC * u + 32639; 1890 gc = GVFAC * v + GUFAC * u + ROUNDOFFS;
1889 bc = BUFAC * u + 32639; 1891 bc = BUFAC * u + ROUNDOFFS;
1890 xphase = 0; 1892 xphase = 0;
1891 } 1893 }
1892 } 1894 }
@@ -1897,8 +1899,8 @@ void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y,
1897 do 1899 do
1898 { 1900 {
1899 y = *ysrc++; 1901 y = *ysrc++;
1900 red = RYFAC * y + 32639; /* blue == red */ 1902 red = RYFAC * y + ROUNDOFFS; /* blue == red */
1901 green = GYFAC * y + 32639; 1903 green = GYFAC * y + ROUNDOFFS;
1902 rbits = ((unsigned)red) >> 16; 1904 rbits = ((unsigned)red) >> 16;
1903 gbits = ((unsigned)green) >> 16; 1905 gbits = ((unsigned)green) >> 16;
1904#if LCD_PIXELFORMAT == RGB565 1906#if LCD_PIXELFORMAT == RGB565