libcamera: utils: Add alignUp and alignDown functions
Add to libcamera utils library two functions to round up or down a value to an alignment and add a test in test/utils.cpp for the two new functions. Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
4383252d93
commit
d405d1fd5e
3 changed files with 37 additions and 0 deletions
|
@ -200,6 +200,16 @@ details::StringSplitter split(const std::string &str, const std::string &delim);
|
|||
std::string libcameraBuildPath();
|
||||
std::string libcameraSourcePath();
|
||||
|
||||
constexpr unsigned int alignDown(unsigned int value, unsigned int alignment)
|
||||
{
|
||||
return value / alignment * alignment;
|
||||
}
|
||||
|
||||
constexpr unsigned int alignUp(unsigned int value, unsigned int alignment)
|
||||
{
|
||||
return (value + alignment - 1) / alignment * alignment;
|
||||
}
|
||||
|
||||
} /* namespace utils */
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
|
|
@ -444,6 +444,22 @@ std::string libcameraSourcePath()
|
|||
return path + "/";
|
||||
}
|
||||
|
||||
/**
|
||||
* \fn alignDown(unsigned int value, unsigned int alignment)
|
||||
* \brief Align \a value down to \a alignment
|
||||
* \param[in] value The value to align
|
||||
* \param[in] alignment The alignment
|
||||
* \return The value rounded down to the nearest multiple of \a alignment
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn alignUp(unsigned int value, unsigned int alignment)
|
||||
* \brief Align \a value up to \a alignment
|
||||
* \param[in] value The value to align
|
||||
* \param[in] alignment The alignment
|
||||
* \return The value rounded up to the nearest multiple of \a alignment
|
||||
*/
|
||||
|
||||
} /* namespace utils */
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
|
|
@ -166,6 +166,17 @@ protected:
|
|||
return TestFail;
|
||||
}
|
||||
|
||||
/* utils::alignUp() and utils::alignDown() tests. */
|
||||
if (utils::alignDown(6, 3) != 6 || utils::alignDown(7, 3) != 6) {
|
||||
cerr << "utils::alignDown test failed" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
if (utils::alignUp(6, 3) != 6 || utils::alignUp(7, 3) != 9) {
|
||||
cerr << "utils::alignUp test failed" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
return TestPass;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue