| /* |
| * Image format |
| * Copyright (c) 2000, 2001, 2002 Fabrice Bellard |
| * Copyright (c) 2004 Michael Niedermayer |
| * |
| * 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 <assert.h> |
| |
| #include "libavutil/avstring.h" |
| #include "internal.h" |
| #include "img2.h" |
| |
| #define IMG_TAGS(TAG) \ |
| TAG(MJPEG, jpeg ) \ |
| TAG(MJPEG, jpg ) \ |
| TAG(MJPEG, jps ) \ |
| TAG(MJPEG, mpo ) \ |
| TAG(LJPEG, ljpg ) \ |
| TAG(JPEGLS, jls ) \ |
| TAG(PNG, png ) \ |
| TAG(PNG, pns ) \ |
| TAG(PNG, mng ) \ |
| TAG(PPM, ppm ) \ |
| TAG(PPM, pnm ) \ |
| TAG(PGM, pgm ) \ |
| TAG(PGMYUV, pgmyuv ) \ |
| TAG(PBM, pbm ) \ |
| TAG(PAM, pam ) \ |
| TAG(PFM, pfm ) \ |
| TAG(PHM, phm ) \ |
| TAG(CRI, cri ) \ |
| TAG(ALIAS_PIX, pix ) \ |
| TAG(DDS, dds ) \ |
| TAG(MPEG1VIDEO, mpg1-img ) \ |
| TAG(MPEG2VIDEO, mpg2-img ) \ |
| TAG(MPEG4, mpg4-img ) \ |
| TAG(RAWVIDEO, y ) \ |
| TAG(RAWVIDEO, raw ) \ |
| TAG(BMP, bmp ) \ |
| TAG(TARGA, tga ) \ |
| TAG(TIFF, tiff ) \ |
| TAG(TIFF, tif ) \ |
| TAG(TIFF, dng ) \ |
| TAG(SGI, sgi ) \ |
| TAG(PTX, ptx ) \ |
| TAG(PHOTOCD, pcd ) \ |
| TAG(PCX, pcx ) \ |
| TAG(QDRAW, pic ) \ |
| TAG(QDRAW, pct ) \ |
| TAG(QDRAW, pict ) \ |
| TAG(SUNRAST, sun ) \ |
| TAG(SUNRAST, ras ) \ |
| TAG(SUNRAST, rs ) \ |
| TAG(SUNRAST, im1 ) \ |
| TAG(SUNRAST, im8 ) \ |
| TAG(SUNRAST, im24 ) \ |
| TAG(SUNRAST, im32 ) \ |
| TAG(SUNRAST, sunras ) \ |
| TAG(SVG, svg ) \ |
| TAG(SVG, svgz ) \ |
| TAG(JPEG2000, j2c ) \ |
| TAG(JPEG2000, jp2 ) \ |
| TAG(JPEG2000, jpc ) \ |
| TAG(JPEG2000, j2k ) \ |
| TAG(DPX, dpx ) \ |
| TAG(EXR, exr ) \ |
| TAG(PICTOR, pic ) \ |
| TAG(V210X, yuv10 ) \ |
| TAG(WEBP, webp ) \ |
| TAG(XBM, xbm ) \ |
| TAG(XPM, xpm ) \ |
| TAG(XFACE, xface ) \ |
| TAG(XWD, xwd ) \ |
| TAG(GEM, img ) \ |
| TAG(GEM, ximg ) \ |
| TAG(GEM, timg ) \ |
| TAG(VBN, vbn ) \ |
| TAG(JPEGXL, jxl ) \ |
| TAG(JPEGXS, jxs ) \ |
| TAG(QOI, qoi ) \ |
| TAG(RADIANCE_HDR, hdr ) \ |
| TAG(WBMP, wbmp ) \ |
| TAG(NONE, ) |
| |
| #define LENGTH_CHECK(CODECID, STR) \ |
| static_assert(sizeof(#STR) <= sizeof(ff_img_tags->str), #STR " does not fit into IdStrMap.str\n"); |
| IMG_TAGS(LENGTH_CHECK) |
| |
| const IdStrMap ff_img_tags[] = { |
| #define TAG(CODECID, STR) { AV_CODEC_ID_ ## CODECID, #STR }, |
| IMG_TAGS(TAG) |
| }; |
| |
| static enum AVCodecID str2id(const IdStrMap *tags, const char *str) |
| { |
| str = strrchr(str, '.'); |
| if (!str) |
| return AV_CODEC_ID_NONE; |
| str++; |
| |
| while (tags->id) { |
| if (!av_strcasecmp(str, tags->str)) |
| return tags->id; |
| |
| tags++; |
| } |
| return AV_CODEC_ID_NONE; |
| } |
| |
| enum AVCodecID ff_guess_image2_codec(const char *filename) |
| { |
| return str2id(ff_img_tags, filename); |
| } |