Introduce TransformableFrameInterface.
Add a new frame interface to be used by frame transformers in Insertable Streams. TransformableFrameInterface will replace video_coding::EncodedFrame in a follow up CL, once downstream dependecies are updated to use the new interface. Until the functions using video_coding::EncodedFrame are removed from the API, the video sender and receiver frame transformer delegates call both function versions to avoid breaking tests downstream. The TransformableFrameInterface will be used for both audio and video frame transformers in follow-up CLs. Bug: webrtc:11380 Change-Id: I9389a8549c156e13b1d8c938ff51eaa69c502f33 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/171863 Commit-Queue: Marina Ciocea <marinaciocea@webrtc.org> Reviewed-by: Magnus Flodman <mflodman@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30941}
This commit is contained in:
committed by
Commit Bot
parent
1c7a6589a9
commit
c24b6b7815
@ -20,18 +20,54 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// Owns the frame payload data.
|
||||
class TransformableFrameInterface {
|
||||
public:
|
||||
virtual ~TransformableFrameInterface() = default;
|
||||
|
||||
// Returns the frame payload data. The data is valid until the next non-const
|
||||
// method call.
|
||||
virtual rtc::ArrayView<const uint8_t> GetData() const = 0;
|
||||
|
||||
// Copies |data| into the owned frame payload data.
|
||||
virtual void SetData(rtc::ArrayView<const uint8_t> data) = 0;
|
||||
|
||||
virtual uint32_t GetTimestamp() const = 0;
|
||||
virtual uint32_t GetSsrc() const = 0;
|
||||
};
|
||||
|
||||
class TransformableVideoFrameInterface : public TransformableFrameInterface {
|
||||
public:
|
||||
virtual ~TransformableVideoFrameInterface() = default;
|
||||
virtual bool IsKeyFrame() const = 0;
|
||||
|
||||
// Returns data needed in the frame transformation logic; for example,
|
||||
// when the transformation applied to the frame is encryption/decryption, the
|
||||
// additional data holds the serialized generic frame descriptor extension
|
||||
// calculated in webrtc::RtpDescriptorAuthentication.
|
||||
// TODO(bugs.webrtc.org/11380) remove from interface once
|
||||
// webrtc::RtpDescriptorAuthentication is exposed in api/.
|
||||
virtual std::vector<uint8_t> GetAdditionalData() const = 0;
|
||||
};
|
||||
|
||||
// Objects implement this interface to be notified with the transformed frame.
|
||||
class TransformedFrameCallback : public rtc::RefCountInterface {
|
||||
public:
|
||||
// TODO(bugs.webrtc.org/11380) remove after updating downstream dependencies
|
||||
// to use new OnTransformedFrame signature.
|
||||
virtual void OnTransformedFrame(
|
||||
std::unique_ptr<video_coding::EncodedFrame> transformed_frame) = 0;
|
||||
std::unique_ptr<video_coding::EncodedFrame> transformed_frame) {}
|
||||
// TODO(bugs.webrtc.org/11380) make pure virtual after updating usage
|
||||
// downstream.
|
||||
virtual void OnTransformedFrame(
|
||||
std::unique_ptr<TransformableFrameInterface> transformed_frame) {}
|
||||
|
||||
protected:
|
||||
~TransformedFrameCallback() override = default;
|
||||
};
|
||||
|
||||
// Transformes encoded frames. The transformed frame is sent in a callback using
|
||||
// the TransformedFrameCallback interface (see below).
|
||||
// Transforms encoded frames. The transformed frame is sent in a callback using
|
||||
// the TransformedFrameCallback interface (see above).
|
||||
class FrameTransformerInterface : public rtc::RefCountInterface {
|
||||
public:
|
||||
// Transforms |frame| using the implementing class' processing logic.
|
||||
@ -41,9 +77,17 @@ class FrameTransformerInterface : public rtc::RefCountInterface {
|
||||
// holds the serialized generic frame descriptor extension calculated in
|
||||
// webrtc::RtpDescriptorAuthentication, needed in the encryption/decryption
|
||||
// algorithms.
|
||||
// TODO(bugs.webrtc.org/11380) remove after updating downstream dependencies
|
||||
// to use new OnTransformedFrame() signature.
|
||||
virtual void TransformFrame(std::unique_ptr<video_coding::EncodedFrame> frame,
|
||||
std::vector<uint8_t> additional_data,
|
||||
uint32_t ssrc) = 0;
|
||||
uint32_t ssrc) {}
|
||||
|
||||
// Transforms |frame| using the implementing class' processing logic.
|
||||
// TODO(bugs.webrtc.org/11380) make pure virtual after updating usage
|
||||
// downstream.
|
||||
virtual void Transform(
|
||||
std::unique_ptr<TransformableFrameInterface> transformable_frame) {}
|
||||
|
||||
virtual void RegisterTransformedFrameCallback(
|
||||
rtc::scoped_refptr<TransformedFrameCallback>) = 0;
|
||||
|
||||
Reference in New Issue
Block a user