Bug 1165585: Part1. Use AsyncReadmetadata with web audio. r=cpearce

This commit is contained in:
Jean-Yves Avenard 2015-05-18 16:13:20 +10:00
Родитель 4de76e37b8
Коммит 55b9aa9ddd
1 изменённых файлов: 20 добавлений и 9 удалений

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

@ -126,6 +126,8 @@ private:
}
void Decode();
void OnMetadataRead(MetadataHolder* aMetadata);
void OnMetadataNotRead(ReadMetadataFailureReason aReason);
void RequestSample();
void SampleDecoded(AudioData* aData);
void SampleNotDecoded(MediaDecoderReader::NotDecodedReason aReason);
@ -254,23 +256,32 @@ MediaDecodeTask::Decode()
// backend support.
mDecoderReader->SetIgnoreAudioOutputFormat();
nsAutoPtr<MetadataTags> tags;
nsresult rv = mDecoderReader->ReadMetadata(&mMediaInfo, getter_Transfers(tags));
if (NS_FAILED(rv)) {
mDecoderReader->Shutdown();
ReportFailureOnMainThread(WebAudioDecodeJob::InvalidContent);
return;
}
mDecoderReader->AsyncReadMetadata()->Then(mDecoderReader->GetTaskQueue(), __func__, this,
&MediaDecodeTask::OnMetadataRead,
&MediaDecodeTask::OnMetadataNotRead);
}
if (!mDecoderReader->HasAudio()) {
void
MediaDecodeTask::OnMetadataRead(MetadataHolder* aMetadata)
{
mMediaInfo = aMetadata->mInfo;
if (!mMediaInfo.HasAudio()) {
mDecoderReader->Shutdown();
ReportFailureOnMainThread(WebAudioDecodeJob::NoAudio);
return;
}
RequestSample();
}
void
MediaDecodeTask::OnMetadataNotRead(ReadMetadataFailureReason aReason)
{
MOZ_RELEASE_ASSERT(aReason != ReadMetadataFailureReason::WAITING_FOR_RESOURCES);
mDecoderReader->Shutdown();
ReportFailureOnMainThread(WebAudioDecodeJob::InvalidContent);
return;
}
void
MediaDecodeTask::RequestSample()
{