Backed out changeset becc0e4fbbb5 (bug 1248861)

This commit is contained in:
Carsten "Tomcat" Book 2016-04-08 16:42:34 +02:00
Родитель f6151e9ab7
Коммит 8c207df669
2 изменённых файлов: 6 добавлений и 71 удалений

Просмотреть файл

@ -190,7 +190,6 @@ VorbisDataDecoder::DoDecode(MediaRawData* aSample)
}
while (frames > 0) {
uint32_t channels = mVorbisDsp.vi->channels;
uint32_t rate = mVorbisDsp.vi->rate;
AlignedAudioBuffer buffer(frames*channels);
if (!buffer) {
return -1;
@ -202,12 +201,13 @@ VorbisDataDecoder::DoDecode(MediaRawData* aSample)
}
}
CheckedInt64 duration = FramesToUsecs(frames, rate);
CheckedInt64 duration = FramesToUsecs(frames, mVorbisDsp.vi->rate);
if (!duration.isValid()) {
NS_WARNING("Int overflow converting WebM audio duration");
return -1;
}
CheckedInt64 total_duration = FramesToUsecs(mFrames, rate);
CheckedInt64 total_duration = FramesToUsecs(mFrames,
mVorbisDsp.vi->rate);
if (!total_duration.isValid()) {
NS_WARNING("Int overflow converting WebM audio total_duration");
return -1;
@ -219,24 +219,14 @@ VorbisDataDecoder::DoDecode(MediaRawData* aSample)
return -1;
};
if (!mAudioConverter) {
AudioConfig in(AudioConfig::ChannelLayout(channels, VorbisLayout(channels)),
rate);
AudioConfig out(channels, rate);
mAudioConverter = MakeUnique<AudioConverter>(in, out);
}
MOZ_ASSERT(mAudioConverter->CanWorkInPlace());
AudioSampleBuffer data(Move(buffer));
mAudioConverter->Process(data);
aTotalFrames += frames;
mCallback->Output(new AudioData(aOffset,
time.value(),
duration.value(),
frames,
data.Forget(),
channels,
rate));
Move(buffer),
mVorbisDsp.vi->channels,
mVorbisDsp.vi->rate));
mFrames += frames;
if (vorbis_synthesis_read(&mVorbisDsp, frames) != 0) {
return -1;
@ -283,58 +273,6 @@ VorbisDataDecoder::IsVorbis(const nsACString& aMimeType)
aMimeType.EqualsLiteral("audio/ogg; codecs=vorbis");
}
/* static */ const AudioConfig::Channel*
VorbisDataDecoder::VorbisLayout(uint32_t aChannels)
{
// From https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html
// Section 4.3.9.
typedef AudioConfig::Channel Channel;
switch (aChannels) {
case 1: // the stream is monophonic
{
static const Channel config[] = { AudioConfig::CHANNEL_MONO };
return config;
}
case 2: // the stream is stereo. channel order: left, right
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_RIGHT };
return config;
}
case 3: // the stream is a 1d-surround encoding. channel order: left, center, right
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT };
return config;
}
case 4: // the stream is quadraphonic surround. channel order: front left, front right, rear left, rear right
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS };
return config;
}
case 5: // the stream is five-channel surround. channel order: front left, center, front right, rear left, rear right
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS };
return config;
}
case 6: // the stream is 5.1 surround. channel order: front left, center, front right, rear left, rear right, LFE
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS, AudioConfig::CHANNEL_LFE };
return config;
}
case 7: // surround. channel order: front left, center, front right, side left, side right, rear center, LFE
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS, AudioConfig::CHANNEL_RCENTER, AudioConfig::CHANNEL_LFE };
return config;
}
case 8: // the stream is 7.1 surround. channel order: front left, center, front right, side left, side right, rear left, rear right, LFE
{
static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS, AudioConfig::CHANNEL_RLS, AudioConfig::CHANNEL_RRS, AudioConfig::CHANNEL_LFE };
return config;
}
default:
return nullptr;
}
}
} // namespace mozilla
#undef LOG

Просмотреть файл

@ -8,7 +8,6 @@
#include "PlatformDecoderModule.h"
#include "mozilla/Maybe.h"
#include "AudioConverter.h"
#ifdef MOZ_TREMOR
#include "tremor/ivorbiscodec.h"
@ -38,7 +37,6 @@ public:
// Return true if mimetype is Vorbis
static bool IsVorbis(const nsACString& aMimeType);
static const AudioConfig::Channel* VorbisLayout(uint32_t aChannels);
private:
nsresult DecodeHeader(const unsigned char* aData, size_t aLength);
@ -60,7 +58,6 @@ private:
int64_t mPacketCount;
int64_t mFrames;
Maybe<int64_t> mLastFrameTime;
UniquePtr<AudioConverter> mAudioConverter;
};
} // namespace mozilla