removed int16 decoding (was a SoundPlay workaround)
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6803 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
34cee003fb
commit
fb3053bc25
@ -4,7 +4,6 @@
|
|||||||
#include <Locker.h>
|
#include <Locker.h>
|
||||||
#include <MediaFormats.h>
|
#include <MediaFormats.h>
|
||||||
#include <MediaRoster.h>
|
#include <MediaRoster.h>
|
||||||
#include <Roster.h>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "vorbisCodecPlugin.h"
|
#include "vorbisCodecPlugin.h"
|
||||||
#include "OggVorbisFormats.h"
|
#include "OggVorbisFormats.h"
|
||||||
@ -49,9 +48,6 @@ VorbisDecoder::VorbisDecoder()
|
|||||||
fStartTime = 0;
|
fStartTime = 0;
|
||||||
fFrameSize = 0;
|
fFrameSize = 0;
|
||||||
fOutputBufferSize = 0;
|
fOutputBufferSize = 0;
|
||||||
app_info info;
|
|
||||||
fSoundplayLossage = (be_roster->GetActiveAppInfo(&info) == B_OK) &&
|
|
||||||
(strcmp(info.signature, "application/x-vnd.marcone-soundplay") == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -132,9 +128,6 @@ VorbisDecoder::NegotiateOutputFormat(media_format *ioDecodedFormat)
|
|||||||
// Be R5 behavior seems to be that we can never fail. If we
|
// Be R5 behavior seems to be that we can never fail. If we
|
||||||
// don't support the requested format, just return one we do.
|
// don't support the requested format, just return one we do.
|
||||||
media_format format = vorbis_decoded_media_format();
|
media_format format = vorbis_decoded_media_format();
|
||||||
if (fSoundplayLossage) {
|
|
||||||
format.u.raw_audio.format = media_raw_audio_format::B_AUDIO_SHORT;
|
|
||||||
}
|
|
||||||
format.u.raw_audio.frame_rate = (float)fInfo.rate;
|
format.u.raw_audio.frame_rate = (float)fInfo.rate;
|
||||||
format.u.raw_audio.channel_count = fInfo.channels;
|
format.u.raw_audio.channel_count = fInfo.channels;
|
||||||
format.u.raw_audio.channel_mask = B_CHANNEL_LEFT | (fInfo.channels != 1 ? B_CHANNEL_RIGHT : 0);
|
format.u.raw_audio.channel_mask = B_CHANNEL_LEFT | (fInfo.channels != 1 ? B_CHANNEL_RIGHT : 0);
|
||||||
@ -212,27 +205,12 @@ VorbisDecoder::Decode(void *buffer, int64 *frameCount,
|
|||||||
// reduce samples to the amount of samples we will actually consume
|
// reduce samples to the amount of samples we will actually consume
|
||||||
samples = min_c(samples,out_bytes_needed/fFrameSize);
|
samples = min_c(samples,out_bytes_needed/fFrameSize);
|
||||||
total_samples += samples;
|
total_samples += samples;
|
||||||
if (fSoundplayLossage) {
|
|
||||||
for (int sample = 0; sample < samples ; sample++) {
|
|
||||||
for (int channel = 0; channel < fInfo.channels; channel++) {
|
|
||||||
int32 thesample = (int32)(pcm[channel][sample] * 32767.0f);
|
|
||||||
if (thesample > 32767)
|
|
||||||
*(int16*)out_buffer = 32767;
|
|
||||||
else if (thesample < -32767)
|
|
||||||
*(int16*)out_buffer = -32767;
|
|
||||||
else
|
|
||||||
*(int16*)out_buffer = thesample;
|
|
||||||
out_buffer += 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int sample = 0; sample < samples ; sample++) {
|
for (int sample = 0; sample < samples ; sample++) {
|
||||||
for (int channel = 0; channel < fInfo.channels; channel++) {
|
for (int channel = 0; channel < fInfo.channels; channel++) {
|
||||||
*((float*)out_buffer) = pcm[channel][sample];
|
*((float*)out_buffer) = pcm[channel][sample];
|
||||||
out_buffer += sizeof(float);
|
out_buffer += sizeof(float);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
out_bytes_needed -= samples * fFrameSize;
|
out_bytes_needed -= samples * fFrameSize;
|
||||||
// report back how many samples we consumed
|
// report back how many samples we consumed
|
||||||
vorbis_synthesis_read(&fDspState,samples);
|
vorbis_synthesis_read(&fDspState,samples);
|
||||||
|
@ -33,7 +33,6 @@ private:
|
|||||||
bigtime_t fStartTime;
|
bigtime_t fStartTime;
|
||||||
int fFrameSize;
|
int fFrameSize;
|
||||||
int fOutputBufferSize;
|
int fOutputBufferSize;
|
||||||
bool fSoundplayLossage;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user