26 for (i = 0; i < 2; ++i) {
29 for (j = 0; j <
n; ++j) {
36 for (i = 0; i < 4; ++i)
53 for (i = 0; i < 2; ++i) {
59 for (j = 0; j <
n; ++j) {
81 int size[4] = { lumLines,
92 for (i = 0; i < 4; ++i) {
93 int n = size[i] * ( ring == 0 ? 1 : 3);
112 for (i = 0; i < 4; ++i) {
123 for (i = 0; i < 4; i+=3) {
134 for (i = 1; i < 3; ++i) {
151 const int start[4] = {lumY,
156 const int end[4] = {lumY +lumH,
161 const uint8_t *src_[4] = {src[0] + (relative ? 0 : start[0]) * stride[0],
162 src[1] + (relative ? 0 : start[1]) * stride[1],
163 src[2] + (relative ? 0 : start[2]) * stride[2],
164 src[3] + (relative ? 0 : start[3]) * stride[3]};
168 for (i = 0; i < 4; ++i) {
172 int lines = end[i] - start[i];
173 int tot_lines = end[i] - first;
175 if (start[i] >= first && n >= tot_lines) {
177 for (j = 0; j < lines; j+= 1)
178 s->
plane[i].
line[start[i] - first + j] = src_[i] + j * stride[i];
181 lines = lines > n ? n : lines;
183 for (j = 0; j < lines; j+= 1)
184 s->
plane[i].
line[j] = src_[i] + j * stride[i];
195 for (i = 0; i < 4; ++i) {
198 for (j = 0; j <
size; ++j) {
200 int end = is16bit ? n>>1:
n;
204 for (k = 0; k <
end; ++k)
207 for (k = 0; k <
end; ++k)
208 ((int16_t*)(s->
plane[i].
line[j]))[k] = 1<<14;
231 *out_lum_size = lumFilterSize;
232 *out_chr_size = chrFilterSize;
234 for (lumY = 0; lumY < dstH; lumY++) {
235 int chrY = (int64_t)lumY * chrDstH / dstH;
236 int nextSlice =
FFMAX(lumFilterPos[lumY] + lumFilterSize - 1,
237 ((chrFilterPos[chrY] + chrFilterSize - 1)
240 nextSlice >>= chrSubSample;
241 nextSlice <<= chrSubSample;
242 (*out_lum_size) =
FFMAX((*out_lum_size), nextSlice - lumFilterPos[lumY]);
243 (*out_chr_size) =
FFMAX((*out_chr_size), (nextSlice >> chrSubSample) - chrFilterPos[chrY]);
260 int dst_stride =
FFALIGN(c->
dstW *
sizeof(int16_t) + 66, 16);
275 num_ydesc = need_lum_conv ? 2 : 1;
276 num_cdesc = need_chr_conv ? 2 : 1;
279 c->
numDesc = num_ydesc + num_cdesc + num_vdesc + (need_gamma ? 2 : 0);
280 c->
descIndex[0] = num_ydesc + (need_gamma ? 1 : 0);
281 c->
descIndex[1] = num_ydesc + num_cdesc + (need_gamma ? 1 : 0);
293 for (i = 1; i < c->
numSlice-2; ++i) {
331 dstIdx =
FFMAX(num_ydesc, num_cdesc);
348 dstIdx =
FFMAX(num_ydesc, num_cdesc);
381 for (i = 0; i < c->
numDesc; ++i)
int ff_init_gamma_convert(SwsFilterDescriptor *desc, SwsSlice *src, uint16_t *table)
initializes gamma conversion descriptor
int ff_init_desc_fmt_convert(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint32_t *pal)
initializes lum pixel format conversion descriptor
int chrSrcH
Height of source chroma planes.
int ff_free_filters(SwsContext *c)
int ff_init_slice_from_src(SwsSlice *s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH, int relative)
int h_chr_sub_sample
horizontal chroma subsampling factor
Struct which holds all necessary data for processing a slice.
static void free_lines(SwsSlice *s)
int srcH
Height of source luma/alpha planes.
int ff_rotate_slice(SwsSlice *s, int lum, int chr)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static void get_min_buffer_size(SwsContext *c, int *out_lum_size, int *out_chr_size)
int chrDstVSubSample
Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in destination i...
void(* readChrPlanar)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv)
uint8_t ** line
line buffer
int alpha
Flag for processing alpha channel.
int vChrFilterSize
Vertical filter size for chroma pixels.
static av_cold int end(AVCodecContext *avctx)
int v_chr_sub_sample
vertical chroma subsampling factor
void(* lumToYV12)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal)
Unscaled conversion of luma plane to YV12 for horizontal scaler.
enum AVPixelFormat dstFormat
Destination pixel format.
int ff_init_desc_no_chr(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst)
int chrSrcHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source imag...
int32_t * vChrFilterPos
Array of vertical filter starting positions for each dst[i] for chroma planes.
int dstH
Height of destination luma/alpha planes.
int ff_init_desc_cfmt_convert(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint32_t *pal)
initializes chr pixel format conversion descriptor
int32_t * hChrFilterPos
Array of horizontal filter starting positions for each dst[i] for chroma planes.
int hLumFilterSize
Horizontal filter size for luma/alpha pixels.
static int alloc_lines(SwsSlice *s, int size, int width)
int ff_init_vscale(SwsContext *c, SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst)
initializes vertical scaling descriptors
SwsPlane plane[MAX_SLICE_PLANES]
color planes
static int alloc_slice(SwsSlice *s, enum AVPixelFormat fmt, int lumLines, int chrLines, int h_sub_sample, int v_sub_sample, int ring)
int32_t * hLumFilterPos
Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
int hChrFilterSize
Horizontal filter size for chroma pixels.
int sliceH
number of lines
int ff_init_desc_hscale(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint16_t *filter, int *filter_pos, int filter_size, int xInc)
initializes lum horizontal scaling descriptor
static double lum(void *priv, double x, double y, int plane)
int ff_init_desc_chscale(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint16_t *filter, int *filter_pos, int filter_size, int xInc)
initializes chr horizontal scaling descriptor
int available_lines
max number of lines that can be hold by this plane
void(* readLumPlanar)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv)
Functions to read planar input, such as planar RGB, and convert internally to Y/UV/A.
struct SwsFilterDescriptor * desc
int dstW
Width of destination luma/alpha planes.
int needs_hcscale
Set if there are chroma planes to be converted.
int32_t * vLumFilterPos
Array of vertical filter starting positions for each dst[i] for luma/alpha planes.
int should_free_lines
flag to identify if there are dynamic allocated lines
int is_ring
flag to identify if this slice is a ring buffer
int width
Slice line width.
int chrDstH
Height of destination chroma planes.
Struct which defines a slice of an image to be scaled or an output for a scaled slice.
int vLumFilterSize
Vertical filter size for luma/alpha pixels.
static void free_slice(SwsSlice *s)
static av_always_inline int isPlanarYUV(enum AVPixelFormat pix_fmt)
void * instance
Filter instance data.
int ff_init_filters(SwsContext *c)
int16_t * hLumFilter
Array of horizontal filter coefficients for luma/alpha planes.
static void fill_ones(SwsSlice *s, int n, int is16bit)
GLint GLenum GLboolean GLsizei stride
void(* readAlpPlanar)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv)
enum AVPixelFormat srcFormat
Source pixel format.
enum AVPixelFormat fmt
planes pixel format
uint8_t ** tmp
Tmp line buffer used by mmx code.
void(* alpToYV12)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal)
Unscaled conversion of alpha plane to YV12 for horizontal scaler.
void(* chrToYV12)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal)
Unscaled conversion of chroma planes to YV12 for horizontal scaler.
int32_t input_rgb2yuv_table[16+40 *4]
static void * av_mallocz_array(size_t nmemb, size_t size)
static av_always_inline int usePal(enum AVPixelFormat pix_fmt)
int16_t * hChrFilter
Array of horizontal filter coefficients for chroma planes.
int sliceY
index of first line
int chrDstHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination...
int srcW
Width of source luma/alpha planes.
int chrSrcVSubSample
Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image...
AVPixelFormat
Pixel format.
static av_cold void cleanup(FlashSV2Context *s)