#include <inttypes.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include "config.h"
#include <assert.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"
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 | 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 | 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 705 of file swscale_unscaled.c.
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 861 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 findRgbConvFn().
#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 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 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 525 of file swscale_unscaled.c.
static int bgr24ToYv12Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
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 866 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 void fillPlane16 | ( | uint8_t * | plane, | |
int | stride, | |||
int | width, | |||
int | height, | |||
int | y, | |||
int | alpha, | |||
int | bits | |||
) | [static] |
static rgbConvFn findRgbConvFn | ( | SwsContext * | c | ) | [static] |
Definition at line 526 of file swscale_unscaled.c.
Referenced by ff_get_unscaled_swscale(), and rgbToRgbWrapper().
static int packed_16bpc_bswap | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
static int packedCopyWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
static int palToRgbWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
static int planarCopyWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
static int planarRgbToRgbWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
static int planarToNv12Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int planarToUyvyWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int planarToYuy2Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static void reset_ptr | ( | const uint8_t * | src[], | |
int | format | |||
) | [static] |
static int rgbToRgbWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
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 1187 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 1177 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 1018 of file swscale_unscaled.c.
Referenced by blur(), doTest(), ff_scale_image(), main(), queue_picture(), scale_slice(), wrap(), and write_video_frame().
static int uyvyToYuv420Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int uyvyToYuv422Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int yuv422pToUyvyWrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int yuv422pToYuy2Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int yuyvToYuv420Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int yuyvToYuv422Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dstParam[], | |||
int | dstStride[] | |||
) | [static] |
static int yvu9ToYv12Wrapper | ( | SwsContext * | c, | |
const uint8_t * | src[], | |||
int | srcStride[], | |||
int | srcSliceY, | |||
int | srcSliceH, | |||
uint8_t * | dst[], | |||
int | dstStride[] | |||
) | [static] |
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.