A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 107 lines 3.4 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2014 Franklin Wei, Benjamin Brown 11 * Copyright (C) 2004 Gregory Montoir 12 * 13 * This program is free software; you can redistribute it and/or 14 * modify it under the terms of the GNU General Public License 15 * as published by the Free Software Foundation; either version 2 16 * of the License, or (at your option) any later version. 17 * 18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19 * KIND, either express or implied. 20 * 21 ***************************************************************************/ 22 23#ifndef __RESOURCE_H__ 24#define __RESOURCE_H__ 25 26#include "intern.h" 27 28 29#define MEMENTRY_STATE_END_OF_MEMLIST 0xFF 30#define MEMENTRY_STATE_NOT_NEEDED 0 31#define MEMENTRY_STATE_LOADED 1 32#define MEMENTRY_STATE_LOAD_ME 2 33 34/* 35 This is a directory entry. When the game starts, it loads memlist.bin and 36 populate and array of MemEntry 37*/ 38typedef struct MemEntry { 39 uint8_t state; /* 0x0 */ 40 uint8_t type; /* 0x1, Resource::ResType */ 41 uint8_t *bufPtr; /* 0x2 */ 42 uint16_t unk4; /* 0x4, unused */ 43 uint8_t rankNum; /* 0x6 */ 44 uint8_t bankId; /* 0x7 */ 45 uint32_t bankOffset; /* 0x8 0xA */ 46 uint16_t unkC; /* 0xC, unused */ 47 uint16_t packedSize; /* 0xE */ 48 /* All ressources are packed (for a gain of 28% according to Chahi) */ 49 50 uint16_t unk10; /* 0x10, unused */ 51 uint16_t size; /* 0x12 */ 52} __attribute__((packed)) MemEntry; 53 54/* 55 Note: state is not a boolean, it can have value 0, 1, 2 or 255, respectively meaning: 56 0:NOT_NEEDED 57 1:LOADED 58 2:LOAD_ME 59 255:END_OF_MEMLIST 60 61 See MEMENTRY_STATE_* #defines above. 62*/ 63 64struct Serializer; 65struct Video; 66 67#define MEM_BLOCK_SIZE (600 * 1024) 68#define RT_SOUND 0 69#define RT_MUSIC 1 70#define RT_POLY_ANIM 2 71#define RT_PALETTE 3 72#define RT_BYTECODE 4 73#define RT_POLY_CINEMATIC 5 74 75struct Resource { 76 struct Video *video; 77 struct System *sys; 78 const char *_dataDir; 79 struct MemEntry _memList[150]; 80 uint16_t _numMemList; 81 uint16_t currentPartId, requestedNextPart; 82 uint8_t *_memPtrStart, *_scriptBakPtr, *_scriptCurPtr, *_vidBakPtr, *_vidCurPtr; 83 bool _useSegVideo2; 84 85 uint8_t *segPalettes; 86 uint8_t *segBytecode; 87 uint8_t *segCinematic; 88 uint8_t *_segVideo2; 89}; 90 91 92void res_create(struct Resource*, struct Video*, struct System*, const char* dataDir); 93 94void res_readBank(struct Resource*, const MemEntry *me, uint8_t *dstBuf); 95void res_readEntries(struct Resource*); 96void res_loadMarkedAsNeeded(struct Resource*); 97void res_invalidateAll(struct Resource*); 98void res_invalidateRes(struct Resource*); 99void res_loadPartsOrMemoryEntry(struct Resource*, uint16_t num); 100void res_setupPart(struct Resource*, uint16_t ptrId); 101void res_allocMemBlock(struct Resource*); 102void res_freeMemBlock(struct Resource*); 103 104void res_saveOrLoad(struct Resource*, struct Serializer *ser); 105 106const char* res_getDataDir(struct Resource*); 107#endif