Refactor ScalableVideoController::OnEncodeDone signature

to make it a bit simpler

Bug: None
Change-Id: Ie6288594c5a1b8535007623032b422eefc716ca6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188460
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32405}
This commit is contained in:
Danil Chapovalov
2020-10-14 18:09:58 +02:00
committed by Commit Bot
parent 9da1b8f012
commit c85baeb485
13 changed files with 78 additions and 104 deletions

View File

@ -244,28 +244,28 @@ ScalabilityStructureFullSvc::NextFrameConfig(bool restart) {
return configs;
}
absl::optional<GenericFrameInfo> ScalabilityStructureFullSvc::OnEncodeDone(
LayerFrameConfig config) {
absl::optional<GenericFrameInfo> frame_info(absl::in_place);
frame_info->spatial_id = config.SpatialId();
frame_info->temporal_id = config.TemporalId();
frame_info->encoder_buffers = config.Buffers();
frame_info->decode_target_indications.reserve(num_spatial_layers_ *
num_temporal_layers_);
GenericFrameInfo ScalabilityStructureFullSvc::OnEncodeDone(
const LayerFrameConfig& config) {
GenericFrameInfo frame_info;
frame_info.spatial_id = config.SpatialId();
frame_info.temporal_id = config.TemporalId();
frame_info.encoder_buffers = config.Buffers();
frame_info.decode_target_indications.reserve(num_spatial_layers_ *
num_temporal_layers_);
for (int sid = 0; sid < num_spatial_layers_; ++sid) {
for (int tid = 0; tid < num_temporal_layers_; ++tid) {
frame_info->decode_target_indications.push_back(Dti(sid, tid, config));
frame_info.decode_target_indications.push_back(Dti(sid, tid, config));
}
}
if (config.TemporalId() == 0) {
frame_info->part_of_chain.resize(num_spatial_layers_);
frame_info.part_of_chain.resize(num_spatial_layers_);
for (int sid = 0; sid < num_spatial_layers_; ++sid) {
frame_info->part_of_chain[sid] = config.SpatialId() <= sid;
frame_info.part_of_chain[sid] = config.SpatialId() <= sid;
}
} else {
frame_info->part_of_chain.assign(num_spatial_layers_, false);
frame_info.part_of_chain.assign(num_spatial_layers_, false);
}
frame_info->active_decode_targets = active_decode_targets_;
frame_info.active_decode_targets = active_decode_targets_;
return frame_info;
}

View File

@ -13,7 +13,6 @@
#include <bitset>
#include <vector>
#include "absl/types/optional.h"
#include "api/transport/rtp/dependency_descriptor.h"
#include "common_video/generic_frame_descriptor/generic_frame_info.h"
#include "modules/video_coding/codecs/av1/scalable_video_controller.h"
@ -28,8 +27,7 @@ class ScalabilityStructureFullSvc : public ScalableVideoController {
StreamLayersConfig StreamConfig() const override;
std::vector<LayerFrameConfig> NextFrameConfig(bool restart) override;
absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) override;
GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) override;
void OnRatesUpdated(const VideoBitrateAllocation& bitrates) override;
private:

View File

@ -78,28 +78,23 @@ ScalabilityStructureL2T1Key::NextFrameConfig(bool restart) {
return result;
}
absl::optional<GenericFrameInfo> ScalabilityStructureL2T1Key::OnEncodeDone(
LayerFrameConfig config) {
absl::optional<GenericFrameInfo> frame_info;
if (config.IsKeyframe()) {
config = KeyFrameConfig();
}
GenericFrameInfo ScalabilityStructureL2T1Key::OnEncodeDone(
const LayerFrameConfig& config) {
RTC_CHECK_GE(config.Id(), 0);
RTC_CHECK_LT(config.Id(), ABSL_ARRAYSIZE(kDtis));
if (config.Id() < 0 || config.Id() >= int{ABSL_ARRAYSIZE(kDtis)}) {
RTC_LOG(LS_ERROR) << "Unexpected config id " << config.Id();
return frame_info;
}
frame_info.emplace();
frame_info->spatial_id = config.SpatialId();
frame_info->temporal_id = config.TemporalId();
frame_info->encoder_buffers = std::move(config.Buffers());
frame_info->decode_target_indications.assign(std::begin(kDtis[config.Id()]),
std::end(kDtis[config.Id()]));
GenericFrameInfo frame_info;
frame_info.spatial_id = config.SpatialId();
frame_info.temporal_id = config.TemporalId();
frame_info.encoder_buffers = config.Buffers();
int config_id = config.IsKeyframe() ? 0 : config.Id();
frame_info.decode_target_indications.assign(std::begin(kDtis[config_id]),
std::end(kDtis[config_id]));
if (config.IsKeyframe()) {
frame_info->part_of_chain = {true, true};
frame_info.part_of_chain = {true, true};
} else {
frame_info->part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
frame_info.part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
}
return frame_info;
}

View File

@ -29,8 +29,7 @@ class ScalabilityStructureL2T1Key : public ScalableVideoController {
FrameDependencyStructure DependencyStructure() const override;
std::vector<LayerFrameConfig> NextFrameConfig(bool restart) override;
absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) override;
GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) override;
private:
LayerFrameConfig KeyFrameConfig() const;

