mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-28 01:57:30 +09:00
Issue #1820 - Part 8: Check bit depth in PDM::Supports.
This commit is contained in:
parent
c8637cc239
commit
009fb3146f
3 changed files with 38 additions and 4 deletions
|
|
@ -129,9 +129,11 @@ public:
|
||||||
virtual bool Supports(const TrackInfo& aTrackInfo,
|
virtual bool Supports(const TrackInfo& aTrackInfo,
|
||||||
DecoderDoctorDiagnostics* aDiagnostics) const
|
DecoderDoctorDiagnostics* aDiagnostics) const
|
||||||
{
|
{
|
||||||
// By default, fall back to SupportsMimeType with just the MIME string.
|
if (!SupportsMimeType(aTrackInfo.mMimeType, aDiagnostics)) {
|
||||||
// (So PDMs do not need to override this method -- yet.)
|
return false;
|
||||||
return SupportsMimeType(aTrackInfo.mMimeType, aDiagnostics);
|
}
|
||||||
|
const auto videoInfo = aTrackInfo.GetAsVideoInfo();
|
||||||
|
return !videoInfo || SupportsBitDepth(videoInfo->mBitDepth, aDiagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class ConversionRequired : uint8_t {
|
enum class ConversionRequired : uint8_t {
|
||||||
|
|
@ -153,6 +155,15 @@ protected:
|
||||||
friend class PDMFactory;
|
friend class PDMFactory;
|
||||||
friend class dom::RemoteDecoderModule;
|
friend class dom::RemoteDecoderModule;
|
||||||
|
|
||||||
|
// Indicates if the PlatformDecoderModule supports decoding of aBitDepth.
|
||||||
|
// Should override this method when the platform can support bitDepth != 8.
|
||||||
|
virtual bool SupportsBitDepth(const uint8_t aBitDepth,
|
||||||
|
DecoderDoctorDiagnostics* aDiagnostics) const
|
||||||
|
{
|
||||||
|
return aBitDepth == 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Creates a Video decoder. The layers backend is passed in so that
|
// Creates a Video decoder. The layers backend is passed in so that
|
||||||
// decoders can determine whether hardware accelerated decoding can be used.
|
// decoders can determine whether hardware accelerated decoding can be used.
|
||||||
// Asynchronous decoding of video should be done in runnables dispatched
|
// Asynchronous decoding of video should be done in runnables dispatched
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,21 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool SupportsBitDepth(const uint8_t aBitDepth,
|
||||||
|
DecoderDoctorDiagnostics* aDiagnostics) const override
|
||||||
|
{
|
||||||
|
// We don't support bitDepth > 8 when compositor backend is D3D11.
|
||||||
|
// But we don't have KnowsCompositor or any object
|
||||||
|
// that we can ask for the layersbackend type.
|
||||||
|
// We should remove this restriction until
|
||||||
|
// we solve the D3D11 compositor backend issue.
|
||||||
|
#if defined(XP_LINUX) || defined(XP_MACOSX)
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
return aBitDepth == 8;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FFmpegLibWrapper* mLib;
|
FFmpegLibWrapper* mLib;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -205,6 +205,14 @@ bool
|
||||||
WMFDecoderModule::Supports(const TrackInfo& aTrackInfo,
|
WMFDecoderModule::Supports(const TrackInfo& aTrackInfo,
|
||||||
DecoderDoctorDiagnostics* aDiagnostics) const
|
DecoderDoctorDiagnostics* aDiagnostics) const
|
||||||
{
|
{
|
||||||
|
// Check bit depth of video.
|
||||||
|
// XXXMC: This is here in case we want to start accepting HDR video. Do we?
|
||||||
|
// This currently defaults to a fail if video bitdepth != 8
|
||||||
|
const auto videoInfo = aTrackInfo.GetAsVideoInfo();
|
||||||
|
if (videoInfo && !SupportsBitDepth(videoInfo->mBitDepth, aDiagnostics)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((aTrackInfo.mMimeType.EqualsLiteral("audio/mp4a-latm") ||
|
if ((aTrackInfo.mMimeType.EqualsLiteral("audio/mp4a-latm") ||
|
||||||
aTrackInfo.mMimeType.EqualsLiteral("audio/mp4")) &&
|
aTrackInfo.mMimeType.EqualsLiteral("audio/mp4")) &&
|
||||||
WMFDecoderModule::HasAAC()) {
|
WMFDecoderModule::HasAAC()) {
|
||||||
|
|
@ -221,7 +229,7 @@ WMFDecoderModule::Supports(const TrackInfo& aTrackInfo,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Windows <=7 supports at most 1920x1088.
|
// Windows 7 supports at most 1920x1088.
|
||||||
if (videoInfo->mImage.width > 1920 || videoInfo->mImage.height > 1088) {
|
if (videoInfo->mImage.width > 1920 || videoInfo->mImage.height > 1088) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue