support endian adjustment,

other small changes


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3590 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
beveloper
2003-06-21 01:57:39 +00:00
parent 526735b289
commit 88777023cd
2 changed files with 27 additions and 1 deletions
@@ -4,11 +4,13 @@
#include "MixerInput.h" #include "MixerInput.h"
#include "MixerCore.h" #include "MixerCore.h"
#include "MixerUtils.h" #include "MixerUtils.h"
#include "ByteSwap.h"
#include "debug.h" #include "debug.h"
MixerInput::MixerInput(MixerCore *core, const media_input &input, float mixSampleRate, int32 mixFramesCount, bigtime_t mixStartTime) MixerInput::MixerInput(MixerCore *core, const media_input &input, float mixSampleRate, int32 mixFramesCount, bigtime_t mixStartTime)
: fCore(core), : fCore(core),
fInput(input), fInput(input),
fInputByteSwap(0),
fInputChannelInfo(0), fInputChannelInfo(0),
fInputChannelCount(0), fInputChannelCount(0),
fInputChannelMask(0), fInputChannelMask(0),
@@ -30,6 +32,15 @@ MixerInput::MixerInput(MixerCore *core, const media_input &input, float mixSampl
fInputChannelMask = fInput.format.u.raw_audio.channel_mask; fInputChannelMask = fInput.format.u.raw_audio.channel_mask;
fInputChannelInfo = new input_chan_info[fInputChannelCount]; fInputChannelInfo = new input_chan_info[fInputChannelCount];
// perhaps we need byte swapping
if (fInput.format.u.raw_audio.byte_order != B_MEDIA_HOST_ENDIAN) {
if ( fInput.format.u.raw_audio.format == media_raw_audio_format::B_AUDIO_FLOAT
|| fInput.format.u.raw_audio.format == media_raw_audio_format::B_AUDIO_INT
|| fInput.format.u.raw_audio.format == media_raw_audio_format::B_AUDIO_SHORT) {
fInputByteSwap = new ByteSwap(fInput.format.u.raw_audio.format);
}
}
// initialize fInputChannelInfo // initialize fInputChannelInfo
for (int i = 0; i < fInputChannelCount; i++) { for (int i = 0; i < fInputChannelCount; i++) {
fInputChannelInfo[i].buffer_base = 0; // will be set by SetMixBufferFormat() fInputChannelInfo[i].buffer_base = 0; // will be set by SetMixBufferFormat()
@@ -63,9 +74,22 @@ MixerInput::~MixerInput()
void void
MixerInput::BufferReceived(BBuffer *buffer) MixerInput::BufferReceived(BBuffer *buffer)
{ {
void *data;
size_t size;
bigtime_t start;
ASSERT(fMixBuffer); ASSERT(fMixBuffer);
printf("mix buffer start %14Ld, buffer start %14Ld\n", fMixBufferStartTime, buffer->Header()->start_time); data = buffer->Data();
size = buffer->SizeUsed();
start = buffer->Header()->start_time;
// swap the byte order of this buffer, if necessary
if (fInputByteSwap)
fInputByteSwap->Swap(data, size);
printf("mix buffer start %14Ld, buffer start %14Ld\n", fMixBufferStartTime, start);
} }
media_input & media_input &
@@ -2,6 +2,7 @@
#define _MIXER_INPUT_H #define _MIXER_INPUT_H
class MixerCore; class MixerCore;
class ByteSwap;
class MixerInput class MixerInput
{ {
@@ -50,6 +51,7 @@ private:
private: private:
MixerCore *fCore; MixerCore *fCore;
media_input fInput; media_input fInput;
ByteSwap *fInputByteSwap;
input_chan_info *fInputChannelInfo; // array input_chan_info *fInputChannelInfo; // array
uint32 fInputChannelCount; uint32 fInputChannelCount;