Changed FakeVp8Encoder to write dimensions in payload.
Add FakeVp8Decoder that parse width and height from the payload. Add unit test for testing that width and height is set when decoding frames. Bug: none Change-Id: Ifbfff4f62f99625309ce0ef21cf89c76448769d8 Reviewed-on: https://webrtc-review.googlesource.com/c/103140 Commit-Queue: Per Kjellander <perkj@webrtc.org> Reviewed-by: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25038}
This commit is contained in:

committed by
Commit Bot

parent
a4de9c8b04
commit
841c912ddd
@ -18,6 +18,7 @@
|
||||
#include "api/video/encoded_image.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "common_video/libyuv/include/webrtc_libyuv.h"
|
||||
#include "modules/video_coding/include/mock/mock_video_codec_interface.h"
|
||||
#include "modules/video_coding/include/video_coding_defines.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "test/gtest.h"
|
||||
@ -819,5 +820,67 @@ void SimulcastTestFixtureImpl::TestStrideEncodeDecode() {
|
||||
EXPECT_EQ(2, decoder_callback.DecodedFrames());
|
||||
}
|
||||
|
||||
void SimulcastTestFixtureImpl::TestDecodeWidthHeightSet() {
|
||||
MockEncodedImageCallback encoder_callback;
|
||||
MockDecodedImageCallback decoder_callback;
|
||||
|
||||
EncodedImage encoded_frame[3];
|
||||
SetRates(kMaxBitrates[2], 30); // To get all three streams.
|
||||
encoder_->RegisterEncodeCompleteCallback(&encoder_callback);
|
||||
decoder_->RegisterDecodeCompleteCallback(&decoder_callback);
|
||||
|
||||
EXPECT_CALL(encoder_callback, OnEncodedImage(_, _, _))
|
||||
.Times(3)
|
||||
.WillRepeatedly(
|
||||
testing::Invoke([&](const EncodedImage& encoded_image,
|
||||
const CodecSpecificInfo* codec_specific_info,
|
||||
const RTPFragmentationHeader* fragmentation) {
|
||||
EXPECT_EQ(encoded_image._frameType, kVideoFrameKey);
|
||||
|
||||
size_t index = encoded_image.SpatialIndex().value_or(0);
|
||||
encoded_frame[index]._buffer = new uint8_t[encoded_image._size];
|
||||
encoded_frame[index]._size = encoded_image._size;
|
||||
encoded_frame[index]._length = encoded_image._length;
|
||||
encoded_frame[index]._frameType = encoded_image._frameType;
|
||||
encoded_frame[index]._completeFrame = encoded_image._completeFrame;
|
||||
memcpy(encoded_frame[index]._buffer, encoded_image._buffer,
|
||||
encoded_image._length);
|
||||
return EncodedImageCallback::Result(
|
||||
EncodedImageCallback::Result::OK, 0);
|
||||
}));
|
||||
EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, NULL));
|
||||
|
||||
EXPECT_CALL(decoder_callback, Decoded(_, _, _))
|
||||
.WillOnce(testing::Invoke([](VideoFrame& decodedImage,
|
||||
absl::optional<int32_t> decode_time_ms,
|
||||
absl::optional<uint8_t> qp) {
|
||||
EXPECT_EQ(decodedImage.width(), kDefaultWidth / 4);
|
||||
EXPECT_EQ(decodedImage.height(), kDefaultHeight / 4);
|
||||
}));
|
||||
EXPECT_EQ(0, decoder_->Decode(encoded_frame[0], false, NULL, 0));
|
||||
|
||||
EXPECT_CALL(decoder_callback, Decoded(_, _, _))
|
||||
.WillOnce(testing::Invoke([](VideoFrame& decodedImage,
|
||||
absl::optional<int32_t> decode_time_ms,
|
||||
absl::optional<uint8_t> qp) {
|
||||
EXPECT_EQ(decodedImage.width(), kDefaultWidth / 2);
|
||||
EXPECT_EQ(decodedImage.height(), kDefaultHeight / 2);
|
||||
}));
|
||||
EXPECT_EQ(0, decoder_->Decode(encoded_frame[1], false, NULL, 0));
|
||||
|
||||
EXPECT_CALL(decoder_callback, Decoded(_, _, _))
|
||||
.WillOnce(testing::Invoke([](VideoFrame& decodedImage,
|
||||
absl::optional<int32_t> decode_time_ms,
|
||||
absl::optional<uint8_t> qp) {
|
||||
EXPECT_EQ(decodedImage.width(), kDefaultWidth);
|
||||
EXPECT_EQ(decodedImage.height(), kDefaultHeight);
|
||||
}));
|
||||
EXPECT_EQ(0, decoder_->Decode(encoded_frame[2], false, NULL, 0));
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
delete [] encoded_frame[i]._buffer;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
|
@ -50,6 +50,7 @@ class SimulcastTestFixtureImpl final : public SimulcastTestFixture {
|
||||
void TestSpatioTemporalLayers333PatternEncoder() override;
|
||||
void TestSpatioTemporalLayers321PatternEncoder() override;
|
||||
void TestStrideEncodeDecode() override;
|
||||
void TestDecodeWidthHeightSet() override;
|
||||
|
||||
static void DefaultSettings(VideoCodec* settings,
|
||||
const int* temporal_layer_profile,
|
||||
|
Reference in New Issue
Block a user