33b9a6e395
Co-authored-by: Asada shinon <joshwoo71@gmail.com>
156 lines
5.1 KiB
C
156 lines
5.1 KiB
C
// Since we don't use ExportAsPlanar, we don't actually need libp2p.
|
|
// So instead of adding another wrap and meson build file, and *also*
|
|
// patching the include statement in videosource.cpp, we throw a dummy
|
|
// header file in the folder that should contain the checkout of libp2p.
|
|
|
|
#ifndef P2P_API_H_
|
|
#define P2P_API_H_
|
|
|
|
#include <stddef.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Notation: [Xa-Ya-Za]
|
|
*
|
|
* [] denotes a machine word of the specified endianness. Xa-Ya-Za denote
|
|
* component X, Y, and Z packed in the word, with bit depths a, b, c, in order
|
|
* from MSB to LSB. Padding bits are represented by the component '!'.
|
|
*/
|
|
enum p2p_packing {
|
|
/** [R8-G8-B8] */
|
|
p2p_rgb24_be, /* RGB */
|
|
p2p_rgb24_le, /* BGR */
|
|
p2p_rgb24,
|
|
/** [A8-R8-G8-B8] */
|
|
p2p_argb32_be, /* ARGB */
|
|
p2p_argb32_le, /* BGRA */
|
|
p2p_argb32,
|
|
/** [A8-Y8-U8-V8] */
|
|
p2p_ayuv_be, /* AYUV */
|
|
p2p_ayuv_le, /* VUYA */
|
|
p2p_ayuv,
|
|
/** [R16-G16-B16] */
|
|
p2p_rgb48_be, /* RGB, big-endian components */
|
|
p2p_rgb48_le, /* BGR, little-endian components */
|
|
p2p_rgb48,
|
|
/** [A16-R16-G16-B16] */
|
|
p2p_argb64_be, /* ARGB big-endian components */
|
|
p2p_argb64_le, /* BGRA little-endian components */
|
|
p2p_argb64,
|
|
/** [A2-R10-G10-B10] */
|
|
p2p_rgb30_be, /* ARGB packed in big-endian DWORD */
|
|
p2p_rgb30_le, /* ARGB packed in little-endian DWORD */
|
|
p2p_rgb30,
|
|
/** [A2-V10-Y10-U10] */
|
|
p2p_y410_be, /* AVYU packed in big-endian DWORD */
|
|
p2p_y410_le, /* AVYU packed in little-endian DWORD */
|
|
p2p_y410,
|
|
/** [A16-V16-Y16-U16] */
|
|
p2p_y416_be, /* AVYU, big-endian components */
|
|
p2p_y416_le, /* UYVA, little-endian components */
|
|
p2p_y416,
|
|
/** [Y8] [U8] [Y8] [V8] */
|
|
p2p_yuy2,
|
|
/** [U8] [Y8] [V8] [Y8] */
|
|
p2p_uyvy,
|
|
/** [Y10-!6] [U10-!6] [Y10-!6] [V10-!6] */
|
|
p2p_y210_be, /* YUYV, big-endian components, lower 6 bits zero */
|
|
p2p_y210_le, /* YUYV, little-endian components, lower 6 bits zero. Microsoft Y210. */
|
|
p2p_y210,
|
|
/** [Y16] [U16] [Y16] [V16] */
|
|
p2p_y216_be, /* YUYV, big-endian components */
|
|
p2p_y216_le, /* YUYV, little-endian components. Microsoft Y216. */
|
|
p2p_y216,
|
|
/** [!2-V10-Y10-U10] [!2-Y10-U10-Y10] [!2-U10-Y10-V10] [!2-Y10-V10-Y10] */
|
|
p2p_v210_be, /* v210 with big-endian DWORDs */
|
|
p2p_v210_le, /* Apple/QuickTime v210 */
|
|
p2p_v210,
|
|
/** [U16] [Y16] [V16] [Y16] */
|
|
p2p_v216_be, /* UYVY, big-endian components */
|
|
p2p_v216_le, /* UYVY, little-endian components. Apple/QuickTime v216. */
|
|
p2p_v216,
|
|
/** [U8-V8] */
|
|
p2p_nv12_be, /* aka NV21, V first */
|
|
p2p_nv12_le, /* NV12 */
|
|
p2p_nv12,
|
|
/** [U10-!6-V10-!6] */
|
|
p2p_p010_be, /* NV21, big-endian components, lower 6 bits zero */
|
|
p2p_p010_le, /* NV12, little-endian components, lower 6 bits zero. Microsoft P010. */
|
|
p2p_p010,
|
|
/** [U16-V16] */
|
|
p2p_p016_be, /* NV21, big-endian components */
|
|
p2p_p016_le, /* NV12, little-endian components. Microsoft P016. */
|
|
p2p_p016,
|
|
/** [U10-!6-V10-!6] */
|
|
p2p_p210_be, /* NV21, big-endian components, lower 6 bits zero */
|
|
p2p_p210_le, /* NV12, little-endian components, lower 6 bits zero. Microsoft P210. */
|
|
p2p_p210,
|
|
/** [U16-V16] */
|
|
p2p_p216_be, /* NV21, big-endian components */
|
|
p2p_p216_le, /* NV12, little-endian components. Microsoft P216. */
|
|
p2p_p216,
|
|
/** [R8-G8-B8-A8] */
|
|
p2p_rgba32_be, /* RGBA */
|
|
p2p_rgba32_le, /* ABGR */
|
|
p2p_rgba32,
|
|
/** [R16-G16-B16-A16] */
|
|
p2p_rgba64_be, /* RGBA, big-endian components */
|
|
p2p_rgba64_le, /* ABGR, little-endian components */
|
|
p2p_rgba64,
|
|
/** [A16-B16-G16-R16] */
|
|
p2p_abgr64_be, /* ABGR, big-endian components */
|
|
p2p_abgr64_le, /* RGBA, little-endian components */
|
|
p2p_abgr64,
|
|
/** [B16-G16-R16] */
|
|
p2p_bgr48_be, /* BGR, big-endian components */
|
|
p2p_bgr48_le, /* RGB, little-endian components */
|
|
p2p_bgr48,
|
|
/** [B16-G16-R16-A16] */
|
|
p2p_bgra64_be, /* BGRA, big-endian components */
|
|
p2p_bgra64_le, /* ARGB, little-endian components */
|
|
p2p_bgra64,
|
|
|
|
p2p_packing_max,
|
|
};
|
|
|
|
struct p2p_buffer_param {
|
|
/**
|
|
* Planar order: R-G-B-A or Y-U-V-A. Alpha is optional.
|
|
* Packed order: Y-UV if NV12/21, else single plane. Y optional for NV12/21.
|
|
*/
|
|
const void *src[4];
|
|
void *dst[4];
|
|
ptrdiff_t src_stride[4];
|
|
ptrdiff_t dst_stride[4];
|
|
unsigned width;
|
|
unsigned height;
|
|
enum p2p_packing packing;
|
|
};
|
|
|
|
/** Pack/unpack a range of pixels from a scanline. */
|
|
typedef void (*p2p_unpack_func)(const void *src, void * const dst[4], unsigned left, unsigned right);
|
|
typedef void (*p2p_pack_func)(const void * const src[4], void *dst, unsigned left, unsigned right);
|
|
|
|
/** Select a line pack/unpack function. */
|
|
p2p_unpack_func p2p_select_unpack_func(enum p2p_packing packing);
|
|
p2p_pack_func p2p_select_pack_func(enum p2p_packing packing);
|
|
p2p_pack_func p2p_select_pack_func_ex(enum p2p_packing packing, int alpha_one_fill);
|
|
|
|
|
|
/** When processing formats like NV12, ignore the unpacked plane. */
|
|
#define P2P_SKIP_UNPACKED_PLANES (1UL << 0)
|
|
/** When packing, store a bit pattern of all ones in the alpha channel instead of all zeros. */
|
|
#define P2P_ALPHA_SET_ONE (1UL << 1)
|
|
|
|
/** Helper function to pack/unpack between memory locations. */
|
|
void p2p_unpack_frame(const struct p2p_buffer_param *param, unsigned long flags) {};
|
|
void p2p_pack_frame(const struct p2p_buffer_param *param, unsigned long flags) {};
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* P2P_API_H_ */
|