nsresult DASHReader::ReadMetadata(VideoInfo* aInfo, MetadataTags** aTags) { NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread."); // Wait for MPD to be parsed and child readers created. LOG1("Waiting for metadata download."); nsresult rv = WaitForMetadata(); // If we get an abort, return silently; the decoder is shutting down. if (NS_ERROR_ABORT == rv) { return NS_OK; } // Verify no other errors before continuing. NS_ENSURE_SUCCESS(rv, rv); NS_ASSERTION(aTags, "Called with null MetadataTags**."); *aTags = nullptr; // Get metadata from child readers. VideoInfo audioInfo, videoInfo; // Read metadata for all video streams. for (uint i = 0; i < mVideoReaders.Length(); i++) { // Use an nsAutoPtr here to ensure |tags| memory does not leak. nsAutoPtr<nsHTMLMediaElement::MetadataTags> tags; rv = mVideoReaders[i]->ReadMetadata(&videoInfo, getter_Transfers(tags)); NS_ENSURE_SUCCESS(rv, rv); // Use metadata from current video sub reader to populate aInfo. if (mVideoReaders[i] == mVideoReader) { mInfo.mHasVideo = videoInfo.mHasVideo; mInfo.mDisplay = videoInfo.mDisplay; } } // Read metadata for audio stream. // Note: Getting metadata tags from audio reader only for now. // XXX Audio stream switching not yet supported. if (mAudioReader) { rv = mAudioReader->ReadMetadata(&audioInfo, aTags); NS_ENSURE_SUCCESS(rv, rv); mInfo.mHasAudio = audioInfo.mHasAudio; mInfo.mAudioRate = audioInfo.mAudioRate; mInfo.mAudioChannels = audioInfo.mAudioChannels; mInfo.mStereoMode = audioInfo.mStereoMode; } *aInfo = mInfo; return NS_OK; }
nsresult nsDASHReader::ReadMetadata(nsVideoInfo* aInfo, MetadataTags** aTags) { NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread."); // Wait for MPD to be parsed and child readers created. LOG1("Waiting for metadata download."); nsresult rv = WaitForMetadata(); // If we get an abort, return silently; the decoder is shutting down. if (NS_ERROR_ABORT == rv) { return NS_OK; } // Verify no other errors before continuing. NS_ENSURE_SUCCESS(rv, rv); // Get metadata from child readers. nsVideoInfo audioInfo, videoInfo; if (mVideoReader) { rv = mVideoReader->ReadMetadata(&videoInfo, aTags); NS_ENSURE_SUCCESS(rv, rv); mInfo.mHasVideo = videoInfo.mHasVideo; mInfo.mDisplay = videoInfo.mDisplay; } if (mAudioReader) { rv = mAudioReader->ReadMetadata(&audioInfo, aTags); NS_ENSURE_SUCCESS(rv, rv); mInfo.mHasAudio = audioInfo.mHasAudio; mInfo.mAudioRate = audioInfo.mAudioRate; mInfo.mAudioChannels = audioInfo.mAudioChannels; mInfo.mStereoMode = audioInfo.mStereoMode; } *aInfo = mInfo; return NS_OK; }