| /* | |
| * 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 <stdlib.h> | |
| #include "libavutil/mem.h" | |
| #include "libswscale/swscale_internal.h" | |
| static const struct { | |
| const char *class; | |
| int (*cond)(enum AVPixelFormat pix_fmt); | |
| } query_tab[] = { | |
| {"is16BPS", is16BPS}, | |
| {"isNBPS", isNBPS}, | |
| {"isBE", isBE}, | |
| {"isYUV", isYUV}, | |
| {"isPlanarYUV", isPlanarYUV}, | |
| {"isSemiPlanarYUV", isSemiPlanarYUV}, | |
| {"isRGB", isRGB}, | |
| {"Gray", isGray}, | |
| {"RGBinInt", isRGBinInt}, | |
| {"BGRinInt", isBGRinInt}, | |
| {"Bayer", isBayer}, | |
| {"AnyRGB", isAnyRGB}, | |
| {"ALPHA", isALPHA}, | |
| {"Packed", isPacked}, | |
| {"Planar", isPlanar}, | |
| {"PackedRGB", isPackedRGB}, | |
| {"PlanarRGB", isPlanarRGB}, | |
| {"usePal", usePal}, | |
| {"DataInHighBits", isDataInHighBits}, | |
| {"SwappedChroma", isSwappedChroma}, | |
| }; | |
| static int cmp_str(const void *a, const void *b) | |
| { | |
| const char *s1 = *(const char **)a; | |
| const char *s2 = *(const char **)b; | |
| return strcmp(s1, s2); | |
| } | |
| int main(void) | |
| { | |
| int i, j; | |
| for (i = 0; i < FF_ARRAY_ELEMS(query_tab); i++) { | |
| const char **pix_fmts = NULL; | |
| int nb_pix_fmts = 0; | |
| const AVPixFmtDescriptor *pix_desc = NULL; | |
| 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)) { | |
| const char *pix_name = pix_desc->name; | |
| if (pix_fmt == AV_PIX_FMT_RGB32) pix_name = "rgb32"; | |
| else if (pix_fmt == AV_PIX_FMT_RGB32_1) pix_name = "rgb32_1"; | |
| else if (pix_fmt == AV_PIX_FMT_BGR32) pix_name = "bgr32"; | |
| else if (pix_fmt == AV_PIX_FMT_BGR32_1) pix_name = "bgr32_1"; | |
| av_dynarray_add(&pix_fmts, &nb_pix_fmts, (void *)pix_name); | |
| } | |
| } | |
| if (pix_fmts) { | |
| qsort(pix_fmts, nb_pix_fmts, sizeof(*pix_fmts), cmp_str); | |
| printf("%s:\n", query_tab[i].class); | |
| for (j = 0; j < nb_pix_fmts; j++) | |
| printf(" %s\n", pix_fmts[j]); | |
| printf("\n"); | |
| av_free(pix_fmts); | |
| } | |
| } | |
| return 0; | |
| } |