diff options
| author | Teruaki Kawashima <teru@rockbox.org> | 2009-11-18 13:54:14 +0000 |
|---|---|---|
| committer | Teruaki Kawashima <teru@rockbox.org> | 2009-11-18 13:54:14 +0000 |
| commit | 34447162033563900c8f93ce3471d54e7205f09a (patch) | |
| tree | 95c5918cbbde0046ac34d8e5daa739d7567ead14 /apps/plugins | |
| parent | 36fc4439c249957f59ffc82ea1ff1649daa14ead (diff) | |
| download | rockbox-34447162033563900c8f93ce3471d54e7205f09a.zip rockbox-34447162033563900c8f93ce3471d54e7205f09a.tar.gz rockbox-34447162033563900c8f93ce3471d54e7205f09a.tar.bz2 rockbox-34447162033563900c8f93ce3471d54e7205f09a.tar.xz | |
jpeg/png: Remove erased file name from list of file when change file.
Change trivial check of entries (entries is always > 0).
Fix bug of r23632 that error message is shown when change file while there is only one file.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23662 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
| -rw-r--r-- | apps/plugins/jpeg/jpeg.c | 81 | ||||
| -rw-r--r-- | apps/plugins/png/png.c | 74 |
2 files changed, 72 insertions, 83 deletions
diff --git a/apps/plugins/jpeg/jpeg.c b/apps/plugins/jpeg/jpeg.c index e3c210b..1049e48 100644 --- a/apps/plugins/jpeg/jpeg.c +++ b/apps/plugins/jpeg/jpeg.c @@ -55,8 +55,6 @@ GREY_INFO_STRUCT #define MYXLCD(fn) xlcd_ ## fn #endif -#define MAX_X_SIZE LCD_WIDTH*8 - /* Min memory allowing us to use the plugin buffer * and thus not stopping the music * *Very* rough estimation: @@ -233,40 +231,34 @@ void get_pic_list(void) int change_filename(int direct) { - int count = 0; + bool file_erased = (file_pt[curfile] == NULL); direction = direct; - if(direct == DIR_PREV) - { - do - { - count++; - if(curfile == 0) - curfile = entries - 1; - else - curfile--; - }while(file_pt[curfile] == NULL && count < entries); - /* we "erase" the file name if we encounter - * a non-supported file, so skip it now */ - } - else /* DIR_NEXT/DIR_NONE */ + curfile += (direct == DIR_PREV? entries - 1: 1); + if (curfile >= entries) + curfile -= entries; + + if (file_erased) { - do + /* remove 'erased' file names from list. */ + int count, i; + for (count = i = 0; i < entries; i++) { - count++; - if(curfile == entries - 1) - curfile = 0; - else - curfile++; - }while(file_pt[curfile] == NULL && count < entries); + if (curfile == i) + curfile = count; + if (file_pt[i] != NULL) + file_pt[count++] = file_pt[i]; + } + entries = count; } - if(count == entries) + if (entries == 0) { rb->splash(HZ, "No supported files"); return PLUGIN_ERROR; } - if(rb->strlen(tree->currdir) > 1) + + if (rb->strlen(tree->currdir) > 1) { rb->strcpy(np_file, tree->currdir); rb->strcat(np_file, "/"); @@ -572,14 +564,16 @@ int scroll_bmp(struct t_disp* pdisp) switch(button) { case JPEG_LEFT: - if (!(ds < ds_max) && entries > 0 && jpg.x_size <= MAX_X_SIZE) + if (entries > 1 && pdisp->width <= LCD_WIDTH + && pdisp->height <= LCD_HEIGHT) return change_filename(DIR_PREV); case JPEG_LEFT | BUTTON_REPEAT: pan_view_left(pdisp); break; case JPEG_RIGHT: - if (!(ds < ds_max) && entries > 0 && jpg.x_size <= MAX_X_SIZE) + if (entries > 1 && pdisp->width <= LCD_WIDTH + && pdisp->height <= LCD_HEIGHT) return change_filename(DIR_NEXT); case JPEG_RIGHT | BUTTON_REPEAT: pan_view_right(pdisp); @@ -599,7 +593,7 @@ int scroll_bmp(struct t_disp* pdisp) if (!slideshow_enabled) break; running_slideshow = true; - if (entries > 0) + if (entries > 1) return change_filename(DIR_NEXT); break; @@ -614,7 +608,7 @@ int scroll_bmp(struct t_disp* pdisp) case JPEG_NEXT_REPEAT: #endif case JPEG_NEXT: - if (entries > 0) + if (entries > 1) return change_filename(DIR_NEXT); break; @@ -622,7 +616,7 @@ int scroll_bmp(struct t_disp* pdisp) case JPEG_PREVIOUS_REPEAT: #endif case JPEG_PREVIOUS: - if (entries > 0) + if (entries > 1) return change_filename(DIR_PREV); break; @@ -675,21 +669,23 @@ int scroll_bmp(struct t_disp* pdisp) /********************* main function *************************/ /* callback updating a progress meter while JPEG decoding */ -void cb_progess(int current, int total) +void cb_progress(int current, int total) { rb->yield(); /* be nice to the other threads */ if(!running_slideshow) { - rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN],0, LCD_HEIGHT-8, LCD_WIDTH, 8, total, 0, - current, HORIZONTAL); + rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], + 0, LCD_HEIGHT-8, LCD_WIDTH, 8, + total, 0, current, HORIZONTAL); rb->lcd_update_rect(0, LCD_HEIGHT-8, LCD_WIDTH, 8); } #ifndef USEGSLIB else { /* in slideshow mode, keep gui interference to a minimum */ - rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN],0, LCD_HEIGHT-4, LCD_WIDTH, 4, total, 0, - current, HORIZONTAL); + rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], + 0, LCD_HEIGHT-4, LCD_WIDTH, 4, + total, 0, current, HORIZONTAL); rb->lcd_update_rect(0, LCD_HEIGHT-4, LCD_WIDTH, 4); } #endif @@ -727,14 +723,13 @@ int min_downscale(struct jpeg *p_jpg, int bufsize) return downscale; } - /* how far can we zoom out, to fit image into the LCD */ int max_downscale(struct jpeg *p_jpg) { int downscale = 1; - while (downscale < 8 && (p_jpg->x_size > LCD_WIDTH*downscale - || p_jpg->y_size > LCD_HEIGHT*downscale)) + while (downscale < 8 && (p_jpg->x_size/downscale > LCD_WIDTH + || p_jpg->y_size/downscale > LCD_HEIGHT)) { downscale *= 2; } @@ -816,15 +811,14 @@ struct t_disp* get_image(struct jpeg* p_jpg, int ds) time = *rb->current_tick; #ifdef HAVE_ADJUSTABLE_CPU_FREQ rb->cpu_boost(true); - status = jpeg_decode(p_jpg, p_disp->bitmap, ds, cb_progess); + status = jpeg_decode(p_jpg, p_disp->bitmap, ds, cb_progress); rb->cpu_boost(false); #else - status = jpeg_decode(p_jpg, p_disp->bitmap, ds, cb_progess); + status = jpeg_decode(p_jpg, p_disp->bitmap, ds, cb_progress); #endif if (status) { rb->splashf(HZ, "decode error %d", status); - file_pt[curfile] = NULL; return NULL; } time = *rb->current_tick - time; @@ -1038,7 +1032,10 @@ int load_and_show(char* filename) { p_disp = get_image(&jpg, ds); /* decode or fetch from cache */ if (p_disp == NULL) + { + file_pt[curfile] = NULL; return change_filename(direction); + } set_view(p_disp, cx, cy); diff --git a/apps/plugins/png/png.c b/apps/plugins/png/png.c index 4cbf74c..e506057 100644 --- a/apps/plugins/png/png.c +++ b/apps/plugins/png/png.c @@ -225,8 +225,6 @@ static struct configdata png_config[] = static fb_data* old_backdrop; #endif -#define MAX_X_SIZE LCD_WIDTH*8 - /* Min memory allowing us to use the plugin buffer * and thus not stopping the music * *Very* rough estimation: @@ -1369,35 +1367,28 @@ void get_pic_list(void) int change_filename(int direct) { - int count = 0; + bool file_erased = (file_pt[curfile] == NULL); direction = direct; - if (direct == DIR_PREV) - { - do - { - count++; - if (curfile == 0) - curfile = entries - 1; - else - curfile--; - }while (file_pt[curfile] == NULL && count < entries); - /* we "erase" the file name if we encounter - * a non-supported file, so skip it now */ - } - else /* DIR_NEXT/DIR_NONE */ + curfile += (direct == DIR_PREV? entries - 1: 1); + if (curfile >= entries) + curfile -= entries; + + if (file_erased) { - do + /* remove 'erased' file names from list. */ + int count, i; + for (count = i = 0; i < entries; i++) { - count++; - if (curfile == entries - 1) - curfile = 0; - else - curfile++; - }while (file_pt[curfile] == NULL && count < entries); + if (curfile == i) + curfile = count; + if (file_pt[i] != NULL) + file_pt[count++] = file_pt[i]; + } + entries = count; } - if (count == entries) + if (entries == 0) { rb->splash(HZ, "No supported files"); return PLUGIN_ERROR; @@ -1613,14 +1604,16 @@ int scroll_bmp(struct LodePNG_Decoder* decoder) switch (button) { case PNG_LEFT: - if (!(ds < ds_max) && entries > 0 && decoder->infoPng.width <= MAX_X_SIZE) + if (entries > 1 && decoder->infoPng.width/ds <= LCD_WIDTH + && decoder->infoPng.height/ds <= LCD_HEIGHT) return change_filename(DIR_PREV); case PNG_LEFT | BUTTON_REPEAT: pan_view_left(decoder); break; case PNG_RIGHT: - if (!(ds < ds_max) && entries > 0 && decoder->infoPng.width <= MAX_X_SIZE) + if (entries > 1 && decoder->infoPng.width/ds <= LCD_WIDTH + && decoder->infoPng.height/ds <= LCD_HEIGHT) return change_filename(DIR_NEXT); case PNG_RIGHT | BUTTON_REPEAT: pan_view_right(decoder); @@ -1640,7 +1633,7 @@ int scroll_bmp(struct LodePNG_Decoder* decoder) if (!slideshow_enabled) break; running_slideshow = true; - if (entries > 0) + if (entries > 1) return change_filename(DIR_NEXT); break; @@ -1655,7 +1648,7 @@ int scroll_bmp(struct LodePNG_Decoder* decoder) case PNG_NEXT_REPEAT: #endif case PNG_NEXT: - if (entries > 0) + if (entries > 1) return change_filename(DIR_NEXT); break; @@ -1663,7 +1656,7 @@ int scroll_bmp(struct LodePNG_Decoder* decoder) case PNG_PREVIOUS_REPEAT: #endif case PNG_PREVIOUS: - if (entries > 0) + if (entries > 1) return change_filename(DIR_PREV); break; @@ -1735,15 +1728,17 @@ void cb_progress(int current, int total) if (current & 1) rb->yield(); /* be nice to the other threads */ if (!running_slideshow) { - rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN],0, LCD_HEIGHT-8, LCD_WIDTH, 8, total, 0, - current, HORIZONTAL); + rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], + 0, LCD_HEIGHT-8, LCD_WIDTH, 8, + total, 0, current, HORIZONTAL); rb->lcd_update_rect(0, LCD_HEIGHT-8, LCD_WIDTH, 8); } else { /* in slideshow mode, keep gui interference to a minimum */ - rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN],0, LCD_HEIGHT-4, LCD_WIDTH, 4, total, 0, - current, HORIZONTAL); + rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], + 0, LCD_HEIGHT-4, LCD_WIDTH, 4, + total, 0, current, HORIZONTAL); rb->lcd_update_rect(0, LCD_HEIGHT-4, LCD_WIDTH, 4); } } @@ -1772,8 +1767,8 @@ unsigned max_downscale(struct LodePNG_Decoder* decoder) { unsigned downscale = 1; - while (downscale < 8 && (decoder->infoPng.width > LCD_WIDTH*downscale - || decoder->infoPng.height > LCD_HEIGHT*downscale)) + while (downscale < 8 && (decoder->infoPng.width/downscale > LCD_WIDTH + || decoder->infoPng.height/downscale > LCD_HEIGHT)) { downscale *= 2; } @@ -2007,8 +2002,7 @@ int load_and_show(char* filename) { case PNG_ZOOM_IN: plug_buf = false; - memory = rb->plugin_get_audio_buffer( - (size_t *)&memory_size); + memory = rb->plugin_get_audio_buffer((size_t *)&memory_size); memory_max = memory + memory_size - 1; /*try again this file, now using the audio buffer */ return PLUGIN_OTHER; @@ -2117,8 +2111,6 @@ int load_and_show(char* filename) if (decoder.error == PLUGIN_ABORT) { return PLUGIN_OK; - } else if (decoder.error == OUT_OF_MEMORY && entries == 1) { - return PLUGIN_ERROR; } else { file_pt[curfile] = NULL; return change_filename(direction); @@ -2220,7 +2212,7 @@ enum plugin_status plugin_start(const void* parameter) if (rb->audio_status()) { plug_buf = true; } else { - memory = (unsigned char *)rb->plugin_get_audio_buffer((size_t *)&memory_size); + memory = rb->plugin_get_audio_buffer((size_t *)&memory_size); } #endif |