mirror of https://github.com/FFmpeg/FFmpeg.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.2 KiB
128 lines
4.2 KiB
/* |
|
* 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(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); |
|
}
|
|
|