Mercurial > hg > sidinfo
view sidlib.h @ 86:e1ff9cd27a84
Initial port of songlength database (SLDB) handling code from XMMS-SID to here.
Needs refactoring.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 11 Feb 2016 23:21:26 +0200 |
parents | 4c0ecb078591 |
children | c5ff71d64e53 |
line wrap: on
line source
/* * SIDInfoLib - Way too simplistic PSID/RSID file library * Written by Matti 'ccr' Hämäläinen <ccr@tnsp.org> * (C) Copyright 2014-2016 Tecnic Software productions (TNSP) */ #ifndef SIDLIB_H #define SIDLIB_H 1 #include "th_util.h" #include "th_ioctx.h" #include "th_crypto.h" #ifdef __cplusplus extern "C" { #endif // Some constants #define PSID_MAGIC_LEN 4 #define PSID_STR_LEN 32 #define PSID_BUFFER_SIZE (1024 * 16) #define PSID_BUFFER2_SIZE (1024) typedef struct _SIDLibSLDBNode { th_md5hash_t hash; // MD5 hash-digest int nlengths; // Number of lengths int *lengths; // Lengths in seconds struct _SIDLibSLDBNode *prev, *next; } SIDLibSLDBNode; typedef struct { SIDLibSLDBNode *nodes, **pindex; size_t n; } SIDLibSLDB; typedef struct { char magic[PSID_MAGIC_LEN + 1]; // "PSID" / "RSID" magic identifier uint16_t version, // Version number dataOffset, // Start of actual c64 data in file loadAddress, // Loading address initAddress, // Initialization address playAddress, // Play one frame nSongs, // Number of subsongs startSong; // Default starting song uint32_t speed; // Speed char sidName[PSID_STR_LEN + 1]; // Descriptive text-fields, ASCIIZ char sidAuthor[PSID_STR_LEN + 1]; char sidCopyright[PSID_STR_LEN + 1]; // PSIDv2 data uint16_t flags; // Flags uint8_t startPage, pageLength; uint16_t reserved; // Extra data BOOL isRSID; size_t dataSize; // Total size of data - header th_md5hash_t hash; // Songlength database hash } PSIDHeader; enum { PSF_PLAYER_TYPE = 0x0001, // 0 = built-in, 1 = Compute! SIDPlayer MUS PSF_PLAYSID_TUNE = 0x0002, // 0 = Real C64-compatible, 1 = PlaySID specific (v2NG) PSF_CLOCK_UNKNOWN = 0x0000, // Video standard used (v2NG) PSF_CLOCK_PAL = 0x0004, PSF_CLOCK_NTSC = 0x0008, PSF_CLOCK_ANY = 0x000c, PSF_CLOCK_MASK = 0x000c, PSF_MODEL_UNKNOWN = 0x0000, // SID model (v2NG) PSF_MODEL_MOS6581 = 0x0010, PSF_MODEL_MOS8580 = 0x0020, PSF_MODEL_ANY = 0x0030, PSF_MODEL_MASK = 0x0030, }; // // Functions // int si_read_sid_file(th_ioctx *ctx, PSIDHeader *psid); const char * si_get_sid_clock_str(const int flags); const char * si_get_sid_model_str(const int flags); int si_sldb_read(th_ioctx *ctx, SIDLibSLDB *dbh); int si_sldb_build_index(SIDLibSLDB *dbh); void si_sldb_free(SIDLibSLDB *dbh); SIDLibSLDBNode *si_sldb_get_by_hash(SIDLibSLDB *dbh, th_md5hash_t hash); #ifdef __cplusplus } #endif #endif // SIDLIB_H