24b136f62d
swcodec: search for a .cue during buffering (with the possibility of adding embedded cuesheets later) hwcodec: search for a .cue when the id3 info for the current track is requested for the first time (disk should be spining so non issue) major beenfit from this is simplofy cuesheet handling code a bit... if mp3entry.cuesheet != NULL then there is a valid cuesheet.. no need to worry about if its enabled and preloaded. There is the possibility of putting the next/prev subtrack handling inside the playback code (as well as the id3 updating stuff (see FS#9789 for more info), but thats probably not a good idea. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21978 a1c6a512-1295-4272-9138-f99709370657
88 lines
3 KiB
C
88 lines
3 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2007 Nicolas Pennequin, Jonathan Gordon
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef _CUESHEET_H_
|
|
#define _CUESHEET_H_
|
|
|
|
#include <stdbool.h>
|
|
#include "screens.h"
|
|
#include "file.h"
|
|
#include "metadata.h"
|
|
|
|
#define MAX_NAME 80 /* Max length of information strings */
|
|
#define MAX_TRACKS 99 /* Max number of tracks in a cuesheet */
|
|
|
|
struct cue_track_info {
|
|
char title[MAX_NAME*3+1];
|
|
char performer[MAX_NAME*3+1];
|
|
char songwriter[MAX_NAME*3+1];
|
|
unsigned long offset; /* ms from start of track */
|
|
};
|
|
|
|
struct cuesheet {
|
|
char path[MAX_PATH];
|
|
char audio_filename[MAX_PATH];
|
|
|
|
char title[MAX_NAME*3+1];
|
|
char performer[MAX_NAME*3+1];
|
|
char songwriter[MAX_NAME*3+1];
|
|
|
|
int track_count;
|
|
struct cue_track_info tracks[MAX_TRACKS];
|
|
|
|
int curr_track_idx;
|
|
struct cue_track_info *curr_track;
|
|
};
|
|
|
|
/* looks if there is a cuesheet file that has a name matching "trackpath" */
|
|
bool look_for_cuesheet_file(const char *trackpath, char *found_cue_path);
|
|
|
|
/* parse cuesheet "file" and store the information in "cue" */
|
|
bool parse_cuesheet(char *file, struct cuesheet *cue);
|
|
|
|
/* reads a cuesheet to find the audio track associated to it */
|
|
bool get_trackname_from_cuesheet(char *filename, char *buf);
|
|
|
|
/* display a cuesheet struct */
|
|
void browse_cuesheet(struct cuesheet *cue);
|
|
|
|
/* display a cuesheet file after parsing and loading it to the plugin buffer */
|
|
bool display_cuesheet_content(char* filename);
|
|
|
|
/* finds the index of the current track played within a cuesheet */
|
|
int cue_find_current_track(struct cuesheet *cue, unsigned long curpos);
|
|
|
|
/* update the id3 info to that of the currently playing track in the cuesheet */
|
|
void cue_spoof_id3(struct cuesheet *cue, struct mp3entry *id3);
|
|
|
|
/* skip to next track in the cuesheet towards "direction" (which is 1 or -1) */
|
|
bool curr_cuesheet_skip(int direction, unsigned long curr_pos);
|
|
|
|
#ifdef HAVE_LCD_BITMAP
|
|
/* draw track markers on the progressbar */
|
|
void cue_draw_markers(struct screen *screen, unsigned long tracklen,
|
|
int x1, int x2, int y, int h);
|
|
#endif
|
|
|
|
/* check if the subtrack has changed */
|
|
bool cuesheet_subtrack_changed(struct mp3entry *id3);
|
|
|
|
#endif
|