#ifndef MEDIA_CDM_CDM_AUXILIARY_HELPER_H_
#define MEDIA_CDM_CDM_AUXILIARY_HELPER_H_
#include <stdint.h>
#include <memory>
#include <string>
#include "base/functional/callback.h"
#include "base/unguessable_token.h"
#include "build/build_config.h"
#include "media/base/media_export.h"
#include "media/cdm/cdm_allocator.h"
#include "media/cdm/cdm_document_service.h"
#include "media/cdm/output_protection.h"
#include "media/media_buildflags.h"
#include "url/origin.h"
namespace cdm {
class FileIO;
class FileIOClient;
}
namespace media {
struct MEDIA_EXPORT CdmMetricsData {
CdmMetricsData();
~CdmMetricsData();
std::optional<uint64_t> license_sdk_version;
uint64_t number_of_update_calls = 0;
uint64_t number_of_on_message_events = 0;
std::optional<uint64_t> certificate_serial_number;
std::optional<uint64_t> decoder_bypass_block_count;
uint64_t video_frames_processed = 0;
url::Origin cdm_origin;
bool IsCdmValueSet() {
return (license_sdk_version.has_value() ||
certificate_serial_number.has_value() ||
decoder_bypass_block_count.has_value());
}
};
class MEDIA_EXPORT CdmAuxiliaryHelper : public CdmAllocator,
public OutputProtection,
public CdmDocumentService {
public:
CdmAuxiliaryHelper();
CdmAuxiliaryHelper(const CdmAuxiliaryHelper&) = delete;
CdmAuxiliaryHelper& operator=(const CdmAuxiliaryHelper&) = delete;
~CdmAuxiliaryHelper() override;
using FileReadCB = base::RepeatingCallback<void(int)>;
virtual void SetFileReadCB(FileReadCB file_read_cb);
virtual cdm::FileIO* CreateCdmFileIO(cdm::FileIOClient* client);
virtual url::Origin GetCdmOrigin();
virtual void RecordUkm(const CdmMetricsData& cdm_metrics_data);
cdm::Buffer* CreateCdmBuffer(size_t capacity) override;
std::unique_ptr<VideoFrameImpl> CreateCdmVideoFrame() override;
void QueryStatus(QueryStatusCB callback) override;
void EnableProtection(uint32_t desired_protection_mask,
EnableProtectionCB callback) override;
void ChallengePlatform(const std::string& service_id,
const std::string& challenge,
ChallengePlatformCB callback) override;
void GetStorageId(uint32_t version, StorageIdCB callback) override;
#if BUILDFLAG(IS_WIN)
void GetMediaFoundationCdmData(GetMediaFoundationCdmDataCB callback) override;
void SetCdmClientToken(const std::vector<uint8_t>& client_token) override;
void OnCdmEvent(CdmEvent event, HRESULT hresult) override;
#endif
};
}
#endif