Make AV1 respect spatial layer active flag.
Bug: webrtc:12788 Change-Id: Ied629e1635b6ff9bf92fab2d1af708163f9dd28c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/220928 Commit-Queue: Erik Språng <sprang@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34189}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
d23628dfb6
commit
f865444877
@ -671,8 +671,15 @@ int32_t LibaomAv1Encoder::Encode(
|
||||
encoded_image.content_type_ = VideoContentType::UNSPECIFIED;
|
||||
// If encoded image width/height info are added to aom_codec_cx_pkt_t,
|
||||
// use those values in lieu of the values in frame.
|
||||
encoded_image._encodedHeight = frame.height();
|
||||
encoded_image._encodedWidth = frame.width();
|
||||
if (svc_params_) {
|
||||
int n = svc_params_->scaling_factor_num[layer_frame.SpatialId()];
|
||||
int d = svc_params_->scaling_factor_den[layer_frame.SpatialId()];
|
||||
encoded_image._encodedWidth = cfg_.g_w * n / d;
|
||||
encoded_image._encodedHeight = cfg_.g_h * n / d;
|
||||
} else {
|
||||
encoded_image._encodedWidth = cfg_.g_w;
|
||||
encoded_image._encodedHeight = cfg_.g_h;
|
||||
}
|
||||
encoded_image.timing_.flags = VideoSendTiming::kInvalid;
|
||||
int qp = -1;
|
||||
ret = aom_codec_control(&ctx_, AOME_GET_LAST_QUANTIZER, &qp);
|
||||
|
||||
@ -25,6 +25,7 @@ namespace webrtc {
|
||||
namespace {
|
||||
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::Field;
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::SizeIs;
|
||||
|
||||
@ -135,5 +136,36 @@ TEST(LibaomAv1EncoderTest, EncoderInfoProvidesFpsAllocation) {
|
||||
EXPECT_THAT(encoder_info.fps_allocation[3], IsEmpty());
|
||||
}
|
||||
|
||||
TEST(LibaomAv1EncoderTest, PopulatesEncodedFrameSize) {
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
VideoCodec codec_settings = DefaultCodecSettings();
|
||||
ASSERT_GT(codec_settings.width, 4);
|
||||
// Configure encoder with 3 spatial layers.
|
||||
codec_settings.SetScalabilityMode("L3T1");
|
||||
ASSERT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()),
|
||||
WEBRTC_VIDEO_CODEC_OK);
|
||||
|
||||
using Frame = EncodedVideoFrameProducer::EncodedFrame;
|
||||
std::vector<Frame> encoded_frames =
|
||||
EncodedVideoFrameProducer(*encoder).SetNumInputFrames(1).Encode();
|
||||
EXPECT_THAT(
|
||||
encoded_frames,
|
||||
ElementsAre(
|
||||
Field(&Frame::encoded_image,
|
||||
AllOf(Field(&EncodedImage::_encodedWidth,
|
||||
codec_settings.width / 4),
|
||||
Field(&EncodedImage::_encodedHeight,
|
||||
codec_settings.height / 4))),
|
||||
Field(&Frame::encoded_image,
|
||||
AllOf(Field(&EncodedImage::_encodedWidth,
|
||||
codec_settings.width / 2),
|
||||
Field(&EncodedImage::_encodedHeight,
|
||||
codec_settings.height / 2))),
|
||||
Field(&Frame::encoded_image,
|
||||
AllOf(Field(&EncodedImage::_encodedWidth, codec_settings.width),
|
||||
Field(&EncodedImage::_encodedHeight,
|
||||
codec_settings.height)))));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user