annotate decoders/skeleton.c @ 474:c66080364dff

Most decoders now report total sample play time, now. Technically, this breaks binary compatibility with the 1.0 branch, since it extends the Sound_Sample struct, but most (all?) programs are just passing pointers allocated by SDL_sound around, and might be okay. Source-level compatibility is not broken...yet! :) --ryan. -------- Original Message -------- Subject: SDL_sound patch: Finding total length of time of sound file. Date: Sun, 26 Jan 2003 09:31:17 -0800 (PST) Hi Ryan, I am working with Eric Wing and helping him modify SDL_sound. AS part of our efforts in improving and enhancing SDL_sound, we like to submit this patch. We modified the codecs to find the total time of a sound file. Below is the explanation of the patch. The patch is appended as an attachment to this email. * MOTIVATION: We needed the ability to get the total play time of a sample (And we noticed that we're not the only ones). Since SDL_sound blocks direct access to the specific decoders, there is no way for a user to know this information short of decoding the whole thing. Because of this, we believe this will be a useful addition, even though the accuracy may not be perfect (subject to each decoder) or the information may not always be available. * CONTRIBUTORS: Wesley Leong (modified the majority of the codecs and verified the results) Eric Wing (showed everyone how to do modify codec, modified mikmod) Wang Lam (modified a handful of codecs, researched into specs and int overflow) Ahilan Anantha (modified a few codecs and helped with integer math) * GENERAL ISSUES: We chose the value to be milliseconds as an Sint32. Milliseconds because that's what Sound_Seek takes as a parameter and -1 to allow for instances/codecs where the value could not be determined. We are not sure if this is the final convention you want, so we are willing to work with you on this. We also expect the total_time field to be set on open and never again modified by SDL_sound. Users may access it directly much like the sample buffer and buffer_size. We thought about recomputing the time on DecodeAll, but since users may seek or decode small chunks first, not all the data may be there. So this is better done by the user. This may be good information to document. Currently, all the main codecs are implemented except for QuickTime.
author Ryan C. Gordon <icculus@icculus.org>
date Sat, 08 May 2004 08:19:50 +0000
parents fb519e6028e3
children 50bb9a6cebfe
rev   line source
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
1 /*
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
2 * SDL_sound -- An abstract sound format decoding API.
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
3 * Copyright (C) 2001 Ryan C. Gordon.
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
4 *
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
8 * version 2.1 of the License, or (at your option) any later version.
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
9 *
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
13 * Lesser General Public License for more details.
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
14 *
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
18 */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
19
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
20 /*
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
21 * FMT decoder for SDL_sound.
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
22 *
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
23 * This driver handles FMT audio data. Blahblahblah... The author should
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
24 * have done a search and replace on "fmt" and "FMT" and changed this
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
25 * comment. This is the default comment in the skeleton decoder file...
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
26 *
221
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
27 * None of this code, even the parts that LOOK right, have been compiled,
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
28 * so you cut-and-paste at your own risk.
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
29 *
184
47cc2de2ae36 Changed reference to "LICENSE" file to "COPYING".
Ryan C. Gordon <icculus@icculus.org>
parents: 149
diff changeset
30 * Please see the file COPYING in the source's root directory.
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
31 *
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
32 * This file written by Ryan C. Gordon. (icculus@clutteredmind.org)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
33 */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
34
103
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
35 #error DO NOT COMPILE THIS.
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
36 #error This is an example decoder skeleton.
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
37 #error You should base your code on this file, and remove these error lines
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
38 #error from your version.
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
39
106
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
40 #if HAVE_CONFIG_H
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
41 # include <config.h>
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
42 #endif
100
6d9fdec2f708 added config.h, added --enable-debug flag, various other changes to the build system
fingolfin
parents: 64
diff changeset
43
103
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
44 #ifdef SOUND_SUPPORTS_FMT
706ec5842737 Updated for autoconf change, and placed #error messages so people don't
Ryan C. Gordon <icculus@icculus.org>
parents: 100
diff changeset
45
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
46 #include <stdio.h>
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
47 #include <stdlib.h>
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
48 #include <string.h>
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
49
106
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
50 #include "SDL_sound.h"
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
51
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
52 #define __SDL_SOUND_INTERNAL__
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
53 #include "SDL_sound_internal.h"
40de367eb59e Changing my include structure to do this right.
Ryan C. Gordon <icculus@icculus.org>
parents: 103
diff changeset
54
47
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
55 static int FMT_init(void);
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
56 static void FMT_quit(void);
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
57 static int FMT_open(Sound_Sample *sample, const char *ext);
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
58 static void FMT_close(Sound_Sample *sample);
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
59 static Uint32 FMT_read(Sound_Sample *sample);
221
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
60 static int FMT_rewind(Sound_Sample *sample);
306
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
61 static int FMT_seek(Sound_Sample *sample, Uint32 ms);
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
62
149
1df5c106504e Decoders can now list multiple file extensions.
Ryan C. Gordon <icculus@icculus.org>
parents: 106
diff changeset
63 static const char *extensions_fmt[] = { "FMT", NULL };
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
64 const Sound_DecoderFunctions __Sound_DecoderFunctions_FMT =
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
65 {
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
66 {
149
1df5c106504e Decoders can now list multiple file extensions.
Ryan C. Gordon <icculus@icculus.org>
parents: 106
diff changeset
67 extensions_fmt,
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
68 "FMT audio format description",
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
69 "Ryan C. Gordon <icculus@clutteredmind.org>",
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
70 "http://www.icculus.org/SDL_sound/"
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
71 },
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
72
221
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
73 FMT_init, /* init() method */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
74 FMT_quit, /* quit() method */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
75 FMT_open, /* open() method */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
76 FMT_close, /* close() method */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
77 FMT_read, /* read() method */
306
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
78 FMT_rewind, /* rewind() method */
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
79 FMT_seek /* seek() method */
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
80 };
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
81
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
82
47
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
83 static int FMT_init(void)
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
84 {
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
85 /* do any global decoder/library initialization you need here. */
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
86
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
87 return(1); /* initialization successful. */
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
88 } /* FMT_init */
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
89
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
90
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
91 static void FMT_quit(void)
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
92 {
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
93 /* do any global decoder/library cleanup you need here. */
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
94 } /* FMT_quit */
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
95
ea58bc3b15d7 Added init() and quit() methods.
Ryan C. Gordon <icculus@icculus.org>
parents: 21
diff changeset
96
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
97 static int FMT_open(Sound_Sample *sample, const char *ext)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
98 {
21
d9b9d60cf9a9 Added some helpful info to FMT_open()...
Ryan C. Gordon <icculus@icculus.org>
parents: 16
diff changeset
99 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
d9b9d60cf9a9 Added some helpful info to FMT_open()...
Ryan C. Gordon <icculus@icculus.org>
parents: 16
diff changeset
100 SDL_RWops *rw = internal->rw;
d9b9d60cf9a9 Added some helpful info to FMT_open()...
Ryan C. Gordon <icculus@icculus.org>
parents: 16
diff changeset
101
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
102 if (can NOT accept the data)
387
fb519e6028e3 Changed all the Sound_SetError() calls to __Sound_SetError (or BAIL*_MACRO)
Ryan C. Gordon <icculus@icculus.org>
parents: 377
diff changeset
103 BAIL_MACRO("FMT: expected X, got Y.", 0);
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
104
62
b13fafb976be Changed _D macro to DBGSND.
Ryan C. Gordon <icculus@icculus.org>
parents: 47
diff changeset
105 SNDDBG(("FMT: Accepting data stream.\n"));
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
106 set up sample->actual;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
107 sample->flags = SOUND_SAMPLEFLAG_NONE;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
108 return(1); /* we'll handle this data. */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
109 } /* FMT_open */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
110
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
111
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
112 static void FMT_close(Sound_Sample *sample)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
113 {
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
114 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
115 clean up anything you put into internal->decoder_private;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
116 } /* FMT_close */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
117
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
118
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
119 static Uint32 FMT_read(Sound_Sample *sample)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
120 {
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
121 Uint32 retval;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
122 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
123
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
124 /*
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
125 * We don't actually do any decoding, so we read the fmt data
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
126 * directly into the internal buffer...
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
127 */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
128 retval = SDL_RWread(internal->rw, internal->buffer,
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
129 1, internal->buffer_size);
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
130
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
131 (or whatever. Do some decoding here...)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
132
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
133 /* Make sure the read went smoothly... */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
134 if (retval == 0)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
135 sample->flags |= SOUND_SAMPLEFLAG_EOF;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
136
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
137 else if (retval == -1)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
138 sample->flags |= SOUND_SAMPLEFLAG_ERROR;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
139
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
140 /* (next call this EAGAIN may turn into an EOF or error.) */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
141 else if (retval < internal->buffer_size)
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
142 sample->flags |= SOUND_SAMPLEFLAG_EAGAIN;
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
143
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
144 (or whatever. retval == number of bytes you put in internal->buffer).
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
145
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
146 return(retval);
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
147 } /* FMT_read */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
148
221
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
149
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
150 static int FMT_rewind(Sound_Sample *sample)
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
151 {
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
152 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
153
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
154 /* seek to the appropriate place... */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
155 BAIL_IF_MACRO(SDL_RWseek(internal->rw, 0, SEEK_SET) != 0, ERR_IO_ERROR, 0);
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
156
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
157 (reset state as necessary.)
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
158
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
159 return(1); /* success. */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
160 } /* FMT_rewind */
c9772a9f5271 Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents: 184
diff changeset
161
306
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
162
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
163 static int FMT_seek(Sound_Sample *sample, Uint32 ms)
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
164 {
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
165 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
166
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
167 /* seek to the appropriate place... */
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
168 BAIL_IF_MACRO(SDL_RWseek(internal->rw, 0, SEEK_SET) != 0, ERR_IO_ERROR, 0);
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
169
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
170 (set state as necessary.)
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
171
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
172 return(1); /* success. */
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
173 } /* FMT_seek */
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
174
c97be6e1bd27 Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents: 221
diff changeset
175
64
40006625142a Changes in preparation of autoconf support.
Ryan C. Gordon <icculus@icculus.org>
parents: 62
diff changeset
176 #endif /* SOUND_SUPPORTS_FMT */
40006625142a Changes in preparation of autoconf support.
Ryan C. Gordon <icculus@icculus.org>
parents: 62
diff changeset
177
16
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
178
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
179 /* end of fmt.c ... */
3efbcaf36fec Initial add.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
180