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 | uint32_t reverb; /*< Reverb flag. */ | 47 | uint32_t reverb; /*< Reverb flag. */ |
| 48 | } ArgoCVGHeader; | 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 | typedef struct ArgoCVGDemuxContext { | 50 | typedef struct ArgoCVGDemuxContext { |
| 58 | ArgoCVGHeader header; | 51 | ArgoCVGHeader header; |
| 59 | uint32_t checksum; | 52 | uint32_t checksum; |
| @@ -72,12 +65,33 @@ typedef struct ArgoCVGMuxContext { · 12 unmodified lines | |||
| 72 | 65 | ||
| 73 | #if CONFIG_ARGO_CVG_DEMUXER | 66 | #if CONFIG_ARGO_CVG_DEMUXER |
| 74 | /* "Special" files that are played at a different rate. */ | 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 | static const ArgoCVGOverride overrides[] = { | 93 | static const ArgoCVGOverride overrides[] = { |
| 76 | { "CRYS.CVG", { 23592, 0, 1 }, 2495499, 88200 }, /* Beta */ | 94 | OVERRIDE_FILES(FILE) |
| 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 */ | ||
| 81 | }; | 95 | }; |
| 82 | 96 | ||
| 83 | static int argo_cvg_probe(const AVProbeData *p) | 97 | static int argo_cvg_probe(const AVProbeData *p) |