Updated FrameEncryptorInterface and FrameDecryptorInterface with status code.

This change allows an implementer to provide a custom error code to be returned
on failure with 0 being reserved for success. It also modifies the output size
APIs to be more specific and requests the number of bytes written to be returned
so we can determine how many bytes we need to send.

Bug: webrtc:9681
Change-Id: I13d34861bf851527fcbb350d0cfb480c0f95a6b3
Reviewed-on: https://webrtc-review.googlesource.com/98720
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24613}
diff --git a/api/crypto/framedecryptorinterface.h b/api/crypto/framedecryptorinterface.h
index a3ff19a..1c49b51 100644
--- a/api/crypto/framedecryptorinterface.h
+++ b/api/crypto/framedecryptorinterface.h
@@ -25,8 +25,7 @@
 // without it. You may assume that this interface will have the same lifetime
 // as the RTPReceiver it is attached to. It must only be attached to one
 // RTPReceiver.
-// Note:
-// This interface is not ready for production use.
+// Note: This interface is not ready for production use.
 class FrameDecryptorInterface : public rtc::RefCountInterface {
  public:
   ~FrameDecryptorInterface() override {}
@@ -35,16 +34,20 @@
   // be allocated to the size returned from GetOutputSize. You may assume that
   // the frames are in order if SRTP is enabled. The stream is not provided here
   // and it is up to the implementor to transport this information to the
-  // receiver if they care about it.
-  // TODO(benwright) integrate error codes
-  virtual bool Decrypt(cricket::MediaType media_type,
-                       rtc::ArrayView<const uint8_t> encrypted_frame,
-                       rtc::ArrayView<uint8_t> frame) = 0;
+  // receiver if they care about it. You must set bytes_written to how many
+  // 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.
+  virtual int Decrypt(cricket::MediaType media_type,
+                      rtc::ArrayView<const uint8_t> encrypted_frame,
+                      rtc::ArrayView<uint8_t> frame,
+                      size_t* bytes_written) = 0;
 
   // Returns the total required length in bytes for the output of the
-  // decryption.
-  virtual size_t GetOutputSize(cricket::MediaType media_type,
-                               size_t encrypted_frame_size) = 0;
+  // decryption. This can be larger than the actual number of bytes you need but
+  // must never be smaller as it informs the size of the frame buffer.
+  virtual size_t GetMaxPlaintextByteSize(cricket::MediaType media_type,
+                                         size_t encrypted_frame_size) = 0;
 };
 
 }  // namespace webrtc