Mercurial > libavcore.hg
changeset 1:d2641c727ec5 libavcore
Deprecate av_parse_video_frame_size() and av_parse_video_frame_rate()
in favor of the newly added corresponding functions
av_parse_video_size() and av_parse_video_rate() defined in
libavcore/parseutils.h.
This change also adds a linking-time dependency of libavcodec and of
libavfilter on libavcore.
author | stefano |
---|---|
date | Mon, 26 Jul 2010 23:12:28 +0000 |
parents | a644213e4818 |
children | b7595fe2d4a4 |
files | Makefile avcore.h parseutils.c parseutils.h |
diffstat | 4 files changed, 207 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Wed Jul 21 18:28:42 2010 +0000 +++ b/Makefile Mon Jul 26 23:12:28 2010 +0000 @@ -3,7 +3,9 @@ NAME = avcore HEADERS = avcore.h \ + parseutils.h \ -OBJS = utils.o \ +OBJS = parseutils.o \ + utils.o \ include $(SUBDIR)../subdir.mak
--- a/avcore.h Wed Jul 21 18:28:42 2010 +0000 +++ b/avcore.h Mon Jul 26 23:12:28 2010 +0000 @@ -27,7 +27,7 @@ #include <libavutil/avutil.h> #define LIBAVCORE_VERSION_MAJOR 0 -#define LIBAVCORE_VERSION_MINOR 0 +#define LIBAVCORE_VERSION_MINOR 1 #define LIBAVCORE_VERSION_MICRO 0 #define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parseutils.c Mon Jul 26 23:12:28 2010 +0000 @@ -0,0 +1,150 @@ +/* + * 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 + */ + +/** + * @file + * misc parsing utilities for libavcore + */ + +#include "parseutils.h" +#include "libavutil/avutil.h" + +typedef struct { + const char *abbr; + int width, height; +} VideoFrameSizeAbbr; + +typedef struct { + const char *abbr; + int rate_num, rate_den; +} VideoFrameRateAbbr; + +static const VideoFrameSizeAbbr video_frame_size_abbrs[] = { + { "ntsc", 720, 480 }, + { "pal", 720, 576 }, + { "qntsc", 352, 240 }, /* VCD compliant NTSC */ + { "qpal", 352, 288 }, /* VCD compliant PAL */ + { "sntsc", 640, 480 }, /* square pixel NTSC */ + { "spal", 768, 576 }, /* square pixel PAL */ + { "film", 352, 240 }, + { "ntsc-film", 352, 240 }, + { "sqcif", 128, 96 }, + { "qcif", 176, 144 }, + { "cif", 352, 288 }, + { "4cif", 704, 576 }, + { "16cif", 1408,1152 }, + { "qqvga", 160, 120 }, + { "qvga", 320, 240 }, + { "vga", 640, 480 }, + { "svga", 800, 600 }, + { "xga", 1024, 768 }, + { "uxga", 1600,1200 }, + { "qxga", 2048,1536 }, + { "sxga", 1280,1024 }, + { "qsxga", 2560,2048 }, + { "hsxga", 5120,4096 }, + { "wvga", 852, 480 }, + { "wxga", 1366, 768 }, + { "wsxga", 1600,1024 }, + { "wuxga", 1920,1200 }, + { "woxga", 2560,1600 }, + { "wqsxga", 3200,2048 }, + { "wquxga", 3840,2400 }, + { "whsxga", 6400,4096 }, + { "whuxga", 7680,4800 }, + { "cga", 320, 200 }, + { "ega", 640, 350 }, + { "hd480", 852, 480 }, + { "hd720", 1280, 720 }, + { "hd1080", 1920,1080 }, +}; + +static const VideoFrameRateAbbr video_frame_rate_abbrs[]= { + { "ntsc", 30000, 1001 }, + { "pal", 25, 1 }, + { "qntsc", 30000, 1001 }, /* VCD compliant NTSC */ + { "qpal", 25, 1 }, /* VCD compliant PAL */ + { "sntsc", 30000, 1001 }, /* square pixel NTSC */ + { "spal", 25, 1 }, /* square pixel PAL */ + { "film", 24, 1 }, + { "ntsc-film", 24000, 1001 }, +}; + +int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str) +{ + int i; + int n = FF_ARRAY_ELEMS(video_frame_size_abbrs); + char *p; + int frame_width = 0, frame_height = 0; + + for (i = 0; i < n; i++) { + if (!strcmp(video_frame_size_abbrs[i].abbr, str)) { + frame_width = video_frame_size_abbrs[i].width; + frame_height = video_frame_size_abbrs[i].height; + break; + } + } + if (i == n) { + p = str; + frame_width = strtol(p, &p, 10); + if (*p) + p++; + frame_height = strtol(p, &p, 10); + } + if (frame_width <= 0 || frame_height <= 0) + return -1; + *width_ptr = frame_width; + *height_ptr = frame_height; + return 0; +} + +int av_parse_video_rate(AVRational *frame_rate, const char *arg) +{ + int i; + int n = FF_ARRAY_ELEMS(video_frame_rate_abbrs); + char *cp; + + /* First, we check our abbreviation table */ + for (i = 0; i < n; ++i) + if (!strcmp(video_frame_rate_abbrs[i].abbr, arg)) { + frame_rate->num = video_frame_rate_abbrs[i].rate_num; + frame_rate->den = video_frame_rate_abbrs[i].rate_den; + return 0; + } + + /* Then, we try to parse it as fraction */ + cp = strchr(arg, '/'); + if (!cp) + cp = strchr(arg, ':'); + if (cp) { + char *cpp; + frame_rate->num = strtol(arg, &cpp, 10); + if (cpp != arg || cpp == cp) + frame_rate->den = strtol(cp+1, &cpp, 10); + else + frame_rate->num = 0; + } else { + /* Finally we give up and parse it as double */ + AVRational time_base = av_d2q(strtod(arg, 0), 1001000); + frame_rate->den = time_base.den; + frame_rate->num = time_base.num; + } + if (frame_rate->num <= 0 || frame_rate->den <= 0) + return -1; + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parseutils.h Mon Jul 26 23:12:28 2010 +0000 @@ -0,0 +1,53 @@ +/* + * 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 + */ + +#ifndef AVCORE_PARSEUTILS_H +#define AVCORE_PARSEUTILS_H + +#include <libavutil/rational.h> + +/** + * @file + * misc parsing utilities for libavcore + */ + +/** + * Parse str and put in width_ptr and height_ptr the detected values. + * + * @param[in,out] width_ptr pointer to the variable which will contain the detected + * frame width value + * @param[in,out] height_ptr pointer to the variable which will contain the detected + * frame height value + * @param[in] str the string to parse: it has to be a string in the format + * width x height or a valid video frame size abbreviation. + * @return >= 0 on success, a negative error code otherwise + */ +int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); + +/** + * Parse str and store the detected values in *frame_rate. + * + * @param[in,out] frame_rate pointer to the AVRational which will contain the detected + * frame rate + * @param[in] str the string to parse: it has to be a string in the format + * frame_rate_num / frame_rate_den, a float number or a valid video rate abbreviation + * @return >= 0 on success, a negative error code otherwise + */ +int av_parse_video_rate(AVRational *frame_rate, const char *str); + +#endif /* AVCORE_PARSEUTILS_H */