summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/playback.c105
1 files changed, 56 insertions, 49 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 933208c383..5d91693cad 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1264,6 +1264,60 @@ static bool audio_load_track(size_t offset, bool start_play)
1264 return true; 1264 return true;
1265} 1265}
1266 1266
1267#ifdef HAVE_ALBUMART
1268/* Load any album art for the file */
1269static void audio_load_albumart(struct mp3entry *track_id3)
1270{
1271 int i;
1272
1273 FOREACH_ALBUMART(i)
1274 {
1275 struct bufopen_bitmap_data user_data;
1276 int hid = ERR_HANDLE_NOT_FOUND;
1277
1278 /* albumart_slots may change during a yield of bufopen,
1279 * but that's no problem */
1280 if (tracks[track_widx].aa_hid[i] >= 0 || !albumart_slots[i].used)
1281 continue;
1282
1283 memset(&user_data, 0, sizeof(user_data));
1284 user_data.dim = &(albumart_slots[i].dim);
1285
1286 /* we can only decode jpeg for embedded AA */
1287 if (track_id3->embed_albumart && track_id3->albumart.type == AA_TYPE_JPG)
1288 {
1289 user_data.embedded_albumart = &(track_id3->albumart);
1290 hid = bufopen(track_id3->path, 0, TYPE_BITMAP, &user_data);
1291 }
1292
1293 if (hid < 0 && hid != ERR_BUFFER_FULL)
1294 {
1295 /* no embedded AA or it couldn't be loaded, try other sources */
1296 char path[MAX_PATH];
1297
1298 if (find_albumart(track_id3, path, sizeof(path),
1299 &(albumart_slots[i].dim)))
1300 {
1301 user_data.embedded_albumart = NULL;
1302 hid = bufopen(path, 0, TYPE_BITMAP, &user_data);
1303 }
1304 }
1305
1306 if (hid == ERR_BUFFER_FULL)
1307 {
1308 filling = STATE_FULL;
1309 logf("buffer is full for now (get album art)");
1310 }
1311 else if (hid < 0)
1312 {
1313 logf("Album art loading failed");
1314 }
1315
1316 tracks[track_widx].aa_hid[i] = hid;
1317 }
1318}
1319#endif
1320
1267/* Second part of the track loading: We now have the metadata available, so we 1321/* Second part of the track loading: We now have the metadata available, so we
1268 can load the codec, the album art and finally the audio data. 1322 can load the codec, the album art and finally the audio data.
1269 This is called on the audio thread after the buffering thread calls the 1323 This is called on the audio thread after the buffering thread calls the
@@ -1327,56 +1381,9 @@ static void audio_finish_load_track(void)
1327 } 1381 }
1328 } 1382 }
1329 } 1383 }
1330#ifdef HAVE_ALBUMART
1331 {
1332 int i;
1333 char aa_path[MAX_PATH];
1334 1384
1335 FOREACH_ALBUMART(i) 1385#ifdef HAVE_ALBUMART
1336 { 1386 audio_load_albumart(track_id3);
1337 /* albumart_slots may change during a yield of bufopen,
1338 * but that's no problem */
1339 if (tracks[track_widx].aa_hid[i] >= 0 || !albumart_slots[i].used)
1340 continue;
1341
1342 /* we can only decode jpeg for embedded AA */
1343 bool embedded_albumart =
1344 track_id3->embed_albumart && track_id3->albumart.type == AA_TYPE_JPG;
1345 /* find_albumart will error out if the wps doesn't have AA */
1346 if (embedded_albumart || find_albumart(track_id3, aa_path,
1347 sizeof(aa_path), &(albumart_slots[i].dim)))
1348 {
1349 int aa_hid;
1350 struct bufopen_bitmap_data user_data = {
1351 .dim = &(albumart_slots[i].dim),
1352 .embedded_albumart = NULL,
1353 };
1354 if (embedded_albumart)
1355 {
1356 user_data.embedded_albumart = &(track_id3->albumart);
1357 aa_hid = bufopen(track_id3->path, 0,
1358 TYPE_BITMAP, &user_data);
1359 }
1360 else
1361 {
1362 aa_hid = bufopen(aa_path, 0, TYPE_BITMAP,
1363 &user_data);
1364 }
1365 if(aa_hid == ERR_BUFFER_FULL)
1366 {
1367 filling = STATE_FULL;
1368 logf("buffer is full for now (get album art)");
1369 return; /* No space for track's album art, not an error */
1370 }
1371 else if (aa_hid < 0)
1372 {
1373 /* another error, ignore AlbumArt */
1374 logf("Album art loading failed");
1375 }
1376 tracks[track_widx].aa_hid[i] = aa_hid;
1377 }
1378 }
1379 }
1380#endif 1387#endif
1381 1388
1382 /* Load the codec. */ 1389 /* Load the codec. */