mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-12-26 13:36:28 +00:00
swscale-example: Check for Gray formats.
Originally committed as revision 29503 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
This commit is contained in:
parent
d4d6ae1603
commit
f5a9c4ee50
@ -32,6 +32,11 @@
|
|||||||
/* HACK Duplicated from swscale_internal.h.
|
/* HACK Duplicated from swscale_internal.h.
|
||||||
* Should be removed when a cleaner pixel format system exists. */
|
* Should be removed when a cleaner pixel format system exists. */
|
||||||
const char *sws_format_name(enum PixelFormat format);
|
const char *sws_format_name(enum PixelFormat format);
|
||||||
|
#define isGray(x) ( \
|
||||||
|
(x)==PIX_FMT_GRAY8 \
|
||||||
|
|| (x)==PIX_FMT_GRAY16BE \
|
||||||
|
|| (x)==PIX_FMT_GRAY16LE \
|
||||||
|
)
|
||||||
#define isALPHA(x) ( \
|
#define isALPHA(x) ( \
|
||||||
(x)==PIX_FMT_BGR32 \
|
(x)==PIX_FMT_BGR32 \
|
||||||
|| (x)==PIX_FMT_BGR32_1 \
|
|| (x)==PIX_FMT_BGR32_1 \
|
||||||
@ -66,7 +71,7 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h, int srcFormat
|
|||||||
uint8_t *out[4] = {0};
|
uint8_t *out[4] = {0};
|
||||||
int srcStride[4], dstStride[4];
|
int srcStride[4], dstStride[4];
|
||||||
int i;
|
int i;
|
||||||
uint64_t ssdY, ssdU, ssdV, ssdA=0;
|
uint64_t ssdY, ssdU=0, ssdV=0, ssdA=0;
|
||||||
struct SwsContext *srcContext = NULL, *dstContext = NULL,
|
struct SwsContext *srcContext = NULL, *dstContext = NULL,
|
||||||
*outContext = NULL;
|
*outContext = NULL;
|
||||||
int res;
|
int res;
|
||||||
@ -134,13 +139,14 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h, int srcFormat
|
|||||||
sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
|
sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
|
||||||
|
|
||||||
ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
|
ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
|
||||||
|
if (!isGray(srcFormat) && !isGray(dstFormat)) {
|
||||||
|
//FIXME check that output is really gray
|
||||||
ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1);
|
ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1);
|
||||||
ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1);
|
ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1);
|
||||||
|
}
|
||||||
if (isALPHA(srcFormat) && isALPHA(dstFormat))
|
if (isALPHA(srcFormat) && isALPHA(dstFormat))
|
||||||
ssdA= getSSD(ref[3], out[3], refStride[3], refStride[3], w, h);
|
ssdA= getSSD(ref[3], out[3], refStride[3], refStride[3], w, h);
|
||||||
|
|
||||||
if (srcFormat == PIX_FMT_GRAY8 || dstFormat==PIX_FMT_GRAY8) ssdU=ssdV=0; //FIXME check that output is really gray
|
|
||||||
|
|
||||||
ssdY/= w*h;
|
ssdY/= w*h;
|
||||||
ssdU/= w*h/4;
|
ssdU/= w*h/4;
|
||||||
ssdV/= w*h/4;
|
ssdV/= w*h/4;
|
||||||
|
Loading…
Reference in New Issue
Block a user