| @@ -57,24 +57,122 @@ typedef int (*SwsFunc)(struct SwsContext *context, const uint8_t* src[], | |||||
| int srcStride[], int srcSliceY, int srcSliceH, | int srcStride[], int srcSliceY, int srcSliceH, | ||||
| uint8_t* dst[], int dstStride[]); | uint8_t* dst[], int dstStride[]); | ||||
| /** | |||||
| * Write one line of horizontally scaled Y/U/V/A to planar output | |||||
| * without any additional vertical scaling (or point-scaling). | |||||
| * | |||||
| * @param c SWS scaling context | |||||
| * @param lumSrc scaled luma (Y) source data, 15bit for 8bit output | |||||
| * @param chrUSrc scaled chroma (U) source data, 15bit for 8bit output | |||||
| * @param chrVSrc scaled chroma (V) source data, 15bit for 8bit output | |||||
| * @param alpSrc scaled alpha (A) source data, 15bit for 8bit output | |||||
| * @param dest pointer to the 4 output planes (Y/U/V/A) | |||||
| * @param dstW width of dest[0], dest[3], lumSrc and alpSrc in pixels | |||||
| * @param chrDstW width of dest[1], dest[2], chrUSrc and chrVSrc | |||||
| */ | |||||
| typedef void (*yuv2planar1_fn) (struct SwsContext *c, | typedef void (*yuv2planar1_fn) (struct SwsContext *c, | ||||
| const int16_t *lumSrc, const int16_t *chrUSrc, | const int16_t *lumSrc, const int16_t *chrUSrc, | ||||
| const int16_t *chrVSrc, const int16_t *alpSrc, | const int16_t *chrVSrc, const int16_t *alpSrc, | ||||
| uint8_t *dest[4], int dstW, int chrDstW); | uint8_t *dest[4], int dstW, int chrDstW); | ||||
| /** | |||||
| * Write one line of horizontally scaled Y/U/V/A to planar output | |||||
| * with multi-point vertical scaling between input pixels. | |||||
| * | |||||
| * @param c SWS scaling context | |||||
| * @param lumFilter vertical luma/alpha scaling coefficients, 12bit [0,4096] | |||||
| * @param lumSrc scaled luma (Y) source data, 15bit for 8bit output | |||||
| * @param lumFilterSize number of vertical luma/alpha input lines to scale | |||||
| * @param chrFilter vertical chroma scaling coefficients, 12bit [0,4096] | |||||
| * @param chrUSrc scaled chroma (U) source data, 15bit for 8bit output | |||||
| * @param chrVSrc scaled chroma (V) source data, 15bit for 8bit output | |||||
| * @param chrFilterSize number of vertical chroma input lines to scale | |||||
| * @param alpSrc scaled alpha (A) source data, 15bit for 8bit output | |||||
| * @param dest pointer to the 4 output planes (Y/U/V/A) | |||||
| * @param dstW width of dest[0], dest[3], lumSrc and alpSrc in pixels | |||||
| * @param chrDstW width of dest[1], dest[2], chrUSrc and chrVSrc | |||||
| */ | |||||
| typedef void (*yuv2planarX_fn) (struct SwsContext *c, const int16_t *lumFilter, | typedef void (*yuv2planarX_fn) (struct SwsContext *c, const int16_t *lumFilter, | ||||
| const int16_t **lumSrc, int lumFilterSize, | const int16_t **lumSrc, int lumFilterSize, | ||||
| const int16_t *chrFilter, const int16_t **chrUSrc, | const int16_t *chrFilter, const int16_t **chrUSrc, | ||||
| const int16_t **chrVSrc, int chrFilterSize, | const int16_t **chrVSrc, int chrFilterSize, | ||||
| const int16_t **alpSrc, uint8_t *dest[4], | const int16_t **alpSrc, uint8_t *dest[4], | ||||
| int dstW, int chrDstW); | int dstW, int chrDstW); | ||||
| /** | |||||
| * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB | |||||
| * output without any additional vertical scaling (or point-scaling). Note | |||||
| * that this function may do chroma scaling, see the "uvalpha" argument. | |||||
| * | |||||
| * @param c SWS scaling context | |||||
| * @param lumSrc scaled luma (Y) source data, 15bit for 8bit output | |||||
| * @param chrUSrc scaled chroma (U) source data, 15bit for 8bit output | |||||
| * @param chrVSrc scaled chroma (V) source data, 15bit for 8bit output | |||||
| * @param alpSrc scaled alpha (A) source data, 15bit for 8bit output | |||||
| * @param dest pointer to the output plane | |||||
| * @param dstW width of lumSrc and alpSrc in pixels, number of pixels | |||||
| * to write into dest[] | |||||
| * @param uvalpha chroma scaling coefficient for the second line of chroma | |||||
| * pixels, either 2048 or 0. If 0, one chroma input is used | |||||
| * for 2 output pixels (or if the SWS_FLAG_FULL_CHR_INT flag | |||||
| * is set, it generates 1 output pixel). If 2048, two chroma | |||||
| * input pixels should be averaged for 2 output pixels (this | |||||
| * only happens if SWS_FLAG_FULL_CHR_INT is not set) | |||||
| * @param y vertical line number for this output. This does not need | |||||
| * to be used to calculate the offset in the destination, | |||||
| * but can be used to generate comfort noise using dithering | |||||
| * for some output formats. | |||||
| */ | |||||
| typedef void (*yuv2packed1_fn) (struct SwsContext *c, const int16_t *lumSrc, | typedef void (*yuv2packed1_fn) (struct SwsContext *c, const int16_t *lumSrc, | ||||
| const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], | const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], | ||||
| const int16_t *alpSrc, uint8_t *dest, | const int16_t *alpSrc, uint8_t *dest, | ||||
| int dstW, int uvalpha, int y); | int dstW, int uvalpha, int y); | ||||
| /** | |||||
| * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB | |||||
| * output by doing bilinear scaling between two input lines. | |||||
| * | |||||
| * @param c SWS scaling context | |||||
| * @param lumSrc scaled luma (Y) source data, 15bit for 8bit output | |||||
| * @param chrUSrc scaled chroma (U) source data, 15bit for 8bit output | |||||
| * @param chrVSrc scaled chroma (V) source data, 15bit for 8bit output | |||||
| * @param alpSrc scaled alpha (A) source data, 15bit for 8bit output | |||||
| * @param dest pointer to the output plane | |||||
| * @param dstW width of lumSrc and alpSrc in pixels, number of pixels | |||||
| * to write into dest[] | |||||
| * @param yalpha luma/alpha scaling coefficients for the second input line. | |||||
| * The first line's coefficients can be calculated by using | |||||
| * 4096 - yalpha | |||||
| * @param uvalpha chroma scaling coefficient for the second input line. The | |||||
| * first line's coefficients can be calculated by using | |||||
| * 4096 - uvalpha | |||||
| * @param y vertical line number for this output. This does not need | |||||
| * to be used to calculate the offset in the destination, | |||||
| * but can be used to generate comfort noise using dithering | |||||
| * for some output formats. | |||||
| */ | |||||
| typedef void (*yuv2packed2_fn) (struct SwsContext *c, const int16_t *lumSrc[2], | typedef void (*yuv2packed2_fn) (struct SwsContext *c, const int16_t *lumSrc[2], | ||||
| const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], | const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], | ||||
| const int16_t *alpSrc[2], uint8_t *dest, | const int16_t *alpSrc[2], uint8_t *dest, | ||||
| int dstW, int yalpha, int uvalpha, int y); | int dstW, int yalpha, int uvalpha, int y); | ||||
| /** | |||||
| * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB | |||||
| * output by doing multi-point vertical scaling between input pixels. | |||||
| * | |||||
| * @param c SWS scaling context | |||||
| * @param lumFilter vertical luma/alpha scaling coefficients, 12bit [0,4096] | |||||
| * @param lumSrc scaled luma (Y) source data, 15bit for 8bit output | |||||
| * @param lumFilterSize number of vertical luma/alpha input lines to scale | |||||
| * @param chrFilter vertical chroma scaling coefficients, 12bit [0,4096] | |||||
| * @param chrUSrc scaled chroma (U) source data, 15bit for 8bit output | |||||
| * @param chrVSrc scaled chroma (V) source data, 15bit for 8bit output | |||||
| * @param chrFilterSize number of vertical chroma input lines to scale | |||||
| * @param alpSrc scaled alpha (A) source data, 15bit for 8bit output | |||||
| * @param dest pointer to the output plane | |||||
| * @param dstW width of lumSrc and alpSrc in pixels, number of pixels | |||||
| * to write into dest[] | |||||
| * @param y vertical line number for this output. This does not need | |||||
| * to be used to calculate the offset in the destination, | |||||
| * but can be used to generate comfort noise using dithering | |||||
| * or some output formats. | |||||
| */ | |||||
| typedef void (*yuv2packedX_fn) (struct SwsContext *c, const int16_t *lumFilter, | typedef void (*yuv2packedX_fn) (struct SwsContext *c, const int16_t *lumFilter, | ||||
| const int16_t **lumSrc, int lumFilterSize, | const int16_t **lumSrc, int lumFilterSize, | ||||
| const int16_t *chrFilter, const int16_t **chrUSrc, | const int16_t *chrFilter, const int16_t **chrUSrc, | ||||