blob: ac6fc9651b8d179927c8b2abe08e9d3d85051b79 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CDM_OUTPUT_PROTECTION_H_
#define MEDIA_CDM_OUTPUT_PROTECTION_H_
#include <stdint.h>
#include "base/callback.h"
#include "base/macros.h"
#include "media/base/media_export.h"
namespace media {
class MEDIA_EXPORT OutputProtection {
public:
OutputProtection() = default;
OutputProtection(const OutputProtection&) = delete;
OutputProtection& operator=(const OutputProtection&) = delete;
virtual ~OutputProtection() = default;
using QueryStatusCB = base::OnceCallback<
void(bool success, uint32_t link_mask, uint32_t protection_mask)>;
using EnableProtectionCB = base::OnceCallback<void(bool success)>;
// Connected output link types returned by QueryStatus(). Must match values
// in cdm::OutputLinkTypes.
enum class LinkTypes {
NONE = 0,
UNKNOWN = 1,
INTERNAL = 2,
VGA = 4,
HDMI = 8,
DVI = 16,
DISPLAYPORT = 32,
NETWORK = 64,
};
// Supported output protection methods for use with EnableProtection() and
// returned by QueryStatus(). Must match values in
// cdm::OutputProtectionMethods.
enum class ProtectionType {
NONE = 0,
HDCP = 1,
};
// Queries link status and protection status. Clients need to query status
// periodically in order to detect changes. |callback| will be called with
// the following values:
// - success: Whether the query succeeded. If false, values of |link_mask|
// and |protection_mask| should be ignored.
// - link_mask: The type of connected output links, which is a bit-mask of
// the LinkType values.
// - protection_mask: The type of enabled protections, which is a bit-mask
// of the ProtectionType values.
virtual void QueryStatus(QueryStatusCB callback) = 0;
// Sets desired protection methods. |desired_protection_mask| is a bit-mask
// of ProtectionType values. Calls |callback| when the request has been made.
// Users should call QueryStatus() to verify that it was actually applied.
// Protections will be disabled if no longer desired by all instances.
// |callback| will be called with the following value:
// - success: True when the protection request has been made. This may be
// before the protection have actually been applied. False if it failed
// to make the protection request, and in this case there is no need to
// call QueryStatus().
virtual void EnableProtection(uint32_t desired_protection_mask,
EnableProtectionCB callback) = 0;
};
} // namespace media
#endif // MEDIA_CDM_OUTPUT_PROTECTION_H_