summaryrefslogtreecommitdiff
path: root/firmware/id3.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2006-11-06 18:07:30 +0000
committerMichael Sevakis <jethead71@rockbox.org>2006-11-06 18:07:30 +0000
commit0f5cb94aa4a334366a746fcbb22f3335ca413265 (patch)
tree8f89a96628c1810d51ee9816daf78edb8c76fcd4 /firmware/id3.c
parent0b22795e26ee09de14f6ac23219adeda12f2fd5b (diff)
downloadrockbox-0f5cb94aa4a334366a746fcbb22f3335ca413265.tar.gz
rockbox-0f5cb94aa4a334366a746fcbb22f3335ca413265.zip
Big Patch adds primarily: Samplerate and format selection to recording for SWCODEC. Supprort for samplerates changing in playback (just goes with the recording part inseparably). Samplerates to all encoders. Encoders can be configured individually on a menu specific to the encoder in the recording menu. File creation is delayed until flush time to reduce spinups when splitting. Misc: statusbar icons for numbers are individual digits to display any number. Audio buffer was rearranged to maximize memory available to recording and properly reinitialized when trashed. ColdFire PCM stuff moved to target tree to avoid a complicated mess when adding samplerate switching. Some needed API changes and to neaten up growing gap between hardware and software codecs.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11452 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/id3.c')
-rw-r--r--firmware/id3.c138
1 files changed, 83 insertions, 55 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index 92f60a2095..7d03c75331 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -44,6 +44,89 @@
44#include "replaygain.h" 44#include "replaygain.h"
45#include "rbunicode.h" 45#include "rbunicode.h"
46 46
47/** Database of audio formats **/
48const struct afmt_entry audio_formats[AFMT_NUM_CODECS] =
49{
50 /* Unknown file format */
51 [AFMT_UNKNOWN] =
52 AFMT_ENTRY("???", NULL, NULL, NULL ),
53
54 /* MPEG Audio layer 1 */
55 [AFMT_MPA_L1] =
56 AFMT_ENTRY("MP1", "mpa", NULL, "mp1\0" ),
57 /* MPEG Audio layer 2 */
58 [AFMT_MPA_L2] =
59 AFMT_ENTRY("MP2", "mpa", NULL, "mpa\0mp2\0" ),
60 /* MPEG Audio layer 3 */
61 [AFMT_MPA_L3] =
62 AFMT_ENTRY("MP3", "mpa", "mp3_enc", "mp3\0" ),
63
64 /* Audio Interchange File Format */
65 [AFMT_AIFF] =
66 AFMT_ENTRY("AIFF", "aiff", NULL, "aiff\0aif\0"),
67
68#if CONFIG_CODEC == SWCODEC
69 /* Uncompressed PCM in a WAV file */
70 [AFMT_PCM_WAV] =
71 AFMT_ENTRY("WAV", "wav", "wav_enc", "wav\0" ),
72 /* Ogg Vorbis */
73 [AFMT_OGG_VORBIS] =
74 AFMT_ENTRY("Ogg", "vorbis", NULL, "ogg\0" ),
75 /* FLAC */
76 [AFMT_FLAC] =
77 AFMT_ENTRY("FLAC", "flac", NULL, "flac\0" ),
78 /* Musepack */
79 [AFMT_MPC] =
80 AFMT_ENTRY("MPC", "mpc", NULL, "mpc\0" ),
81 /* A/52 (aka AC3) audio */
82 [AFMT_A52] =
83 AFMT_ENTRY("AC3", "a52", NULL, "a52\0ac3\0" ),
84 /* WavPack */
85 [AFMT_WAVPACK] =
86 AFMT_ENTRY("WV", "wavpack", "wavpack_enc", "wv\0" ),
87 /* Apple Lossless Audio Codec */
88 [AFMT_ALAC] =
89 AFMT_ENTRY("ALAC", "alac", NULL, "m4a\0" ),
90 /* Advanced Audio Coding in M4A container */
91 [AFMT_AAC] =
92 AFMT_ENTRY("AAC", "aac", NULL, "mp4\0" ),
93 /* Shorten */
94 [AFMT_SHN] =
95 AFMT_ENTRY("SHN", "shorten", NULL, "shn\0" ),
96 /* SID File Format */
97 [AFMT_SID] =
98 AFMT_ENTRY("SID", "sid", NULL, "sid\0" ),
99 /* ADX File Format */
100 [AFMT_ADX] =
101 AFMT_ENTRY("ADX", "adx", NULL, "adx\0" ),
102#endif
103};
104
105#if CONFIG_CODEC == SWCODEC && defined (HAVE_RECORDING)
106/* get REC_FORMAT_* corresponding AFMT_* */
107const int rec_format_afmt[REC_NUM_FORMATS] =
108{
109 /* give AFMT_UNKNOWN by default */
110 [0 ... REC_NUM_FORMATS-1] = AFMT_UNKNOWN,
111 /* add new entries below this line */
112 [REC_FORMAT_MPA_L3] = AFMT_MPA_L3,
113 [REC_FORMAT_WAVPACK] = AFMT_WAVPACK,
114 [REC_FORMAT_PCM_WAV] = AFMT_PCM_WAV,
115};
116
117/* get AFMT_* corresponding REC_FORMAT_* */
118const int afmt_rec_format[AFMT_NUM_CODECS] =
119{
120 /* give -1 by default */
121 [0 ... AFMT_NUM_CODECS-1] = -1,
122 /* add new entries below this line */
123 [AFMT_MPA_L3] = REC_FORMAT_MPA_L3,
124 [AFMT_WAVPACK] = REC_FORMAT_WAVPACK,
125 [AFMT_PCM_WAV] = REC_FORMAT_PCM_WAV,
126};
127#endif /* CONFIG_CODEC == SWCODEC && defined (HAVE_RECORDING) */
128/****/
129
47#define UNSYNC(b0,b1,b2,b3) (((long)(b0 & 0x7F) << (3*7)) | \ 130#define UNSYNC(b0,b1,b2,b3) (((long)(b0 & 0x7F) << (3*7)) | \
48 ((long)(b1 & 0x7F) << (2*7)) | \ 131 ((long)(b1 & 0x7F) << (2*7)) | \
49 ((long)(b2 & 0x7F) << (1*7)) | \ 132 ((long)(b2 & 0x7F) << (1*7)) | \
@@ -85,61 +168,6 @@ static const char* const genres[] = {
85 "Synthpop" 168 "Synthpop"
86}; 169};
87 170
88/* database of audio formats */
89const struct afmt_entry audio_formats[AFMT_NUM_CODECS] =
90{
91 /* Unknown file format */
92 AFMT_ENTRY("???", NULL, NULL, NULL ),
93 /* MPEG Audio layer 1 */
94 AFMT_ENTRY("MP1", "mpa.codec", NULL, NULL ),
95 /* MPEG Audio layer 2 */
96 AFMT_ENTRY("MP2", "mpa.codec", NULL, NULL ),
97 /* MPEG Audio layer 3 */
98 AFMT_ENTRY("MP3", "mpa.codec", "mp3_enc.codec", ".mp3"),
99#if CONFIG_CODEC == SWCODEC
100 /* Uncompressed PCM in a WAV file */
101 AFMT_ENTRY("WAV", "wav.codec", "wav_enc.codec", ".wav"),
102 /* Ogg Vorbis */
103 AFMT_ENTRY("Ogg", "vorbis.codec", NULL, NULL ),
104 /* FLAC */
105 AFMT_ENTRY("FLAC", "flac.codec", NULL, NULL ),
106 /* Musepack */
107 AFMT_ENTRY("MPC", "mpc.codec", NULL, NULL ),
108 /* A/52 (aka AC3) audio */
109 AFMT_ENTRY("AC3", "a52.codec", NULL, NULL ),
110 /* WavPack */
111 AFMT_ENTRY("WV", "wavpack.codec", "wavpack_enc.codec", ".wv" ),
112 /* Apple Lossless Audio Codec */
113 AFMT_ENTRY("ALAC", "alac.codec", NULL, NULL ),
114 /* Advanced Audio Coding in M4A container */
115 AFMT_ENTRY("AAC", "aac.codec", NULL, NULL ),
116 /* Shorten */
117 AFMT_ENTRY("SHN", "shorten.codec", NULL, NULL ),
118 /* Audio Interchange File Format */
119 AFMT_ENTRY("AIFF", "aiff.codec", NULL, NULL ),
120 /* SID File Format */
121 AFMT_ENTRY("SID", "sid.codec", NULL, NULL ),
122 /* ADX File Format */
123 AFMT_ENTRY("ADX", "adx.codec", NULL, NULL ),
124#endif
125};
126
127#if CONFIG_CODEC == SWCODEC
128/* recording quality to AFMT_* */
129const int rec_quality_info_afmt[9] =
130{
131 AFMT_MPA_L3, /* MPEG L3 64 kBit/s */
132 AFMT_MPA_L3, /* MPEG L3 96 kBit/s */
133 AFMT_MPA_L3, /* MPEG L3 128 kBit/s */
134 AFMT_MPA_L3, /* MPEG L3 160 kBit/s */
135 AFMT_MPA_L3, /* MPEG L3 192 kBit/s */
136 AFMT_MPA_L3, /* MPEG L3 224 kBit/s */
137 AFMT_MPA_L3, /* MPEG L3 320 kBit/s */
138 AFMT_WAVPACK, /* WavPack 909 kBit/s */
139 AFMT_PCM_WAV, /* PCM Wav 1411 kBit/s */
140};
141#endif /* SWCODEC */
142
143char* id3_get_genre(const struct mp3entry* id3) 171char* id3_get_genre(const struct mp3entry* id3)
144{ 172{
145 if( id3->genre_string ) 173 if( id3->genre_string )