Add av1 to MediaSource.isTypeSupported

When av1 video playback is enabled, declare it as supported in the webm container in MediaSource.IsTypeSupported.

Also support special mime types of the form video/webm; codecs=vp9.experimental.<git-commit-id> so test sites can verify playback support of particular encodings while the av1 bitstream is under development.
This commit is contained in:
trav90 2018-10-17 05:54:22 -05:00 committed by Roy Tam
commit 1c8af26369
3 changed files with 24 additions and 0 deletions

View file

@ -210,6 +210,19 @@ AOMDecoder::IsAV1(const nsACString& aMimeType)
|| aMimeType.EqualsLiteral("video/av1");
}
/* static */
bool
AOMDecoder::IsSupportedCodec(const nsAString& aCodecType)
{
// While AV1 is under development, we describe support
// for a specific aom commit hash so sites can check
// compatibility.
auto version = NS_ConvertASCIItoUTF16("av1.experimental.");
version.AppendLiteral("4d668d7feb1f8abd809d1bca0418570a7f142a36");
return aCodecType.EqualsLiteral("av1") ||
aCodecType.Equals(version);
}
/* static */
bool
AOMDecoder::IsKeyframe(Span<const uint8_t> aBuffer) {

View file

@ -34,6 +34,9 @@ public:
// by our demuxers to identify AV1 streams.
static bool IsAV1(const nsACString& aMimeType);
// Return true if aCodecType is a supported codec description.
static bool IsSupportedCodec(const nsAString& aCodecType);
// Return true if a sample is a keyframe.
static bool IsKeyframe(Span<const uint8_t> aBuffer);

View file

@ -5,6 +5,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/Preferences.h"
#ifdef MOZ_AV1
#include "AOMDecoder.h"
#endif
#include "MediaDecoderStateMachine.h"
#include "WebMDemuxer.h"
#include "WebMDecoder.h"
@ -65,6 +68,11 @@ WebMDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs,
continue;
}
#ifdef MOZ_AV1
if (isVideo && AOMDecoder::IsSupportedCodec(codec)) {
continue;
}
#endif
// Some unsupported codec.
return false;
}