Mercurial > hg > dmlib
annotate src/dmengine.c @ 845:1d3d220fb5cc
Fix audio playback.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 21 Oct 2014 10:31:03 +0300 |
parents | 1e5cf1144f36 |
children | 05a3ee1ca964 |
rev | line source |
---|---|
642
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
573
diff
changeset
|
1 /* |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
573
diff
changeset
|
2 * dmlib |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
573
diff
changeset
|
3 * -- Demo engine / editor common code and definitions |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
573
diff
changeset
|
4 * Programmed and designed by Matti 'ccr' Hamalainen |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
573
diff
changeset
|
5 * (C) Copyright 2012-2013 Tecnic Software productions (TNSP) |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
573
diff
changeset
|
6 */ |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 #include "dmengine.h" |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 #include "dmimage.h" |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
9 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 #ifdef DM_USE_TREMOR |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 #include <tremor/ivorbiscodec.h> |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 #include <tremor/ivorbisfile.h> |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 DMEngineData engine; |
368 | 18 DMEffect *engineEffects = NULL; |
19 int nengineEffects = 0, nengineEffectsAlloc = 0; | |
20 | |
21 | |
22 int engineRegisterEffect(const DMEffect *ef) | |
23 { | |
24 if (ef == NULL) | |
25 return DMERR_NULLPTR; | |
26 | |
27 // Allocate more space for effects | |
28 if (nengineEffects + 1 >= nengineEffectsAlloc) | |
29 { | |
30 nengineEffectsAlloc += 16; | |
31 engineEffects = dmRealloc(engineEffects, sizeof(DMEffect) * nengineEffectsAlloc); | |
32 if (engineEffects == NULL) | |
33 { | |
34 dmError("Could not expand effects structure.\n"); | |
35 return DMERR_INIT_FAIL; | |
36 } | |
37 } | |
38 | |
39 // Copy effects structure | |
40 memcpy(engineEffects + nengineEffects, ef, sizeof(DMEffect)); | |
41 nengineEffects++; | |
42 | |
43 return DMERR_OK; | |
44 } | |
45 | |
46 | |
47 int engineInitializeEffects(DMEngineData *engine) | |
48 { | |
49 int i, res; | |
50 | |
51 dmFree(engine->effectData); | |
52 engine->effectData = dmCalloc(nengineEffectsAlloc, sizeof(void *)); | |
53 if (engine->effectData == NULL) | |
54 { | |
55 dmError("Could not expand effects data structure.\n"); | |
56 return DMERR_INIT_FAIL; | |
57 } | |
58 | |
59 for (i = 0; i < nengineEffects; i++) | |
60 { | |
61 if (engineEffects[i].init != NULL && | |
369 | 62 (res = engineEffects[i].init(engine, &(engine->effectData[i]))) != DMERR_OK) |
368 | 63 return res; |
64 } | |
65 | |
66 return DMERR_OK; | |
67 } | |
68 | |
69 | |
70 void engineShutdownEffects(DMEngineData *engine) | |
71 { | |
369 | 72 if (engine != NULL && engine->effectData != NULL) |
368 | 73 { |
369 | 74 int i; |
75 for (i = 0; i < nengineEffects; i++) | |
76 { | |
77 if (engineEffects[i].shutdown != NULL) | |
78 engineEffects[i].shutdown(engine, engine->effectData[i]); | |
79 } | |
80 dmFree(engine->effectData); | |
81 engine->effectData = NULL; | |
368 | 82 } |
83 } | |
84 | |
85 | |
86 DMEffect *engineFindEffect(const char *name, const int nparams) | |
87 { | |
88 int i; | |
89 for (i = 0; i < nengineEffects; i++) | |
90 { | |
91 if (strcmp(engineEffects[i].name, name) == 0 && | |
92 engineEffects[i].nparams == nparams) | |
93 return &engineEffects[i]; | |
94 } | |
95 return NULL; | |
96 } | |
97 | |
98 | |
99 DMEffect *engineFindEffectByName(const char *name) | |
100 { | |
101 int i; | |
102 for (i = 0; i < nengineEffects; i++) | |
103 { | |
104 if (strcmp(engineEffects[i].name, name) == 0) | |
105 return &engineEffects[i]; | |
106 } | |
107 return NULL; | |
108 } | |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
109 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
111 static int engineResImageLoad(DMResource *res) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
112 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
113 SDL_Surface *img = dmLoadImage(res); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
114 if (res != NULL) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
115 { |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
116 res->resData = img; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
117 return DMERR_OK; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
118 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
119 else |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 return dmferror(res); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
121 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
123 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
124 static void engineResImageFree(DMResource *res) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 { |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
126 SDL_FreeSurface((SDL_Surface *)res->resData); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
127 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
128 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
129 static BOOL engineResImageProbe(DMResource *res, const char *fext) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
130 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
131 (void) res; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
132 return fext != NULL && (strcasecmp(fext, ".jpg") == 0 || strcasecmp(fext, ".png") == 0); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
133 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
134 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
135 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
136 #ifdef JSS_SUP_XM |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
137 static int engineResXMModuleLoad(DMResource *res) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
138 { |
796 | 139 return jssLoadXM(res, (JSSModule **) &(res->resData), FALSE); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
140 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
141 |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
142 static void engineResXMModuleFree(DMResource *res) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
143 { |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
144 jssFreeModule((JSSModule *) res->resData); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
146 |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
147 static BOOL engineResXMModuleProbe(DMResource *res, const char *fext) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
148 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 (void) res; |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
150 return fext != NULL && strcasecmp(fext, ".xm") == 0; |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
151 } |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
152 #endif |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
153 |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
154 |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
155 #ifdef JSS_SUP_JSSMOD |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
156 static int engineResJSSModuleLoad(DMResource *res) |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
157 { |
796 | 158 return jssLoadJSSMOD(res, (JSSModule **) &(res->resData), FALSE); |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
159 } |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
160 |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
161 static void engineResJSSModuleFree(DMResource *res) |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
162 { |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
163 jssFreeModule((JSSModule *) res->resData); |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
164 } |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
165 |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
166 static BOOL engineResJSSModuleProbe(DMResource *res, const char *fext) |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
167 { |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
168 (void) res; |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
169 return fext != NULL && |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
170 (strcasecmp(fext, ".jss") == 0 || strcasecmp(fext, ".jmod") == 0); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
171 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
172 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
173 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
175 #ifdef DM_USE_TREMOR |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
176 static size_t vorbisFileRead(void *ptr, size_t size, size_t nmemb, void *datasource) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
177 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
178 return dmfread(ptr, size, nmemb, (DMResource *) datasource); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
179 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
180 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
181 static int vorbisFileSeek(void *datasource, ogg_int64_t offset, int whence) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
182 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
183 return dmfseek((DMResource *) datasource, offset, whence); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
184 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
185 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
186 static int vorbisFileClose(void *datasource) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
187 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
188 (void) datasource; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
189 return 0; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
190 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
191 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
192 static long vorbisFileTell(void *datasource) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
193 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
194 return dmftell((DMResource *) datasource); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
195 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
197 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
198 static ov_callbacks vorbisFileCBS = |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
199 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
200 vorbisFileRead, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
201 vorbisFileSeek, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
202 vorbisFileClose, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
203 vorbisFileTell |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
204 }; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
205 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
206 static int engineResVorbisLoad(DMResource *res) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
207 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
208 OggVorbis_File vf; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
209 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
210 dmMsg(1, "vorbisfile '%s', %d bytes resource loading\n", |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
211 res->filename, res->rawSize); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
212 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
213 if (ov_open_callbacks(res, &vf, NULL, 0, vorbisFileCBS) < 0) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
214 return DMERR_FOPEN; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
215 |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
216 res->resSize = ov_pcm_total(&vf, -1) * 2 * 2; |
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
217 if ((res->resData = dmMalloc(res->resSize + 16)) == NULL) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
218 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 ov_clear(&vf); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
220 return DMERR_MALLOC; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
221 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
222 |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
223 dmMsg(1, "rdataSize=%d bytes?\n", res->resSize); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
224 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
225 BOOL eof = FALSE; |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
226 int left = res->resSize; |
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
227 char *ptr = res->resData; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
228 int current_section; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
229 while (!eof && left > 0) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
230 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
231 int ret = ov_read(&vf, ptr, left > 4096 ? 4096 : left, ¤t_section); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 if (ret == 0) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
233 eof = TRUE; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
234 else |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
235 if (ret < 0) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
236 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
237 ov_clear(&vf); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
238 return DMERR_INVALID_DATA; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
239 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
240 else |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
241 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
242 left -= ret; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
243 ptr += ret; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
244 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
245 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
246 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
247 ov_clear(&vf); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
248 return DMERR_OK; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
249 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
250 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
251 static void engineResVorbisFree(DMResource *res) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
252 { |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
253 dmFree(res->resData); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
254 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
255 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
256 static BOOL engineResVorbisProbe(DMResource *res, const char *fext) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
257 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
258 (void) res; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
259 return fext != NULL && (strcasecmp(fext, ".ogg") == 0); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
260 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
261 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
262 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
263 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
264 static DMResourceDataOps engineResOps[] = |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
265 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
266 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
267 engineResImageProbe, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
268 engineResImageLoad, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
269 engineResImageFree |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
270 }, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
271 |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
272 #ifdef JSS_SUP_JSSMOD |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
273 { |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
274 engineResJSSModuleProbe, |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
275 engineResJSSModuleLoad, |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
276 engineResJSSModuleFree |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
277 }, |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
278 #endif |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
279 |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
280 #ifdef JSS_SUP_XM |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
281 { |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
282 engineResXMModuleProbe, |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
283 engineResXMModuleLoad, |
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
284 engineResXMModuleFree |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
285 }, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
286 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
287 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
288 #ifdef DM_USE_TREMOR |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
289 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
290 engineResVorbisProbe, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
291 engineResVorbisLoad, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
292 engineResVorbisFree |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
293 }, |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
294 #endif |
779
954b1b392c8b
Restore old note frequency calculation for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
763
diff
changeset
|
295 |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
296 }; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
297 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
298 static const int nengineResOps = sizeof(engineResOps) / sizeof(engineResOps[0]); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
299 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
300 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
301 int engineClassifier(DMResource *res) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
302 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
303 int i; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
304 char *fext; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
305 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
306 if (res == NULL) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
307 return DMERR_NULLPTR; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
308 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
309 fext = strrchr(res->filename, '.'); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
310 for (i = 0; i < nengineResOps; i++) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
311 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
312 DMResourceDataOps *rops = &engineResOps[i]; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
313 if (rops->probe != NULL && rops->probe(res, fext)) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
314 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
315 res->rops = rops; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
316 return DMERR_OK; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
317 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
318 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
319 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
320 return DMERR_OK; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
321 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
322 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
323 |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
324 void *engineGetResource(DMEngineData *eng, const char *name) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
325 { |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
326 DMResource *res; |
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
327 if (eng != NULL && |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
328 (res = dmResourceFind(eng->resources, name)) != NULL && |
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
329 res->resData != NULL) |
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
330 return res->resData; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
331 else |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
332 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
333 dmError("Could not find resource '%s'.\n", name); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
334 return NULL; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
335 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
336 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
337 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
338 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
339 #ifdef DM_USE_JSS |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
340 void engineGetJSSInfo(DMEngineData *eng, BOOL *playing, int *order, JSSPattern **pat, int *npattern, int *row) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
341 { |
763
ad512e54c689
Fix 10L in engine base code.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
342 JSS_LOCK(eng->jssPlr); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
343 |
787 | 344 *playing = eng->jssPlr->isPlaying; |
345 *row = eng->jssPlr->row; | |
346 *pat = eng->jssPlr->pattern; | |
763
ad512e54c689
Fix 10L in engine base code.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
347 *npattern = eng->jssPlr->npattern; |
787 | 348 *order = eng->jssPlr->order; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
349 |
763
ad512e54c689
Fix 10L in engine base code.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
350 JSS_UNLOCK(eng->jssPlr); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
351 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
352 |
785 | 353 |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
354 void engineGetJSSChannelInfo(DMEngineData *eng, const int channel, int *ninst, int *nextInst, int *freq, int *note) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
355 { |
763
ad512e54c689
Fix 10L in engine base code.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
356 JSS_LOCK(eng->jssPlr); |
787 | 357 |
763
ad512e54c689
Fix 10L in engine base code.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
358 JSSPlayerChannel *chn = &(eng->jssPlr->channels[channel]); |
787 | 359 *ninst = chn->ninstrument; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
360 *nextInst = chn->nextInstrument; |
787 | 361 *freq = chn->freq; |
362 *note = chn->note; | |
363 | |
763
ad512e54c689
Fix 10L in engine base code.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
364 JSS_UNLOCK(eng->jssPlr); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
365 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
366 #endif |
367 | 367 |
368 | |
369 int engineGetTick(DMEngineData *engine) | |
370 { | |
390
a7ee3567f718
Remove adjustTime variable, it is not needed anymore.
Matti Hamalainen <ccr@tnsp.org>
parents:
369
diff
changeset
|
371 return engine->frameTime - engine->startTime; |
367 | 372 } |
373 | |
374 | |
375 float engineGetTimeDT(DMEngineData *engine) | |
376 { | |
377 return (float) engineGetTick(engine) / 1000.0f; | |
378 } | |
379 | |
380 | |
381 int engineGetTimeDTi(DMEngineData *engine) | |
382 { | |
383 return (float) engineGetTick(engine) / 1000; | |
384 } | |
385 | |
386 | |
387 int engineGetTime(DMEngineData *engine, int t) | |
388 { | |
389 return engineGetTick(engine) - (1000 * t); | |
390 } | |
391 | |
392 | |
393 int engineGetDT(DMEngineData *engine, int t) | |
394 { | |
395 return engineGetTime(engine, t) / 1000; | |
396 } | |
784
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
397 |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
398 |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
399 void engineAudioCallback(void *userdata, Uint8 *stream, int len) |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
400 { |
845 | 401 DMEngineData *engine = (DMEngineData *) userdata; |
402 | |
403 if (engine == NULL) | |
404 return; | |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
405 |
845 | 406 dmMutexLock(engine->audioStreamMutex); |
407 engine->audioStreamBuf = stream; | |
408 engine->audioStreamLen = len / engine->audioSampleSize; | |
409 engine->audioTimePos += (1000 * engine->audioStreamLen) / engine->optAfmt.freq; | |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
410 |
845 | 411 if (engine->paused) |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
412 { |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
413 memset(stream, 0, len); |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
414 } |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
415 else |
845 | 416 switch (engine->optAudioSetup) |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
417 { |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
418 #ifdef DM_USE_JSS |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
419 case DM_ASETUP_JSS: |
845 | 420 if (engine->jssDev != NULL) |
421 jvmRenderAudio(engine->jssDev, stream, len / engine->audioSampleSize); | |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
422 break; |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
423 #endif |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
424 #ifdef DM_USE_TREMOR |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
425 case DM_ASETUP_TREMOR: |
845 | 426 if (engine->audioPos + len >= engine->audioRes->resSize) |
427 engine->exitFlag = TRUE; | |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
428 else |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
429 { |
845 | 430 memcpy(stream, engine->audioRes->resData + engine->audioPos, len); |
431 engine->audioPos += len; | |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
432 } |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
433 break; |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
434 #endif |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
435 |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
436 default: |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
437 break; |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
438 } |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
439 |
845 | 440 dmMutexUnlock(engine->audioStreamMutex); |
791
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
441 } |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
442 |
7ea8775b265a
Move audio callback code to dmengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
787
diff
changeset
|
443 |
785 | 444 void enginePauseAudio(int status) |
445 { | |
446 if (status) | |
447 engine.audioStatus = SDL_AUDIO_PAUSED; | |
448 else | |
449 engine.audioStatus = SDL_AUDIO_PLAYING; | |
450 | |
451 SDL_PauseAudio(status); | |
452 } | |
453 | |
454 | |
784
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
455 int engineGetVideoAspect(int width, int height) |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
456 { |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
457 if (width > 0 && height > 0) |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
458 return (width * 1000) / height; |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
459 else |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
460 return 1; |
35b881454ea2
Move a function implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
779
diff
changeset
|
461 } |