From 4bef502d4d7fb95f0afb4ac8cb293315d35bb3da Mon Sep 17 00:00:00 2001 From: Sean Bartell Date: Mon, 22 Aug 2011 01:36:25 -0400 Subject: rbcodec refactoring: autoresumable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moved to playback.c, since it doesn't use metadata from the music file. Change-Id: I5c3ad7750d94b36754f64eb302f96ec163785cb9 Reviewed-on: http://gerrit.rockbox.org/142 Reviewed-by: Nils Wallménius --- apps/playback.c | 58 ++++++++++++++++++++++++++++++++++++ lib/rbcodec/metadata/metadata.c | 65 ----------------------------------------- lib/rbcodec/metadata/metadata.h | 4 --- 3 files changed, 58 insertions(+), 69 deletions(-) diff --git a/apps/playback.c b/apps/playback.c index 944775d6e1..997a374410 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1379,6 +1379,64 @@ static bool audio_init_codec(struct track_info *track_info, (void)track_info; /* When codec buffering isn't supported */ } +#ifdef HAVE_TAGCACHE +/* Check settings for whether the file should be autoresumed */ +enum { AUTORESUMABLE_UNKNOWN = 0, AUTORESUMABLE_TRUE, AUTORESUMABLE_FALSE }; +static bool autoresumable(struct mp3entry *id3) +{ + char *endp, *path; + size_t len; + bool is_resumable; + + if (id3->autoresumable) /* result cached? */ + return id3->autoresumable == AUTORESUMABLE_TRUE; + + is_resumable = false; + + if (id3->path) + { + for (path = global_settings.autoresume_paths; + *path; /* search terms left? */ + path++) + { + if (*path == ':') /* Skip empty search patterns */ + continue; + + /* FIXME: As soon as strcspn or strchrnul are made available in + the core, the following can be made more efficient. */ + endp = strchr(path, ':'); + if (endp) + len = endp - path; + else + len = strlen(path); + + /* Note: At this point, len is always > 0 */ + + if (strncasecmp(id3->path, path, len) == 0) + { + /* Full directory-name matches only. Trailing '/' in + search path OK. */ + if (id3->path[len] == '/' || id3->path[len - 1] == '/') + { + is_resumable = true; + break; + } + } + path += len - 1; + } + } + + /* cache result */ + id3->autoresumable = + is_resumable ? AUTORESUMABLE_TRUE : AUTORESUMABLE_FALSE; + + logf("autoresumable: %s is%s resumable", + id3->path, is_resumable ? "" : " not"); + + return is_resumable; +} +#endif /* HAVE_TAGCACHE */ + /* Start the codec for the current track scheduled to be decoded */ static bool audio_start_codec(bool auto_skip) { diff --git a/lib/rbcodec/metadata/metadata.c b/lib/rbcodec/metadata/metadata.c index 6837e97316..3fe9860441 100644 --- a/lib/rbcodec/metadata/metadata.c +++ b/lib/rbcodec/metadata/metadata.c @@ -25,7 +25,6 @@ #include "debug.h" #include "logf.h" -#include "settings.h" #include "cuesheet.h" #include "metadata.h" @@ -571,67 +570,3 @@ void fill_metadata_from_path(struct mp3entry *id3, const char *trackname) strlcpy(id3->path, trackname, sizeof (id3->path)); } #endif /* CONFIG_CODEC == SWCODEC */ - -#ifndef __PCTOOL__ -#ifdef HAVE_TAGCACHE -#if CONFIG_CODEC == SWCODEC - -enum { AUTORESUMABLE_UNKNOWN = 0, AUTORESUMABLE_TRUE, AUTORESUMABLE_FALSE }; - -bool autoresumable(struct mp3entry *id3) -{ - char *endp, *path; - size_t len; - bool is_resumable; - - if (id3->autoresumable) /* result cached? */ - return id3->autoresumable == AUTORESUMABLE_TRUE; - - is_resumable = false; - - if (id3->path) - { - for (path = global_settings.autoresume_paths; - *path; /* search terms left? */ - path++) - { - if (*path == ':') /* Skip empty search patterns */ - continue; - - /* FIXME: As soon as strcspn or strchrnul are made available in - the core, the following can be made more efficient. */ - endp = strchr(path, ':'); - if (endp) - len = endp - path; - else - len = strlen(path); - - /* Note: At this point, len is always > 0 */ - - if (strncasecmp(id3->path, path, len) == 0) - { - /* Full directory-name matches only. Trailing '/' in - search path OK. */ - if (id3->path[len] == '/' || id3->path[len - 1] == '/') - { - is_resumable = true; - break; - } - } - path += len - 1; - } - } - - /* cache result */ - id3->autoresumable = - is_resumable ? AUTORESUMABLE_TRUE : AUTORESUMABLE_FALSE; - - logf("autoresumable: %s is%s resumable", - id3->path, is_resumable ? "" : " not"); - - return is_resumable; -} - -#endif /* SWCODEC */ -#endif /* HAVE_TAGCACHE */ -#endif /* __PCTOOL__ */ diff --git a/lib/rbcodec/metadata/metadata.h b/lib/rbcodec/metadata/metadata.h index 5a1c17bc11..6d711aff28 100644 --- a/lib/rbcodec/metadata/metadata.h +++ b/lib/rbcodec/metadata/metadata.h @@ -344,10 +344,6 @@ bool rbcodec_format_is_atomic(int afmt); bool format_buffers_with_offset(int afmt); #endif -#ifdef HAVE_TAGCACHE -bool autoresumable(struct mp3entry *id3); -#endif - #endif -- cgit v1.2.3