[Scummvm-devel] Re: [Scummvm-cvs-logs] CVS: scummvm mp3_cd.cpp,NONE,1.1 mp3_cd.h,NONE,1.1 sdl.cpp,1.71,1.72 x11.cpp,1.8,1.9

J.Brown (Ender/Amigo) ender at enderboi.com
Thu Apr 4 23:31:24 CEST 2002


Argh, never mind, apologies :)

I thought you'd readded the window-isms, but this was just the delayed
commit from before :)

Regards,        | It's always bad news in computing.. and beware
		| of anything claming to be good news - because
                | its probably a virus. - Salmon Days
        Ender   |
  (James Brown) | [Nehahra, EasyCuts, PureLS, www.QuakeSrc.org]

On Fri, 5 Apr 2002, J.Brown (Ender/Amigo) wrote:

> Date: Fri, 5 Apr 2002 15:28:18 +0800 (WST)
> From: "J.Brown (Ender/Amigo)" <ender at enderboi.com>
> To: Nicolas Bacca <arisme at users.sourceforge.net>
> Cc: scummvm-devel at lists.sourceforge.net
> Subject: [Scummvm-devel] Re: [Scummvm-cvs-logs] CVS: scummvm mp3_cd.cpp,NONE,
>     1.1 mp3_cd.h,NONE,1.1 sdl.cpp,1.71,1.72 x11.cpp,1.8,1.9
>
> Arisme, please reapply all the changes I made to this earlier so it will
> compile on other platforms.
>
> This includes:
> 	All BOOL's to bool
> 	FALSE/TRUE to false/true
> 	Remove use of DWORD, or define the type in scummsys.h for all platforms
> 	Ensure SDL headers are included for use of CD_FPS
> 	Move #include cd_mp3.h into the #ifdef
>
> Regards,        | It's always bad news in computing.. and beware
> 		| of anything claming to be good news - because
>                 | its probably a virus. - Salmon Days
>         Ender   |
>   (James Brown) | [Nehahra, EasyCuts, PureLS, www.QuakeSrc.org]
>
> On Thu, 4 Apr 2002, Nicolas Bacca wrote:
>
> > Date: Thu, 04 Apr 2002 16:00:48 -0800
> > From: Nicolas Bacca <arisme at users.sourceforge.net>
> > To: scummvm-cvs-logs at lists.sourceforge.net
> > Subject: [Scummvm-cvs-logs] CVS: scummvm mp3_cd.cpp,NONE,1.1 mp3_cd.h,NONE,
> >     1.1 sdl.cpp,1.71,1.72 x11.cpp,1.8,1.9
> >
> > Update of /cvsroot/scummvm/scummvm
> > In directory usw-pr-cvs1:/tmp/cvs-serv1233
> >
> > Modified Files:
> > 	sdl.cpp x11.cpp
> > Added Files:
> > 	mp3_cd.cpp mp3_cd.h
> > Log Message:
> > MP3 CD patch reorganized
> >
> > --- NEW FILE: mp3_cd.cpp ---
> > /* ScummVM - Scumm Interpreter
> >  * Copyright (C) 2002 The ScummVM project
> >  *
> >  * This program is free software; you can redistribute it and/or
> >  * modify it under the terms of the GNU General Public License
> >  * as published by the Free Software Foundation; either version 2
> >  * of the License, or (at your option) any later version.
> >  *
> >  * This program is distributed in the hope that it will be useful,
> >  * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >  * GNU General Public License for more details.
> >  *
> >  * You should have received a copy of the GNU General Public License
> >  * along with this program; if not, write to the Free Software
> >  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
> >  *
> >  * $Header: /cvsroot/scummvm/scummvm/mp3_cd.cpp,v 1.1 2002/04/05 00:00:45 arisme Exp $
> >  */
> >
> > #include "stdafx.h"
> > #include "scumm.h"
> > #include "mp3_cd.h"
> >
> > #ifdef COMPRESSED_SOUND_FILE
> >
> > int _current_mp3_cd_track;
> > struct xing _vbr_header;
> > struct mad_header _mad_header;
> > long _mp3_size;
> > FILE *_mp3_track;
> > MixerChannel *_mc;
> >
> > // From xing.c in MAD
> >
> > int xing_parse(struct xing *xing, struct mad_bitptr ptr, unsigned int bitlen)
> > {
> >
> >   xing->flags = 0;
> >
> >   if (bitlen < 64 || mad_bit_read(&ptr, 32) != XING_MAGIC)
> >     goto fail;
> >
> >   xing->flags = mad_bit_read(&ptr, 32);
> >   bitlen -= 64;
> >
> >   if (xing->flags & XING_FRAMES) {
> >     if (bitlen < 32)
> >       goto fail;
> >
> >     xing->frames = mad_bit_read(&ptr, 32);
> >     bitlen -= 32;
> >   }
> >
> >   if (xing->flags & XING_BYTES) {
> >     if (bitlen < 32)
> >       goto fail;
> >
> >     xing->bytes = mad_bit_read(&ptr, 32);
> >     bitlen -= 32;
> >   }
> >
> >   if (xing->flags & XING_TOC) {
> >     int i;
> >
> >     if (bitlen < 800)
> >       goto fail;
> >
> >     for (i = 0; i < 100; ++i)
> >       xing->toc[i] = (unsigned char)mad_bit_read(&ptr, 8);
> >
> >     bitlen -= 800;
> >   }
> >
> >   if (xing->flags & XING_SCALE) {
> >     if (bitlen < 32)
> >       goto fail;
> >
> >     xing->scale = mad_bit_read(&ptr, 32);
> >     bitlen -= 32;
> >   }
> >
> >   return 0;
> >
> >  fail:
> >   xing->flags = 0;
> >   return -1;
> > }
> >
> > // Borrowed from Winamp plugin in_mad.c
> >
> > BOOL parse_xing_vbr_tag()
> > {
> >   struct mad_stream stream;
> >   struct mad_frame frame;
> >   unsigned char buffer[8192];
> >   unsigned int buflen = 0;
> >   int count = 0, result = 0;
> >
> >   _vbr_header.flags = 0;
> >
> >   mad_stream_init(&stream);
> >   mad_frame_init(&frame);
> >
> >   fseek(_mp3_track, 0, SEEK_SET);
> >
> >   while (1) {
> >     if (buflen < sizeof(buffer)) {
> >       DWORD bytes;
> >
> > 	  bytes = fread(buffer + buflen, 1, sizeof(buffer) - buflen, _mp3_track);
> >       if (bytes <= 0) {
> > 	if (bytes == -1)
> > 	  result = -1;
> > 	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++ ||
> > 		  xing_parse(&_vbr_header, stream.anc_ptr, stream.anc_bitlen)
> > 			== -1)
> > 	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
> > 	  result = -1;
> >
> >   mad_frame_finish(&frame);
> >   mad_stream_finish(&stream);
> >
> >   return (result != -1);
> > }
> >
> > uint32 calc_cd_file_offset(int start_frame) {
> > 	long offset;
> >
> > 	if (!_vbr_header.flags) {
> > 		float frame_size;
> > 		//mad_timer_t timer;  - recode with timer
> >
> > 		/* Constant bit rate - perhaps not fully accurate */
> > 		frame_size = (float)144 * _mad_header.bitrate / _mad_header.samplerate;
> > 		offset = (long)((float)start_frame / (float)CD_FPS * 1000 /
> > 				 (float)((float)1152 / (float)_mad_header.samplerate * 1000) *
> > 				 (float)(frame_size + 0.5));
> > 	}
> > 	else {
> >         /* DOES NOT WORK AT THE MOMENT */
> > 		/* see Xing SDK */
> > 		long a;
> > 		float fa, fb, fx;
> > 		float percent = (float)start_frame / (float)CD_FPS * 1000 /
> > 						((float)((float)1152 / (float)_mad_header.samplerate * 1000) * _vbr_header.frames) *
> > 						100;
> >
> > 		if( percent < 0.0f )   percent = 0.0f;
> > 		if( percent > 100.0f ) percent = 100.0f;
> >
> > 		a = (int)percent;
> > 		if( a > 99 ) a = 99;
> > 		fa = _vbr_header.toc[a];
> > 		if( a < 99 ) {
> > 			fb = _vbr_header.toc[a+1];
> > 		}
> > 		else {
> > 			fb = 256.0f;
> > 		}
> >
> > 		fx = fa + (fb-fa)*(percent-a);
> >
> > 		offset = (int)((1.0f/256.0f)*fx*_vbr_header.bytes);
> >
> > 	}
> >
> > 	return offset;
> > }
> >
> > BOOL mp3_cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame) {
> >
> > 	// See if we are already playing this track, else try to open it
> >
> > 	if (_current_mp3_cd_track != track) {
> > 		char track_name[1024];
> >
> > 		sprintf(track_name, "%strack%d.mp3", s->_gameDataPath, track);
> > 		_mp3_track = fopen(track_name, "rb");
> > 		if (!_mp3_track) {
> > 			warning("No CD and track %d not available in mp3 format", track);
> > 			return FALSE;
> > 		}
> >
> > 		if (!parse_xing_vbr_tag()) {
> > 				warning("Error parsing file header - ignoring file",
> > 							track);
> > 				fclose(_mp3_track);
> > 				return FALSE;
> > 		}
> >
> > 		if (_vbr_header.flags) {
> > 			if (!(
> > 				    (_vbr_header.flags & XING_TOC) &&
> > 					(_vbr_header.flags & XING_BYTES) &&
> > 					(_vbr_header.flags & XING_FRAMES)
> > 				)) {
> > 				warning("Missing required part of VBR header - ignoring file");
> > 				fclose(_mp3_track);
> > 				_vbr_header.flags = 0;
> > 				return FALSE;
> > 			}
> > 		}
> >
> > 		// Allocate the music mixer if necessary
> >
> > 		if (!_mc) {
> > 			_mc = s->allocateMixer();
> > 			if (!_mc) {
> > 				warning("No mixer channel available for MP3 music");
> > 				return FALSE;
> > 			}
> > 		}
> >
> > 		fseek(_mp3_track, 0, SEEK_END);
> > 		_mp3_size = ftell(_mp3_track);
> > 		fseek(_mp3_track, 0, SEEK_SET);
> >
> > 		_mc->type = MIXER_MP3_CDMUSIC;
> > 		_mc->sound_data.mp3_cdmusic.file = _mp3_track;
> > 		_mc->sound_data.mp3_cdmusic.playing = FALSE;
> > 		_mc->sound_data.mp3_cdmusic.buffer_size = 200000;
> > 		_mc->_sfx_sound = malloc(_mc->sound_data.mp3_cdmusic.buffer_size);
> >
> > 														/* see if it's enough */
> > 		mad_stream_init(&_mc->sound_data.mp3.stream);
> > 		if (_mad_header.samplerate == 44100)
> > 			mad_stream_options((mad_stream*)&_mc->sound_data.mp3.stream,
> > 								MAD_OPTION_HALFSAMPLERATE);
> >
> > 		mad_frame_init(&_mc->sound_data.mp3.frame);
> > 		mad_synth_init(&_mc->sound_data.mp3.synth);
> >
> > 		_current_mp3_cd_track = track;
> > 	}
> >
> >
> > 	if (_current_mp3_cd_track == track) {
> >
> > 		uint32 where;
> >
> > 		// See where we want to go
> > 		where = calc_cd_file_offset(start_frame);
> >
> > 		if (start_frame < 0 || end_frame < 0) {
> > 			warning("Negative index in frame");
> > 			return FALSE;
> > 		}
> >
> > 		mad_timer_set(&_mc->sound_data.mp3_cdmusic.duration,
> > 					  0,
> > 					  end_frame,
> > 					  CD_FPS);
> >
> > 		fseek(_mp3_track, where, SEEK_SET);
> > 		_mc->sound_data.mp3_cdmusic.playing = TRUE;
> >
> > 		return TRUE;
> > 	}
> >
> > 	return FALSE;
> > }
> >
> > #endif
> >
> >
> > --- NEW FILE: mp3_cd.h ---
> > /* ScummVM - Scumm Interpreter
> >  * Copyright (C) 2002 The ScummVM project
> >  *
> >  * This program is free software; you can redistribute it and/or
> >  * modify it under the terms of the GNU General Public License
> >  * as published by the Free Software Foundation; either version 2
> >  * of the License, or (at your option) any later version.
> >  *
> >  * This program is distributed in the hope that it will be useful,
> >  * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >  * GNU General Public License for more details.
> >  *
> >  * You should have received a copy of the GNU General Public License
> >  * along with this program; if not, write to the Free Software
> >  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
> >  *
> >  * $Header: /cvsroot/scummvm/scummvm/mp3_cd.h,v 1.1 2002/04/05 00:00:46 arisme Exp $
> >  */
> >
> > #ifndef MP3_CD_H
> > #define MP3_CD_H
> >
> > // From xing.h in MAD
> >
> > # define XING_MAGIC	(('X' << 24) | ('i' << 16) | ('n' << 8) | 'g')
> >
> > struct xing {
> >   long flags;			/* valid fields (see below) */
> >   unsigned long frames;		/* total number of frames */
> >   unsigned long bytes;		/* total number of bytes */
> >   unsigned char toc[100];	/* 100-point seek table */
> >   long scale;			/* ?? */
> > };
> >
> > enum {
> >   XING_FRAMES = 0x00000001L,
> >   XING_BYTES  = 0x00000002L,
> >   XING_TOC    = 0x00000004L,
> >   XING_SCALE  = 0x00000008L
> > };
> >
> > BOOL mp3_cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame);
> >
> > #endif
> > Index: sdl.cpp
> > ===================================================================
> > RCS file: /cvsroot/scummvm/scummvm/sdl.cpp,v
> > retrieving revision 1.71
> > retrieving revision 1.72
> > diff -C2 -d -r1.71 -r1.72
> > *** sdl.cpp	4 Apr 2002 22:47:03 -0000	1.71
> > --- sdl.cpp	5 Apr 2002 00:00:46 -0000	1.72
> > ***************
> > *** 30,33 ****
> > --- 30,34 ----
> >
> >   #include "cdmusic.h"
> > + #include "mp3_cd.h"
> >
> >   static unsigned int scale;
> > ***************
> > *** 677,997 ****
> >   static Uint32 cd_end_time, cd_stop_time, cd_next_second;
> >
> > ! #ifdef COMPRESSED_SOUND_FILE
> > !
> > ! // MP3 CD track support
> > !
> > !
> > ! // From xing.h in MAD
> > !
> > ! # define XING_MAGIC	(('X' << 24) | ('i' << 16) | ('n' << 8) | 'g')
> > !
> > ! struct xing {
> > !   long flags;			/* valid fields (see below) */
> > !   unsigned long frames;		/* total number of frames */
> > !   unsigned long bytes;		/* total number of bytes */
> > !   unsigned char toc[100];	/* 100-point seek table */
> > !   long scale;			/* ?? */
> > ! };
> > !
> > ! enum {
> > !   XING_FRAMES = 0x00000001L,
> > !   XING_BYTES  = 0x00000002L,
> > !   XING_TOC    = 0x00000004L,
> > !   XING_SCALE  = 0x00000008L
> > ! };
> > !
> > !
> > ! int _current_mp3_cd_track;
> > ! struct xing _vbr_header;
> > ! struct mad_header _mad_header;
> > ! long _mp3_size;
> > ! FILE *_mp3_track;
> > ! MixerChannel *_mc;
> > !
> > ! // From xing.c in MAD
> > !
> > ! int xing_parse(struct xing *xing, struct mad_bitptr ptr, unsigned int bitlen)
> > ! {
> > !
> > !   xing->flags = 0;
> > !
> > !   if (bitlen < 64 || mad_bit_read(&ptr, 32) != XING_MAGIC)
> > !     goto fail;
> > !
> > !   xing->flags = mad_bit_read(&ptr, 32);
> > !   bitlen -= 64;
> > !
> > !   if (xing->flags & XING_FRAMES) {
> > !     if (bitlen < 32)
> > !       goto fail;
> > !
> > !     xing->frames = mad_bit_read(&ptr, 32);
> > !     bitlen -= 32;
> > !   }
> > !
> > !   if (xing->flags & XING_BYTES) {
> > !     if (bitlen < 32)
> > !       goto fail;
> > !
> > !     xing->bytes = mad_bit_read(&ptr, 32);
> > !     bitlen -= 32;
> > !   }
> > !
> > !   if (xing->flags & XING_TOC) {
> > !     int i;
> > !
> > !     if (bitlen < 800)
> > !       goto fail;
> > !
> > !     for (i = 0; i < 100; ++i)
> > !       xing->toc[i] = (unsigned char)mad_bit_read(&ptr, 8);
> > !
> > !     bitlen -= 800;
> > !   }
> > !
> > !   if (xing->flags & XING_SCALE) {
> > !     if (bitlen < 32)
> > !       goto fail;
> > !
> > !     xing->scale = mad_bit_read(&ptr, 32);
> > !     bitlen -= 32;
> > !   }
> > !
> > !   return 0;
> > !
> > !  fail:
> > !   xing->flags = 0;
> > !   return -1;
> > ! }
> > !
> > ! // Borrowed from Winamp plugin in_mad.c
> > !
> > ! BOOL parse_xing_vbr_tag()
> > ! {
> > !   struct mad_stream stream;
> > !   struct mad_frame frame;
> > !   unsigned char buffer[8192];
> > !   unsigned int buflen = 0;
> > !   int count = 0, result = 0;
> > !
> > !   _vbr_header.flags = 0;
> > !
> > !   mad_stream_init(&stream);
> > !   mad_frame_init(&frame);
> > !
> > !   fseek(_mp3_track, 0, SEEK_SET);
> > !
> > !   while (1) {
> > !     if (buflen < sizeof(buffer)) {
> > !       DWORD bytes;
> > !
> > ! 	  bytes = fread(buffer + buflen, 1, sizeof(buffer) - buflen, _mp3_track);
> > !       if (bytes <= 0) {
> > ! 	if (bytes == -1)
> > ! 	  result = -1;
> > ! 	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++ ||
> > ! 		  xing_parse(&_vbr_header, stream.anc_ptr, stream.anc_bitlen)
> > ! 			== -1)
> > ! 	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
> > ! 	  result = -1;
> > !
> > !   mad_frame_finish(&frame);
> > !   mad_stream_finish(&stream);
> > !
> > !   return (result != -1);
> > ! }
> > !
> > ! uint32 calc_cd_file_offset(int start_frame) {
> > ! 	long offset;
> > !
> > ! 	if (!_vbr_header.flags) {
> > ! 		float frame_size;
> > ! 		//mad_timer_t timer;  - recode with timer
> > !
> > ! 		/* Constant bit rate - perhaps not fully accurate, recheck */
> > ! 		frame_size = (float)(144 * _mad_header.bitrate / _mad_header.samplerate);
> > ! 		offset = (float)(float)start_frame / (float)CD_FPS * 1000 /
> > ! 				 (float)((float)1152 / (float)_mad_header.samplerate * 1000) *
> > ! 				 (float)(frame_size + 0.5);
> > ! 	}
> > ! 	else {
> > !          /* DOES NOT WORK AT THE MOMENT */
> > ! 		/* see Xing SDK */
> > ! 		long a;
> > ! 		float fa, fb, fx;
> > ! 		float percent = (float)start_frame / (float)CD_FPS * 1000 /
> > ! 						((float)((float)1152 / (float)_mad_header.samplerate * 1000) * _vbr_header.frames) *
> > ! 						100;
> > !
> > ! 		if( percent < 0.0f )   percent = 0.0f;
> > ! 		if( percent > 100.0f ) percent = 100.0f;
> > !
> > ! 		a = (int)percent;
> > ! 		if( a > 99 ) a = 99;
> > ! 		fa = _vbr_header.toc[a];
> > ! 		if( a < 99 ) {
> > ! 			fb = _vbr_header.toc[a+1];
> > ! 		}
> > ! 		else {
> > ! 			fb = 256.0f;
> > ! 		}
> > !
> > ! 		fx = fa + (fb-fa)*(percent-a);
> > !
> > ! 		offset = (int)((1.0f/256.0f)*fx*_vbr_header.bytes);
> > !
> > ! 	}
> > !
> > ! 	return offset;
> > ! }
> > !
> > !
> > ! #endif
> > !
> > ! void real_cd_play(int track, int num_loops, int start_frame, int end_frame) {
> > ! 	// warning("cd_play(%d,%d,%d,%d)", track, num_loops, start_frame, end_frame);
> > ! 	if (!cdrom) return;
> > !
> > ! 	cd_track = track;
> > ! 	cd_num_loops = num_loops;
> > ! 	cd_start_frame = start_frame;
> > !
> > ! 	SDL_CDStatus(cdrom);
> > ! 	SDL_CDPlayTracks(cdrom, track, start_frame, 0, end_frame);
> > ! 	cd_end_frame = end_frame;
> > ! 	cd_stop_time = 0;
> > ! 	cd_end_time = SDL_GetTicks() +
> > ! 		cdrom->track[track].length * 1000 / CD_FPS;
> > ! }
> > !
> > ! void cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame) {
> > ! 	scumm->_vars[14] = 0;
> >
> >   #ifdef COMPRESSED_SOUND_FILE
> >
> > ! 	// See if we are already playing this track, else try to open it
> > !
> > ! 	if (_current_mp3_cd_track != track) {
> > ! 		char track_name[1024];
> > !
> > ! 		sprintf(track_name, "%strack%d.mp3", s->_gameDataPath, track);
> > ! 		_mp3_track = fopen(track_name, "rb");
> > ! 		if (!_mp3_track) {
> > ! 			warning("No CD and track %d not available in mp3 format", track);
> > ! 			real_cd_play(track, num_loops, start_frame, end_frame);
> > ! 			return;
> > ! 		}
> > !
> > ! 		if (!parse_xing_vbr_tag()) {
> > ! 				warning("Error parsing file header - ignoring file",
> > ! 							track);
> > ! 				fclose(_mp3_track);
> > ! 				real_cd_play(track, num_loops, start_frame, end_frame);
> > ! 				return;
> > ! 		}
> > !
> > ! 		if (_vbr_header.flags) {
> > ! 			if (!(
> > ! 				    (_vbr_header.flags & XING_TOC) &&
> > ! 					(_vbr_header.flags & XING_BYTES) &&
> > ! 					(_vbr_header.flags & XING_FRAMES)
> > ! 				)) {
> > ! 				warning("Missing required part of VBR header - ignoring file");
> > ! 				fclose(_mp3_track);
> > ! 				_vbr_header.flags = 0;
> > ! 				real_cd_play(track, num_loops, start_frame, end_frame);
> > ! 				return;
> > ! 			}
> > ! 		}
> > !
> > ! 		// Allocate the music mixer if necessary
> > !
> > ! 		if (!_mc) {
> > ! 			_mc = s->allocateMixer();
> > ! 			if (!_mc) {
> > ! 				warning("No mixer channel available for MP3 music");
> > ! 				real_cd_play(track, num_loops, start_frame, end_frame);
> > ! 				return;
> > ! 			}
> > ! 		}
> > !
> > ! 		fseek(_mp3_track, 0, SEEK_END);
> > ! 		_mp3_size = ftell(_mp3_track);
> > ! 		fseek(_mp3_track, 0, SEEK_SET);
> > !
> > ! 		_mc->type = MIXER_MP3_CDMUSIC;
> > ! 		_mc->sound_data.mp3_cdmusic.file = _mp3_track;
> > ! 		_mc->sound_data.mp3_cdmusic.playing = FALSE;
> > ! 		_mc->sound_data.mp3_cdmusic.buffer_size = 200000;
> > ! 		_mc->_sfx_sound = malloc(_mc->sound_data.mp3_cdmusic.buffer_size);
> > !
> > ! 														/* see if it's enough */
> > ! 		mad_stream_init(&_mc->sound_data.mp3.stream);
> > ! 		if (_mad_header.samplerate == 44100)
> > ! 			mad_stream_options((mad_stream*)&_mc->sound_data.mp3.stream,
> > ! 								MAD_OPTION_HALFSAMPLERATE);
> > !
> > ! 		mad_frame_init(&_mc->sound_data.mp3.frame);
> > ! 		mad_synth_init(&_mc->sound_data.mp3.synth);
> > !
> > ! 		_current_mp3_cd_track = track;
> > ! 	}
> > !
> > !
> > ! 	if (_current_mp3_cd_track == track) {
> > !
> > ! 		uint32 where;
> > !
> > ! 		// See where we want to go
> > ! 		where = calc_cd_file_offset(start_frame);
> > !
> > ! 		if (start_frame < 0 || end_frame < 0) {
> > ! 			warning("Negative index in frame");
> > ! 			return;
> > ! 		}
> >
> > ! 		mad_timer_set(&_mc->sound_data.mp3_cdmusic.duration,
> > ! 					  0,
> > ! 					  end_frame,
> > ! 					  CD_FPS);
> >
> > ! 		fseek(_mp3_track, where, SEEK_SET);
> > ! 		_mc->sound_data.mp3_cdmusic.playing = TRUE;
> > !
> > ! 		return;
> > ! 	}
> >
> > ! #endif
> > !
> > ! 	real_cd_play(track, num_loops, start_frame, end_frame);
> >   }
> >
> > --- 678,704 ----
> >   static Uint32 cd_end_time, cd_stop_time, cd_next_second;
> >
> > ! void cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame) {
> >
> >   #ifdef COMPRESSED_SOUND_FILE
> >
> > ! 	if (mp3_cd_play(s, track, num_loops, start_frame, end_frame))
> > ! 		return;
> >
> > ! #endif
> >
> > ! 	// warning("cd_play(%d,%d,%d,%d)", track, num_loops, start_frame, end_frame);
> > ! 	if (!cdrom) return;
> >
> > ! 	scumm->_vars[14] = 0;
> > ! 	cd_track = track;
> > ! 	cd_num_loops = num_loops;
> > ! 	cd_start_frame = start_frame;
> > !
> > ! 	SDL_CDStatus(cdrom);
> > ! 	SDL_CDPlayTracks(cdrom, track, start_frame, 0, end_frame);
> > ! 	cd_end_frame = end_frame;
> > ! 	cd_stop_time = 0;
> > ! 	cd_end_time = SDL_GetTicks() +
> > ! 		cdrom->track[track].length * 1000 / CD_FPS;
> >   }
> >
> >
> > Index: x11.cpp
> > ===================================================================
> > RCS file: /cvsroot/scummvm/scummvm/x11.cpp,v
> > retrieving revision 1.8
> > retrieving revision 1.9
> > diff -C2 -d -r1.8 -r1.9
> > *** x11.cpp	4 Apr 2002 22:47:03 -0000	1.8
> > --- x11.cpp	5 Apr 2002 00:00:46 -0000	1.9
> > ***************
> > *** 27,30 ****
> > --- 27,31 ----
> >   #include "sound.h"
> >   #include "cdmusic.h"
> > + #include "mp3_cd.h"
> >
> >   #include <sys/time.h>
> > ***************
> > *** 188,192 ****
> >   /* No CD on the iPAQ => stub functions */
> >   void cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame) {
> > ! /* Insert SDL.cpp MP3 code here :) */
> >   }
> >   int cd_is_running(void) {
> > --- 189,196 ----
> >   /* No CD on the iPAQ => stub functions */
> >   void cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame) {
> > !
> > ! #ifdef COMPRESSED_SOUND_FILE
> > ! 	mp3_cd_play(s, track, num_loops, start_frame, end_frame);
> > ! #endif
> >   }
> >   int cd_is_running(void) {
> >
> >
> > _______________________________________________
> > Scummvm-cvs-logs mailing list
> > Scummvm-cvs-logs at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/scummvm-cvs-logs
> >
>
>
> _______________________________________________
> Scummvm-devel mailing list
> Scummvm-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/scummvm-devel
>





More information about the Scummvm-devel mailing list