diff options
Diffstat (limited to 'apps/plugins/jpeg.c')
-rw-r--r-- | apps/plugins/jpeg.c | 30 |
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 */ |
1789 | void yuv_bitmap_part(unsigned char *src[3], int csub_x, int csub_y, | 1791 | void 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 |