|
4 | 4 | * |
5 | 5 | * pisp_utils.cpp - PiSP buffer helper utilities |
6 | 6 | */ |
| 7 | +#include <algorithm> |
7 | 8 | #include <cmath> |
8 | 9 | #include <cstdint> |
| 10 | +#include <map> |
9 | 11 |
|
10 | 12 | #include "backend/pisp_be_config.h" |
11 | 13 |
|
@@ -209,4 +211,56 @@ std::size_t get_plane_size(const pisp_image_format_config &config, int plane) |
209 | 211 | return plane_size >= (1ULL << 32) ? 0 : plane_size; |
210 | 212 | } |
211 | 213 |
|
| 214 | +static const std::map<std::string, uint32_t> &formats_table() |
| 215 | +{ |
| 216 | + // Note that alternate names and plane orderings are not defined to keep a 1:1 mapping. |
| 217 | + static const std::map<std::string, uint32_t> formats = { |
| 218 | + { "YUV444", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_444 + |
| 219 | + PISP_IMAGE_FORMAT_PLANARITY_PLANAR }, |
| 220 | + { "YUV422", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_422 + |
| 221 | + PISP_IMAGE_FORMAT_PLANARITY_PLANAR }, |
| 222 | + { "YUV420", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_420 + |
| 223 | + PISP_IMAGE_FORMAT_PLANARITY_PLANAR }, |
| 224 | + { "NV12", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_420 + |
| 225 | + PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR }, |
| 226 | + { "NV21", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_420 + |
| 227 | + PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR + PISP_IMAGE_FORMAT_ORDER_SWAPPED }, |
| 228 | + { "YUYV", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_422 + |
| 229 | + PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED }, |
| 230 | + { "UYVY", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_422 + |
| 231 | + PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED + PISP_IMAGE_FORMAT_ORDER_SWAPPED }, |
| 232 | + { "NV16", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_422 + |
| 233 | + PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR }, |
| 234 | + { "NV61", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_8 + PISP_IMAGE_FORMAT_SAMPLING_422 + |
| 235 | + PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR + PISP_IMAGE_FORMAT_ORDER_SWAPPED }, |
| 236 | + { "RGB888", PISP_IMAGE_FORMAT_THREE_CHANNEL }, |
| 237 | + { "RGBX8888", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPP_32 + PISP_IMAGE_FORMAT_ORDER_SWAPPED }, |
| 238 | + { "RGB161616", PISP_IMAGE_FORMAT_THREE_CHANNEL + PISP_IMAGE_FORMAT_BPS_16 }, |
| 239 | + { "BAYER", PISP_IMAGE_FORMAT_BPS_16 + PISP_IMAGE_FORMAT_UNCOMPRESSED }, |
| 240 | + { "PISP_COMP1", PISP_IMAGE_FORMAT_COMPRESSION_MODE_1 }, |
| 241 | + { "PISP_COMP2", PISP_IMAGE_FORMAT_COMPRESSION_MODE_2 }, |
| 242 | + }; |
| 243 | + |
| 244 | + return formats; |
| 245 | +} |
| 246 | + |
| 247 | +unsigned int get_pisp_image_format(const std::string &format) |
| 248 | +{ |
| 249 | + auto it = formats_table().find(format); |
| 250 | + if (it == formats_table().end()) |
| 251 | + return 0; |
| 252 | + |
| 253 | + return it->second; |
| 254 | +} |
| 255 | + |
| 256 | +std::string get_pisp_image_format(uint32_t format) |
| 257 | +{ |
| 258 | + const auto &fmts = formats_table(); |
| 259 | + auto it = std::find_if(fmts.begin(), fmts.end(), [format](const auto &f) { return f.second == format; }); |
| 260 | + if (it == fmts.end()) |
| 261 | + return {}; |
| 262 | + |
| 263 | + return it->first; |
| 264 | +} |
| 265 | + |
212 | 266 | } // namespace libpisp |
0 commit comments