[FFmpeg-devel] [PATCH 1/2] fate: add fate-sws-pixdesc-query
wm4
nfxjfg at googlemail.com
Mon Mar 20 09:17:47 EET 2017
On Sun, 19 Mar 2017 15:00:55 +0100
Clément Bœsch <u at pkh.me> wrote:
> Test the pixel format querying within libswscale.
> ---
> libswscale/Makefile | 1 +
> libswscale/tests/.gitignore | 1 +
> libswscale/tests/pixdesc_query.c | 78 ++++++++
> tests/Makefile | 1 +
> tests/fate/libswscale.mak | 7 +
> tests/ref/fate/sws-pixdesc-query | 416 +++++++++++++++++++++++++++++++++++++++
> 6 files changed, 504 insertions(+)
> create mode 100644 libswscale/tests/pixdesc_query.c
> create mode 100644 tests/fate/libswscale.mak
> create mode 100644 tests/ref/fate/sws-pixdesc-query
>
> diff --git a/libswscale/Makefile b/libswscale/Makefile
> index 0272039a6c..183167cced 100644
> --- a/libswscale/Makefile
> +++ b/libswscale/Makefile
> @@ -26,4 +26,5 @@ OBJS-$(CONFIG_SHARED) += log2_tab.o
> SLIBOBJS-$(HAVE_GNU_WINDRES) += swscaleres.o
>
> TESTPROGS = colorspace \
> + pixdesc_query \
> swscale \
> diff --git a/libswscale/tests/.gitignore b/libswscale/tests/.gitignore
> index 0ac3691ecd..1a26f038c4 100644
> --- a/libswscale/tests/.gitignore
> +++ b/libswscale/tests/.gitignore
> @@ -1,2 +1,3 @@
> /colorspace
> +/pixdesc_query
> /swscale
> diff --git a/libswscale/tests/pixdesc_query.c b/libswscale/tests/pixdesc_query.c
> new file mode 100644
> index 0000000000..d1ce1eb4a8
> --- /dev/null
> +++ b/libswscale/tests/pixdesc_query.c
> @@ -0,0 +1,78 @@
> +/*
> + * Copyright (c) 2017 Clément Bœsch <u pkh me>
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#include "libswscale/swscale_internal.h"
> +
> +/* TODO: drop this wrapper when all the is*() becomes functions */
> +#define DECLARE_WRAPPER(macro) \
> +static int macro##_func(enum AVPixelFormat pix_fmt) \
> +{ \
> + return macro(pix_fmt); \
> +}
> +
> +DECLARE_WRAPPER(isGray)
> +DECLARE_WRAPPER(isRGBinInt)
> +DECLARE_WRAPPER(isBGRinInt)
> +DECLARE_WRAPPER(isRGBinBytes)
> +DECLARE_WRAPPER(isBGRinBytes)
> +DECLARE_WRAPPER(isBayer)
> +DECLARE_WRAPPER(isAnyRGB)
> +DECLARE_WRAPPER(isALPHA)
> +DECLARE_WRAPPER(isPacked)
> +DECLARE_WRAPPER(isPlanar)
> +DECLARE_WRAPPER(isPackedRGB)
> +DECLARE_WRAPPER(isPlanarRGB)
> +DECLARE_WRAPPER(usePal)
> +
> +static const struct {
> + const char *class;
> + int (*cond)(enum AVPixelFormat pix_fmt);
> +} query_tab[] = {
> + {"Gray", isGray_func},
> + {"RGBinInt", isRGBinInt_func},
> + {"BGRinInt", isBGRinInt_func},
> + {"RGBinBytes", isRGBinBytes_func},
> + {"BGRinBytes", isBGRinBytes_func},
> + {"Bayer", isBayer_func},
> + {"AnyRGB", isAnyRGB_func},
> + {"ALPHA", isALPHA_func},
> + {"Packed", isPacked_func},
> + {"Planar", isPlanar_func},
> + {"PackedRGB", isPackedRGB_func},
> + {"PlanarRGB", isPlanarRGB_func},
> + {"usePal", usePal_func},
> +};
> +
> +int main(void)
> +{
> + int i;
> +
> + for (i = 0; i < FF_ARRAY_ELEMS(query_tab); i++) {
> + const AVPixFmtDescriptor *pix_desc = NULL;
> + printf("%s:\n", query_tab[i].class);
> + while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) {
> + enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(pix_desc);
> + if (query_tab[i].cond(pix_fmt))
> + printf(" %s\n", pix_desc->name);
> + }
> + printf("\n");
> + }
> + return 0;
> +}
> diff --git a/tests/Makefile b/tests/Makefile
> index 53d900bdba..66d99106ff 100644
> --- a/tests/Makefile
> +++ b/tests/Makefile
> @@ -145,6 +145,7 @@ include $(SRC_PATH)/tests/fate/libavformat.mak
> include $(SRC_PATH)/tests/fate/libavresample.mak
> include $(SRC_PATH)/tests/fate/libavutil.mak
> include $(SRC_PATH)/tests/fate/libswresample.mak
> +include $(SRC_PATH)/tests/fate/libswscale.mak
> include $(SRC_PATH)/tests/fate/lossless-audio.mak
> include $(SRC_PATH)/tests/fate/lossless-video.mak
> include $(SRC_PATH)/tests/fate/matroska.mak
> diff --git a/tests/fate/libswscale.mak b/tests/fate/libswscale.mak
> new file mode 100644
> index 0000000000..e72fe590a8
> --- /dev/null
> +++ b/tests/fate/libswscale.mak
> @@ -0,0 +1,7 @@
> +FATE_LIBSWSCALE += fate-sws-pixdesc-query
> +fate-sws-pixdesc-query: libswscale/tests/pixdesc_query$(EXESUF)
> +fate-sws-pixdesc-query: CMD = run libswscale/tests/pixdesc_query
> +
> +FATE_LIBSWSCALE += $(FATE_LIBSWSCALE-yes)
> +FATE-$(CONFIG_SWSCALE) += $(FATE_LIBSWSCALE)
> +fate-libswscale: $(FATE_LIBSWSCALE)
> diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query
> new file mode 100644
> index 0000000000..013c59da50
> --- /dev/null
> +++ b/tests/ref/fate/sws-pixdesc-query
> @@ -0,0 +1,416 @@
> +Gray:
> + gray
> + gray16be
> + gray16le
> + ya8
> + ya16be
> + ya16le
> + gray12be
> + gray12le
> + gray10be
> + gray10le
> +
> +RGBinInt:
> + rgb24
> + monow
> + monob
> + rgb8
> + rgb4
> + rgb4_byte
> + abgr
> + bgra
> + rgb48be
> + rgb48le
> + rgb565be
> + rgb565le
> + rgb555be
> + rgb555le
> + rgb444le
> + rgb444be
> + rgba64be
> + rgba64le
> +
> +BGRinInt:
> + bgr24
> + monow
> + monob
> + bgr8
> + bgr4
> + bgr4_byte
> + argb
> + rgba
> + bgr565be
> + bgr565le
> + bgr555be
> + bgr555le
> + bgr444le
> + bgr444be
> + bgr48be
> + bgr48le
> + bgra64be
> + bgra64le
> +
> +RGBinBytes:
> + rgb24
> + argb
> + rgba
> + rgb48be
> + rgb48le
> + rgba64be
> + rgba64le
> +
> +BGRinBytes:
> + bgr24
> + abgr
> + bgra
> + bgr48be
> + bgr48le
> + bgra64be
> + bgra64le
> +
> +Bayer:
> + bayer_bggr8
> + bayer_rggb8
> + bayer_gbrg8
> + bayer_grbg8
> + bayer_bggr16le
> + bayer_bggr16be
> + bayer_rggb16le
> + bayer_rggb16be
> + bayer_gbrg16le
> + bayer_gbrg16be
> + bayer_grbg16le
> + bayer_grbg16be
> +
> +AnyRGB:
> + rgb24
> + bgr24
> + monow
> + monob
> + bgr8
> + bgr4
> + bgr4_byte
> + rgb8
> + rgb4
> + rgb4_byte
> + argb
> + rgba
> + abgr
> + bgra
> + rgb48be
> + rgb48le
> + rgb565be
> + rgb565le
> + rgb555be
> + rgb555le
> + bgr565be
> + bgr565le
> + bgr555be
> + bgr555le
> + rgb444le
> + rgb444be
> + bgr444le
> + bgr444be
> + bgr48be
> + bgr48le
> + gbrp
> + gbrp9be
> + gbrp9le
> + gbrp10be
> + gbrp10le
> + gbrp16be
> + gbrp16le
> + rgba64be
> + rgba64le
> + bgra64be
> + bgra64le
> + gbrap
> + gbrap16be
> + gbrap16le
> + 0rgb
> + rgb0
> + 0bgr
> + bgr0
> + gbrp12be
> + gbrp12le
> + gbrp14be
> + gbrp14le
> + bayer_bggr8
> + bayer_rggb8
> + bayer_gbrg8
> + bayer_grbg8
> + bayer_bggr16le
> + bayer_bggr16be
> + bayer_rggb16le
> + bayer_rggb16be
> + bayer_gbrg16le
> + bayer_gbrg16be
> + bayer_grbg16le
> + bayer_grbg16be
> + gbrap12be
> + gbrap12le
> + gbrap10be
> + gbrap10le
> +
> +ALPHA:
> + pal8
> + argb
> + rgba
> + abgr
> + bgra
> + yuva420p
> + ya8
> + yuva422p
> + yuva444p
> + yuva420p9be
> + yuva420p9le
> + yuva422p9be
> + yuva422p9le
> + yuva444p9be
> + yuva444p9le
> + yuva420p10be
> + yuva420p10le
> + yuva422p10be
> + yuva422p10le
> + yuva444p10be
> + yuva444p10le
> + yuva420p16be
> + yuva420p16le
> + yuva422p16be
> + yuva422p16le
> + yuva444p16be
> + yuva444p16le
> + rgba64be
> + rgba64le
> + bgra64be
> + bgra64le
> + ya16be
> + ya16le
> + gbrap
> + gbrap16be
> + gbrap16le
> + ayuv64le
> + ayuv64be
> + gbrap12be
> + gbrap12le
> + gbrap10be
> + gbrap10le
> +
> +Packed:
> + yuyv422
> + rgb24
> + bgr24
> + monow
> + monob
> + pal8
> + uyvy422
> + bgr8
> + bgr4
> + bgr4_byte
> + rgb8
> + rgb4
> + rgb4_byte
> + argb
> + rgba
> + abgr
> + bgra
> + rgb48be
> + rgb48le
> + rgb565be
> + rgb565le
> + rgb555be
> + rgb555le
> + bgr565be
> + bgr565le
> + bgr555be
> + bgr555le
> + rgb444le
> + rgb444be
> + bgr444le
> + bgr444be
> + ya8
> + bgr48be
> + bgr48le
> + rgba64be
> + rgba64le
> + bgra64be
> + bgra64le
> + yvyu422
> + ya16be
> + ya16le
> + ayuv64le
> + ayuv64be
> +
> +Planar:
> + yuv420p
> + yuv422p
> + yuv444p
> + yuv410p
> + yuv411p
> + yuvj420p
> + yuvj422p
> + yuvj444p
> + nv12
> + nv21
> + yuv440p
> + yuvj440p
> + yuva420p
> + yuv420p16le
> + yuv420p16be
> + yuv422p16le
> + yuv422p16be
> + yuv444p16le
> + yuv444p16be
> + yuv420p9be
> + yuv420p9le
> + yuv420p10be
> + yuv420p10le
> + yuv422p10be
> + yuv422p10le
> + yuv444p9be
> + yuv444p9le
> + yuv444p10be
> + yuv444p10le
> + yuv422p9be
> + yuv422p9le
> + gbrp
> + gbrp9be
> + gbrp9le
> + gbrp10be
> + gbrp10le
> + gbrp16be
> + gbrp16le
> + yuva422p
> + yuva444p
> + yuva420p9be
> + yuva420p9le
> + yuva422p9be
> + yuva422p9le
> + yuva444p9be
> + yuva444p9le
> + yuva420p10be
> + yuva420p10le
> + yuva422p10be
> + yuva422p10le
> + yuva444p10be
> + yuva444p10le
> + yuva420p16be
> + yuva420p16le
> + yuva422p16be
> + yuva422p16le
> + yuva444p16be
> + yuva444p16le
> + nv16
> + nv20le
> + nv20be
> + gbrap
> + gbrap16be
> + gbrap16le
> + yuv420p12be
> + yuv420p12le
> + yuv420p14be
> + yuv420p14le
> + yuv422p12be
> + yuv422p12le
> + yuv422p14be
> + yuv422p14le
> + yuv444p12be
> + yuv444p12le
> + yuv444p14be
> + yuv444p14le
> + gbrp12be
> + gbrp12le
> + gbrp14be
> + gbrp14le
> + yuvj411p
> + yuv440p10le
> + yuv440p10be
> + yuv440p12le
> + yuv440p12be
> + p010le
> + p010be
> + gbrap12be
> + gbrap12le
> + gbrap10be
> + gbrap10le
> + p016le
> + p016be
> +
> +PackedRGB:
> + rgb24
> + bgr24
> + bgr8
> + bgr4
> + bgr4_byte
> + rgb8
> + rgb4
> + rgb4_byte
> + argb
> + rgba
> + abgr
> + bgra
> + rgb48be
> + rgb48le
> + rgb565be
> + rgb565le
> + rgb555be
> + rgb555le
> + bgr565be
> + bgr565le
> + bgr555be
> + bgr555le
> + rgb444le
> + rgb444be
> + bgr444le
> + bgr444be
> + bgr48be
> + bgr48le
> + rgba64be
> + rgba64le
> + bgra64be
> + bgra64le
> + 0rgb
> + rgb0
> + 0bgr
> + bgr0
> + bayer_bggr8
> + bayer_rggb8
> + bayer_gbrg8
> + bayer_grbg8
> + bayer_bggr16le
> + bayer_bggr16be
> + bayer_rggb16le
> + bayer_rggb16be
> + bayer_gbrg16le
> + bayer_gbrg16be
> + bayer_grbg16le
> + bayer_grbg16be
> +
> +PlanarRGB:
> + gbrp
> + gbrp9be
> + gbrp9le
> + gbrp10be
> + gbrp10le
> + gbrp16be
> + gbrp16le
> + gbrap
> + gbrap16be
> + gbrap16le
> + gbrp12be
> + gbrp12le
> + gbrp14be
> + gbrp14le
> + gbrap12be
> + gbrap12le
> + gbrap10be
> + gbrap10le
> +
> +usePal:
> + gray
> + pal8
> + bgr8
> + bgr4_byte
> + rgb8
> + rgb4_byte
> +
Can I ask what's the point doing this with "clever" code in the source
code, but then explicitly listing _all_ of them in a test anyway,
because the clever code can apparently not be trusted?
More information about the ffmpeg-devel
mailing list