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