static portable_sampleframe_t paintbuffer[PAINTBUFFER_SIZE];
+static portable_sampleframe_t paintbuffer_unswapped[PAINTBUFFER_SIZE];
+extern speakerlayout_t snd_speakerlayout; // for querying the listeners
extern void SCR_CaptureVideo_SoundFrame(const portable_sampleframe_t *paintbuffer, size_t length);
static void S_CaptureAVISound(size_t length)
{
+ size_t i;
+ unsigned int j;
+
if (!cls.capturevideo.active)
return;
- SCR_CaptureVideo_SoundFrame(paintbuffer, length);
+ // undo whatever swapping the channel layout (swapstereo, ALSA) did
+ for(j = 0; j < snd_speakerlayout.channels; ++j)
+ {
+ unsigned int j0 = snd_speakerlayout.listeners[j].channel_unswapped;
+ for(i = 0; i < length; ++i)
+ paintbuffer_unswapped[i].sample[j0] = paintbuffer[i].sample[j];
+ }
+
+ SCR_CaptureVideo_SoundFrame(paintbuffer_unswapped, length);
}
static void S_ConvertPaintBuffer(const portable_sampleframe_t *painted_ptr, void *rb_ptr, int nbframes, int width, int channels)
*snd_out++ = bound(-32768, val, 32767);
}
}
+
+ // noise is really really annoying
+ if (cls.timedemo)
+ memset(rb_ptr, 0, nbframes * channels * width);
}
else // 8bit
{
*snd_out++ = bound(0, val, 255);
}
}
+
+ // noise is really really annoying
+ if (cls.timedemo)
+ memset(rb_ptr, 128, nbframes * channels);
}
}
// If this channel manages its own volume
if (ch->flags & CHANNELFLAG_FULLVOLUME)
- snd_vol = 256;
+ snd_vol = (int)(mastervolume.value * 256);
else
- snd_vol = (int)(volume.value * 256);
+ snd_vol = (int)(mastervolume.value * volume.value * 256);
// calculate mixing volumes based on channel volumes and volume cvar
// also limit the volumes to values that won't clip
for (i = 0; i < total_channels ; i++, ch++)
{
sfx_t *sfx;
- unsigned int ltime;
- unsigned int count;
+ int ltime;
+ int count;
sfx = ch->sfx;
if (sfx == NULL)
if (ch->pos < 0)
{
count = -ch->pos;
- count = min(count, frames - ltime);
+ count = min(count, (int)frames - ltime);
ch->pos += count;
ltime += count;
}
- while (ltime < frames)
+ while (ltime < (int)frames)
{
// paint up to end of buffer or of input, whichever is lower
count = sfx->total_length - ch->pos;
- count = bound(0, count, frames - ltime);
+ count = bound(0, count, (int)frames - ltime);
if (count)
{
SND_PaintChannel (ch, paintbuffer + ltime, count);