Skip to content

Commit 857f287

Browse files
committed
utils: Add format translation helpers
Add helpers to convert from the pisp format integer description to a string and vice-versa. Note that for the latter, this may result in a one to many mapping, and the first matching string is returned. Signed-off-by: Naushir Patuck <[email protected]>
1 parent d7f44e4 commit 857f287

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

src/libpisp/common/pisp_utils.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
*
55
* pisp_utils.cpp - PiSP buffer helper utilities
66
*/
7+
#include <algorithm>
78
#include <cmath>
89
#include <cstdint>
10+
#include <map>
911

1012
#include "backend/pisp_be_config.h"
1113

@@ -209,4 +211,56 @@ std::size_t get_plane_size(const pisp_image_format_config &config, int plane)
209211
return plane_size >= (1ULL << 32) ? 0 : plane_size;
210212
}
211213

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+
212266
} // namespace libpisp

src/libpisp/common/utils.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
#pragma once
88

9+
#include <string>
10+
911
#include "pisp_common.h"
1012

1113
namespace libpisp
@@ -18,5 +20,7 @@ void compute_addr_offset(const pisp_image_format_config &config, int x, int y, u
1820
uint32_t *addr_offset2);
1921
int num_planes(pisp_image_format format);
2022
std::size_t get_plane_size(const pisp_image_format_config &config, int plane);
23+
uint32_t get_pisp_image_format(const std::string &format);
24+
std::string get_pisp_image_format(uint32_t format);
2125

2226
} // namespace libpisp

0 commit comments

Comments
 (0)