nsresult WMFReader::Init(MediaDecoderReader* aCloneDonor) { NS_ASSERTION(NS_IsMainThread(), "Must be on main thread."); nsresult rv = WMFDecoder::LoadDLLs(); NS_ENSURE_SUCCESS(rv, rv); if (FAILED(wmf::MFStartup())) { NS_WARNING("Failed to initialize Windows Media Foundation"); return NS_ERROR_FAILURE; } mSourceReaderCallback = new WMFSourceReaderCallback(); // Must be created on main thread. mByteStream = new WMFByteStream(mDecoder->GetResource(), mSourceReaderCallback); rv = mByteStream->Init(); NS_ENSURE_SUCCESS(rv, rv); if (mDecoder->GetImageContainer() != nullptr && IsVideoContentType(mDecoder->GetResource()->GetContentType())) { mUseHwAccel = InitializeDXVA(); } else { mUseHwAccel = false; } return NS_OK; }
void MP4Reader::InitLayersBackendType() { if (!IsVideoContentType(mDecoder->GetResource()->GetContentType())) { // Not playing video, we don't care about the layers backend type. return; } // Extract the layer manager backend type so that platform decoders // can determine whether it's worthwhile using hardware accelerated // video decoding. MediaDecoderOwner* owner = mDecoder->GetOwner(); if (!owner) { NS_WARNING("MP4Reader without a decoder owner, can't get HWAccel"); return; } dom::HTMLMediaElement* element = owner->GetMediaElement(); NS_ENSURE_TRUE_VOID(element); nsRefPtr<LayerManager> layerManager = nsContentUtils::LayerManagerForDocument(element->OwnerDoc()); NS_ENSURE_TRUE_VOID(layerManager); mLayersBackendType = layerManager->GetCompositorBackendType(); }