forked from len0rd/rockbox
ancient experimental test code not used for 2+ years, removed
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4212 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
5c7d66890c
commit
8463a2bbd3
6 changed files with 0 additions and 323 deletions
|
@ -1,56 +0,0 @@
|
||||||
# __________ __ ___.
|
|
||||||
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
# \/ \/ \/ \/ \/
|
|
||||||
# $Id$
|
|
||||||
#
|
|
||||||
|
|
||||||
FIRMWARE = ../..
|
|
||||||
COMMON = $(FIRMWARE)/common
|
|
||||||
DRIVERS = $(FIRMWARE)/drivers
|
|
||||||
|
|
||||||
CC = gcc
|
|
||||||
LD = ld
|
|
||||||
AR = ar
|
|
||||||
AS = as
|
|
||||||
OC = objcopy
|
|
||||||
scramble = scramble-win32
|
|
||||||
DEFINES = -DCRT_DISPLAY -DDEBUG -DSIMULATOR
|
|
||||||
INCLUDES=-I. -I$(FIRMWARE) -I$(COMMON) -I$(DRIVERS)
|
|
||||||
TARGET_OPTIONS =
|
|
||||||
CFLAGS = -g -Wall ${TARGET_OPTIONS} -Wstrict-prototypes $(INCLUDES) $(DEFINES)
|
|
||||||
|
|
||||||
SRC := playlist.c settings.c panic.c disk.c debug.c harness.c
|
|
||||||
OBJS := $(SRC:%.c=%.o)
|
|
||||||
|
|
||||||
%.o: %.s
|
|
||||||
$(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) -c $<
|
|
||||||
|
|
||||||
all : rockbox
|
|
||||||
|
|
||||||
rockbox: $(OBJS)
|
|
||||||
$(CC) -o $@ ${OBJS}
|
|
||||||
|
|
||||||
playlist.o:$(FIRMWARE)/playlist.c
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
settings.o:$(FIRMWARE)/settings.c
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
panic.o:$(FIRMWARE)/panic.c
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
disk.o:$(FIRMWARE)/disk.c
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
debug.o:$(FIRMWARE)/debug.c
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
dist:
|
|
||||||
tar czvf dist.tar.gz Makefile main.c start.s app.lds
|
|
||||||
|
|
||||||
clean:
|
|
||||||
-rm -f *.x *.i *.o *.elf *.bin *.map *.mod *.bak *~
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
# __________ __ ___.
|
|
||||||
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
# \/ \/ \/ \/ \/
|
|
||||||
# $Id$
|
|
||||||
#
|
|
||||||
|
|
||||||
# Pick a target to build for
|
|
||||||
TARGET = -DARCHOS_PLAYER=1
|
|
||||||
#TARGET = -DARCHOS_PLAYER_OLD=1
|
|
||||||
#TARGET = -DARCHOS_RECORDER=1
|
|
||||||
|
|
||||||
CC = gcc
|
|
||||||
LD = ld
|
|
||||||
AR = ar
|
|
||||||
AS = as
|
|
||||||
OC = objcopy
|
|
||||||
scramble = scramble-win32
|
|
||||||
DEFINES = -DCRT_DISPLAY
|
|
||||||
INCLUDES=-I. -Icommon -Idrivers
|
|
||||||
TARGET_OPTIONS =
|
|
||||||
CFLAGS = -Os -Wall ${TARGET_OPTIONS} -nostdlib -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(DEFINES) $(TARGET)
|
|
||||||
AFLAGS += -small -relax
|
|
||||||
|
|
||||||
SRC := playlist.c settings.c panic.c disk.c debug.c harness.c
|
|
||||||
OBJS := $(SRC:%.c=%.o)
|
|
||||||
|
|
||||||
%.o: %.s
|
|
||||||
$(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) -c $<
|
|
||||||
|
|
||||||
all : rockbox-win32.exe
|
|
||||||
|
|
||||||
rockbox-win32.exe: $(OBJS)
|
|
||||||
$(CC) -o rockbox-win32.exe ${OBJS}
|
|
||||||
|
|
||||||
dist:
|
|
||||||
tar czvf dist.tar.gz Makefile main.c start.s app.lds
|
|
||||||
|
|
||||||
clean:
|
|
||||||
-rm -f *.x *.i *.o *.elf *.bin *.map *.mod *.bak *~
|
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
|
|
||||||
Playlists on the Rockbox
|
|
||||||
|
|
||||||
1. Demand-loading of Playlist Filenames from Disk
|
|
||||||
|
|
||||||
A playlist is simply a list of track names. These lists can either be
|
|
||||||
created dynamically by the user, or they can be predefined and placed
|
|
||||||
into a text file with an .m3u extension.
|
|
||||||
|
|
||||||
The 2048 KB of RAM is the reason we need to get this right. If an average
|
|
||||||
track name (i.e. \music\cure\disintegration\01-pictures_of_you.mp3)
|
|
||||||
is assumed to be 50 characters long, then:
|
|
||||||
|
|
||||||
A playlist of 15 tracks is 15 * 50 ~= 750 bytes
|
|
||||||
A playlist of 100 tracks is 100 * 50 ~= 5 kilobytes
|
|
||||||
A playlist of 3500 tracks is 3500 * 50 ~= 175 kilobytes
|
|
||||||
A playlist of 10000 tracks is 10000 * 50 ~= 1/4 megabyte
|
|
||||||
|
|
||||||
From these figures, it can be seen that for large playlists, storing
|
|
||||||
the entire list of track names in memory significantly reduces the
|
|
||||||
capacity available to the audio data buffer, which in turn has a negative
|
|
||||||
impact on the performance of the system.
|
|
||||||
|
|
||||||
One method of reducing the total memory consumption of a playlist is
|
|
||||||
to delay bringing the actual filenames into memory until needed. Instead,
|
|
||||||
the playlist text file can be scanned, and an in-memory array constructed
|
|
||||||
with one element for each track present in the text file. Progressing
|
|
||||||
through the playlist entails getting the appropriate entry from the array,
|
|
||||||
and using that to perform a lookup of the corresponding filename entry
|
|
||||||
from the playlist text file.
|
|
||||||
|
|
||||||
With this method, and given that an integer on the Rockbox's CPU is 4 bytes:
|
|
||||||
|
|
||||||
A playlist of 15 tracks is 15 * 4 ~= 60 bytes
|
|
||||||
A playlist of 100 tracks is 100 * 4 ~= 400 bytes
|
|
||||||
A playlist of 3500 tracks is 3500 * 4 ~= 13 kilobytes
|
|
||||||
A playlist of 10000 tracks is 10000 * 4 ~= 39 kilobytes
|
|
||||||
|
|
||||||
It is clear that these are substantial savings, albeit at the cost of
|
|
||||||
increased complexity and disk i/o. Prefetch strategies could improve
|
|
||||||
performance compared to demand-loading a single entry.
|
|
||||||
|
|
||||||
2. Implementation Options
|
|
||||||
|
|
||||||
Keeping the track names in a file on disk is easy enough for a predefined
|
|
||||||
m3u playlist, but for dynamically created playlists, where the user
|
|
||||||
browses the filesystem and adds tracks or entire directory hierarchies
|
|
||||||
at will, we will need to store the playlist track names in a dedicated
|
|
||||||
file. This will be called the Anonymous Playlist, the location of which
|
|
||||||
can be set by the user, but will default to \anonymous.m3u or somesuch.
|
|
||||||
The current contents of the Anonymous Playlist can be named and saved at
|
|
||||||
any time.
|
|
||||||
|
|
||||||
The data structure to support playlists would therefore be:
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char filename[256] ; /* path name of m3u playlist on disk */
|
|
||||||
int *indices; /* array of indices into the playlist */
|
|
||||||
int index; /* index of current track within playlist */
|
|
||||||
} playlist_info_t;
|
|
||||||
|
|
||||||
So far, so good: we read from an existing m3u file, or we create an
|
|
||||||
anonymous one. But what do we do if we start with an existing m3u file,
|
|
||||||
and then the user wants to dynamically add tracks to it? A few options
|
|
||||||
exist:
|
|
||||||
|
|
||||||
a) we disallow playlist modification of existing m3u files, offering
|
|
||||||
instead to replace the current playlist with the new one.
|
|
||||||
|
|
||||||
b) we give the user the option of appending the new tracks to the
|
|
||||||
existing m3u file.
|
|
||||||
|
|
||||||
c) we copy the contents of the existing m3u playlist to the anonymous one,
|
|
||||||
and then append the new tracks to that. If the m3u playlist is large,
|
|
||||||
this could be wasteful and potentially time-consuming. However, choosing
|
|
||||||
this option would provide the facility to insert or append entire
|
|
||||||
existing m3u playlists 'into' one another, a feature missng from the
|
|
||||||
commercial firmware.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,112 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by wavey@wavey.org
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <common/track.h>
|
|
||||||
#include "settings.h"
|
|
||||||
#include "playlist.h"
|
|
||||||
#include "panic.h"
|
|
||||||
#include "disk.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "config.h"
|
|
||||||
#include "harness.h"
|
|
||||||
|
|
||||||
/* global string for panic display */
|
|
||||||
|
|
||||||
char panic_message[128];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* entrypoint
|
|
||||||
*/
|
|
||||||
int main( int argc, char **args )
|
|
||||||
{
|
|
||||||
/* allocate runtime data structures */
|
|
||||||
|
|
||||||
user_settings_t settings;
|
|
||||||
playlist_info_t playlist;
|
|
||||||
|
|
||||||
debugf( "\nrockbox test harness started.\n" );
|
|
||||||
|
|
||||||
/* populate runtime data structures */
|
|
||||||
|
|
||||||
initialise( &settings, &playlist );
|
|
||||||
|
|
||||||
/* begin tests */
|
|
||||||
|
|
||||||
start( &settings, &playlist );
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* populate runtime data structures
|
|
||||||
*/
|
|
||||||
void initialise( user_settings_t *settings, playlist_info_t *playlist )
|
|
||||||
{
|
|
||||||
debugf( "init()\n" );
|
|
||||||
|
|
||||||
reload_all_settings( settings );
|
|
||||||
reload_playlist_info( playlist );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* start tests
|
|
||||||
*/
|
|
||||||
void start( user_settings_t *settings, playlist_info_t *playlist )
|
|
||||||
{
|
|
||||||
track_t track;
|
|
||||||
|
|
||||||
debugf( "start()\n" );
|
|
||||||
|
|
||||||
/* show current values */
|
|
||||||
|
|
||||||
display_current_settings( settings );
|
|
||||||
display_current_playlist( playlist );
|
|
||||||
|
|
||||||
/* wipe playlist contents */
|
|
||||||
|
|
||||||
empty_playlist( playlist );
|
|
||||||
display_current_playlist( playlist );
|
|
||||||
|
|
||||||
/* user selects a new playlist */
|
|
||||||
|
|
||||||
load_playlist( playlist, "test2.m3u" );
|
|
||||||
display_current_playlist( playlist );
|
|
||||||
|
|
||||||
/* randomise playlist */
|
|
||||||
|
|
||||||
randomise_playlist( playlist, 45678 );
|
|
||||||
display_current_playlist( playlist );
|
|
||||||
|
|
||||||
/* get next track in playlist */
|
|
||||||
|
|
||||||
track = next_playlist_track( playlist );
|
|
||||||
display_playlist_track( &track );
|
|
||||||
|
|
||||||
/* get next track in playlist */
|
|
||||||
|
|
||||||
track = next_playlist_track( playlist );
|
|
||||||
display_playlist_track( &track );
|
|
||||||
}
|
|
||||||
#ifdef SIMULATOR
|
|
||||||
void app_main ()
|
|
||||||
{
|
|
||||||
main (0, NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
|
@ -1,24 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by wavey@wavey.org
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "settings.h"
|
|
||||||
#include "playlist.h"
|
|
||||||
|
|
||||||
void initialise( user_settings_t *settings, playlist_info_t *playlist );
|
|
||||||
void start( user_settings_t *settings, playlist_info_t *playlist );
|
|
|
@ -1,4 +0,0 @@
|
||||||
testing
|
|
||||||
testing ssh keys
|
|
||||||
2
|
|
||||||
3
|
|
Loading…
Add table
Add a link
Reference in a new issue