Bug 1240412 - add VP9-in-MP4 support to Rust demuxer. r=rillian

MozReview-Commit-ID: 1Yq8OOV3kvM

--HG--
extra : rebase_source : d6ee4404eafef8a476767ebfd17a195f81dcf275
This commit is contained in:
Alfredo.Yang 2016-08-29 14:37:22 +08:00
parent 4d6a452635
commit 2488fefb27
2 changed files with 33 additions and 1 deletions

View File

@ -28,6 +28,8 @@ static int MimeTypeToCodec(const nsACString& aMimeType)
return VPXDecoder::Codec::VP8;
} else if (aMimeType.EqualsLiteral("video/webm; codecs=vp9")) {
return VPXDecoder::Codec::VP9;
} else if (aMimeType.EqualsLiteral("video/vp9")) {
return VPXDecoder::Codec::VP9;
}
return -1;
}
@ -230,7 +232,9 @@ VPXDecoder::IsVPX(const nsACString& aMimeType, uint8_t aCodecMask)
return ((aCodecMask & VPXDecoder::VP8) &&
aMimeType.EqualsLiteral("video/webm; codecs=vp8")) ||
((aCodecMask & VPXDecoder::VP9) &&
aMimeType.EqualsLiteral("video/webm; codecs=vp9"));
aMimeType.EqualsLiteral("video/webm; codecs=vp9")) ||
((aCodecMask & VPXDecoder::VP9) &&
aMimeType.EqualsLiteral("video/vp9"));
}
/* static */

View File

@ -244,6 +244,17 @@ bool MP4Metadata::ShouldPreferRust() const {
return true;
}
}
numTracks = mRust->GetNumberTracks(TrackInfo::kVideoTrack);
for (auto i = 0; i < numTracks; i++) {
auto info = mRust->GetTrackInfo(TrackInfo::kVideoTrack, i);
if (!info) {
return false;
}
if (info->mMimeType.EqualsASCII("video/vp9")) {
return true;
}
}
// Otherwise, fall back.
return false;
}
@ -286,6 +297,11 @@ MP4Metadata::Crypto() const
bool
MP4Metadata::ReadTrackIndex(FallibleTArray<Index::Indice>& aDest, mozilla::TrackID aTrackID)
{
#ifdef MOZ_RUST_MP4PARSE
if (mRust && mPreferRust) {
return mRust->ReadTrackIndex(aDest, aTrackID);
}
#endif
return mStagefright->ReadTrackIndex(aDest, aTrackID);
}
@ -731,7 +747,19 @@ MP4MetadataRust::Crypto() const
bool
MP4MetadataRust::ReadTrackIndex(FallibleTArray<Index::Indice>& aDest, mozilla::TrackID aTrackID)
{
uint8_t fragmented = false;
int32_t rv = mp4parse_is_fragmented(mRustParser.get(), aTrackID, &fragmented);
if (rv != MP4PARSE_OK) {
return false;
}
if (fragmented) {
return true;
}
// For non-fragmented mp4.
MOZ_ASSERT(false, "Not yet implemented");
return false;
}