[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.150,1.151 mixer.h,1.69,1.70 mp3.cpp,1.4,1.5 mp3.h,1.3,1.4
Max Horn
fingolfin at users.sourceforge.net
Fri Jan 2 16:56:16 CET 2004
Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1:/tmp/cvs-serv2314
Modified Files:
mixer.cpp mixer.h mp3.cpp mp3.h
Log Message:
removed SoundMixer::playMP3CDTrack; simplified makeMP3Stream (special variant with mad_timer_t was really only needed for MP3TrackInfo class)
Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.150
retrieving revision 1.151
diff -u -d -r1.150 -r1.151
--- mixer.cpp 27 Dec 2003 21:31:41 -0000 1.150
+++ mixer.cpp 3 Jan 2004 00:55:28 -0000 1.151
@@ -249,13 +249,8 @@
#ifdef USE_MAD
void SoundMixer::playMP3(PlayingSoundHandle *handle, File *file, uint32 size, byte volume, int8 pan, int id) {
// Create the input stream
- AudioInputStream *input = makeMP3Stream(file, mad_timer_zero, size);
+ AudioInputStream *input = makeMP3Stream(file, size);
playInputStream(handle, input, false, volume, pan, id);
-}
-void SoundMixer::playMP3CDTrack(PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume, int8 pan, int id) {
- // Create the input stream
- AudioInputStream *input = makeMP3Stream(file, duration, 0);
- playInputStream(handle, input, true, volume, pan, id);
}
#endif
Index: mixer.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- mixer.h 26 Dec 2003 02:19:31 -0000 1.69
+++ mixer.h 3 Jan 2004 00:55:28 -0000 1.70
@@ -27,9 +27,6 @@
#include "common/scummsys.h"
#include "common/system.h"
-#ifdef USE_MAD
-#include <mad.h>
-#endif
#ifdef USE_VORBIS
#include <vorbis/vorbisfile.h>
#endif
@@ -115,7 +112,6 @@
int id = -1, byte volume = 255, int8 pan = 0, uint32 loopStart = 0, uint32 loopEnd = 0);
#ifdef USE_MAD
void playMP3(PlayingSoundHandle *handle, File *file, uint32 size, byte volume = 255, int8 pan = 0, int id = -1);
- void playMP3CDTrack(PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume = 255, int8 pan = 0, int id = -1);
#endif
#ifdef USE_VORBIS
void playVorbis(PlayingSoundHandle *handle, File *file, uint32 size, byte volume = 255, int8 pan = 0, int id = -1);
Index: mp3.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mp3.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- mp3.cpp 21 Dec 2003 00:44:31 -0000 1.4
+++ mp3.cpp 3 Jan 2004 00:55:28 -0000 1.5
@@ -26,105 +26,6 @@
#ifdef USE_MAD
-MP3TrackInfo::MP3TrackInfo(File *file) {
- struct mad_stream stream;
- struct mad_frame frame;
- unsigned char buffer[8192];
- unsigned int buflen = 0;
- int count = 0;
-
- // Check the format and bitrate
- mad_stream_init(&stream);
- mad_frame_init(&frame);
-
- while (1) {
- if (buflen < sizeof(buffer)) {
- int bytes;
-
- bytes = file->read(buffer + buflen, sizeof(buffer) - buflen);
- if (bytes <= 0) {
- if (bytes == -1) {
- warning("Invalid file format");
- goto error;
- }
- break;
- }
-
- buflen += bytes;
- }
-
- mad_stream_buffer(&stream, buffer, buflen);
-
- while (1) {
- if (mad_frame_decode(&frame, &stream) == -1) {
- if (!MAD_RECOVERABLE(stream.error))
- break;
-
- if (stream.error != MAD_ERROR_BADCRC)
- continue;
- }
-
- if (count++)
- break;
- }
-
- if (count || stream.error != MAD_ERROR_BUFLEN)
- break;
-
- memmove(buffer, stream.next_frame,
- buflen = &buffer[buflen] - stream.next_frame);
- }
-
- if (count)
- memcpy(&_mad_header, &frame.header, sizeof(mad_header));
- else {
- warning("Invalid file format");
- goto error;
- }
-
- mad_frame_finish(&frame);
- mad_stream_finish(&stream);
- // Get file size
- _size = file->size();
- _file = file;
- _error_flag = false;
- return;
-
-error:
- mad_frame_finish(&frame);
- mad_stream_finish(&stream);
- _error_flag = true;
- delete file;
-}
-
-void MP3TrackInfo::play(SoundMixer *mixer, PlayingSoundHandle *handle, int startFrame, int duration) {
- unsigned int offset;
- mad_timer_t durationTime;
-
- // Calc offset. As all bitrates are in kilobit per seconds, the division by 200 is always exact
- offset = (startFrame * (_mad_header.bitrate / (8 * 25))) / 3;
- _file->seek(offset, SEEK_SET);
-
- // Calc delay
- if (!duration) {
- // FIXME: Using _size here is a problem if offset (or equivalently
- // startFrame) is non-zero.
- mad_timer_set(&durationTime, (_size * 8) / _mad_header.bitrate,
- (_size * 8) % _mad_header.bitrate, _mad_header.bitrate);
- } else {
- mad_timer_set(&durationTime, duration / 75, duration % 75, 75);
- }
-
- // Play it
- mixer->playMP3CDTrack(handle, _file, durationTime);
-}
-
-MP3TrackInfo::~MP3TrackInfo() {
- if (! _error_flag)
- _file->close();
-}
-
-
#pragma mark -
#pragma mark --- MP3 (MAD) stream ---
#pragma mark -
@@ -354,8 +255,112 @@
return samples;
}
-AudioInputStream *makeMP3Stream(File *file, mad_timer_t duration, uint size) {
- return new MP3InputStream(file, duration, size);
+AudioInputStream *makeMP3Stream(File *file, uint size) {
+ return new MP3InputStream(file, mad_timer_zero, size);
+}
+
+
+#pragma mark -
+#pragma mark --- MP3 Audio CD emulation ---
+#pragma mark -
+
+MP3TrackInfo::MP3TrackInfo(File *file) {
+ struct mad_stream stream;
+ struct mad_frame frame;
+ unsigned char buffer[8192];
+ unsigned int buflen = 0;
+ int count = 0;
+
+ // Check the format and bitrate
+ mad_stream_init(&stream);
+ mad_frame_init(&frame);
+
+ while (1) {
+ if (buflen < sizeof(buffer)) {
+ int bytes;
+
+ bytes = file->read(buffer + buflen, sizeof(buffer) - buflen);
+ if (bytes <= 0) {
+ if (bytes == -1) {
+ warning("Invalid file format");
+ goto error;
+ }
+ break;
+ }
+
+ buflen += bytes;
+ }
+
+ mad_stream_buffer(&stream, buffer, buflen);
+
+ while (1) {
+ if (mad_frame_decode(&frame, &stream) == -1) {
+ if (!MAD_RECOVERABLE(stream.error))
+ break;
+
+ if (stream.error != MAD_ERROR_BADCRC)
+ continue;
+ }
+
+ if (count++)
+ break;
+ }
+
+ if (count || stream.error != MAD_ERROR_BUFLEN)
+ break;
+
+ memmove(buffer, stream.next_frame,
+ buflen = &buffer[buflen] - stream.next_frame);
+ }
+
+ if (count)
+ memcpy(&_mad_header, &frame.header, sizeof(mad_header));
+ else {
+ warning("Invalid file format");
+ goto error;
+ }
+
+ mad_frame_finish(&frame);
+ mad_stream_finish(&stream);
+ // Get file size
+ _size = file->size();
+ _file = file;
+ _error_flag = false;
+ return;
+
+error:
+ mad_frame_finish(&frame);
+ mad_stream_finish(&stream);
+ _error_flag = true;
+ delete file;
+}
+
+void MP3TrackInfo::play(SoundMixer *mixer, PlayingSoundHandle *handle, int startFrame, int duration) {
+ unsigned int offset;
+ mad_timer_t durationTime;
+
+ // Calc offset. As all bitrates are in kilobit per seconds, the division by 200 is always exact
+ offset = (startFrame * (_mad_header.bitrate / (8 * 25))) / 3;
+ _file->seek(offset, SEEK_SET);
+
+ // Calc delay
+ if (!duration) {
+ // FIXME: Using _size here is a problem if offset (or equivalently
+ // startFrame) is non-zero.
+ mad_timer_set(&durationTime, (_size * 8) / _mad_header.bitrate,
+ (_size * 8) % _mad_header.bitrate, _mad_header.bitrate);
+ } else {
+ mad_timer_set(&durationTime, duration / 75, duration % 75, 75);
+ }
+
+ // Play it
+ AudioInputStream *input = new MP3InputStream(_file, durationTime, 0);
+ mixer->playInputStream(handle, input, true);
+}
+
+MP3TrackInfo::~MP3TrackInfo() {
+ if (! _error_flag)
+ _file->close();
}
Index: mp3.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mp3.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mp3.h 21 Dec 2003 00:44:31 -0000 1.3
+++ mp3.h 3 Jan 2004 00:55:28 -0000 1.4
@@ -47,7 +47,7 @@
void play(SoundMixer *mixer, PlayingSoundHandle *handle, int startFrame, int duration);
};
-AudioInputStream *makeMP3Stream(File *file, mad_timer_t duration, uint size = 0);
+AudioInputStream *makeMP3Stream(File *file, uint size);
#endif
More information about the Scummvm-git-logs
mailing list