blob: 5c40ddc82ca60fc886954fd6afce57d843c408e5 [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.insert(info_.frame_diffs.end(), frame_diffs.begin(),
frame_diffs.end());
return *this;
}
} // namespace webrtc