#define MAX_FILTER_SIZE 256
-#define VOFW 2048
+#if ARCH_X86
+#define VOFW 5120
+#else
+#define VOFW 2048 // faster on PPC and not tested on others
+#endif
+
#define VOF (VOFW*2)
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
#define ALT32_CORR (-1)
#else
#define ALT32_CORR 1
uint8_t* dst[], int dstStride[]);
/* This struct should be aligned on at least a 32-byte boundary. */
-typedef struct SwsContext{
+typedef struct SwsContext {
/**
* info on struct for av_log
*/
enum PixelFormat dstFormat, srcFormat; ///< format 4:2:0 type is always YV12
int origDstFormat, origSrcFormat; ///< format
int chrSrcHSubSample, chrSrcVSubSample;
- int chrIntHSubSample, chrIntVSubSample;
int chrDstHSubSample, chrDstVSubSample;
int vChrDrop;
int sliceDir;
int vLumBufSize;
int vChrBufSize;
- uint8_t *funnyYCode;
- uint8_t *funnyUVCode;
+ int lumMmx2FilterCodeSize;
+ int chrMmx2FilterCodeSize;
+ uint8_t *lumMmx2FilterCode;
+ uint8_t *chrMmx2FilterCode;
int32_t *lumMmx2FilterPos;
int32_t *chrMmx2FilterPos;
int16_t *lumMmx2Filter;
#define Y_TEMP "11*8+4*4*256*2+40"
#define ALP_MMX_FILTER_OFFSET "11*8+4*4*256*2+48"
- uint64_t redDither __attribute__((aligned(8)));
- uint64_t greenDither __attribute__((aligned(8)));
- uint64_t blueDither __attribute__((aligned(8)));
-
- uint64_t yCoeff __attribute__((aligned(8)));
- uint64_t vrCoeff __attribute__((aligned(8)));
- uint64_t ubCoeff __attribute__((aligned(8)));
- uint64_t vgCoeff __attribute__((aligned(8)));
- uint64_t ugCoeff __attribute__((aligned(8)));
- uint64_t yOffset __attribute__((aligned(8)));
- uint64_t uOffset __attribute__((aligned(8)));
- uint64_t vOffset __attribute__((aligned(8)));
+ DECLARE_ALIGNED(8, uint64_t, redDither);
+ DECLARE_ALIGNED(8, uint64_t, greenDither);
+ DECLARE_ALIGNED(8, uint64_t, blueDither);
+
+ DECLARE_ALIGNED(8, uint64_t, yCoeff);
+ DECLARE_ALIGNED(8, uint64_t, vrCoeff);
+ DECLARE_ALIGNED(8, uint64_t, ubCoeff);
+ DECLARE_ALIGNED(8, uint64_t, vgCoeff);
+ DECLARE_ALIGNED(8, uint64_t, ugCoeff);
+ DECLARE_ALIGNED(8, uint64_t, yOffset);
+ DECLARE_ALIGNED(8, uint64_t, uOffset);
+ DECLARE_ALIGNED(8, uint64_t, vOffset);
int32_t lumMmxFilter[4*MAX_FILTER_SIZE];
int32_t chrMmxFilter[4*MAX_FILTER_SIZE];
int dstW;
- uint64_t esp __attribute__((aligned(8)));
- uint64_t vRounder __attribute__((aligned(8)));
- uint64_t u_temp __attribute__((aligned(8)));
- uint64_t v_temp __attribute__((aligned(8)));
- uint64_t y_temp __attribute__((aligned(8)));
+ DECLARE_ALIGNED(8, uint64_t, esp);
+ DECLARE_ALIGNED(8, uint64_t, vRounder);
+ DECLARE_ALIGNED(8, uint64_t, u_temp);
+ DECLARE_ALIGNED(8, uint64_t, v_temp);
+ DECLARE_ALIGNED(8, uint64_t, y_temp);
int32_t alpMmxFilter[4*MAX_FILTER_SIZE];
#if HAVE_ALTIVEC
#endif
#if ARCH_BFIN
- uint32_t oy __attribute__((aligned(4)));
- uint32_t oc __attribute__((aligned(4)));
- uint32_t zero __attribute__((aligned(4)));
- uint32_t cy __attribute__((aligned(4)));
- uint32_t crv __attribute__((aligned(4)));
- uint32_t rmask __attribute__((aligned(4)));
- uint32_t cbu __attribute__((aligned(4)));
- uint32_t bmask __attribute__((aligned(4)));
- uint32_t cgu __attribute__((aligned(4)));
- uint32_t cgv __attribute__((aligned(4)));
- uint32_t gmask __attribute__((aligned(4)));
+ DECLARE_ALIGNED(4, uint32_t, oy);
+ DECLARE_ALIGNED(4, uint32_t, oc);
+ DECLARE_ALIGNED(4, uint32_t, zero);
+ DECLARE_ALIGNED(4, uint32_t, cy);
+ DECLARE_ALIGNED(4, uint32_t, crv);
+ DECLARE_ALIGNED(4, uint32_t, rmask);
+ DECLARE_ALIGNED(4, uint32_t, cbu);
+ DECLARE_ALIGNED(4, uint32_t, bmask);
+ DECLARE_ALIGNED(4, uint32_t, cgu);
+ DECLARE_ALIGNED(4, uint32_t, cgv);
+ DECLARE_ALIGNED(4, uint32_t, gmask);
#endif
#if HAVE_VIS
- uint64_t sparc_coeffs[10] __attribute__((aligned(8)));
+ DECLARE_ALIGNED(8, uint64_t, sparc_coeffs[10]);
#endif
/* function pointers for swScale() */
SwsFunc ff_yuv2rgb_get_func_ptr_bfin(SwsContext *c);
void ff_bfin_get_unscaled_swscale(SwsContext *c);
void ff_yuv2packedX_altivec(SwsContext *c,
- int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
- int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
+ const int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
+ const int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
uint8_t *dest, int dstW, int dstY);
-const char *sws_format_name(int format);
+const char *sws_format_name(enum PixelFormat format);
//FIXME replace this with something faster
+#define is16BPS(x) ( \
+ (x)==PIX_FMT_GRAY16BE \
+ || (x)==PIX_FMT_GRAY16LE \
+ || (x)==PIX_FMT_RGB48BE \
+ || (x)==PIX_FMT_RGB48LE \
+ || (x)==PIX_FMT_YUV420P16LE \
+ || (x)==PIX_FMT_YUV422P16LE \
+ || (x)==PIX_FMT_YUV444P16LE \
+ || (x)==PIX_FMT_YUV420P16BE \
+ || (x)==PIX_FMT_YUV422P16BE \
+ || (x)==PIX_FMT_YUV444P16BE \
+ )
#define isBE(x) ((x)&1)
-#define isPlanarYUV(x) ( \
+#define isPlanar8YUV(x) ( \
(x)==PIX_FMT_YUV410P \
|| (x)==PIX_FMT_YUV420P \
|| (x)==PIX_FMT_YUVA420P \
|| (x)==PIX_FMT_NV12 \
|| (x)==PIX_FMT_NV21 \
)
+#define isPlanarYUV(x) ( \
+ isPlanar8YUV(x) \
+ || (x)==PIX_FMT_YUV420P16LE \
+ || (x)==PIX_FMT_YUV422P16LE \
+ || (x)==PIX_FMT_YUV444P16LE \
+ || (x)==PIX_FMT_YUV420P16BE \
+ || (x)==PIX_FMT_YUV422P16BE \
+ || (x)==PIX_FMT_YUV444P16BE \
+ )
#define isYUV(x) ( \
(x)==PIX_FMT_UYVY422 \
|| (x)==PIX_FMT_YUYV422 \
|| (x)==PIX_FMT_GRAY16LE \
)
#define isRGB(x) ( \
- (x)==PIX_FMT_RGB32 \
+ (x)==PIX_FMT_RGB48BE \
+ || (x)==PIX_FMT_RGB48LE \
+ || (x)==PIX_FMT_RGB32 \
|| (x)==PIX_FMT_RGB32_1 \
|| (x)==PIX_FMT_RGB24 \
|| (x)==PIX_FMT_RGB565 \
static inline int fmt_depth(int fmt)
{
switch(fmt) {
- case PIX_FMT_BGRA:
- case PIX_FMT_ABGR:
- case PIX_FMT_RGBA:
- case PIX_FMT_ARGB:
- return 32;
- case PIX_FMT_BGR24:
- case PIX_FMT_RGB24:
- return 24;
- case PIX_FMT_BGR565:
- case PIX_FMT_RGB565:
- case PIX_FMT_GRAY16BE:
- case PIX_FMT_GRAY16LE:
- return 16;
- case PIX_FMT_BGR555:
- case PIX_FMT_RGB555:
- return 15;
- case PIX_FMT_BGR8:
- case PIX_FMT_RGB8:
- return 8;
- case PIX_FMT_BGR4:
- case PIX_FMT_RGB4:
- case PIX_FMT_BGR4_BYTE:
- case PIX_FMT_RGB4_BYTE:
- return 4;
- case PIX_FMT_MONOBLACK:
- case PIX_FMT_MONOWHITE:
- return 1;
- default:
- return 0;
+ case PIX_FMT_RGB48BE:
+ case PIX_FMT_RGB48LE:
+ return 48;
+ case PIX_FMT_BGRA:
+ case PIX_FMT_ABGR:
+ case PIX_FMT_RGBA:
+ case PIX_FMT_ARGB:
+ return 32;
+ case PIX_FMT_BGR24:
+ case PIX_FMT_RGB24:
+ return 24;
+ case PIX_FMT_BGR565:
+ case PIX_FMT_RGB565:
+ case PIX_FMT_GRAY16BE:
+ case PIX_FMT_GRAY16LE:
+ return 16;
+ case PIX_FMT_BGR555:
+ case PIX_FMT_RGB555:
+ return 15;
+ case PIX_FMT_BGR8:
+ case PIX_FMT_RGB8:
+ return 8;
+ case PIX_FMT_BGR4:
+ case PIX_FMT_RGB4:
+ case PIX_FMT_BGR4_BYTE:
+ case PIX_FMT_RGB4_BYTE:
+ return 4;
+ case PIX_FMT_MONOBLACK:
+ case PIX_FMT_MONOWHITE:
+ return 1;
+ default:
+ return 0;
}
}