Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/avcodec.h24
-rw-r--r--libavcodec/utils.c110
-rw-r--r--libavformat/avformat.h6
-rw-r--r--libavformat/utils.c110
4 files changed, 145 insertions, 105 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 77ef978348..6403e59e56 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2882,6 +2882,30 @@ attribute_deprecated int img_pad(AVPicture *dst, const AVPicture *src, int heigh
extern unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
+/**
+ * Parses \p str and put in \p width_ptr and \p height_ptr the detected values.
+ *
+ * @return 0 in case of a successfull parsing, a negative value otherwise
+ * @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.
+ * @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
+ */
+int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str);
+
+/**
+ * Parses \p str and put in \p frame_rate the detected values.
+ *
+ * @return 0 in case of a successfull parsing, a negative value otherwise
+ * @param[in] str the string to parse: it has to be a string in the format
+ * <frame_rate_nom>/<frame_rate_den>, a float number or a valid video rate abbreviation
+ * @param[in,out] frame_rate pointer to the AVRational which will contain the detected
+ * frame rate
+ */
+int av_parse_video_frame_rate(AVRational *frame_rate, const char *str);
+
/* error handling */
#if EINVAL > 0
#define AVERROR(e) (-(e)) /**< Returns a negative error code from a POSIX error code, to return from library functions. */
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index ef429beefe..f5534be1a9 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1347,3 +1347,113 @@ int av_tempfile(char *prefix, char **filename) {
}
return fd; /* success */
}
+
+typedef struct {
+ const char *abv;
+ int width, height;
+ int frame_rate, frame_rate_base;
+} AbvEntry;
+
+static AbvEntry frame_abvs[] = {
+ { "ntsc", 720, 480, 30000, 1001 },
+ { "pal", 720, 576, 25, 1 },
+ { "qntsc", 352, 240, 30000, 1001 }, /* VCD compliant ntsc */
+ { "qpal", 352, 288, 25, 1 }, /* VCD compliant pal */
+ { "sntsc", 640, 480, 30000, 1001 }, /* square pixel NTSC */
+ { "spal", 768, 576, 25, 1 }, /* square pixel PAL */
+ { "film", 352, 240, 24, 1 },
+ { "ntsc-film", 352, 240, 24000, 1001 },
+ { "sqcif", 128, 96, 0, 0 },
+ { "qcif", 176, 144, 0, 0 },
+ { "cif", 352, 288, 0, 0 },
+ { "4cif", 704, 576, 0, 0 },
+ { "qqvga", 160, 120, 0, 0 },
+ { "qvga", 320, 240, 0, 0 },
+ { "vga", 640, 480, 0, 0 },
+ { "svga", 800, 600, 0, 0 },
+ { "xga", 1024, 768, 0, 0 },
+ { "uxga", 1600,1200, 0, 0 },
+ { "qxga", 2048,1536, 0, 0 },
+ { "sxga", 1280,1024, 0, 0 },
+ { "qsxga", 2560,2048, 0, 0 },
+ { "hsxga", 5120,4096, 0, 0 },
+ { "wvga", 852, 480, 0, 0 },
+ { "wxga", 1366, 768, 0, 0 },
+ { "wsxga", 1600,1024, 0, 0 },
+ { "wuxga", 1920,1200, 0, 0 },
+ { "woxga", 2560,1600, 0, 0 },
+ { "wqsxga", 3200,2048, 0, 0 },
+ { "wquxga", 3840,2400, 0, 0 },
+ { "whsxga", 6400,4096, 0, 0 },
+ { "whuxga", 7680,4800, 0, 0 },
+ { "cga", 320, 200, 0, 0 },
+ { "ega", 640, 350, 0, 0 },
+ { "hd480", 852, 480, 0, 0 },
+ { "hd720", 1280, 720, 0, 0 },
+ { "hd1080", 1920,1080, 0, 0 },
+};
+
+int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str)
+{
+ int i;
+ int n = sizeof(frame_abvs) / sizeof(AbvEntry);
+ const char *p;
+ int frame_width = 0, frame_height = 0;
+
+ for(i=0;i<n;i++) {
+ if (!strcmp(frame_abvs[i].abv, str)) {
+ frame_width = frame_abvs[i].width;
+ frame_height = frame_abvs[i].height;
+ break;
+ }
+ }
+ if (i == n) {
+ p = str;
+ frame_width = strtol(p, (char **)&p, 10);
+ if (*p)
+ p++;
+ frame_height = strtol(p, (char **)&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_frame_rate(AVRational *frame_rate, const char *arg)
+{
+ int i;
+ char* cp;
+
+ /* First, we check our abbreviation table */
+ for (i = 0; i < sizeof(frame_abvs)/sizeof(*frame_abvs); ++i)
+ if (!strcmp(frame_abvs[i].abv, arg)) {
+ frame_rate->num = frame_abvs[i].frame_rate;
+ frame_rate->den = frame_abvs[i].frame_rate_base;
+ 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), DEFAULT_FRAME_RATE_BASE);
+ frame_rate->den = time_base.den;
+ frame_rate->num = time_base.num;
+ }
+ if (!frame_rate->num || !frame_rate->den)
+ return -1;
+ else
+ return 0;
+}
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index fa9be314e4..0fda3d9147 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -763,13 +763,15 @@ void dump_format(AVFormatContext *ic,
/**
* parses width and height out of string str.
+ * @deprecated Use av_parse_video_frame_size instead.
*/
-int parse_image_size(int *width_ptr, int *height_ptr, const char *str);
+attribute_deprecated int parse_image_size(int *width_ptr, int *height_ptr, const char *str);
/**
* Converts frame rate from string to a fraction.
+ * @deprecated Use av_parse_video_frame_rate instead.
*/
-int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg);
+attribute_deprecated int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg);
/**
* Converts date string to number of seconds since Jan 1st, 1970.
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 0b7b5ee402..54cb3a40c8 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2482,114 +2482,18 @@ void dump_format(AVFormatContext *ic,
}
}
-typedef struct {
- const char *abv;
- int width, height;
- int frame_rate, frame_rate_base;
-} AbvEntry;
-
-static AbvEntry frame_abvs[] = {
- { "ntsc", 720, 480, 30000, 1001 },
- { "pal", 720, 576, 25, 1 },
- { "qntsc", 352, 240, 30000, 1001 }, /* VCD compliant ntsc */
- { "qpal", 352, 288, 25, 1 }, /* VCD compliant pal */
- { "sntsc", 640, 480, 30000, 1001 }, /* square pixel ntsc */
- { "spal", 768, 576, 25, 1 }, /* square pixel pal */
- { "film", 352, 240, 24, 1 },
- { "ntsc-film", 352, 240, 24000, 1001 },
- { "sqcif", 128, 96, 0, 0 },
- { "qcif", 176, 144, 0, 0 },
- { "cif", 352, 288, 0, 0 },
- { "4cif", 704, 576, 0, 0 },
- { "qqvga", 160, 120, 0, 0 },
- { "qvga", 320, 240, 0, 0 },
- { "vga", 640, 480, 0, 0 },
- { "svga", 800, 600, 0, 0 },
- { "xga", 1024, 768, 0, 0 },
- { "uxga", 1600,1200, 0, 0 },
- { "qxga", 2048,1536, 0, 0 },
- { "sxga", 1280,1024, 0, 0 },
- { "qsxga", 2560,2048, 0, 0 },
- { "hsxga", 5120,4096, 0, 0 },
- { "wvga", 852, 480, 0, 0 },
- { "wxga", 1366, 768, 0, 0 },
- { "wsxga", 1600,1024, 0, 0 },
- { "wuxga", 1920,1200, 0, 0 },
- { "woxga", 2560,1600, 0, 0 },
- { "wqsxga", 3200,2048, 0, 0 },
- { "wquxga", 3840,2400, 0, 0 },
- { "whsxga", 6400,4096, 0, 0 },
- { "whuxga", 7680,4800, 0, 0 },
- { "cga", 320, 200, 0, 0 },
- { "ega", 640, 350, 0, 0 },
- { "hd480", 852, 480, 0, 0 },
- { "hd720", 1280, 720, 0, 0 },
- { "hd1080", 1920,1080, 0, 0 },
-};
-
int parse_image_size(int *width_ptr, int *height_ptr, const char *str)
{
- int i;
- int n = sizeof(frame_abvs) / sizeof(AbvEntry);
- const char *p;
- int frame_width = 0, frame_height = 0;
-
- for(i=0;i<n;i++) {
- if (!strcmp(frame_abvs[i].abv, str)) {
- frame_width = frame_abvs[i].width;
- frame_height = frame_abvs[i].height;
- break;
- }
- }
- if (i == n) {
- p = str;
- frame_width = strtol(p, (char **)&p, 10);
- if (*p)
- p++;
- frame_height = strtol(p, (char **)&p, 10);
- }
- if (frame_width <= 0 || frame_height <= 0)
- return -1;
- *width_ptr = frame_width;
- *height_ptr = frame_height;
- return 0;
+ return av_parse_video_frame_size(width_ptr, height_ptr, str);
}
-int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg)
+int parse_frame_rate(int *frame_rate_num, int *frame_rate_den, const char *arg)
{
- int i;
- char* cp;
-
- /* First, we check our abbreviation table */
- for (i = 0; i < sizeof(frame_abvs)/sizeof(*frame_abvs); ++i)
- if (!strcmp(frame_abvs[i].abv, arg)) {
- *frame_rate = frame_abvs[i].frame_rate;
- *frame_rate_base = frame_abvs[i].frame_rate_base;
- return 0;
- }
-
- /* Then, we try to parse it as fraction */
- cp = strchr(arg, '/');
- if (!cp)
- cp = strchr(arg, ':');
- if (cp) {
- char* cpp;
- *frame_rate = strtol(arg, &cpp, 10);
- if (cpp != arg || cpp == cp)
- *frame_rate_base = strtol(cp+1, &cpp, 10);
- else
- *frame_rate = 0;
- }
- else {
- /* Finally we give up and parse it as double */
- AVRational time_base = av_d2q(strtod(arg, 0), DEFAULT_FRAME_RATE_BASE);
- *frame_rate_base = time_base.den;
- *frame_rate = time_base.num;
- }
- if (!*frame_rate || !*frame_rate_base)
- return -1;
- else
- return 0;
+ AVRational frame_rate;
+ int ret = av_parse_video_frame_rate(&frame_rate, arg);
+ *frame_rate_num= frame_rate.num;
+ *frame_rate_den= frame_rate.den;
+ return ret;
}
int64_t parse_date(const char *datestr, int duration)