The average length of the strings used here does not differ much from the length of the longest string; therefore it makes sense to use an array big enough for the longest string and not a pointer to a string. This also moves this array into .rodata (from .data.rel.ro).
Unified · Split
| @@ -47,13 +47,6 @@ typedef struct ArgoCVGHeader { · 46 unmodified lines | ||
| 47 | 47 | uint32_t reverb; /*< Reverb flag. */ |
| 48 | 48 | } ArgoCVGHeader; |
| 49 | 49 | |
| 50 | −typedef struct ArgoCVGOverride { | |
| 51 | − const char *name; | |
| 52 | − ArgoCVGHeader header; | |
| 53 | − uint32_t checksum; | |
| 54 | − int sample_rate; | |
| 55 | −} ArgoCVGOverride; | |
| 56 | − | |
| 57 | 50 | typedef struct ArgoCVGDemuxContext { |
| 58 | 51 | ArgoCVGHeader header; |
| 59 | 52 | uint32_t checksum; |
| @@ -72,12 +65,33 @@ typedef struct ArgoCVGMuxContext { · 12 unmodified lines | ||
| 72 | 65 | |
| 73 | 66 | #if CONFIG_ARGO_CVG_DEMUXER |
| 74 | 67 | /* "Special" files that are played at a different rate. */ |
| 68 | +// FILE(NAME, SIZE, LOOP, REVERB, CHECKSUM, SAMPLE_RATE) | |
| 69 | +#define OVERRIDE_FILES(FILE) \ | |
| 70 | + FILE(CRYS, 23592, 0, 1, 2495499, 88200) /* Beta */ \ | |
| 71 | + FILE(REDCRY88, 38280, 0, 1, 4134848, 88200) /* Beta */ \ | |
| 72 | + FILE(DANLOOP1, 54744, 1, 0, 5684641, 37800) /* Beta */ \ | |
| 73 | + FILE(PICKUP88, 12904, 0, 1, 1348091, 48000) /* Beta */ \ | |
| 74 | + FILE(SELECT1, 5080, 0, 1, 549987, 44100) /* Beta */ \ | |
| 75 | + | |
| 76 | +#define MAX_FILENAME_SIZE(NAME, SIZE, LOOP, REVERB, CHECKSUM, SAMPLE_RATE) \ | |
| 77 | + MAX_SIZE_BEFORE_ ## NAME, \ | |
| 78 | + MAX_SIZE_UNTIL_ ## NAME ## _MINUS1 = FFMAX(sizeof(#NAME ".CVG"), MAX_SIZE_BEFORE_ ## NAME) - 1, | |
| 79 | +enum { | |
| 80 | + OVERRIDE_FILES(MAX_FILENAME_SIZE) | |
| 81 | + MAX_OVERRIDE_FILENAME_SIZE | |
| 82 | +}; | |
| 83 | + | |
| 84 | +typedef struct ArgoCVGOverride { | |
| 85 | + const char name[MAX_OVERRIDE_FILENAME_SIZE]; | |
| 86 | + ArgoCVGHeader header; | |
| 87 | + uint32_t checksum; | |
| 88 | + int sample_rate; | |
| 89 | +} ArgoCVGOverride; | |
| 90 | + | |
| 91 | +#define FILE(NAME, SIZE, LOOP, REVERB, CHECKSUM, SAMPLE_RATE) \ | |
| 92 | + { #NAME ".CVG", { SIZE, LOOP, REVERB }, CHECKSUM, SAMPLE_RATE }, | |
| 75 | 93 | static const ArgoCVGOverride overrides[] = { |
| 76 | − { "CRYS.CVG", { 23592, 0, 1 }, 2495499, 88200 }, /* Beta */ | |
| 77 | − { "REDCRY88.CVG", { 38280, 0, 1 }, 4134848, 88200 }, /* Beta */ | |
| 78 | − { "DANLOOP1.CVG", { 54744, 1, 0 }, 5684641, 37800 }, /* Beta */ | |
| 79 | − { "PICKUP88.CVG", { 12904, 0, 1 }, 1348091, 48000 }, /* Beta */ | |
| 80 | − { "SELECT1.CVG", { 5080, 0, 1 }, 549987, 44100 }, /* Beta */ | |
| 94 | + OVERRIDE_FILES(FILE) | |
| 81 | 95 | }; |
| 82 | 96 | |
| 83 | 97 | static int argo_cvg_probe(const AVProbeData *p) |