Bug 1151378: Part2. Remove libstagefright depencies from Crypto config. r=edwin

This commit is contained in:
Jean-Yves Avenard 2015-04-07 20:33:18 +10:00
parent f17c6eb49e
commit 1d47a88bf2
4 changed files with 26 additions and 40 deletions

View File

@ -81,19 +81,9 @@ FindData(sp<MetaData>& aMetaData, uint32_t aKey, ByteBuffer* aDest)
}
bool
CryptoFile::DoUpdate(sp<MetaData>& aMetaData)
CryptoFile::DoUpdate(const uint8_t* aData, size_t aLength)
{
const void* data;
size_t size;
uint32_t type;
// There's no point in checking that the type matches anything because it
// isn't set consistently in the MPEG4Extractor.
if (!aMetaData->findData(kKeyPssh, &type, &data, &size)) {
return false;
}
ByteReader reader(reinterpret_cast<const uint8_t*>(data), size);
ByteReader reader(aData, aLength);
while (reader.Remaining()) {
PsshInfo psshInfo;
if (!reader.ReadArray(psshInfo.uuid, 16)) {
@ -113,23 +103,6 @@ CryptoFile::DoUpdate(sp<MetaData>& aMetaData)
return true;
}
void
CryptoTrack::Update(sp<MetaData>& aMetaData)
{
valid = aMetaData->findInt32(kKeyCryptoMode, &mode) &&
aMetaData->findInt32(kKeyCryptoDefaultIVSize, &iv_size) &&
FindData(aMetaData, kKeyCryptoKey, &key);
}
void
CryptoSample::Update(sp<MetaData>& aMetaData)
{
CryptoTrack::Update(aMetaData);
valid = valid && FindData(aMetaData, kKeyPlainSizes, &plain_sizes) &&
FindData(aMetaData, kKeyEncryptedSizes, &encrypted_sizes) &&
FindData(aMetaData, kKeyCryptoIV, &iv);
}
void
TrackConfig::Update(sp<MetaData>& aMetaData, const char* aMimeType)
{
@ -137,7 +110,9 @@ TrackConfig::Update(sp<MetaData>& aMetaData, const char* aMimeType)
duration = FindInt64(aMetaData, kKeyDuration);
media_time = FindInt64(aMetaData, kKeyMediaTime);
mTrackId = FindInt32(aMetaData, kKeyTrackID);
crypto.Update(aMetaData);
crypto.valid = aMetaData->findInt32(kKeyCryptoMode, &crypto.mode) &&
aMetaData->findInt32(kKeyCryptoDefaultIVSize, &crypto.iv_size) &&
FindData(aMetaData, kKeyCryptoKey, &crypto.key);
}
void

View File

@ -45,30 +45,28 @@ struct PsshInfo
class CryptoFile
{
public:
CryptoFile() {}
CryptoFile() : valid(false) {}
CryptoFile(const CryptoFile& aCryptoFile) : valid(aCryptoFile.valid)
{
pssh.AppendElements(aCryptoFile.pssh);
}
void Update(stagefright::sp<stagefright::MetaData>& aMetaData)
void Update(const uint8_t* aData, size_t aLength)
{
valid = DoUpdate(aMetaData);
valid = DoUpdate(aData, aLength);
}
bool valid;
nsTArray<PsshInfo> pssh;
private:
bool DoUpdate(stagefright::sp<stagefright::MetaData>& aMetaData);
bool DoUpdate(const uint8_t* aData, size_t aLength);
};
class CryptoTrack
{
public:
CryptoTrack() : valid(false) {}
void Update(stagefright::sp<stagefright::MetaData>& aMetaData);
bool valid;
int32_t mode;
int32_t iv_size;
@ -78,12 +76,9 @@ public:
class CryptoSample : public CryptoTrack
{
public:
void Update(stagefright::sp<stagefright::MetaData>& aMetaData);
nsTArray<uint16_t> plain_sizes;
nsTArray<uint32_t> encrypted_sizes;
nsTArray<uint8_t> iv;
nsTArray<nsCString> session_ids;
};

View File

@ -82,6 +82,7 @@ protected:
~MP4Demuxer();
private:
void UpdateCrypto(const stagefright::MetaData* aMetaData);
AudioDecoderConfig mAudioConfig;
VideoDecoderConfig mVideoConfig;
CryptoFile mCrypto;

View File

@ -138,7 +138,7 @@ MP4Demuxer::Init()
}
}
sp<MetaData> metaData = e->getMetaData();
mCrypto.Update(metaData);
UpdateCrypto(metaData.get());
int64_t movieDuration;
if (!mVideoConfig.duration && !mAudioConfig.duration &&
@ -151,6 +151,21 @@ MP4Demuxer::Init()
return mPrivate->mAudio.get() || mPrivate->mVideo.get();
}
void
MP4Demuxer::UpdateCrypto(const MetaData* aMetaData)
{
const void* data;
size_t size;
uint32_t type;
// There's no point in checking that the type matches anything because it
// isn't set consistently in the MPEG4Extractor.
if (!aMetaData->findData(kKeyPssh, &type, &data, &size)) {
return;
}
mCrypto.Update(reinterpret_cast<const uint8_t*>(data), size);
}
bool
MP4Demuxer::HasValidAudio()
{