source and destination format, cache those values in the newly added SwsContext:srcFormatBpp and SwsContext:dstFormatBpp fields, and remove the fmt_depth() function. Originally committed as revision 30419 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscaletags/v0.6
@@ -882,7 +882,7 @@ static inline void yuv2rgbXinC_full(SwsContext *c, const int16_t *lumFilter, con | |||||
const int16_t **alpSrc, uint8_t *dest, int dstW, int y) | const int16_t **alpSrc, uint8_t *dest, int dstW, int y) | ||||
{ | { | ||||
int i; | int i; | ||||
int step= fmt_depth(c->dstFormat)/8; | |||||
int step= c->dstFormatBpp/8; | |||||
int aidx= 3; | int aidx= 3; | ||||
switch(c->dstFormat) { | switch(c->dstFormat) { | ||||
@@ -1430,10 +1430,10 @@ static int rgb2rgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], | |||||
{ | { | ||||
const enum PixelFormat srcFormat= c->srcFormat; | const enum PixelFormat srcFormat= c->srcFormat; | ||||
const enum PixelFormat dstFormat= c->dstFormat; | const enum PixelFormat dstFormat= c->dstFormat; | ||||
const int srcBpp= (fmt_depth(srcFormat) + 7) >> 3; | |||||
const int dstBpp= (fmt_depth(dstFormat) + 7) >> 3; | |||||
const int srcId= fmt_depth(srcFormat) >> 2; /* 1:0, 4:1, 8:2, 15:3, 16:4, 24:6, 32:8 */ | |||||
const int dstId= fmt_depth(dstFormat) >> 2; | |||||
const int srcBpp= (c->srcFormatBpp + 7) >> 3; | |||||
const int dstBpp= (c->dstFormatBpp + 7) >> 3; | |||||
const int srcId= c->srcFormatBpp >> 2; /* 1:0, 4:1, 8:2, 15:3, 16:4, 24:6, 32:8 */ | |||||
const int dstId= c->dstFormatBpp >> 2; | |||||
void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL; | void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL; | ||||
/* BGR -> BGR */ | /* BGR -> BGR */ | ||||
@@ -1661,8 +1661,8 @@ void ff_get_unscaled_swscale(SwsContext *c) | |||||
int needsDither; | int needsDither; | ||||
needsDither= (isBGR(dstFormat) || isRGB(dstFormat)) | needsDither= (isBGR(dstFormat) || isRGB(dstFormat)) | ||||
&& (fmt_depth(dstFormat))<24 | |||||
&& ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat)))); | |||||
&& c->srcFormatBpp < 24 | |||||
&& (c->dstFormatBpp < c->srcFormatBpp || (!(isRGB(srcFormat) || isBGR(srcFormat)))); | |||||
/* yv12_to_nv12 */ | /* yv12_to_nv12 */ | ||||
if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21)) { | if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21)) { | ||||
@@ -86,6 +86,8 @@ typedef struct SwsContext { | |||||
int lumYInc, chrYInc; | int lumYInc, chrYInc; | ||||
enum PixelFormat dstFormat; ///< Destination pixel format. | enum PixelFormat dstFormat; ///< Destination pixel format. | ||||
enum PixelFormat srcFormat; ///< Source pixel format. | enum PixelFormat srcFormat; ///< Source pixel format. | ||||
int dstFormatBpp; ///< Number of bits per pixel of the destination pixel format. | |||||
int srcFormatBpp; ///< Number of bits per pixel of the source pixel format. | |||||
int chrSrcHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source image. | int chrSrcHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source image. | ||||
int chrSrcVSubSample; ///< Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image. | int chrSrcVSubSample; ///< Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image. | ||||
int chrDstHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination image. | int chrDstHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination image. | ||||
@@ -417,44 +419,6 @@ const char *sws_format_name(enum PixelFormat format); | |||||
|| (x)==PIX_FMT_YUVA420P \ | || (x)==PIX_FMT_YUVA420P \ | ||||
) | ) | ||||
static inline int fmt_depth(enum PixelFormat fmt) | |||||
{ | |||||
switch(fmt) { | |||||
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; | |||||
} | |||||
} | |||||
extern const uint64_t ff_dither4[2]; | extern const uint64_t ff_dither4[2]; | ||||
extern const uint64_t ff_dither8[2]; | extern const uint64_t ff_dither8[2]; | ||||
@@ -854,6 +854,8 @@ SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, | |||||
c->flags= flags; | c->flags= flags; | ||||
c->dstFormat= dstFormat; | c->dstFormat= dstFormat; | ||||
c->srcFormat= srcFormat; | c->srcFormat= srcFormat; | ||||
c->dstFormatBpp = av_get_bits_per_pixel(&av_pix_fmt_descriptors[dstFormat]); | |||||
c->srcFormatBpp = av_get_bits_per_pixel(&av_pix_fmt_descriptors[srcFormat]); | |||||
c->vRounder= 4* 0x0001000100010001ULL; | c->vRounder= 4* 0x0001000100010001ULL; | ||||
usesHFilter= usesVFilter= 0; | usesHFilter= usesVFilter= 0; | ||||
@@ -595,7 +595,7 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], int | |||||
|| c->dstFormat==PIX_FMT_RGB4 | || c->dstFormat==PIX_FMT_RGB4 | ||||
|| c->dstFormat==PIX_FMT_RGB4_BYTE | || c->dstFormat==PIX_FMT_RGB4_BYTE | ||||
|| c->dstFormat==PIX_FMT_MONOBLACK; | || c->dstFormat==PIX_FMT_MONOBLACK; | ||||
const int bpp = fmt_depth(c->dstFormat); | |||||
const int bpp = c->dstFormatBpp; | |||||
uint8_t *y_table; | uint8_t *y_table; | ||||
uint16_t *y_table16; | uint16_t *y_table16; | ||||
uint32_t *y_table32; | uint32_t *y_table32; | ||||