|
|
|
@@ -25,12 +25,9 @@ |
|
|
|
#include <stdarg.h> |
|
|
|
|
|
|
|
#undef HAVE_AV_CONFIG_H |
|
|
|
|
|
|
|
#include "libavutil/log.h" |
|
|
|
#include "libavutil/mem.h" |
|
|
|
#include "libavutil/avutil.h" |
|
|
|
#include "libavutil/lfg.h" |
|
|
|
#include "libavutil/pixdesc.h" |
|
|
|
#include "swscale.h" |
|
|
|
|
|
|
|
/* HACK Duplicated from swscale_internal.h. |
|
|
|
@@ -189,16 +186,27 @@ end: |
|
|
|
return res; |
|
|
|
} |
|
|
|
|
|
|
|
static void selfTest(uint8_t *ref[4], int refStride[4], enum PixelFormat srcFormat, enum PixelFormat dstFormat, int w, int h) |
|
|
|
static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h) |
|
|
|
{ |
|
|
|
const int flags[] = { SWS_FAST_BILINEAR, |
|
|
|
SWS_BILINEAR, SWS_BICUBIC, |
|
|
|
SWS_X , SWS_POINT , SWS_AREA, 0 }; |
|
|
|
const int srcW = w; |
|
|
|
const int srcH = h; |
|
|
|
int i, j, k, res = 0; |
|
|
|
const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/3, 0 }; |
|
|
|
const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 }; |
|
|
|
enum PixelFormat srcFormat, dstFormat; |
|
|
|
|
|
|
|
for (srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) { |
|
|
|
if (!sws_isSupportedInput(srcFormat) || !sws_isSupportedOutput(srcFormat)) |
|
|
|
continue; |
|
|
|
|
|
|
|
for (dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) { |
|
|
|
int i, j, k; |
|
|
|
int res = 0; |
|
|
|
|
|
|
|
if (!sws_isSupportedInput(dstFormat) || !sws_isSupportedOutput(dstFormat)) |
|
|
|
continue; |
|
|
|
|
|
|
|
printf("%s -> %s\n", |
|
|
|
sws_format_name(srcFormat), |
|
|
|
@@ -209,7 +217,9 @@ static void selfTest(uint8_t *ref[4], int refStride[4], enum PixelFormat srcForm |
|
|
|
for (j = 0; dstH[j] && !res; j++) |
|
|
|
for (k = 0; flags[k] && !res; k++) |
|
|
|
res = doTest(ref, refStride, w, h, srcFormat, dstFormat, |
|
|
|
srcW, srcH, dstW[i], dstH[j], flags[k]|SWS_PRINT_INFO); |
|
|
|
srcW, srcH, dstW[i], dstH[j], flags[k]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#define W 96 |
|
|
|
@@ -225,28 +235,12 @@ int main(int argc, char **argv) |
|
|
|
int stride[4]={W, W, W, W}; |
|
|
|
int x, y; |
|
|
|
struct SwsContext *sws; |
|
|
|
enum PixelFormat srcFmt, dstFmt; |
|
|
|
AVLFG rand; |
|
|
|
|
|
|
|
av_log_set_level(AV_LOG_INFO); |
|
|
|
|
|
|
|
if (argc < 3) { |
|
|
|
fprintf(stderr, "Usage: swscale-test SRC_PIX_FMT DST_PIX_FMT\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if ((srcFmt = av_get_pix_fmt(argv[1])) == PIX_FMT_NONE) { |
|
|
|
fprintf(stderr, "Unknown pixel input format name: '%s'\n", argv[1]); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if ((dstFmt = av_get_pix_fmt(argv[2])) == PIX_FMT_NONE) { |
|
|
|
fprintf(stderr, "Unknown pixel output format name: '%s'\n", argv[2]); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if (!rgb_data || !data) |
|
|
|
return -1; |
|
|
|
|
|
|
|
sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, |
|
|
|
SWS_BILINEAR|SWS_PRINT_INFO, NULL, NULL, NULL); |
|
|
|
sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL); |
|
|
|
|
|
|
|
av_lfg_init(&rand, 1); |
|
|
|
|
|
|
|
@@ -259,7 +253,7 @@ int main(int argc, char **argv) |
|
|
|
sws_freeContext(sws); |
|
|
|
av_free(rgb_data); |
|
|
|
|
|
|
|
selfTest(src, stride, srcFmt, dstFmt, W, H); |
|
|
|
selfTest(src, stride, W, H); |
|
|
|
av_free(data); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|