зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset becc0e4fbbb5 (bug 1248861)
This commit is contained in:
Родитель
f6151e9ab7
Коммит
8c207df669
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче