static CanPlayStatus CanHandleMediaType(const MediaContainerType& aType, DecoderDoctorDiagnostics* aDiagnostics) { MOZ_ASSERT(NS_IsMainThread()); #ifdef MOZ_ANDROID_HLS_SUPPORT if (HLSDecoder::IsSupportedType(aType)) { return CANPLAY_MAYBE; } #endif if (DecoderTraits::IsHttpLiveStreamingType(aType)) { Telemetry::Accumulate(Telemetry::MEDIA_HLS_CANPLAY_REQUESTED, true); } else if (DecoderTraits::IsMatroskaType(aType)) { Telemetry::Accumulate(Telemetry::MEDIA_MKV_CANPLAY_REQUESTED, true); } if (aType.ExtendedType().HaveCodecs()) { CanPlayStatus result = CanHandleCodecsType(aType, aDiagnostics); if (result == CANPLAY_NO || result == CANPLAY_YES) { return result; } } // Container type with just the MIME type/subtype, no codecs. const MediaContainerType mimeType(aType.Type()); if (OggDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } if (WaveDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } #ifdef MOZ_FMP4 if (MP4Decoder::IsSupportedType(mimeType, aDiagnostics)) { return CANPLAY_MAYBE; } #endif if (WebMDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } if (MP3Decoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } if (ADTSDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } if (FlacDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } return CANPLAY_NO; }
static CanPlayStatus CanHandleMediaType(const MediaContentType& aType, DecoderDoctorDiagnostics* aDiagnostics) { MOZ_ASSERT(NS_IsMainThread()); if (IsHttpLiveStreamingType(aType.GetMIMEType())) { Telemetry::Accumulate(Telemetry::MEDIA_HLS_CANPLAY_REQUESTED, true); } if (aType.HaveCodecs()) { CanPlayStatus result = CanHandleCodecsType(aType, aDiagnostics); if (result == CANPLAY_NO || result == CANPLAY_YES) { return result; } } if (IsOggTypeAndEnabled(aType.GetMIMEType())) { return CANPLAY_MAYBE; } if (IsWaveSupportedType(aType.GetMIMEType())) { return CANPLAY_MAYBE; } if (DecoderTraits::IsMP4TypeAndEnabled(aType.GetMIMEType(), aDiagnostics)) { return CANPLAY_MAYBE; } #if !defined(MOZ_OMX_WEBM_DECODER) if (DecoderTraits::IsWebMTypeAndEnabled(aType.GetMIMEType())) { return CANPLAY_MAYBE; } #endif if (IsMP3SupportedType(aType.GetMIMEType())) { return CANPLAY_MAYBE; } if (IsAACSupportedType(aType.GetMIMEType())) { return CANPLAY_MAYBE; } if (IsFlacSupportedType(aType.GetMIMEType())) { return CANPLAY_MAYBE; } #ifdef MOZ_DIRECTSHOW if (DirectShowDecoder::GetSupportedCodecs(aType.GetMIMEType(), nullptr)) { return CANPLAY_MAYBE; } #endif #ifdef MOZ_ANDROID_OMX if (MediaDecoder::IsAndroidMediaPluginEnabled() && EnsureAndroidMediaPluginHost()->FindDecoder(aType.GetMIMEType(), nullptr)) { return CANPLAY_MAYBE; } #endif return CANPLAY_NO; }
/* static */ CanPlayStatus DecoderTraits::CanHandleMediaType(const char* aMIMEType, bool aHaveRequestedCodecs, const nsAString& aRequestedCodecs, DecoderDoctorDiagnostics* aDiagnostics) { MOZ_ASSERT(NS_IsMainThread()); if (IsHttpLiveStreamingType(nsDependentCString(aMIMEType))) { Telemetry::Accumulate(Telemetry::MEDIA_HLS_CANPLAY_REQUESTED, true); } if (aHaveRequestedCodecs) { CanPlayStatus result = CanHandleCodecsType(aMIMEType, aRequestedCodecs, aDiagnostics); if (result == CANPLAY_NO || result == CANPLAY_YES) { return result; } } #ifdef MOZ_RAW if (IsRawType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif if (IsOggType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } if (IsWaveType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } if (IsMP4TypeAndEnabled(nsDependentCString(aMIMEType), aDiagnostics)) { return CANPLAY_MAYBE; } #if !defined(MOZ_OMX_WEBM_DECODER) if (IsWebMTypeAndEnabled(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif if (IsMP3SupportedType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } if (IsAACSupportedType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #ifdef MOZ_OMX_DECODER if (IsOmxSupportedType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif #ifdef MOZ_DIRECTSHOW if (DirectShowDecoder::GetSupportedCodecs(nsDependentCString(aMIMEType), nullptr)) { return CANPLAY_MAYBE; } #endif #ifdef MOZ_ANDROID_OMX if (MediaDecoder::IsAndroidMediaPluginEnabled() && EnsureAndroidMediaPluginHost()->FindDecoder(nsDependentCString(aMIMEType), nullptr)) { return CANPLAY_MAYBE; } #endif return CANPLAY_NO; }
/* static */ CanPlayStatus DecoderTraits::CanHandleMediaType(const char* aMIMEType, bool aHaveRequestedCodecs, const nsAString& aRequestedCodecs) { MOZ_ASSERT(NS_IsMainThread()); if (aHaveRequestedCodecs) { CanPlayStatus result = CanHandleCodecsType(aMIMEType, aRequestedCodecs); if (result == CANPLAY_NO || result == CANPLAY_YES) { return result; } } #ifdef MOZ_RAW if (IsRawType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif if (IsOggType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #ifdef MOZ_WAVE if (IsWaveType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif if (IsMP4TypeAndEnabled(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #if !defined(MOZ_OMX_WEBM_DECODER) if (IsWebMTypeAndEnabled(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif if (IsMP3SupportedType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #ifdef MOZ_GSTREAMER if (GStreamerDecoder::CanHandleMediaType(nsDependentCString(aMIMEType), aHaveRequestedCodecs ? &aRequestedCodecs : nullptr)) { return aHaveRequestedCodecs ? CANPLAY_YES : CANPLAY_MAYBE; } #endif #ifdef MOZ_OMX_DECODER if (IsOmxSupportedType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif #ifdef MOZ_DIRECTSHOW if (DirectShowDecoder::GetSupportedCodecs(nsDependentCString(aMIMEType), nullptr)) { return CANPLAY_MAYBE; } #endif #ifdef MOZ_ANDROID_OMX if (MediaDecoder::IsAndroidMediaEnabled() && EnsureAndroidMediaPluginHost()->FindDecoder(nsDependentCString(aMIMEType), nullptr)) { return CANPLAY_MAYBE; } #endif #ifdef NECKO_PROTOCOL_rtsp if (IsRtspSupportedType(nsDependentCString(aMIMEType))) { return CANPLAY_MAYBE; } #endif return CANPLAY_NO; }