History

lavu/opt: add AV_OPT_VIDEO_RATE option

Paul B Mahol committed 13 years ago

Commit 7aa9af51 parent 7d29c6e4 files · +67 −2Browse files

Unified · Split

4 files
  1. doc/APIchanges +3 −0
  2. libavutil/opt.c +60 −1
  3. libavutil/opt.h +3 −0
  4. libavutil/version.h +1 −1
doc/APIchanges+3−0
@@ -15,6 +15,9 @@ libavutil: 2012-10-22 · 14 unmodified lines
1515
1616 API changes, most recent first:
1717
18+2013-03-17 - xxxxxx - lavu 52.20.100 - opt.h
19+ Add AV_OPT_TYPE_VIDEO_RATE value to AVOptionType enum.
20+
1821 2013-03-07 - xxxxxx - lavu 52.18.100 - avstring.h,bprint.h
1922 Add av_escape() and av_bprint_escape() API.
2023
libavutil/opt.c+60−1
@@ -256,7 +256,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) · 255 unmodified lines
256256 return AVERROR_OPTION_NOT_FOUND;
257257 if (!val && (o->type != AV_OPT_TYPE_STRING &&
258258 o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT &&
259− o->type != AV_OPT_TYPE_IMAGE_SIZE))
259+ o->type != AV_OPT_TYPE_IMAGE_SIZE && o->type != AV_OPT_TYPE_VIDEO_RATE))
260260 return AVERROR(EINVAL);
261261
262262 dst = ((uint8_t*)target_obj) + o->offset;
@@ -278,6 +278,15 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) · 15 unmodified lines
278278 if (ret < 0)
279279 av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as image size\n", val);
280280 return ret;
281+ case AV_OPT_TYPE_VIDEO_RATE:
282+ if (!val) {
283+ ret = AVERROR(EINVAL);
284+ } else {
285+ ret = av_parse_video_rate(dst, val);
286+ }
287+ if (ret < 0)
288+ av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as video rate\n", val);
289+ return ret;
281290 case AV_OPT_TYPE_PIXEL_FMT:
282291 if (!val || !strcmp(val, "none")) {
283292 ret = AV_PIX_FMT_NONE;
@@ -436,6 +445,23 @@ int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_ · 152 unmodified lines
436445 return 0;
437446 }
438447
448+int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags)
449+{
450+ void *target_obj;
451+ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj);
452+
453+ if (!o || !target_obj)
454+ return AVERROR_OPTION_NOT_FOUND;
455+ if (o->type != AV_OPT_TYPE_VIDEO_RATE) {
456+ av_log(obj, AV_LOG_ERROR,
457+ "The value set by option '%s' is not a video rate.\n", o->name);
458+ return AVERROR(EINVAL);
459+ }
460+ if (val.num <= 0 || val.den <= 0)
461+ return AVERROR(EINVAL);
462+ return set_number(obj, name, val.num, val.den, 1, search_flags);
463+}
464+
439465 static int set_format(void *obj, const char *name, int fmt, int search_flags,
440466 enum AVOptionType type, const char *desc, int nb_fmts)
441467 {
@@ -543,6 +569,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) · 101 unmodified lines
543569 case AV_OPT_TYPE_INT64: ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t*)dst);break;
544570 case AV_OPT_TYPE_FLOAT: ret = snprintf(buf, sizeof(buf), "%f" , *(float *)dst);break;
545571 case AV_OPT_TYPE_DOUBLE: ret = snprintf(buf, sizeof(buf), "%f" , *(double *)dst);break;
572+ case AV_OPT_TYPE_VIDEO_RATE:
546573 case AV_OPT_TYPE_RATIONAL: ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break;
547574 case AV_OPT_TYPE_CONST: ret = snprintf(buf, sizeof(buf), "%f" , o->default_val.dbl);break;
548575 case AV_OPT_TYPE_STRING:
@@ -695,6 +722,22 @@ int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_ · 146 unmodified lines
695722 return 0;
696723 }
697724
725+int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val)
726+{
727+ int64_t intnum = 1;
728+ double num = 1;
729+ int ret, den = 1;
730+
731+ if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0)
732+ return ret;
733+
734+ if (num == 1.0 && (int)intnum == intnum)
735+ *out_val = (AVRational){intnum, den};
736+ else
737+ *out_val = av_d2q(num*intnum/den, 1<<24);
738+ return 0;
739+}
740+
698741 static int get_format(void *obj, const char *name, int search_flags, int *out_fmt,
699742 enum AVOptionType type, const char *desc)
700743 {
@@ -809,6 +852,9 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, · 108 unmodified lines
809852 case AV_OPT_TYPE_IMAGE_SIZE:
810853 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<image_size>");
811854 break;
855+ case AV_OPT_TYPE_VIDEO_RATE:
856+ av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<video_rate>");
857+ break;
812858 case AV_OPT_TYPE_PIXEL_FMT:
813859 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<pix_fmt>");
814860 break;
@@ -908,6 +954,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags) · 93 unmodified lines
908954 break;
909955 case AV_OPT_TYPE_STRING:
910956 case AV_OPT_TYPE_IMAGE_SIZE:
957+ case AV_OPT_TYPE_VIDEO_RATE:
911958 av_opt_set(s, opt->name, opt->default_val.str, 0);
912959 break;
913960 case AV_OPT_TYPE_PIXEL_FMT:
@@ -1270,6 +1317,12 @@ int av_opt_query_ranges_default(AVOptionRanges **ranges_arg, void *obj, const ch · 356 unmodified lines
12701317 range->value_min = 0;
12711318 range->value_max = INT_MAX/8;
12721319 break;
1320+ case AV_OPT_TYPE_VIDEO_RATE:
1321+ range->component_min = 1;
1322+ range->component_max = INT_MAX;
1323+ range->value_min = 1;
1324+ range->value_max = INT_MAX;
1325+ break;
12731326 default:
12741327 ret = AVERROR(ENOSYS);
12751328 goto fail;
@@ -1331,6 +1384,7 @@ static const AVOption test_options[]= { · 55 unmodified lines
13311384 {"size", "set size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE,{0}, 0, 0 },
13321385 {"pix_fmt", "set pixfmt", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT, {.i64 = AV_PIX_FMT_NONE}, -1, AV_PIX_FMT_NB-1},
13331386 {"sample_fmt", "set samplefmt", OFFSET(sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64 = AV_SAMPLE_FMT_NONE}, -1, AV_SAMPLE_FMT_NB-1},
1387+{"video_rate", "set videorate", OFFSET(video_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, 0 },
13341388 {NULL},
13351389 };
13361390
@@ -1381,6 +1435,11 @@ int main(void) · 44 unmodified lines
13811435 "sample_fmt=s16",
13821436 "sample_fmt=2",
13831437 "sample_fmt=bogus",
1438+ "video_rate=pal",
1439+ "video_rate=25",
1440+ "video_rate=30000/1001",
1441+ "video_rate=30/1.001",
1442+ "video_rate=bogus",
13841443 };
13851444
13861445 test_ctx.class = &test_class;
libavutil/opt.h+3−0
@@ -230,6 +230,7 @@ enum AVOptionType{ · 229 unmodified lines
230230 AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers
231231 AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'),
232232 AV_OPT_TYPE_SAMPLE_FMT = MKBETAG('S','F','M','T'),
233+ AV_OPT_TYPE_VIDEO_RATE = MKBETAG('V','R','A','T'), ///< offset must point to AVRational
233234 #if FF_API_OLD_AVOPTIONS
234235 FF_OPT_TYPE_FLAGS = 0,
235236 FF_OPT_TYPE_INT,
@@ -653,6 +654,7 @@ int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, · 417 unmodified lines
653654 int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags);
654655 int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
655656 int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
657+int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
656658 /**
657659 * @}
658660 */
@@ -679,6 +681,7 @@ int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational · 20 unmodified lines
679681 int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out);
680682 int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt);
681683 int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt);
684+int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val);
682685 /**
683686 * @}
684687 */
libavutil/version.h+1−1
@@ -75,7 +75,7 @@ · 74 unmodified lines
7575 */
7676
7777 #define LIBAVUTIL_VERSION_MAJOR 52
78−#define LIBAVUTIL_VERSION_MINOR 20
78+#define LIBAVUTIL_VERSION_MINOR 21
7979 #define LIBAVUTIL_VERSION_MICRO 100
8080
8181 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t