/* static */ bool DecoderTraits::ShouldHandleMediaType(const char* aMIMEType, DecoderDoctorDiagnostics* aDiagnostics) { if (IsWaveType(nsDependentCString(aMIMEType))) { // We should not return true for Wave types, since there are some // Wave codecs actually in use in the wild that we don't support, and // we should allow those to be handled by plugins or helper apps. // Furthermore people can play Wave files on most platforms by other // means. return false; } // If an external plugin which can handle quicktime video is available // (and not disabled), prefer it over native playback as there several // codecs found in the wild that we do not handle. if (nsDependentCString(aMIMEType).EqualsASCII("video/quicktime")) { RefPtr<nsPluginHost> pluginHost = nsPluginHost::GetInst(); if (pluginHost && pluginHost->HavePluginForType(nsDependentCString(aMIMEType))) { return false; } } return CanHandleMediaType(aMIMEType, false, EmptyString(), aDiagnostics) != CANPLAY_NO; }
/* static */ bool DecoderTraits::ShouldHandleMediaType(const char* aMIMEType, DecoderDoctorDiagnostics* aDiagnostics) { Maybe<MediaContainerType> containerType = MakeMediaContainerType(aMIMEType); if (!containerType) { return false; } if (WaveDecoder::IsSupportedType(*containerType)) { // We should not return true for Wave types, since there are some // Wave codecs actually in use in the wild that we don't support, and // we should allow those to be handled by plugins or helper apps. // Furthermore people can play Wave files on most platforms by other // means. return false; } // If an external plugin which can handle quicktime video is available // (and not disabled), prefer it over native playback as there several // codecs found in the wild that we do not handle. if (containerType->Type() == MEDIAMIMETYPE("video/quicktime")) { RefPtr<nsPluginHost> pluginHost = nsPluginHost::GetInst(); if (pluginHost && pluginHost->HavePluginForType(containerType->Type().AsString())) { return false; } } return CanHandleMediaType(*containerType, aDiagnostics) != CANPLAY_NO; }
/* static */ bool DecoderTraits::ShouldHandleMediaType(const char* aMIMEType) { if (IsWaveType(nsDependentCString(aMIMEType))) { // We should not return true for Wave types, since there are some // Wave codecs actually in use in the wild that we don't support, and // we should allow those to be handled by plugins or helper apps. // Furthermore people can play Wave files on most platforms by other // means. return false; } return CanHandleMediaType(aMIMEType, false, EmptyString()) != CANPLAY_NO; }
/* static */ bool MP4Decoder::CanHandleMediaType(const nsAString& aContentType) { nsContentTypeParser parser(aContentType); nsAutoString mimeType; nsresult rv = parser.GetType(mimeType); if (NS_FAILED(rv)) { return false; } nsString codecs; parser.GetParameter("codecs", codecs); return CanHandleMediaType(NS_ConvertUTF16toUTF8(mimeType), codecs); }
/* static */ CanPlayStatus DecoderTraits::CanHandleContainerType(const MediaContainerType& aContainerType, DecoderDoctorDiagnostics* aDiagnostics) { return CanHandleMediaType(aContainerType, aDiagnostics); }