Add Result FrameDecryptorInterface::Decrypt

This change adds FrameDecryptorInterface::Result to the FrameDecryptorInterface
API. Result contains a Status and bytes_written. This removes requiring out
parameters from the API and provides a simpler status return code for the
function. This is in response to comments suggested here:
https://webrtc-review.googlesource.com/c/src/+/131358

int FrameDecryptorInterface::Decrypt() will be removed in a follow up CL.

Bug: webrtc:10512
Change-Id: I47f19f154d1d8430acd6e4a6f433ab24c455fd51
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131362
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27470}
This commit is contained in:
Benjamin Wright
2019-04-05 13:15:26 -07:00
committed by Commit Bot
parent 2a3cf05af7
commit 72e977135c

View File

@ -30,6 +30,18 @@ namespace webrtc {
// Note: This interface is not ready for production use.
class FrameDecryptorInterface : public rtc::RefCountInterface {
public:
// The Status enum represents all possible states that can be
// returned when attempting to decrypt a frame. kRecoverable indicates that
// there was an error with the given frame and so it should not be passed to
// the decoder, however it hints that the receive stream is still decryptable
// which is important for determining when to send key frame requests.
enum class Status { kOk, kRecoverable, kFailedToDecrypt };
struct Result {
Status status;
size_t bytes_written;
};
~FrameDecryptorInterface() override {}
// Attempts to decrypt the encrypted frame. You may assume the frame size will
@ -40,12 +52,36 @@ class FrameDecryptorInterface : public rtc::RefCountInterface {
// bytes you wrote to in the frame buffer. 0 must be returned if successful
// all other numbers can be selected by the implementer to represent error
// codes.
// TODO(bugs.webrtc.org/10512) - Remove this after implementation rewrite.
virtual int Decrypt(cricket::MediaType media_type,
const std::vector<uint32_t>& csrcs,
rtc::ArrayView<const uint8_t> additional_data,
rtc::ArrayView<const uint8_t> encrypted_frame,
rtc::ArrayView<uint8_t> frame,
size_t* bytes_written) = 0;
size_t* bytes_written) {
bytes_written = 0;
return 1;
}
// TODO(bugs.webrtc.org/10512) - Remove the other decrypt function and turn
// this to a pure virtual.
virtual Result Decrypt(cricket::MediaType media_type,
const std::vector<uint32_t>& csrcs,
rtc::ArrayView<const uint8_t> additional_data,
rtc::ArrayView<const uint8_t> encrypted_frame,
rtc::ArrayView<uint8_t> frame) {
size_t bytes_written = 0;
const int status = Decrypt(media_type, csrcs, additional_data,
encrypted_frame, frame, &bytes_written);
Result decryption_result;
decryption_result.bytes_written = bytes_written;
if (status == 0) {
decryption_result.status = Status::kOk;
} else {
decryption_result.status = Status::kFailedToDecrypt;
}
return decryption_result;
}
// Returns the total required length in bytes for the output of the
// decryption. This can be larger than the actual number of bytes you need but