1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2017 Clément Bœsch <u pkh me>
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * This file is part of FFmpeg.
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14cabdff1aSopenharmony_ci * Lesser General Public License for more details.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19cabdff1aSopenharmony_ci */
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci#include <stdlib.h>
22cabdff1aSopenharmony_ci
23cabdff1aSopenharmony_ci#include "libavutil/mem.h"
24cabdff1aSopenharmony_ci#include "libswscale/swscale_internal.h"
25cabdff1aSopenharmony_ci
26cabdff1aSopenharmony_cistatic const struct {
27cabdff1aSopenharmony_ci    const char *class;
28cabdff1aSopenharmony_ci    int (*cond)(enum AVPixelFormat pix_fmt);
29cabdff1aSopenharmony_ci} query_tab[] = {
30cabdff1aSopenharmony_ci    {"is16BPS",     is16BPS},
31cabdff1aSopenharmony_ci    {"isNBPS",      isNBPS},
32cabdff1aSopenharmony_ci    {"isBE",        isBE},
33cabdff1aSopenharmony_ci    {"isYUV",       isYUV},
34cabdff1aSopenharmony_ci    {"isPlanarYUV", isPlanarYUV},
35cabdff1aSopenharmony_ci    {"isSemiPlanarYUV", isSemiPlanarYUV},
36cabdff1aSopenharmony_ci    {"isRGB",       isRGB},
37cabdff1aSopenharmony_ci    {"Gray",        isGray},
38cabdff1aSopenharmony_ci    {"RGBinInt",    isRGBinInt},
39cabdff1aSopenharmony_ci    {"BGRinInt",    isBGRinInt},
40cabdff1aSopenharmony_ci    {"Bayer",       isBayer},
41cabdff1aSopenharmony_ci    {"AnyRGB",      isAnyRGB},
42cabdff1aSopenharmony_ci    {"ALPHA",       isALPHA},
43cabdff1aSopenharmony_ci    {"Packed",      isPacked},
44cabdff1aSopenharmony_ci    {"Planar",      isPlanar},
45cabdff1aSopenharmony_ci    {"PackedRGB",   isPackedRGB},
46cabdff1aSopenharmony_ci    {"PlanarRGB",   isPlanarRGB},
47cabdff1aSopenharmony_ci    {"usePal",      usePal},
48cabdff1aSopenharmony_ci    {"DataInHighBits", isDataInHighBits},
49cabdff1aSopenharmony_ci    {"SwappedChroma", isSwappedChroma},
50cabdff1aSopenharmony_ci};
51cabdff1aSopenharmony_ci
52cabdff1aSopenharmony_cistatic int cmp_str(const void *a, const void *b)
53cabdff1aSopenharmony_ci{
54cabdff1aSopenharmony_ci    const char *s1 = *(const char **)a;
55cabdff1aSopenharmony_ci    const char *s2 = *(const char **)b;
56cabdff1aSopenharmony_ci    return strcmp(s1, s2);
57cabdff1aSopenharmony_ci}
58cabdff1aSopenharmony_ci
59cabdff1aSopenharmony_ciint main(void)
60cabdff1aSopenharmony_ci{
61cabdff1aSopenharmony_ci    int i, j;
62cabdff1aSopenharmony_ci
63cabdff1aSopenharmony_ci    for (i = 0; i < FF_ARRAY_ELEMS(query_tab); i++) {
64cabdff1aSopenharmony_ci        const char **pix_fmts = NULL;
65cabdff1aSopenharmony_ci        int nb_pix_fmts = 0;
66cabdff1aSopenharmony_ci        const AVPixFmtDescriptor *pix_desc = NULL;
67cabdff1aSopenharmony_ci
68cabdff1aSopenharmony_ci        while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) {
69cabdff1aSopenharmony_ci            enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(pix_desc);
70cabdff1aSopenharmony_ci            if (query_tab[i].cond(pix_fmt)) {
71cabdff1aSopenharmony_ci                const char *pix_name = pix_desc->name;
72cabdff1aSopenharmony_ci                if      (pix_fmt == AV_PIX_FMT_RGB32)   pix_name = "rgb32";
73cabdff1aSopenharmony_ci                else if (pix_fmt == AV_PIX_FMT_RGB32_1) pix_name = "rgb32_1";
74cabdff1aSopenharmony_ci                else if (pix_fmt == AV_PIX_FMT_BGR32)   pix_name = "bgr32";
75cabdff1aSopenharmony_ci                else if (pix_fmt == AV_PIX_FMT_BGR32_1) pix_name = "bgr32_1";
76cabdff1aSopenharmony_ci
77cabdff1aSopenharmony_ci                av_dynarray_add(&pix_fmts, &nb_pix_fmts, (void *)pix_name);
78cabdff1aSopenharmony_ci            }
79cabdff1aSopenharmony_ci        }
80cabdff1aSopenharmony_ci
81cabdff1aSopenharmony_ci        if (pix_fmts) {
82cabdff1aSopenharmony_ci            qsort(pix_fmts, nb_pix_fmts, sizeof(*pix_fmts), cmp_str);
83cabdff1aSopenharmony_ci
84cabdff1aSopenharmony_ci            printf("%s:\n", query_tab[i].class);
85cabdff1aSopenharmony_ci            for (j = 0; j < nb_pix_fmts; j++)
86cabdff1aSopenharmony_ci                printf("  %s\n", pix_fmts[j]);
87cabdff1aSopenharmony_ci            printf("\n");
88cabdff1aSopenharmony_ci
89cabdff1aSopenharmony_ci            av_free(pix_fmts);
90cabdff1aSopenharmony_ci        }
91cabdff1aSopenharmony_ci    }
92cabdff1aSopenharmony_ci    return 0;
93cabdff1aSopenharmony_ci}
94