Use av_get_bits_per_pixel() for computing the bits per pixel of the
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/libswscale
This commit is contained in:
parent
59398ea9c0
commit
30b6147521
@ -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 srcBpp= (c->srcFormatBpp + 7) >> 3;
|
||||||
const int dstBpp= (fmt_depth(dstFormat) + 7) >> 3;
|
const int dstBpp= (c->dstFormatBpp + 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 srcId= c->srcFormatBpp >> 2; /* 1:0, 4:1, 8:2, 15:3, 16:4, 24:6, 32:8 */
|
||||||
const int dstId= fmt_depth(dstFormat) >> 2;
|
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
|
&& c->srcFormatBpp < 24
|
||||||
&& ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat))));
|
&& (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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user