blob: ef78fac7b007abd98c45666f59c2f558cf60606f [file] [log] [blame]
/*
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "common_video/generic_frame_descriptor/generic_frame_info.h"
#include <utility>
#include "rtc_base/checks.h"
namespace webrtc {
absl::InlinedVector<DecodeTargetIndication, 10>
GenericFrameInfo::DecodeTargetInfo(absl::string_view indication_symbols) {
absl::InlinedVector<DecodeTargetIndication, 10> decode_targets;
for (char symbol : indication_symbols) {
DecodeTargetIndication indication;
switch (symbol) {
case '-':
indication = DecodeTargetIndication::kNotPresent;
break;
case 'D':
indication = DecodeTargetIndication::kDiscardable;
break;
case 'R':
indication = DecodeTargetIndication::kRequired;
break;
case 'S':
indication = DecodeTargetIndication::kSwitch;
break;
default:
RTC_NOTREACHED();
}
decode_targets.push_back(indication);
}
return decode_targets;
}
GenericFrameInfo::GenericFrameInfo() = default;
GenericFrameInfo::GenericFrameInfo(const GenericFrameInfo&) = default;
GenericFrameInfo::~GenericFrameInfo() = default;
GenericFrameInfo::Builder::Builder() = default;
GenericFrameInfo::Builder::~Builder() = default;
GenericFrameInfo GenericFrameInfo::Builder::Build() const {
return info_;
}
GenericFrameInfo::Builder& GenericFrameInfo::Builder::T(int temporal_id) {
info_.temporal_id = temporal_id;
return *this;
}
GenericFrameInfo::Builder& GenericFrameInfo::Builder::S(int spatial_id) {
info_.spatial_id = spatial_id;
return *this;
}
GenericFrameInfo::Builder& GenericFrameInfo::Builder::Dtis(
absl::string_view indication_symbols) {
info_.decode_target_indications = DecodeTargetInfo(indication_symbols);
return *this;
}
GenericFrameInfo::Builder& GenericFrameInfo::Builder::Fdiffs(
std::initializer_list<int> frame_diffs) {
info_.frame_diffs.assign(frame_diffs.begin(), frame_diffs.end());
return *this;
}
GenericFrameInfo::Builder& GenericFrameInfo::Builder::ChainDiffs(
std::initializer_list<int> chain_diffs) {
info_.chain_diffs.assign(chain_diffs.begin(), chain_diffs.end());
return *this;
}
} // namespace webrtc