summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/gui/quickscreen.c10
-rw-r--r--apps/lang/english.lang42
-rw-r--r--apps/menus/playback_menu.c25
-rw-r--r--apps/playback.c29
-rw-r--r--apps/playback.h3
-rw-r--r--apps/settings.c3
-rw-r--r--apps/settings.h14
-rw-r--r--apps/settings_list.c10
-rw-r--r--apps/shortcuts.c11
-rw-r--r--manual/appendix/config_file_options.tex4
-rw-r--r--manual/configure_rockbox/playback_options.tex8
11 files changed, 153 insertions, 6 deletions
diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c
index b2f5050ab3..a7d07f4e33 100644
--- a/apps/gui/quickscreen.c
+++ b/apps/gui/quickscreen.c
@@ -39,6 +39,9 @@
#include "option_select.h"
#include "debug.h"
#include "shortcuts.h"
+#ifdef HAVE_ALBUMART
+#include "playback.h"
+#endif
/* 1 top, 1 bottom, 2 on either side, 1 for the icons
* if enough space, top and bottom have 2 lines */
@@ -411,6 +414,9 @@ int quick_screen_quick(int button_enter)
struct gui_quickscreen qs;
bool oldshuffle = global_settings.playlist_shuffle;
int oldrepeat = global_settings.repeat_mode;
+#ifdef HAVE_ALBUMART
+ int old_album_art = global_settings.album_art;
+#endif
bool usb = false;
if (global_settings.shortcuts_replaces_qs)
@@ -446,6 +452,10 @@ int quick_screen_quick(int button_enter)
else
playlist_sort(NULL, true);
}
+#ifdef HAVE_ALBUMART
+ if (old_album_art != global_settings.album_art)
+ set_albumart_mode(global_settings.album_art);
+#endif
}
return (usb ? 1:0);
}
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 86d1dc5daf..43d73a8445 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -16187,3 +16187,45 @@
*: "Descending"
</voice>
</phrase>
+<phrase>
+ id: LANG_ALBUM_ART
+ desc: in Settings
+ user: core
+ <source>
+ *: "Album Art"
+ </source>
+ <dest>
+ *: "Album Art"
+ </dest>
+ <voice>
+ *: "Album Art"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_PREFER_EMBEDDED
+ desc: in Settings
+ user: core
+ <source>
+ *: "Prefer Embedded"
+ </source>
+ <dest>
+ *: "Prefer Embedded"
+ </dest>
+ <voice>
+ *: "Prefer Embedded"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_PREFER_IMAGE_FILE
+ desc: in Settings
+ user: core
+ <source>
+ *: "Prefer Image File"
+ </source>
+ <dest>
+ *: "Prefer Image File"
+ </dest>
+ <voice>
+ *: "Prefer Image File"
+ </voice>
+</phrase>
diff --git a/apps/menus/playback_menu.c b/apps/menus/playback_menu.c
index 5f9479fae3..fe319d6027 100644
--- a/apps/menus/playback_menu.c
+++ b/apps/menus/playback_menu.c
@@ -201,6 +201,28 @@ MENUITEM_SETTING(pause_rewind, &global_settings.pause_rewind, NULL);
MENUITEM_SETTING(play_frequency, &global_settings.play_frequency,
playback_callback);
#endif
+#ifdef HAVE_ALBUMART
+static int albumart_callback(int action,
+ const struct menu_item_ex *this_item,
+ struct gui_synclist *this_list)
+{
+ (void)this_item;
+ (void)this_list;
+ static int initial_aa_setting;
+ switch (action)
+ {
+ case ACTION_ENTER_MENUITEM:
+ initial_aa_setting = global_settings.album_art;
+ break;
+ case ACTION_EXIT_MENUITEM: /* on exit */
+ if (initial_aa_setting != global_settings.album_art)
+ set_albumart_mode(global_settings.album_art);
+ }
+ return action;
+}
+MENUITEM_SETTING(album_art, &global_settings.album_art,
+ albumart_callback);
+#endif
MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0,
Icon_Playback_menu,
@@ -231,6 +253,9 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0,
#ifdef HAVE_PLAY_FREQ
,&play_frequency
#endif
+#ifdef HAVE_ALBUMART
+ ,&album_art
+#endif
);
static int playback_callback(int action,
diff --git a/apps/playback.c b/apps/playback.c
index 4162d9b647..cac28bd6e7 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -172,6 +172,8 @@ static struct mutex id3_mutex SHAREDBSS_ATTR; /* (A,O)*/
#define MAX_MULTIPLE_AA SKINNABLE_SCREENS_COUNT
#ifdef HAVE_ALBUMART
+static int albumart_mode = -1;
+
static struct albumart_slot
{
struct dim dim; /* Holds width, height of the albumart */
@@ -1690,6 +1692,15 @@ static bool audio_load_cuesheet(struct track_info *infop,
}
#ifdef HAVE_ALBUMART
+
+void set_albumart_mode(int setting)
+{
+ if (albumart_mode != -1 &&
+ albumart_mode != setting)
+ playback_update_aa_dims();
+ albumart_mode = setting;
+}
+
/* Load any album art for the file - returns false if the buffer is full */
static int audio_load_albumart(struct track_info *infop,
struct mp3entry *track_id3)
@@ -1709,18 +1720,28 @@ static int audio_load_albumart(struct track_info *infop,
memset(&user_data, 0, sizeof(user_data));
user_data.dim = &albumart_slots[i].dim;
+ char path[MAX_PATH];
+ if(global_settings.album_art == AA_PREFER_IMAGE_FILE &&
+ find_albumart(track_id3, path, sizeof(path),
+ &albumart_slots[i].dim))
+ {
+ user_data.embedded_albumart = NULL;
+ hid = bufopen(path, 0, TYPE_BITMAP, &user_data);
+ }
+
/* We can only decode jpeg for embedded AA */
- if (track_id3->has_embedded_albumart && track_id3->albumart.type == AA_TYPE_JPG)
+ if (global_settings.album_art != AA_OFF &&
+ hid < 0 && hid != ERR_BUFFER_FULL &&
+ track_id3->has_embedded_albumart && track_id3->albumart.type == AA_TYPE_JPG)
{
user_data.embedded_albumart = &track_id3->albumart;
hid = bufopen(track_id3->path, 0, TYPE_BITMAP, &user_data);
}
- if (hid < 0 && hid != ERR_BUFFER_FULL)
+ if (global_settings.album_art != AA_OFF &&
+ hid < 0 && hid != ERR_BUFFER_FULL)
{
/* No embedded AA or it couldn't be loaded - try other sources */
- char path[MAX_PATH];
-
if (find_albumart(track_id3, path, sizeof(path),
&albumart_slots[i].dim))
{
diff --git a/apps/playback.h b/apps/playback.h
index a87ef873d0..b9aa413ef3 100644
--- a/apps/playback.h
+++ b/apps/playback.h
@@ -85,6 +85,9 @@ void audio_set_crossfade(int enable);
#ifdef HAVE_PLAY_FREQ
void audio_set_playback_frequency(int setting);
#endif
+#ifdef HAVE_ALBUMART
+void set_albumart_mode(int setting);
+#endif
size_t audio_get_filebuflen(void);
diff --git a/apps/settings.c b/apps/settings.c
index 6d49beb5e3..566573ae68 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -945,6 +945,9 @@ void settings_apply(bool read_disk)
lcd_bidir_scroll(global_settings.bidir_limit);
lcd_scroll_delay(global_settings.scroll_delay);
+#ifdef HAVE_ALBUMART
+ set_albumart_mode(global_settings.album_art);
+#endif
#ifdef HAVE_PLAY_FREQ
/* before crossfade */
diff --git a/apps/settings.h b/apps/settings.h
index b3c31476e3..936280ba5a 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -127,6 +127,15 @@ enum
QUEUE_SHOW_IN_SUBMENU
};
+#ifdef HAVE_ALBUMART
+enum
+{
+ AA_OFF = 0,
+ AA_PREFER_EMBEDDED,
+ AA_PREFER_IMAGE_FILE
+};
+#endif
+
/* dir filter options */
/* Note: Any new filter modes need to be added before NUM_FILTER_MODES.
* Any new rockbox browse filter modes (accessible through the menu)
@@ -598,7 +607,10 @@ struct user_settings
bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */
bool show_shuffled_adding_options; /* whether to display options for adding shuffled tracks to dynamic playlist */
int show_queue_options; /* how and whether to display options to queue tracks */
-
+#ifdef HAVE_ALBUMART
+ int album_art; /* switch off album art display or choose preferred source */
+#endif
+
/* playlist viewer settings */
bool playlist_viewer_icons; /* display icons on viewer */
bool playlist_viewer_indices; /* display playlist indices on viewer */
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 795d42ceba..7b24db22e5 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -927,6 +927,16 @@ const struct settings_list settings[] = {
#error "HAVE_PLAY_FREQ < 48???"
#endif
#endif /* HAVE_PLAY_FREQ */
+
+#ifdef HAVE_ALBUMART
+ CHOICE_SETTING(0, album_art, LANG_ALBUM_ART, 1,
+ "album art", "off,prefer embedded,prefer image file",
+ NULL, 3,
+ ID2P(LANG_OFF),
+ ID2P(LANG_PREFER_EMBEDDED),
+ ID2P(LANG_PREFER_IMAGE_FILE)),
+#endif
+
/* LCD */
#ifdef HAVE_LCD_CONTRAST
/* its easier to leave this one un-macro()ed for the time being */
diff --git a/apps/shortcuts.c b/apps/shortcuts.c
index b0a949933c..9f042a926a 100644
--- a/apps/shortcuts.c
+++ b/apps/shortcuts.c
@@ -47,7 +47,9 @@
#include "screens.h"
#include "talk.h"
#include "yesno.h"
-
+#ifdef HAVE_ALBUMART
+#include "playback.h"
+#endif
#define MAX_SHORTCUT_NAME 32
#define SHORTCUTS_FILENAME ROCKBOX_DIR "/shortcuts.txt"
@@ -661,9 +663,16 @@ int do_shortcut_menu(void *ignored)
case SHORTCUT_SETTING:
{
int old_sleeptimer_duration = global_settings.sleeptimer_duration;
+#ifdef HAVE_ALBUMART
+ int old_album_art = global_settings.album_art;
+#endif
do_setting_screen(sc->u.setting,
sc->name[0] ? sc->name : P2STR(ID2P(sc->u.setting->lang_id)),NULL);
+#ifdef HAVE_ALBUMART
+ if (old_album_art != global_settings.album_art)
+ set_albumart_mode(global_settings.album_art);
+#endif
if (old_sleeptimer_duration != global_settings.sleeptimer_duration &&
get_sleep_timer())
set_sleeptimer_duration(global_settings.sleeptimer_duration);
diff --git a/manual/appendix/config_file_options.tex b/manual/appendix/config_file_options.tex
index b7e807baf4..09bc148535 100644
--- a/manual/appendix/config_file_options.tex
+++ b/manual/appendix/config_file_options.tex
@@ -132,6 +132,10 @@
rewind duration on pause & 0 to 15 & s\\
disable autoresume if phones not present & off, on & N/A\\
Last.fm Logging & off, on & N/A\\
+ \opt{albumart}{
+ album art
+ & off, prefer embedded, prefer image file & N/A\\
+ }
talk dir & off, number, spell& N/A\\
talk dir clip & off, on & N/A\\
talk file & off, number, spell& N/A\\
diff --git a/manual/configure_rockbox/playback_options.tex b/manual/configure_rockbox/playback_options.tex
index 6c8f5de316..2619125e5e 100644
--- a/manual/configure_rockbox/playback_options.tex
+++ b/manual/configure_rockbox/playback_options.tex
@@ -324,3 +324,11 @@ you to configure settings related to audio playback.
your audio. This is typically 44.1kHz.}
\note{Opus files are always 48kHz.}
}
+
+\opt{albumart}{
+ \section{Album Art}
+ Album art will not be loaded or displayed when set to \setting{Off}.
+ To prefer loading album art that is stored in a separate image file, set to
+ \setting{Prefer Image File}. The default behavior is to
+ \setting{Prefer Embedded} album art.
+} \ No newline at end of file