Loading media/codec2/vndk/util/C2InterfaceUtils.cpp +23 −9 Original line number Original line Diff line number Diff line Loading @@ -216,9 +216,14 @@ C2SupportedFlags<T> C2SupportedFlags<T>::limitedTo(const C2SupportedFlags<T> &li if (limit.contains(minMask) && contains(minMask)) { if (limit.contains(minMask) && contains(minMask)) { values[0] = minMask; values[0] = minMask; // keep only flags that are covered by limit // keep only flags that are covered by limit std::remove_if(values.begin(), values.end(), [&limit, minMask](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), [&limit, minMask]( const C2Value::Primitive &v) -> bool { T value = v.ref<ValueType>() | minMask; T value = v.ref<ValueType>() | minMask; return value == minMask || !limit.contains(value); }); return value == minMask || !limit.contains(value); }), values.end()); // we also need to do it vice versa // we also need to do it vice versa for (const C2Value::Primitive &v : _mValues) { for (const C2Value::Primitive &v : _mValues) { T value = v.ref<ValueType>() | minMask; T value = v.ref<ValueType>() | minMask; Loading Loading @@ -264,24 +269,33 @@ bool C2SupportedValueSet<T>::contains(T value) const { template<typename T> template<typename T> C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedValueSet<T> &limit) const { C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedValueSet<T> &limit) const { std::vector<C2Value::Primitive> values = _mValues; // make a copy std::vector<C2Value::Primitive> values = _mValues; // make a copy std::remove_if(values.begin(), values.end(), [&limit](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), return !limit.contains(v.ref<ValueType>()); }); [&limit](const C2Value::Primitive &v) -> bool { return !limit.contains(v.ref<ValueType>()); }), values.end()); return C2SupportedValueSet(std::move(values)); return C2SupportedValueSet(std::move(values)); } } template<typename T> template<typename T> C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedRange<T> &limit) const { C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedRange<T> &limit) const { std::vector<C2Value::Primitive> values = _mValues; // make a copy std::vector<C2Value::Primitive> values = _mValues; // make a copy std::remove_if(values.begin(), values.end(), [&limit](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), return !limit.contains(v.ref<ValueType>()); }); [&limit](const C2Value::Primitive &v) -> bool { return !limit.contains(v.ref<ValueType>()); }), values.end()); return C2SupportedValueSet(std::move(values)); return C2SupportedValueSet(std::move(values)); } } template<typename T> template<typename T> C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedFlags<T> &limit) const { C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedFlags<T> &limit) const { std::vector<C2Value::Primitive> values = _mValues; // make a copy std::vector<C2Value::Primitive> values = _mValues; // make a copy std::remove_if(values.begin(), values.end(), [&limit](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), return !limit.contains(v.ref<ValueType>()); }); [&limit](const C2Value::Primitive &v) -> bool { return !limit.contains(v.ref<ValueType>()); }), values.end()); return C2SupportedValueSet(std::move(values)); return C2SupportedValueSet(std::move(values)); } } Loading Loading
media/codec2/vndk/util/C2InterfaceUtils.cpp +23 −9 Original line number Original line Diff line number Diff line Loading @@ -216,9 +216,14 @@ C2SupportedFlags<T> C2SupportedFlags<T>::limitedTo(const C2SupportedFlags<T> &li if (limit.contains(minMask) && contains(minMask)) { if (limit.contains(minMask) && contains(minMask)) { values[0] = minMask; values[0] = minMask; // keep only flags that are covered by limit // keep only flags that are covered by limit std::remove_if(values.begin(), values.end(), [&limit, minMask](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), [&limit, minMask]( const C2Value::Primitive &v) -> bool { T value = v.ref<ValueType>() | minMask; T value = v.ref<ValueType>() | minMask; return value == minMask || !limit.contains(value); }); return value == minMask || !limit.contains(value); }), values.end()); // we also need to do it vice versa // we also need to do it vice versa for (const C2Value::Primitive &v : _mValues) { for (const C2Value::Primitive &v : _mValues) { T value = v.ref<ValueType>() | minMask; T value = v.ref<ValueType>() | minMask; Loading Loading @@ -264,24 +269,33 @@ bool C2SupportedValueSet<T>::contains(T value) const { template<typename T> template<typename T> C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedValueSet<T> &limit) const { C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedValueSet<T> &limit) const { std::vector<C2Value::Primitive> values = _mValues; // make a copy std::vector<C2Value::Primitive> values = _mValues; // make a copy std::remove_if(values.begin(), values.end(), [&limit](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), return !limit.contains(v.ref<ValueType>()); }); [&limit](const C2Value::Primitive &v) -> bool { return !limit.contains(v.ref<ValueType>()); }), values.end()); return C2SupportedValueSet(std::move(values)); return C2SupportedValueSet(std::move(values)); } } template<typename T> template<typename T> C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedRange<T> &limit) const { C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedRange<T> &limit) const { std::vector<C2Value::Primitive> values = _mValues; // make a copy std::vector<C2Value::Primitive> values = _mValues; // make a copy std::remove_if(values.begin(), values.end(), [&limit](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), return !limit.contains(v.ref<ValueType>()); }); [&limit](const C2Value::Primitive &v) -> bool { return !limit.contains(v.ref<ValueType>()); }), values.end()); return C2SupportedValueSet(std::move(values)); return C2SupportedValueSet(std::move(values)); } } template<typename T> template<typename T> C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedFlags<T> &limit) const { C2SupportedValueSet<T> C2SupportedValueSet<T>::limitedTo(const C2SupportedFlags<T> &limit) const { std::vector<C2Value::Primitive> values = _mValues; // make a copy std::vector<C2Value::Primitive> values = _mValues; // make a copy std::remove_if(values.begin(), values.end(), [&limit](const C2Value::Primitive &v) -> bool { values.erase(std::remove_if(values.begin(), values.end(), return !limit.contains(v.ref<ValueType>()); }); [&limit](const C2Value::Primitive &v) -> bool { return !limit.contains(v.ref<ValueType>()); }), values.end()); return C2SupportedValueSet(std::move(values)); return C2SupportedValueSet(std::move(values)); } } Loading