| /* |
| * 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}, |
| {"isRGB", isRGB}, |
| {"Gray", isGray}, |
| {"RGBinInt", isRGBinInt}, |
| {"BGRinInt", isBGRinInt}, |
| {"Bayer", isBayer}, |
| {"AnyRGB", isAnyRGB}, |
| {"ALPHA", isALPHA}, |
| {"Packed", isPacked}, |
| {"Planar", isPlanar}, |
| {"PackedRGB", isPackedRGB}, |
| {"PlanarRGB", isPlanarRGB}, |
| {"usePal", usePal}, |
| }; |
| |
| 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; |
| } |