nsresult WaveReader::ReadMetadata(MediaInfo* aInfo, MetadataTags** aTags) { MOZ_ASSERT(OnTaskQueue()); bool loaded = LoadRIFFChunk(); if (!loaded) { return NS_ERROR_FAILURE; } nsAutoPtr<dom::HTMLMediaElement::MetadataTags> tags; bool loadAllChunks = LoadAllChunks(tags); if (!loadAllChunks) { return NS_ERROR_FAILURE; } mInfo.mAudio.mRate = mSampleRate; mInfo.mAudio.mChannels = mChannels; mInfo.mMetadataDuration.emplace(TimeUnit::FromSeconds(BytesToTime(GetDataLength()))); *aInfo = mInfo; *aTags = tags.forget(); return NS_OK; }
nsresult WaveReader::ReadMetadata(VideoInfo* aInfo, MetadataTags** aTags) { NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread."); bool loaded = LoadRIFFChunk(); if (!loaded) { return NS_ERROR_FAILURE; } nsAutoPtr<nsHTMLMediaElement::MetadataTags> tags; bool loadAllChunks = LoadAllChunks(tags); if (!loadAllChunks) { return NS_ERROR_FAILURE; } mInfo.mHasAudio = true; mInfo.mHasVideo = false; mInfo.mAudioRate = mSampleRate; mInfo.mAudioChannels = mChannels; *aInfo = mInfo; *aTags = tags.forget(); ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor()); mDecoder->SetMediaDuration( static_cast<int64_t>(BytesToTime(GetDataLength()) * USECS_PER_S)); return NS_OK; }