frame transformer: expose payload type
spec PR: https://github.com/w3c/webrtc-encoded-transform/pull/117 Bug: webrtc:13077 Change-Id: I81d79201cea353c26ea840e92c0deec7c7253b8b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/229020 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#34844}
This commit is contained in:
parent
525dae03d6
commit
2ace42f084
@ -33,8 +33,11 @@ class TransformableFrameInterface {
|
||||
// Copies `data` into the owned frame payload data.
|
||||
virtual void SetData(rtc::ArrayView<const uint8_t> data) = 0;
|
||||
|
||||
virtual uint32_t GetTimestamp() const = 0;
|
||||
// TODO(bugs.webrtc.org/13077) make pure virtual again after rolling into
|
||||
// Chrome.
|
||||
virtual uint8_t GetPayloadType() const { return 255; }
|
||||
virtual uint32_t GetSsrc() const = 0;
|
||||
virtual uint32_t GetTimestamp() const = 0;
|
||||
};
|
||||
|
||||
class TransformableVideoFrameInterface : public TransformableFrameInterface {
|
||||
|
||||
@ -33,8 +33,9 @@ class TransformableAudioFrame : public TransformableAudioFrameInterface {
|
||||
payload_.SetData(data.data(), data.size());
|
||||
}
|
||||
|
||||
uint32_t GetTimestamp() const override { return header_.timestamp; }
|
||||
uint8_t GetPayloadType() const override { return header_.payloadType; }
|
||||
uint32_t GetSsrc() const override { return ssrc_; }
|
||||
uint32_t GetTimestamp() const override { return header_.timestamp; }
|
||||
const RTPHeader& GetHeader() const override { return header_; }
|
||||
|
||||
private:
|
||||
|
||||
@ -44,7 +44,7 @@ class TransformableAudioFrame : public TransformableFrameInterface {
|
||||
uint32_t GetSsrc() const override { return ssrc_; }
|
||||
|
||||
AudioFrameType GetFrameType() const { return frame_type_; }
|
||||
uint8_t GetPayloadType() const { return payload_type_; }
|
||||
uint8_t GetPayloadType() const override { return payload_type_; }
|
||||
int64_t GetAbsoluteCaptureTimestampMs() const {
|
||||
return absolute_capture_timestamp_ms_;
|
||||
}
|
||||
|
||||
@ -40,7 +40,10 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
timestamp_(rtp_timestamp),
|
||||
capture_time_ms_(encoded_image.capture_time_ms_),
|
||||
expected_retransmission_time_ms_(expected_retransmission_time_ms),
|
||||
ssrc_(ssrc) {}
|
||||
ssrc_(ssrc) {
|
||||
RTC_DCHECK_GE(payload_type_, 0);
|
||||
RTC_DCHECK_LE(payload_type_, 127);
|
||||
}
|
||||
|
||||
~TransformableVideoSenderFrame() override = default;
|
||||
|
||||
@ -67,7 +70,7 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
const VideoFrameMetadata& GetMetadata() const override { return metadata_; }
|
||||
|
||||
const RTPVideoHeader& GetHeader() const { return header_; }
|
||||
int GetPayloadType() const { return payload_type_; }
|
||||
uint8_t GetPayloadType() const override { return payload_type_; }
|
||||
absl::optional<VideoCodecType> GetCodecType() const { return codec_type_; }
|
||||
int64_t GetCaptureTimeMs() const { return capture_time_ms_; }
|
||||
|
||||
@ -80,7 +83,7 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
const RTPVideoHeader header_;
|
||||
const VideoFrameMetadata metadata_;
|
||||
const VideoFrameType frame_type_;
|
||||
const int payload_type_;
|
||||
const uint8_t payload_type_;
|
||||
const absl::optional<VideoCodecType> codec_type_ = absl::nullopt;
|
||||
const uint32_t timestamp_;
|
||||
const int64_t capture_time_ms_;
|
||||
|
||||
@ -1348,6 +1348,32 @@ TEST_F(RtpSenderVideoWithFrameTransformerTest,
|
||||
kDefaultExpectedRetransmissionTimeMs);
|
||||
}
|
||||
|
||||
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
||||
TEST_F(RtpSenderVideoWithFrameTransformerTest, ValidPayloadTypes) {
|
||||
rtc::scoped_refptr<MockFrameTransformer> mock_frame_transformer =
|
||||
new rtc::RefCountedObject<NiceMock<MockFrameTransformer>>();
|
||||
std::unique_ptr<RTPSenderVideo> rtp_sender_video =
|
||||
CreateSenderWithFrameTransformer(mock_frame_transformer);
|
||||
auto encoded_image = CreateDefaultEncodedImage();
|
||||
RTPVideoHeader video_header;
|
||||
|
||||
EXPECT_TRUE(rtp_sender_video->SendEncodedImage(
|
||||
0, kType, kTimestamp, *encoded_image, video_header,
|
||||
kDefaultExpectedRetransmissionTimeMs));
|
||||
EXPECT_TRUE(rtp_sender_video->SendEncodedImage(
|
||||
127, kType, kTimestamp, *encoded_image, video_header,
|
||||
kDefaultExpectedRetransmissionTimeMs));
|
||||
EXPECT_DEATH(rtp_sender_video->SendEncodedImage(
|
||||
-1, kType, kTimestamp, *encoded_image, video_header,
|
||||
kDefaultExpectedRetransmissionTimeMs),
|
||||
"");
|
||||
EXPECT_DEATH(rtp_sender_video->SendEncodedImage(
|
||||
128, kType, kTimestamp, *encoded_image, video_header,
|
||||
kDefaultExpectedRetransmissionTimeMs),
|
||||
"");
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST_F(RtpSenderVideoWithFrameTransformerTest, OnTransformedFrameSendsVideo) {
|
||||
rtc::scoped_refptr<MockFrameTransformer> mock_frame_transformer =
|
||||
new rtc::RefCountedObject<NiceMock<MockFrameTransformer>>();
|
||||
|
||||
@ -20,8 +20,9 @@ class MockTransformableFrame : public TransformableFrameInterface {
|
||||
public:
|
||||
MOCK_METHOD(rtc::ArrayView<const uint8_t>, GetData, (), (const, override));
|
||||
MOCK_METHOD(void, SetData, (rtc::ArrayView<const uint8_t>), (override));
|
||||
MOCK_METHOD(uint32_t, GetTimestamp, (), (const, override));
|
||||
MOCK_METHOD(uint8_t, GetPayloadType, (), (const, override));
|
||||
MOCK_METHOD(uint32_t, GetSsrc, (), (const, override));
|
||||
MOCK_METHOD(uint32_t, GetTimestamp, (), (const, override));
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -41,8 +41,9 @@ class TransformableVideoReceiverFrame
|
||||
EncodedImageBuffer::Create(data.data(), data.size()));
|
||||
}
|
||||
|
||||
uint32_t GetTimestamp() const override { return frame_->Timestamp(); }
|
||||
uint8_t GetPayloadType() const override { return frame_->PayloadType(); }
|
||||
uint32_t GetSsrc() const override { return ssrc_; }
|
||||
uint32_t GetTimestamp() const override { return frame_->Timestamp(); }
|
||||
|
||||
bool IsKeyFrame() const override {
|
||||
return frame_->FrameType() == VideoFrameType::kVideoFrameKey;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user