#include <inttypes.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include "config.h"
#include "swscale.h"
#include "swscale_internal.h"
#include "rgb2rgb.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/cpu.h"
#include "libavutil/avutil.h"
#include "libavutil/mathematics.h"
#include "libavutil/bswap.h"
#include "libavutil/pixdesc.h"
#include "libavutil/avassert.h"
Go to the source code of this file.
Defines | |
#define | RGB2YUV_SHIFT 15 |
#define | BY ( (int) (0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | BV (-(int) (0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | BU ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | GY ( (int) (0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | GV (-(int) (0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | GU (-(int) (0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | RY ( (int) (0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | RV ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | RU (-(int) (0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
#define | isRGBA32(x) |
#define | isRGBA64(x) |
#define | isRGB48(x) |
#define | IS_NOT_NE(bpp, fmt) |
#define | CONV_IS(src, dst) (srcFormat == PIX_FMT_##src && dstFormat == PIX_FMT_##dst) |
#define | DITHER_COPY(dst, dstStride, src, srcStride, bswap, dbswap) |
#define | COPY816(w) |
#define | FAST_COPY_UP(shift) |
#define | COPY_UP(r, w) |
#define | IS_DIFFERENT_ENDIANESS(src_fmt, dst_fmt, pix_fmt) |
#define | isByteRGB(f) |
#define | isPlanarGray(x) (isGray(x) && (x) != PIX_FMT_GRAY8A) |
Typedefs | |
typedef void(* | rgbConvFn )(const uint8_t *, uint8_t *, int) |
Functions | |
static void | fillPlane (uint8_t *plane, int stride, int width, int height, int y, uint8_t val) |
static void | fillPlane16 (uint8_t *plane, int stride, int width, int height, int y, int alpha, int bits) |
static void | copyPlane (const uint8_t *src, int srcStride, int srcSliceY, int srcSliceH, int width, uint8_t *dst, int dstStride) |
static int | planarToNv12Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | planarToYuy2Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | planarToUyvyWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | yuv422pToYuy2Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | yuv422pToUyvyWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | yuyvToYuv420Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | yuyvToYuv422Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | uyvyToYuv420Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static int | uyvyToYuv422Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[]) |
static void | gray8aToPacked32 (const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette) |
static void | gray8aToPacked32_1 (const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette) |
static void | gray8aToPacked24 (const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette) |
static int | packed_16bpc_bswap (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static int | palToRgbWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static void | gbr24ptopacked24 (const uint8_t *src[], int srcStride[], uint8_t *dst, int dstStride, int srcSliceH, int width) |
static void | gbr24ptopacked32 (const uint8_t *src[], int srcStride[], uint8_t *dst, int dstStride, int srcSliceH, int alpha_first, int width) |
static int | planarRgbToRgbWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static rgbConvFn | findRgbConvFn (SwsContext *c) |
static int | rgbToRgbWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static int | bgr24ToYv12Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static int | yvu9ToYv12Wrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static int | packedCopyWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
static int | planarCopyWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
void | ff_get_unscaled_swscale (SwsContext *c) |
Set c->swScale to an unscaled converter if one exists for the specific source and destination formats, bit depths, flags, etc. | |
static void | reset_ptr (const uint8_t *src[], int format) |
static int | check_image_pointers (const uint8_t *const data[4], enum PixelFormat pix_fmt, const int linesizes[4]) |
int attribute_align_arg | sws_scale (struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]) |
swscale wrapper, so we don't need to export the SwsContext. | |
void | sws_convertPalette8ToPacked32 (const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette) |
Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. | |
void | sws_convertPalette8ToPacked24 (const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette) |
Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. | |
Variables | |
const uint8_t | dithers [8][8][8] |
static const uint8_t | flat64 [8] = {64,64,64,64,64,64,64,64} |
const uint16_t | dither_scale [15][16] |
#define BU ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 40 of file swscale_unscaled.c.
#define BV (-(int) (0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 39 of file swscale_unscaled.c.
#define BY ( (int) (0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 38 of file swscale_unscaled.c.
Referenced by findRgbConvFn().
#define COPY816 | ( | w | ) |
Value:
if(shiftonly){\ for (j = 0; j < length; j++)\ w(&dstPtr2[j], srcPtr[j]<<(dst_depth-8));\ }else{\ for (j = 0; j < length; j++)\ w(&dstPtr2[j], (srcPtr[j]<<(dst_depth-8)) |\ (srcPtr[j]>>(2*8-dst_depth)));\ }
Referenced by planarCopyWrapper().
#define COPY_UP | ( | r, | |||
w | ) |
Value:
if(shiftonly){\ for (j = 0; j < length; j++){ \ unsigned int v= r(&srcPtr2[j]);\ w(&dstPtr2[j], v<<(dst_depth-src_depth));\ }\ }else{\ for (j = 0; j < length; j++){ \ unsigned int v= r(&srcPtr2[j]);\ w(&dstPtr2[j], (v<<(dst_depth-src_depth)) | \ (v>>(2*src_depth-dst_depth)));\ }\ }
Referenced by planarCopyWrapper().
#define DITHER_COPY | ( | dst, | |||
dstStride, | |||||
src, | |||||
srcStride, | |||||
bswap, | |||||
dbswap | ) |
Value:
uint16_t scale= dither_scale[dst_depth-1][src_depth-1];\ int shift= src_depth-dst_depth + dither_scale[src_depth-2][dst_depth-1];\ for (i = 0; i < height; i++) {\ const uint8_t *dither= dithers[src_depth-9][i&7];\ for (j = 0; j < length-7; j+=8){\ dst[j+0] = dbswap((bswap(src[j+0]) + dither[0])*scale>>shift);\ dst[j+1] = dbswap((bswap(src[j+1]) + dither[1])*scale>>shift);\ dst[j+2] = dbswap((bswap(src[j+2]) + dither[2])*scale>>shift);\ dst[j+3] = dbswap((bswap(src[j+3]) + dither[3])*scale>>shift);\ dst[j+4] = dbswap((bswap(src[j+4]) + dither[4])*scale>>shift);\ dst[j+5] = dbswap((bswap(src[j+5]) + dither[5])*scale>>shift);\ dst[j+6] = dbswap((bswap(src[j+6]) + dither[6])*scale>>shift);\ dst[j+7] = dbswap((bswap(src[j+7]) + dither[7])*scale>>shift);\ }\ for (; j < length; j++)\ dst[j] = dbswap((bswap(src[j]) + dither[j&7])*scale>>shift);\ dst += dstStride;\ src += srcStride;\ }
Definition at line 752 of file swscale_unscaled.c.
Referenced by planarCopyWrapper().
#define FAST_COPY_UP | ( | shift | ) |
Value:
for (j = 0; j < length - 1; j += 2) { \ uint32_t v = AV_RN32A(srcPtr2 + j); \ AV_WN32A(dstPtr2 + j, v << shift); \ } \ length &= 1;
Referenced by planarCopyWrapper().
#define GU (-(int) (0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 43 of file swscale_unscaled.c.
#define GV (-(int) (0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 42 of file swscale_unscaled.c.
#define GY ( (int) (0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 41 of file swscale_unscaled.c.
#define IS_DIFFERENT_ENDIANESS | ( | src_fmt, | |||
dst_fmt, | |||||
pix_fmt | ) |
Value:
((src_fmt == pix_fmt ## BE && dst_fmt == pix_fmt ## LE) || \ (src_fmt == pix_fmt ## LE && dst_fmt == pix_fmt ## BE))
Definition at line 935 of file swscale_unscaled.c.
Referenced by ff_get_unscaled_swscale().
#define IS_NOT_NE | ( | bpp, | |||
fmt | ) |
Value:
(((bpp + 7) >> 3) == 2 && \ (!(av_pix_fmt_descriptors[fmt].flags & PIX_FMT_BE) != !HAVE_BIGENDIAN))
Referenced by rgbToRgbWrapper().
#define isByteRGB | ( | f | ) |
Value:
(\ f == PIX_FMT_RGB32 ||\ f == PIX_FMT_RGB32_1 ||\ f == PIX_FMT_RGB24 ||\ f == PIX_FMT_BGR32 ||\ f == PIX_FMT_BGR32_1 ||\ f == PIX_FMT_BGR24)
Referenced by ff_get_unscaled_swscale().
#define isPlanarGray | ( | x | ) | (isGray(x) && (x) != PIX_FMT_GRAY8A) |
Referenced by ff_get_unscaled_swscale().
#define isRGB48 | ( | x | ) |
Value:
( \ (x) == PIX_FMT_RGB48LE \ || (x) == PIX_FMT_RGB48BE \ || (x) == PIX_FMT_BGR48LE \ || (x) == PIX_FMT_BGR48BE \ )
Definition at line 531 of file swscale_unscaled.c.
Referenced by findRgbConvFn().
#define isRGBA32 | ( | x | ) |
Value:
( \ (x) == PIX_FMT_ARGB \ || (x) == PIX_FMT_RGBA \ || (x) == PIX_FMT_BGRA \ || (x) == PIX_FMT_ABGR \ )
Definition at line 517 of file swscale_unscaled.c.
Referenced by findRgbConvFn(), and rgbToRgbWrapper().
#define isRGBA64 | ( | x | ) |
Value:
( \ (x) == PIX_FMT_RGBA64LE \ || (x) == PIX_FMT_RGBA64BE \ || (x) == PIX_FMT_BGRA64LE \ || (x) == PIX_FMT_BGRA64BE \ )
Definition at line 524 of file swscale_unscaled.c.
Referenced by findRgbConvFn().
#define RGB2YUV_SHIFT 15 |
Definition at line 37 of file swscale_unscaled.c.
#define RU (-(int) (0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 46 of file swscale_unscaled.c.
#define RV ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 45 of file swscale_unscaled.c.
#define RY ( (int) (0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) |
Definition at line 44 of file swscale_unscaled.c.
Definition at line 539 of file swscale_unscaled.c.
static int check_image_pointers | ( | const uint8_t *const | data[4], | |
enum PixelFormat | pix_fmt, | |||
const int | linesizes[4] | |||
) | [static] |
static void copyPlane | ( | const uint8_t * | src, | |
int | srcStride, | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
int | width, | |||
uint8_t * | dst, | |||
int | dstStride | |||
) | [static] |
Definition at line 169 of file swscale_unscaled.c.
Referenced by planarToNv12Wrapper(), and yvu9ToYv12Wrapper().
void ff_get_unscaled_swscale | ( | SwsContext * | c | ) |
Set c->swScale to an unscaled converter if one exists for the specific source and destination formats, bit depths, flags, etc.
Definition at line 940 of file swscale_unscaled.c.
Referenced by sws_init_context().
static void fillPlane | ( | uint8_t * | plane, | |
int | stride, | |||
int | width, | |||
int | height, | |||
int | y, | |||
uint8_t | val | |||
) | [static] |
Definition at line 144 of file swscale_unscaled.c.
static rgbConvFn findRgbConvFn | ( | SwsContext * | c | ) | [static] |
Definition at line 540 of file swscale_unscaled.c.
Referenced by ff_get_unscaled_swscale(), and rgbToRgbWrapper().
void sws_convertPalette8ToPacked24 | ( | const uint8_t * | src, | |
uint8_t * | dst, | |||
int | num_pixels, | |||
const uint8_t * | palette | |||
) |
Convert an 8-bit paletted frame into a frame with a color depth of 24 bits.
With the palette format "ABCD", the destination frame ends up with the format "ABC".
src | source frame buffer | |
dst | destination frame buffer | |
num_pixels | number of pixels to convert | |
palette | array with [256] entries, which must match color arrangement (RGB or BGR) of src |
Definition at line 1263 of file swscale_unscaled.c.
Referenced by palToRgbWrapper(), and put_image().
void sws_convertPalette8ToPacked32 | ( | const uint8_t * | src, | |
uint8_t * | dst, | |||
int | num_pixels, | |||
const uint8_t * | palette | |||
) |
Convert an 8-bit paletted frame into a frame with a color depth of 32 bits.
The output frame will have the same packed format as the palette.
src | source frame buffer | |
dst | destination frame buffer | |
num_pixels | number of pixels to convert | |
palette | array with [256] entries, which must match color arrangement (RGB or BGR) of src |
Definition at line 1253 of file swscale_unscaled.c.
Referenced by palToRgbWrapper(), and put_image().
int attribute_align_arg sws_scale | ( | struct SwsContext * | c, | |
const uint8_t *const | srcSlice[], | |||
const int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t *const | dst[], | |||
const int | dstStride[] | |||
) |
swscale wrapper, so we don't need to export the SwsContext.
Scale the image slice in srcSlice and put the resulting scaled slice in the image in dst.
Assumes planar YUV to be in YUV order instead of YVU.
Definition at line 1094 of file swscale_unscaled.c.
Referenced by blur(), doTest(), ff_scale_image(), main(), queue_picture(), scale_slice(), wrap(), and write_video_frame().
const uint16_t dither_scale[15][16] |
Initial value:
{ { 2, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,}, { 2, 3, 7, 7, 13, 13, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,}, { 3, 3, 4, 15, 15, 29, 57, 57, 57, 113, 113, 113, 113, 113, 113, 113,}, { 3, 4, 4, 5, 31, 31, 61, 121, 241, 241, 241, 241, 481, 481, 481, 481,}, { 3, 4, 5, 5, 6, 63, 63, 125, 249, 497, 993, 993, 993, 993, 993, 1985,}, { 3, 5, 6, 6, 6, 7, 127, 127, 253, 505, 1009, 2017, 4033, 4033, 4033, 4033,}, { 3, 5, 6, 7, 7, 7, 8, 255, 255, 509, 1017, 2033, 4065, 8129,16257,16257,}, { 3, 5, 6, 8, 8, 8, 8, 9, 511, 511, 1021, 2041, 4081, 8161,16321,32641,}, { 3, 5, 7, 8, 9, 9, 9, 9, 10, 1023, 1023, 2045, 4089, 8177,16353,32705,}, { 3, 5, 7, 8, 10, 10, 10, 10, 10, 11, 2047, 2047, 4093, 8185,16369,32737,}, { 3, 5, 7, 8, 10, 11, 11, 11, 11, 11, 12, 4095, 4095, 8189,16377,32753,}, { 3, 5, 7, 9, 10, 12, 12, 12, 12, 12, 12, 13, 8191, 8191,16381,32761,}, { 3, 5, 7, 9, 10, 12, 13, 13, 13, 13, 13, 13, 14,16383,16383,32765,}, { 3, 5, 7, 9, 10, 12, 14, 14, 14, 14, 14, 14, 14, 15,32767,32767,}, { 3, 5, 7, 9, 11, 12, 14, 15, 15, 15, 15, 15, 15, 15, 16,65535,}, }
Definition at line 125 of file swscale_unscaled.c.
Definition at line 48 of file swscale_unscaled.c.
Definition at line 123 of file swscale_unscaled.c.