View File

@ -99,30 +99,25 @@ ScalabilityStructureL2T2Key::NextFrameConfig(bool restart) {
return result;
}
absl::optional<GenericFrameInfo> ScalabilityStructureL2T2Key::OnEncodeDone(
LayerFrameConfig config) {
if (config.IsKeyframe()) {
config = KeyFrameConfig();
}
GenericFrameInfo ScalabilityStructureL2T2Key::OnEncodeDone(
const LayerFrameConfig& config) {
RTC_CHECK_GE(config.Id(), 0);
RTC_CHECK_LT(config.Id(), ABSL_ARRAYSIZE(kDtis));
absl::optional<GenericFrameInfo> frame_info;
if (config.Id() < 0 || config.Id() >= int{ABSL_ARRAYSIZE(kDtis)}) {
RTC_LOG(LS_ERROR) << "Unexpected config id " << config.Id();
return frame_info;
}
frame_info.emplace();
frame_info->spatial_id = config.SpatialId();
frame_info->temporal_id = config.TemporalId();
frame_info->encoder_buffers = config.Buffers();
frame_info->decode_target_indications.assign(std::begin(kDtis[config.Id()]),
std::end(kDtis[config.Id()]));
GenericFrameInfo frame_info;
frame_info.spatial_id = config.SpatialId();
frame_info.temporal_id = config.TemporalId();
frame_info.encoder_buffers = config.Buffers();
int config_id = config.IsKeyframe() ? 0 : config.Id();
frame_info.decode_target_indications.assign(std::begin(kDtis[config_id]),
std::end(kDtis[config_id]));
if (config.IsKeyframe()) {
frame_info->part_of_chain = {true, true};
frame_info.part_of_chain = {true, true};
} else if (config.TemporalId() == 0) {
frame_info->part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
frame_info.part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
} else {
frame_info->part_of_chain = {false, false};
frame_info.part_of_chain = {false, false};
}
return frame_info;
}

View File

@ -34,8 +34,7 @@ class ScalabilityStructureL2T2Key : public ScalableVideoController {
FrameDependencyStructure DependencyStructure() const override;
std::vector<LayerFrameConfig> NextFrameConfig(bool restart) override;
absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) override;
GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) override;
private:
enum FramePattern {

View File

@ -99,30 +99,25 @@ ScalabilityStructureL2T2KeyShift::NextFrameConfig(bool restart) {
return result;
}
absl::optional<GenericFrameInfo> ScalabilityStructureL2T2KeyShift::OnEncodeDone(
LayerFrameConfig config) {
if (config.IsKeyframe()) {
config = KeyFrameConfig();
}
GenericFrameInfo ScalabilityStructureL2T2KeyShift::OnEncodeDone(
const LayerFrameConfig& config) {
RTC_CHECK_GE(config.Id(), 0);
RTC_CHECK_LT(config.Id(), ABSL_ARRAYSIZE(kDtis));
absl::optional<GenericFrameInfo> frame_info;
if (config.Id() < 0 || config.Id() >= int{ABSL_ARRAYSIZE(kDtis)}) {
RTC_LOG(LS_ERROR) << "Unexpected config id " << config.Id();
return frame_info;
}
frame_info.emplace();
frame_info->spatial_id = config.SpatialId();
frame_info->temporal_id = config.TemporalId();
frame_info->encoder_buffers = config.Buffers();
frame_info->decode_target_indications.assign(std::begin(kDtis[config.Id()]),
std::end(kDtis[config.Id()]));
GenericFrameInfo frame_info;
frame_info.spatial_id = config.SpatialId();
frame_info.temporal_id = config.TemporalId();
frame_info.encoder_buffers = config.Buffers();
int config_id = config.IsKeyframe() ? 0 : config.Id();
frame_info.decode_target_indications.assign(std::begin(kDtis[config_id]),
std::end(kDtis[config_id]));
if (config.IsKeyframe()) {
frame_info->part_of_chain = {true, true};
frame_info.part_of_chain = {true, true};
} else if (config.TemporalId() == 0) {
frame_info->part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
frame_info.part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
} else {
frame_info->part_of_chain = {false, false};
frame_info.part_of_chain = {false, false};
}
return frame_info;
}

View File

@ -34,8 +34,7 @@ class ScalabilityStructureL2T2KeyShift : public ScalableVideoController {
FrameDependencyStructure DependencyStructure() const override;
std::vector<LayerFrameConfig> NextFrameConfig(bool restart) override;
absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) override;
GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) override;
private:
enum FramePattern {

View File

@ -70,23 +70,21 @@ ScalabilityStructureS2T1::NextFrameConfig(bool restart) {
return result;
}
absl::optional<GenericFrameInfo> ScalabilityStructureS2T1::OnEncodeDone(
LayerFrameConfig config) {
absl::optional<GenericFrameInfo> frame_info;
GenericFrameInfo ScalabilityStructureS2T1::OnEncodeDone(
const LayerFrameConfig& config) {
GenericFrameInfo frame_info;
if (config.SpatialId() < 0 ||
config.SpatialId() >= int{ABSL_ARRAYSIZE(kDtis)}) {
RTC_LOG(LS_ERROR) << "Unexpected spatial id " << config.SpatialId();
return frame_info;
}
frame_info.emplace();
frame_info->spatial_id = config.SpatialId();
frame_info->temporal_id = config.TemporalId();
frame_info->encoder_buffers = std::move(config.Buffers());
frame_info->decode_target_indications.assign(
frame_info.spatial_id = config.SpatialId();
frame_info.temporal_id = config.TemporalId();
frame_info.encoder_buffers = std::move(config.Buffers());
frame_info.decode_target_indications.assign(
std::begin(kDtis[config.SpatialId()]),
std::end(kDtis[config.SpatialId()]));
frame_info->part_of_chain = {config.SpatialId() == 0,
config.SpatialId() == 1};
frame_info.part_of_chain = {config.SpatialId() == 0, config.SpatialId() == 1};
return frame_info;
}

View File

@ -29,8 +29,7 @@ class ScalabilityStructureS2T1 : public ScalableVideoController {
FrameDependencyStructure DependencyStructure() const override;
std::vector<LayerFrameConfig> NextFrameConfig(bool restart) override;
absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) override;
GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) override;
private:
bool keyframe_ = true;

View File

@ -13,7 +13,6 @@
#include <vector>
#include "absl/container/inlined_vector.h"
#include "absl/types/optional.h"
#include "api/transport/rtp/dependency_descriptor.h"
#include "api/video/video_bitrate_allocation.h"
#include "common_video/generic_frame_descriptor/generic_frame_info.h"
@ -95,8 +94,7 @@ class ScalableVideoController {
virtual std::vector<LayerFrameConfig> NextFrameConfig(bool restart) = 0;
// Returns configuration to pass to EncoderCallback.
virtual absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) = 0;
virtual GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) = 0;
};
// Below are implementation details.

View File

@ -50,17 +50,17 @@ ScalableVideoControllerNoLayering::NextFrameConfig(bool restart) {
return result;
}
absl::optional<GenericFrameInfo>
ScalableVideoControllerNoLayering::OnEncodeDone(LayerFrameConfig config) {
GenericFrameInfo ScalableVideoControllerNoLayering::OnEncodeDone(
const LayerFrameConfig& config) {
RTC_DCHECK_EQ(config.Id(), 0);
absl::optional<GenericFrameInfo> frame_info(absl::in_place);
frame_info->encoder_buffers = config.Buffers();
GenericFrameInfo frame_info;
frame_info.encoder_buffers = config.Buffers();
if (config.IsKeyframe()) {
for (auto& buffer : frame_info->encoder_buffers) {
for (auto& buffer : frame_info.encoder_buffers) {
buffer.referenced = false;
}
}
frame_info->decode_target_indications = {DecodeTargetIndication::kSwitch};
frame_info.decode_target_indications = {DecodeTargetIndication::kSwitch};
return frame_info;
}

View File

@ -26,8 +26,7 @@ class ScalableVideoControllerNoLayering : public ScalableVideoController {
FrameDependencyStructure DependencyStructure() const override;
std::vector<LayerFrameConfig> NextFrameConfig(bool restart) override;
absl::optional<GenericFrameInfo> OnEncodeDone(
LayerFrameConfig config) override;
GenericFrameInfo OnEncodeDone(const LayerFrameConfig& config) override;
private:
bool start_ = true;