#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 | CONV_IS(src, dst) (srcFormat == PIX_FMT_##src && dstFormat == PIX_FMT_##dst) |
#define | DITHER_COPY(dst, dstStride, src, srcStride, bswap, dbswap) |
#define | COPY_UP(r, w) |
Functions | |
static void | fillPlane (uint8_t *plane, int stride, int width, int height, int y, uint8_t val) |
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 | palToRgbWrapper (SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]) |
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) |
Sets 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 (uint8_t *data[4], enum PixelFormat pix_fmt, const int linesizes[4]) |
int | sws_scale (SwsContext *c, const uint8_t *const src[], 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) |
Converts an 8bit 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) |
Converts an 8bit paletted frame into a frame with a color depth of 24 bits. |
#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 rgbToRgbWrapper().
#define COPY_UP | ( | r, | |||
w | ) |
Value:
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().
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 415 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 isRGBA32 | ( | x | ) |
Value:
( \ (x) == PIX_FMT_ARGB \ || (x) == PIX_FMT_RGBA \ || (x) == PIX_FMT_BGRA \ || (x) == PIX_FMT_ABGR \ )
Definition at line 258 of file swscale_unscaled.c.
Referenced by 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.
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 | ( | uint8_t * | 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 58 of file swscale_unscaled.c.
Referenced by planarToNv12Wrapper(), and yvu9ToYv12Wrapper().
void ff_get_unscaled_swscale | ( | SwsContext * | c | ) |
Sets c->swScale to an unscaled converter if one exists for the specific source and destination formats, bit depths, flags, etc.
Definition at line 550 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 48 of file swscale_unscaled.c.
static void gray8aToPacked24 | ( | const uint8_t * | src, | |
uint8_t * | dst, | |||
int | num_pixels, | |||
const uint8_t * | palette | |||
) | [static] |
static void gray8aToPacked32 | ( | const uint8_t * | src, | |
uint8_t * | dst, | |||
int | num_pixels, | |||
const uint8_t * | palette | |||
) | [static] |
static void gray8aToPacked32_1 | ( | const uint8_t * | src, | |
uint8_t * | dst, | |||
int | num_pixels, | |||
const uint8_t * | palette | |||
) | [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 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 | |||
) |
Converts an 8bit 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 838 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 | |||
) |
Converts an 8bit 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 829 of file swscale_unscaled.c.
Referenced by palToRgbWrapper(), and put_image().
int sws_scale | ( | SwsContext * | c, | |
const uint8_t *const | src[], | |||
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.
Scales the image slice in srcSlice and puts the resulting scaled slice in the image in dst.
Assumes planar YUV to be in YUV order instead of YVU.
Definition at line 689 of file swscale_unscaled.c.
Referenced by blur(), do_video_out(), doTest(), draw_slice(), main(), queue_picture(), scale_image(), scale_slice(), 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] |