зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1341497 - Move WidevineBuffer and WidevineDecryptedBlock into WidevineUtils. r=gerald
This makes it easier to reuse in the ChromiumCDM code. Also add an ExtractBuffer() method, which allows us to Move() the contained nsTArray out without needing to copy the data. MozReview-Commit-ID: 9suJSfXTVYy --HG-- extra : rebase_source : 6eec99eb5329f3b8c3bb14d22459fee3bd95caf5
This commit is contained in:
Родитель
28ba840815
Коммит
83077824b8
|
@ -9,7 +9,6 @@
|
|||
#include "WidevineUtils.h"
|
||||
#include "WidevineFileIO.h"
|
||||
#include "GMPPlatform.h"
|
||||
#include <mozilla/SizePrintfMacros.h>
|
||||
#include <stdarg.h>
|
||||
#include "TimeUnits.h"
|
||||
|
||||
|
@ -161,43 +160,6 @@ WidevineDecryptor::SetServerCertificate(uint32_t aPromiseId,
|
|||
CDM()->SetServerCertificate(aPromiseId, aServerCert, aServerCertSize);
|
||||
}
|
||||
|
||||
class WidevineDecryptedBlock : public cdm::DecryptedBlock {
|
||||
public:
|
||||
|
||||
WidevineDecryptedBlock()
|
||||
: mBuffer(nullptr)
|
||||
, mTimestamp(0)
|
||||
{
|
||||
}
|
||||
|
||||
~WidevineDecryptedBlock() override {
|
||||
if (mBuffer) {
|
||||
mBuffer->Destroy();
|
||||
mBuffer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void SetDecryptedBuffer(cdm::Buffer* aBuffer) override {
|
||||
mBuffer = aBuffer;
|
||||
}
|
||||
|
||||
cdm::Buffer* DecryptedBuffer() override {
|
||||
return mBuffer;
|
||||
}
|
||||
|
||||
void SetTimestamp(int64_t aTimestamp) override {
|
||||
mTimestamp = aTimestamp;
|
||||
}
|
||||
|
||||
int64_t Timestamp() const override {
|
||||
return mTimestamp;
|
||||
}
|
||||
|
||||
private:
|
||||
cdm::Buffer* mBuffer;
|
||||
int64_t mTimestamp;
|
||||
};
|
||||
|
||||
cdm::Time
|
||||
WidevineDecryptor::ThrottleDecrypt(cdm::Time aWallTime, cdm::Time aSampleDuration)
|
||||
{
|
||||
|
@ -327,28 +289,6 @@ WidevineDecryptor::DecryptingComplete()
|
|||
Release();
|
||||
}
|
||||
|
||||
class WidevineBuffer : public cdm::Buffer {
|
||||
public:
|
||||
explicit WidevineBuffer(size_t aSize) {
|
||||
CDM_LOG("WidevineBuffer(size=%" PRIuSIZE ") created", aSize);
|
||||
mBuffer.SetLength(aSize);
|
||||
}
|
||||
~WidevineBuffer() override {
|
||||
CDM_LOG("WidevineBuffer(size=%" PRIu32 ") destroyed", Size());
|
||||
}
|
||||
void Destroy() override { delete this; }
|
||||
uint32_t Capacity() const override { return mBuffer.Length(); };
|
||||
uint8_t* Data() override { return mBuffer.Elements(); }
|
||||
void SetSize(uint32_t aSize) override { mBuffer.SetLength(aSize); }
|
||||
uint32_t Size() const override { return mBuffer.Length(); }
|
||||
|
||||
private:
|
||||
WidevineBuffer(const WidevineBuffer&);
|
||||
void operator=(const WidevineBuffer&);
|
||||
|
||||
nsTArray<uint8_t> mBuffer;
|
||||
};
|
||||
|
||||
Buffer*
|
||||
WidevineDecryptor::Allocate(uint32_t aCapacity)
|
||||
{
|
||||
|
|
|
@ -5,10 +5,12 @@
|
|||
|
||||
#include "WidevineUtils.h"
|
||||
#include "WidevineDecryptor.h"
|
||||
#include <mozilla/SizePrintfMacros.h>
|
||||
|
||||
#include "gmp-api/gmp-errors.h"
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
|
@ -76,4 +78,90 @@ CDMWrapper::~CDMWrapper()
|
|||
mCDM = nullptr;
|
||||
}
|
||||
|
||||
WidevineBuffer::WidevineBuffer(size_t aSize)
|
||||
{
|
||||
CDM_LOG("WidevineBuffer(size=%" PRIuSIZE ") created", aSize);
|
||||
mBuffer.SetLength(aSize);
|
||||
}
|
||||
|
||||
WidevineBuffer::~WidevineBuffer()
|
||||
{
|
||||
CDM_LOG("WidevineBuffer(size=%" PRIu32 ") destroyed", Size());
|
||||
}
|
||||
|
||||
void
|
||||
WidevineBuffer::Destroy()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
WidevineBuffer::Capacity() const
|
||||
{
|
||||
return mBuffer.Length();
|
||||
}
|
||||
|
||||
uint8_t*
|
||||
WidevineBuffer::Data()
|
||||
{
|
||||
return mBuffer.Elements();
|
||||
}
|
||||
|
||||
void
|
||||
WidevineBuffer::SetSize(uint32_t aSize)
|
||||
{
|
||||
mBuffer.SetLength(aSize);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
WidevineBuffer::Size() const
|
||||
{
|
||||
return mBuffer.Length();
|
||||
}
|
||||
|
||||
nsTArray<uint8_t>
|
||||
WidevineBuffer::ExtractBuffer() {
|
||||
nsTArray<uint8_t> out;
|
||||
out.SwapElements(mBuffer);
|
||||
return out;
|
||||
}
|
||||
|
||||
WidevineDecryptedBlock::WidevineDecryptedBlock()
|
||||
: mBuffer(nullptr)
|
||||
, mTimestamp(0)
|
||||
{
|
||||
}
|
||||
|
||||
WidevineDecryptedBlock::~WidevineDecryptedBlock()
|
||||
{
|
||||
if (mBuffer) {
|
||||
mBuffer->Destroy();
|
||||
mBuffer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
WidevineDecryptedBlock::SetDecryptedBuffer(cdm::Buffer* aBuffer)
|
||||
{
|
||||
mBuffer = aBuffer;
|
||||
}
|
||||
|
||||
cdm::Buffer*
|
||||
WidevineDecryptedBlock::DecryptedBuffer()
|
||||
{
|
||||
return mBuffer;
|
||||
}
|
||||
|
||||
void
|
||||
WidevineDecryptedBlock::SetTimestamp(int64_t aTimestamp)
|
||||
{
|
||||
mTimestamp = aTimestamp;
|
||||
}
|
||||
|
||||
int64_t
|
||||
WidevineDecryptedBlock::Timestamp() const
|
||||
{
|
||||
return mTimestamp;
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -61,6 +61,43 @@ void InitInputBuffer(const GMPEncryptedBufferMetadata* aCrypto,
|
|||
cdm::InputBuffer &aInputBuffer,
|
||||
nsTArray<cdm::SubsampleEntry> &aSubsamples);
|
||||
|
||||
class WidevineBuffer : public cdm::Buffer
|
||||
{
|
||||
public:
|
||||
explicit WidevineBuffer(size_t aSize);
|
||||
~WidevineBuffer() override;
|
||||
void Destroy() override;
|
||||
uint32_t Capacity() const override;
|
||||
uint8_t* Data() override;
|
||||
void SetSize(uint32_t aSize) override;
|
||||
uint32_t Size() const override;
|
||||
|
||||
// Moves contents of buffer out into temporary.
|
||||
// Note: This empties the buffer.
|
||||
nsTArray<uint8_t> ExtractBuffer();
|
||||
|
||||
private:
|
||||
nsTArray<uint8_t> mBuffer;
|
||||
WidevineBuffer(const WidevineBuffer&);
|
||||
void operator=(const WidevineBuffer&);
|
||||
};
|
||||
|
||||
class WidevineDecryptedBlock : public cdm::DecryptedBlock
|
||||
{
|
||||
public:
|
||||
|
||||
WidevineDecryptedBlock();
|
||||
~WidevineDecryptedBlock() override;
|
||||
void SetDecryptedBuffer(cdm::Buffer* aBuffer) override;
|
||||
cdm::Buffer* DecryptedBuffer() override;
|
||||
void SetTimestamp(int64_t aTimestamp) override;
|
||||
int64_t Timestamp() const override;
|
||||
|
||||
private:
|
||||
cdm::Buffer* mBuffer;
|
||||
int64_t mTimestamp;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // WidevineUtils_h_
|
||||
|
|
|
@ -14,6 +14,11 @@ SOURCES += [
|
|||
'WidevineVideoFrame.cpp',
|
||||
]
|
||||
|
||||
EXPORTS += [
|
||||
'WidevineDecryptor.h',
|
||||
'WidevineUtils.h'
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'xul'
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
|
|
Загрузка…
Ссылка в новой задаче