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
15 15
16API changes, most recent first:16API changes, most recent first:
17 17
182013-03-17 - xxxxxx - lavu 52.20.100 - opt.h
19 Add AV_OPT_TYPE_VIDEO_RATE value to AVOptionType enum.
20
182013-03-07 - xxxxxx - lavu 52.18.100 - avstring.h,bprint.h212013-03-07 - xxxxxx - lavu 52.18.100 - avstring.h,bprint.h
19 Add av_escape() and av_bprint_escape() API.22 Add av_escape() and av_bprint_escape() API.
20 23
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
256 return AVERROR_OPTION_NOT_FOUND;256 return AVERROR_OPTION_NOT_FOUND;
257 if (!val && (o->type != AV_OPT_TYPE_STRING &&257 if (!val && (o->type != AV_OPT_TYPE_STRING &&
258 o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT &&258 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))
260 return AVERROR(EINVAL);260 return AVERROR(EINVAL);
261 261
262 dst = ((uint8_t*)target_obj) + o->offset;262 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
278 if (ret < 0)278 if (ret < 0)
279 av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as image size\n", val);279 av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as image size\n", val);
280 return ret;280 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;
281 case AV_OPT_TYPE_PIXEL_FMT:290 case AV_OPT_TYPE_PIXEL_FMT:
282 if (!val || !strcmp(val, "none")) {291 if (!val || !strcmp(val, "none")) {
283 ret = AV_PIX_FMT_NONE;292 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
436 return 0;445 return 0;
437}446}
438 447
448int 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
439static int set_format(void *obj, const char *name, int fmt, int search_flags,465static int set_format(void *obj, const char *name, int fmt, int search_flags,
440 enum AVOptionType type, const char *desc, int nb_fmts)466 enum AVOptionType type, const char *desc, int nb_fmts)
441{467{
@@ -543,6 +569,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) · 101 unmodified lines
543 case AV_OPT_TYPE_INT64: ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t*)dst);break;569 case AV_OPT_TYPE_INT64: ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t*)dst);break;
544 case AV_OPT_TYPE_FLOAT: ret = snprintf(buf, sizeof(buf), "%f" , *(float *)dst);break;570 case AV_OPT_TYPE_FLOAT: ret = snprintf(buf, sizeof(buf), "%f" , *(float *)dst);break;
545 case AV_OPT_TYPE_DOUBLE: ret = snprintf(buf, sizeof(buf), "%f" , *(double *)dst);break;571 case AV_OPT_TYPE_DOUBLE: ret = snprintf(buf, sizeof(buf), "%f" , *(double *)dst);break;
572 case AV_OPT_TYPE_VIDEO_RATE:
546 case AV_OPT_TYPE_RATIONAL: ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break;573 case AV_OPT_TYPE_RATIONAL: ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break;
547 case AV_OPT_TYPE_CONST: ret = snprintf(buf, sizeof(buf), "%f" , o->default_val.dbl);break;574 case AV_OPT_TYPE_CONST: ret = snprintf(buf, sizeof(buf), "%f" , o->default_val.dbl);break;
548 case AV_OPT_TYPE_STRING:575 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
695 return 0;722 return 0;
696}723}
697 724
725int 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
698static int get_format(void *obj, const char *name, int search_flags, int *out_fmt,741static int get_format(void *obj, const char *name, int search_flags, int *out_fmt,
699 enum AVOptionType type, const char *desc)742 enum AVOptionType type, const char *desc)
700{743{
@@ -809,6 +852,9 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, · 108 unmodified lines
809 case AV_OPT_TYPE_IMAGE_SIZE:852 case AV_OPT_TYPE_IMAGE_SIZE:
810 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<image_size>");853 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<image_size>");
811 break;854 break;
855 case AV_OPT_TYPE_VIDEO_RATE:
856 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<video_rate>");
857 break;
812 case AV_OPT_TYPE_PIXEL_FMT:858 case AV_OPT_TYPE_PIXEL_FMT:
813 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<pix_fmt>");859 av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "<pix_fmt>");
814 break;860 break;
@@ -908,6 +954,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags) · 93 unmodified lines
908 break;954 break;
909 case AV_OPT_TYPE_STRING:955 case AV_OPT_TYPE_STRING:
910 case AV_OPT_TYPE_IMAGE_SIZE:956 case AV_OPT_TYPE_IMAGE_SIZE:
957 case AV_OPT_TYPE_VIDEO_RATE:
911 av_opt_set(s, opt->name, opt->default_val.str, 0);958 av_opt_set(s, opt->name, opt->default_val.str, 0);
912 break;959 break;
913 case AV_OPT_TYPE_PIXEL_FMT:960 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
1270 range->value_min = 0;1317 range->value_min = 0;
1271 range->value_max = INT_MAX/8;1318 range->value_max = INT_MAX/8;
1272 break;1319 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;
1273 default:1326 default:
1274 ret = AVERROR(ENOSYS);1327 ret = AVERROR(ENOSYS);
1275 goto fail;1328 goto fail;
@@ -1331,6 +1384,7 @@ static const AVOption test_options[]= { · 55 unmodified lines
1331{"size", "set size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE,{0}, 0, 0 },1384{"size", "set size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE,{0}, 0, 0 },
1332{"pix_fmt", "set pixfmt", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT, {.i64 = AV_PIX_FMT_NONE}, -1, AV_PIX_FMT_NB-1},1385{"pix_fmt", "set pixfmt", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT, {.i64 = AV_PIX_FMT_NONE}, -1, AV_PIX_FMT_NB-1},
1333{"sample_fmt", "set samplefmt", OFFSET(sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64 = AV_SAMPLE_FMT_NONE}, -1, AV_SAMPLE_FMT_NB-1},1386{"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 },
1334{NULL},1388{NULL},
1335};1389};
1336 1390
@@ -1381,6 +1435,11 @@ int main(void) · 44 unmodified lines
1381 "sample_fmt=s16",1435 "sample_fmt=s16",
1382 "sample_fmt=2",1436 "sample_fmt=2",
1383 "sample_fmt=bogus",1437 "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",
1384 };1443 };
1385 1444
1386 test_ctx.class = &test_class;1445 test_ctx.class = &test_class;
libavutil/opt.h+3−0
@@ -230,6 +230,7 @@ enum AVOptionType{ · 229 unmodified lines
230 AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers230 AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers
231 AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'),231 AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'),
232 AV_OPT_TYPE_SAMPLE_FMT = MKBETAG('S','F','M','T'),232 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
233#if FF_API_OLD_AVOPTIONS234#if FF_API_OLD_AVOPTIONS
234 FF_OPT_TYPE_FLAGS = 0,235 FF_OPT_TYPE_FLAGS = 0,
235 FF_OPT_TYPE_INT,236 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
653int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags);654int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags);
654int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);655int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
655int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);656int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
657int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
656/**658/**
657 * @}659 * @}
658 */660 */
@@ -679,6 +681,7 @@ int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational · 20 unmodified lines
679int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out);681int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out);
680int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt);682int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt);
681int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt);683int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt);
684int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val);
682/**685/**
683 * @}686 * @}
684 */687 */
libavutil/version.h+1−1
@@ -75,7 +75,7 @@ · 74 unmodified lines
75 */75 */
76 76
77#define LIBAVUTIL_VERSION_MAJOR 5277#define LIBAVUTIL_VERSION_MAJOR 52
78#define LIBAVUTIL_VERSION_MINOR 2078#define LIBAVUTIL_VERSION_MINOR 21
79#define LIBAVUTIL_VERSION_MICRO 10079#define LIBAVUTIL_VERSION_MICRO 100
80 80
81#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \81#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