27 lines
1.2 KiB
C
27 lines
1.2 KiB
C
/* Копирование одной плоскости YUV с поворотом по часовой стрелке, без выделений.
|
|
* Вызывается отдельно для Y/U/V; размеры chroma уже уменьшены вызывающим.
|
|
* Буферы источника и назначения не должны пересекаться. */
|
|
#ifndef VIDEO_PLANE_H
|
|
#define VIDEO_PLANE_H
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* data — первый пиксель, size — доступные байты от него; stride — шаг строки/пикселя. */
|
|
struct video_plane {
|
|
uint8_t *data;
|
|
size_t size, row_stride, pixel_stride;
|
|
};
|
|
|
|
/* src_width/height — размеры источника; rotation — 0/90/180/270 градусов.
|
|
* При 90/270 размеры назначения переставлены. Возвращает 0 либо -1 с диагностикой;
|
|
* все границы проверяются до первой записи. */
|
|
int video_plane_rotate(const struct video_plane *src, const struct video_plane *dst,
|
|
unsigned src_width, unsigned src_height, unsigned rotation);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|