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:
committed by
Commit Bot
parent
9da1b8f012
commit
c85baeb485
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user