mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 1278198 - Add Widevine FileIO. r=gerald
MozReview-Commit-ID: IXgSobtF24L --HG-- extra : rebase_source : 528d9c344aa2a2c1c4b0eb321ff239397d4c0d29
This commit is contained in:
parent
151988ebac
commit
b6e1300359
97
dom/media/gmp/widevine-adapter/WidevineFileIO.cpp
Normal file
97
dom/media/gmp/widevine-adapter/WidevineFileIO.cpp
Normal file
@ -0,0 +1,97 @@
|
||||
#include "WidevineFileIO.h"
|
||||
#include "WidevineUtils.h"
|
||||
#include "WidevineAdapter.h"
|
||||
|
||||
using namespace cdm;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
void
|
||||
WidevineFileIO::Open(const char* aFilename, uint32_t aFilenameLength)
|
||||
{
|
||||
mName = std::string(aFilename, aFilename + aFilenameLength);
|
||||
GMPRecord* record = nullptr;
|
||||
GMPErr err = GMPCreateRecord(aFilename, aFilenameLength, &record, static_cast<GMPRecordClient*>(this));
|
||||
if (GMP_FAILED(err)) {
|
||||
Log("WidevineFileIO::Open() '%s' GMPCreateRecord failed", mName.c_str());
|
||||
mClient->OnOpenComplete(FileIOClient::kError);
|
||||
return;
|
||||
}
|
||||
if (GMP_FAILED(record->Open())) {
|
||||
Log("WidevineFileIO::Open() '%s' record open failed", mName.c_str());
|
||||
mClient->OnOpenComplete(FileIOClient::kError);
|
||||
return;
|
||||
}
|
||||
|
||||
Log("WidevineFileIO::Open() '%s'", mName.c_str());
|
||||
mRecord = record;
|
||||
}
|
||||
|
||||
void
|
||||
WidevineFileIO::Read()
|
||||
{
|
||||
if (!mRecord) {
|
||||
Log("WidevineFileIO::Read() '%s' used uninitialized!", mName.c_str());
|
||||
mClient->OnReadComplete(FileIOClient::kError, nullptr, 0);
|
||||
return;
|
||||
}
|
||||
Log("WidevineFileIO::Read() '%s'", mName.c_str());
|
||||
mRecord->Read();
|
||||
}
|
||||
|
||||
void
|
||||
WidevineFileIO::Write(const uint8_t* aData, uint32_t aDataSize)
|
||||
{
|
||||
if (!mRecord) {
|
||||
Log("WidevineFileIO::Write() '%s' used uninitialized!", mName.c_str());
|
||||
mClient->OnWriteComplete(FileIOClient::kError);
|
||||
return;
|
||||
}
|
||||
mRecord->Write(aData, aDataSize);
|
||||
}
|
||||
|
||||
void
|
||||
WidevineFileIO::Close()
|
||||
{
|
||||
Log("WidevineFileIO::Close() '%s'", mName.c_str());
|
||||
if (mRecord) {
|
||||
mRecord->Close();
|
||||
mRecord = nullptr;
|
||||
}
|
||||
delete this;
|
||||
}
|
||||
|
||||
static FileIOClient::Status
|
||||
GMPToWidevineFileStatus(GMPErr aStatus)
|
||||
{
|
||||
switch (aStatus) {
|
||||
case GMPRecordInUse: return FileIOClient::kInUse;
|
||||
case GMPNoErr: return FileIOClient::kSuccess;
|
||||
default: return FileIOClient::kError;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
WidevineFileIO::OpenComplete(GMPErr aStatus)
|
||||
{
|
||||
Log("WidevineFileIO::OpenComplete() '%s' status=%d", mName.c_str(), aStatus);
|
||||
mClient->OnOpenComplete(GMPToWidevineFileStatus(aStatus));
|
||||
}
|
||||
|
||||
void
|
||||
WidevineFileIO::ReadComplete(GMPErr aStatus,
|
||||
const uint8_t* aData,
|
||||
uint32_t aDataSize)
|
||||
{
|
||||
Log("WidevineFileIO::OnReadComplete() '%s' status=%d", mName.c_str(), aStatus);
|
||||
mClient->OnReadComplete(GMPToWidevineFileStatus(aStatus), aData, aDataSize);
|
||||
}
|
||||
|
||||
void
|
||||
WidevineFileIO::WriteComplete(GMPErr aStatus)
|
||||
{
|
||||
Log("WidevineFileIO::WriteComplete() '%s' status=%d", mName.c_str(), aStatus);
|
||||
mClient->OnWriteComplete(GMPToWidevineFileStatus(aStatus));
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
46
dom/media/gmp/widevine-adapter/WidevineFileIO.h
Normal file
46
dom/media/gmp/widevine-adapter/WidevineFileIO.h
Normal file
@ -0,0 +1,46 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef WidevineFileIO_h_
|
||||
#define WidevineFileIO_h_
|
||||
|
||||
#include <stddef.h>
|
||||
#include "content_decryption_module.h"
|
||||
#include "gmp-api/gmp-storage.h"
|
||||
#include <string>
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class WidevineFileIO : public cdm::FileIO
|
||||
, public GMPRecordClient
|
||||
{
|
||||
public:
|
||||
explicit WidevineFileIO(cdm::FileIOClient* aClient)
|
||||
: mClient(aClient)
|
||||
, mRecord(nullptr)
|
||||
{}
|
||||
|
||||
// cdm::FileIO
|
||||
void Open(const char* aFilename, uint32_t aFilenameLength) override;
|
||||
void Read() override;
|
||||
void Write(const uint8_t* aData, uint32_t aDataSize) override;
|
||||
void Close() override;
|
||||
|
||||
// GMPRecordClient
|
||||
void OpenComplete(GMPErr aStatus) override;
|
||||
void ReadComplete(GMPErr aStatus,
|
||||
const uint8_t* aData,
|
||||
uint32_t aDataSize) override;
|
||||
void WriteComplete(GMPErr aStatus) override;
|
||||
|
||||
private:
|
||||
cdm::FileIOClient* mClient;
|
||||
GMPRecord* mRecord;
|
||||
std::string mName;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // WidevineFileIO_h_
|
@ -7,6 +7,7 @@
|
||||
SOURCES += [
|
||||
'WidevineAdapter.cpp',
|
||||
'WidevineDecryptor.cpp',
|
||||
'WidevineFileIO.cpp',
|
||||
'WidevineUtils.cpp',
|
||||
'WidevineVideoDecoder.cpp',
|
||||
'WidevineVideoFrame.cpp',
|
||||
|
Loading…
Reference in New Issue
Block a user