summaryrefslogtreecommitdiff
path: root/apps/plugins/jpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/jpeg.c')
-rw-r--r--apps/plugins/jpeg.c79
1 files changed, 60 insertions, 19 deletions
diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c
index 37c5ed6c99..e24c048ae8 100644
--- a/apps/plugins/jpeg.c
+++ b/apps/plugins/jpeg.c
@@ -23,11 +23,11 @@
23* 23*
24****************************************************************************/ 24****************************************************************************/
25 25
26#ifndef SIMULATOR /* not for simulator by now */
27#include "plugin.h" 26#include "plugin.h"
28 27
29#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) 28#if defined(HAVE_LCD_BITMAP) && ((LCD_DEPTH >= 8) || !defined(SIMULATOR))
30#include "gray.h" 29#include "gray.h"
30#include "xlcd.h"
31 31
32PLUGIN_HEADER 32PLUGIN_HEADER
33 33
@@ -51,7 +51,8 @@ PLUGIN_HEADER
51#define JPEG_RIGHT BUTTON_RIGHT 51#define JPEG_RIGHT BUTTON_RIGHT
52#define JPEG_QUIT BUTTON_OFF 52#define JPEG_QUIT BUTTON_OFF
53 53
54#elif CONFIG_KEYPAD == IRIVER_H100_PAD 54#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
55 (CONFIG_KEYPAD == IRIVER_H300_PAD)
55#define JPEG_ZOOM_IN BUTTON_SELECT 56#define JPEG_ZOOM_IN BUTTON_SELECT
56#define JPEG_ZOOM_OUT BUTTON_MODE 57#define JPEG_ZOOM_OUT BUTTON_MODE
57#define JPEG_UP BUTTON_UP 58#define JPEG_UP BUTTON_UP
@@ -69,6 +70,27 @@ PLUGIN_HEADER
69#define JPEG_RIGHT BUTTON_RIGHT 70#define JPEG_RIGHT BUTTON_RIGHT
70#define JPEG_QUIT BUTTON_SELECT 71#define JPEG_QUIT BUTTON_SELECT
71 72
73#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
74#define JPEG_ZOOM_IN_PRE BUTTON_MENU
75#define JPEG_ZOOM_IN (BUTTON_MENU | BUTTON_REL)
76#define JPEG_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT)
77#define JPEG_UP BUTTON_UP
78#define JPEG_DOWN BUTTON_DOWN
79#define JPEG_LEFT BUTTON_LEFT
80#define JPEG_RIGHT BUTTON_RIGHT
81#define JPEG_QUIT BUTTON_POWER
82#endif
83
84/* different graphics libraries */
85#if LCD_DEPTH < 8
86#define USEGSLIB
87#define MYLCD(fn) gray_ub_ ## fn
88#define MYLCD_UPDATE()
89#define MYXLCD(fn) gray_ub_ ## fn
90#else
91#define MYLCD(fn) rb->lcd_ ## fn
92#define MYLCD_UPDATE() rb->lcd_update();
93#define MYXLCD(fn) xlcd_ ## fn
72#endif 94#endif
73 95
74/******************************* Globals ***********************************/ 96/******************************* Globals ***********************************/
@@ -1538,8 +1560,9 @@ int root_size;
1538void cleanup(void *parameter) 1560void cleanup(void *parameter)
1539{ 1561{
1540 (void)parameter; 1562 (void)parameter;
1541 1563#ifdef USEGSLIB
1542 gray_show(false); 1564 gray_show(false);
1565#endif
1543} 1566}
1544 1567
1545#define VSCROLL (LCD_HEIGHT/8) 1568#define VSCROLL (LCD_HEIGHT/8)
@@ -1570,12 +1593,13 @@ int scroll_bmp(struct t_disp* pdisp)
1570 move = MIN(HSCROLL, pdisp->x); 1593 move = MIN(HSCROLL, pdisp->x);
1571 if (move > 0) 1594 if (move > 0)
1572 { 1595 {
1573 gray_ub_scroll_right(move); /* scroll right */ 1596 MYXLCD(scroll_right)(move); /* scroll right */
1574 pdisp->x -= move; 1597 pdisp->x -= move;
1575 gray_ub_gray_bitmap_part( 1598 MYXLCD(gray_bitmap_part)(
1576 pdisp->bitmap, pdisp->x, pdisp->y, pdisp->stride, 1599 pdisp->bitmap, pdisp->x, pdisp->y, pdisp->stride,
1577 0, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */ 1600 0, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */
1578 move, MIN(LCD_HEIGHT, pdisp->height)); /* w, h */ 1601 move, MIN(LCD_HEIGHT, pdisp->height)); /* w, h */
1602 MYLCD_UPDATE();
1579 } 1603 }
1580 break; 1604 break;
1581 1605
@@ -1584,13 +1608,14 @@ int scroll_bmp(struct t_disp* pdisp)
1584 move = MIN(HSCROLL, pdisp->width - pdisp->x - LCD_WIDTH); 1608 move = MIN(HSCROLL, pdisp->width - pdisp->x - LCD_WIDTH);
1585 if (move > 0) 1609 if (move > 0)
1586 { 1610 {
1587 gray_ub_scroll_left(move); /* scroll left */ 1611 MYXLCD(scroll_left)(move); /* scroll left */
1588 pdisp->x += move; 1612 pdisp->x += move;
1589 gray_ub_gray_bitmap_part( 1613 MYXLCD(gray_bitmap_part)(
1590 pdisp->bitmap, pdisp->x + LCD_WIDTH - move, 1614 pdisp->bitmap, pdisp->x + LCD_WIDTH - move,
1591 pdisp->y, pdisp->stride, 1615 pdisp->y, pdisp->stride,
1592 LCD_WIDTH - move, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */ 1616 LCD_WIDTH - move, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */
1593 move, MIN(LCD_HEIGHT, pdisp->height)); /* w, h */ 1617 move, MIN(LCD_HEIGHT, pdisp->height)); /* w, h */
1618 MYLCD_UPDATE();
1594 } 1619 }
1595 break; 1620 break;
1596 1621
@@ -1599,12 +1624,13 @@ int scroll_bmp(struct t_disp* pdisp)
1599 move = MIN(VSCROLL, pdisp->y); 1624 move = MIN(VSCROLL, pdisp->y);
1600 if (move > 0) 1625 if (move > 0)
1601 { 1626 {
1602 gray_ub_scroll_down(move); /* scroll down */ 1627 MYXLCD(scroll_down)(move); /* scroll down */
1603 pdisp->y -= move; 1628 pdisp->y -= move;
1604 gray_ub_gray_bitmap_part( 1629 MYXLCD(gray_bitmap_part)(
1605 pdisp->bitmap, pdisp->x, pdisp->y, pdisp->stride, 1630 pdisp->bitmap, pdisp->x, pdisp->y, pdisp->stride,
1606 MAX(0, (LCD_WIDTH-pdisp->width)/2), 0, /* x, y */ 1631 MAX(0, (LCD_WIDTH-pdisp->width)/2), 0, /* x, y */
1607 MIN(LCD_WIDTH, pdisp->width), move); /* w, h */ 1632 MIN(LCD_WIDTH, pdisp->width), move); /* w, h */
1633 MYLCD_UPDATE();
1608 } 1634 }
1609 break; 1635 break;
1610 1636
@@ -1613,13 +1639,14 @@ int scroll_bmp(struct t_disp* pdisp)
1613 move = MIN(VSCROLL, pdisp->height - pdisp->y - LCD_HEIGHT); 1639 move = MIN(VSCROLL, pdisp->height - pdisp->y - LCD_HEIGHT);
1614 if (move > 0) 1640 if (move > 0)
1615 { 1641 {
1616 gray_ub_scroll_up(move); /* scroll up */ 1642 MYXLCD(scroll_up)(move); /* scroll up */
1617 pdisp->y += move; 1643 pdisp->y += move;
1618 gray_ub_gray_bitmap_part( 1644 MYXLCD(gray_bitmap_part)(
1619 pdisp->bitmap, pdisp->x, 1645 pdisp->bitmap, pdisp->x,
1620 pdisp->y + LCD_HEIGHT - move, pdisp->stride, 1646 pdisp->y + LCD_HEIGHT - move, pdisp->stride,
1621 MAX(0, (LCD_WIDTH-pdisp->width)/2), LCD_HEIGHT - move, /* x, y */ 1647 MAX(0, (LCD_WIDTH-pdisp->width)/2), LCD_HEIGHT - move, /* x, y */
1622 MIN(LCD_WIDTH, pdisp->width), move); /* w, h */ 1648 MIN(LCD_WIDTH, pdisp->width), move); /* w, h */
1649 MYLCD_UPDATE();
1623 } 1650 }
1624 break; 1651 break;
1625 1652
@@ -1821,12 +1848,14 @@ void get_view(struct t_disp* p_disp, int* p_cx, int* p_cy)
1821 1848
1822 1849
1823/* load, decode, display the image */ 1850/* load, decode, display the image */
1824int main(char* filename) 1851int plugin_main(char* filename)
1825{ 1852{
1826 int fd; 1853 int fd;
1827 int filesize; 1854 int filesize;
1855#ifdef USEGSLIB
1828 int grayscales; 1856 int grayscales;
1829 long graysize; // helper 1857 long graysize; // helper
1858#endif
1830 unsigned char* buf_jpeg; /* compressed JPEG image */ 1859 unsigned char* buf_jpeg; /* compressed JPEG image */
1831 static struct jpeg jpg; /* too large for stack */ 1860 static struct jpeg jpg; /* too large for stack */
1832 int status; 1861 int status;
@@ -1847,6 +1876,7 @@ int main(char* filename)
1847 buf = rb->plugin_get_audio_buffer(&buf_size); /* start munching memory */ 1876 buf = rb->plugin_get_audio_buffer(&buf_size); /* start munching memory */
1848 1877
1849 1878
1879#ifdef USEGSLIB
1850 /* initialize the grayscale buffer: 32 bitplanes for 33 shades of gray. */ 1880 /* initialize the grayscale buffer: 32 bitplanes for 33 shades of gray. */
1851 grayscales = gray_init(rb, buf, buf_size, false, LCD_WIDTH, LCD_HEIGHT/8, 1881 grayscales = gray_init(rb, buf, buf_size, false, LCD_WIDTH, LCD_HEIGHT/8,
1852 32, &graysize) + 1; 1882 32, &graysize) + 1;
@@ -1858,6 +1888,9 @@ int main(char* filename)
1858 rb->close(fd); 1888 rb->close(fd);
1859 return PLUGIN_ERROR; 1889 return PLUGIN_ERROR;
1860 } 1890 }
1891#else
1892 xlcd_init(rb);
1893#endif
1861 1894
1862 1895
1863 /* allocate JPEG buffer */ 1896 /* allocate JPEG buffer */
@@ -1927,15 +1960,18 @@ int main(char* filename)
1927 rb->lcd_puts(0, 3, print); 1960 rb->lcd_puts(0, 3, print);
1928 rb->lcd_update(); 1961 rb->lcd_update();
1929 1962
1930 gray_ub_clear_display(); 1963 MYLCD(clear_display)();
1931 gray_ub_gray_bitmap_part( 1964 MYXLCD(gray_bitmap_part)(
1932 p_disp->bitmap, p_disp->x, p_disp->y, p_disp->stride, 1965 p_disp->bitmap, p_disp->x, p_disp->y, p_disp->stride,
1933 MAX(0, (LCD_WIDTH - p_disp->width) / 2), 1966 MAX(0, (LCD_WIDTH - p_disp->width) / 2),
1934 MAX(0, (LCD_HEIGHT - p_disp->height) / 2), 1967 MAX(0, (LCD_HEIGHT - p_disp->height) / 2),
1935 MIN(LCD_WIDTH, p_disp->width), 1968 MIN(LCD_WIDTH, p_disp->width),
1936 MIN(LCD_HEIGHT, p_disp->height)); 1969 MIN(LCD_HEIGHT, p_disp->height));
1970 MYLCD_UPDATE();
1937 1971
1972#ifdef USEGSLIB
1938 gray_show(true); /* switch on grayscale overlay */ 1973 gray_show(true); /* switch on grayscale overlay */
1974#endif
1939 1975
1940 /* drawing is now finished, play around with scrolling 1976 /* drawing is now finished, play around with scrolling
1941 * until you press OFF or connect USB 1977 * until you press OFF or connect USB
@@ -1971,12 +2007,18 @@ int main(char* filename)
1971 break; 2007 break;
1972 } 2008 }
1973 2009
2010#ifdef USEGSLIB
1974 gray_show(false); /* switch off overlay */ 2011 gray_show(false); /* switch off overlay */
2012#else
2013 rb->lcd_clear_display();
2014#endif
1975 2015
1976 } 2016 }
1977 while (status != PLUGIN_OK && status != PLUGIN_USB_CONNECTED); 2017 while (status != PLUGIN_OK && status != PLUGIN_USB_CONNECTED);
1978 2018
2019#ifdef USEGSLIB
1979 gray_release(); /* deinitialize */ 2020 gray_release(); /* deinitialize */
2021#endif
1980 2022
1981 return status; 2023 return status;
1982} 2024}
@@ -1987,9 +2029,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
1987{ 2029{
1988 rb = api; /* copy to global api pointer */ 2030 rb = api; /* copy to global api pointer */
1989 2031
1990 return main((char*)parameter); 2032 return plugin_main((char*)parameter);
1991} 2033}
1992 2034
1993#endif /* #ifdef HAVE_LCD_BITMAP */ 2035#endif /* HAVE_LCD_BITMAP && ((LCD_DEPTH >= 8) || !defined(SIMULATOR))*/
1994#endif /* #ifndef SIMULATOR */
1995 2036