| @@ -35,6 +35,7 @@ · 34 unmodified lines |
| 35 | #include "parseutils.h" | 35 | #include "parseutils.h" |
| 36 | #include "pixdesc.h" | 36 | #include "pixdesc.h" |
| 37 | #include "mathematics.h" | 37 | #include "mathematics.h" |
| | 38 | #include "samplefmt.h" |
| 38 | | 39 | |
| 39 | #if FF_API_FIND_OPT | 40 | #if FF_API_FIND_OPT |
| 40 | //FIXME order them and do a bin search | 41 | //FIXME order them and do a bin search |
| @@ -279,6 +280,22 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) · 238 unmodified lines |
| 279 | } | 280 | } |
| 280 | *(enum AVPixelFormat *)dst = ret; | 281 | *(enum AVPixelFormat *)dst = ret; |
| 281 | return 0; | 282 | return 0; |
| | 283 | case AV_OPT_TYPE_SAMPLE_FMT: |
| | 284 | if (!val || !strcmp(val, "none")) { |
| | 285 | ret = AV_SAMPLE_FMT_NONE; |
| | 286 | } else { |
| | 287 | ret = av_get_sample_fmt(val); |
| | 288 | if (ret == AV_SAMPLE_FMT_NONE) { |
| | 289 | char *tail; |
| | 290 | ret = strtol(val, &tail, 0); |
| | 291 | if (*tail || (unsigned)ret >= AV_SAMPLE_FMT_NB) { |
| | 292 | av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as sample format\n", val); |
| | 293 | return AVERROR(EINVAL); |
| | 294 | } |
| | 295 | } |
| | 296 | } |
| | 297 | *(enum AVSampleFormat *)dst = ret; |
| | 298 | return 0; |
| 282 | } | 299 | } |
| 283 | | 300 | |
| 284 | av_log(obj, AV_LOG_ERROR, "Invalid option type.\n"); | 301 | av_log(obj, AV_LOG_ERROR, "Invalid option type.\n"); |
| @@ -467,6 +484,9 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) · 182 unmodified lines |
| 467 | case AV_OPT_TYPE_PIXEL_FMT: | 484 | case AV_OPT_TYPE_PIXEL_FMT: |
| 468 | ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum AVPixelFormat *)dst), "none")); | 485 | ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum AVPixelFormat *)dst), "none")); |
| 469 | break; | 486 | break; |
| | 487 | case AV_OPT_TYPE_SAMPLE_FMT: |
| | 488 | ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_sample_fmt_name(*(enum AVSampleFormat *)dst), "none")); |
| | 489 | break; |
| 470 | default: | 490 | default: |
| 471 | return AVERROR(EINVAL); | 491 | return AVERROR(EINVAL); |
| 472 | } | 492 | } |
| @@ -642,6 +662,9 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, · 169 unmodified lines |
| 642 | case AV_OPT_TYPE_PIXEL_FMT: | 662 | case AV_OPT_TYPE_PIXEL_FMT: |
| 643 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<pix_fmt>"); | 663 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<pix_fmt>"); |
| 644 | break; | 664 | break; |
| | 665 | case AV_OPT_TYPE_SAMPLE_FMT: |
| | 666 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<sample_fmt>"); |
| | 667 | break; |
| 645 | case AV_OPT_TYPE_CONST: | 668 | case AV_OPT_TYPE_CONST: |
| 646 | default: | 669 | default: |
| 647 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", ""); | 670 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", ""); |
| @@ -992,6 +1015,7 @@ typedef struct TestContext · 344 unmodified lines |
| 992 | AVRational rational; | 1015 | AVRational rational; |
| 993 | int w, h; | 1016 | int w, h; |
| 994 | enum AVPixelFormat pix_fmt; | 1017 | enum AVPixelFormat pix_fmt; |
| | 1018 | enum AVSampleFormat sample_fmt; |
| 995 | } TestContext; | 1019 | } TestContext; |
| 996 | | 1020 | |
| 997 | #define OFFSET(x) offsetof(TestContext, x) | 1021 | #define OFFSET(x) offsetof(TestContext, x) |
| @@ -1011,6 +1035,7 @@ static const AVOption test_options[]= { · 13 unmodified lines |
| 1011 | {"mu", "set mu flag ", 0, AV_OPT_TYPE_CONST, {.i64 = TEST_FLAG_MU}, INT_MIN, INT_MAX, 0, "flags" }, | 1035 | {"mu", "set mu flag ", 0, AV_OPT_TYPE_CONST, {.i64 = TEST_FLAG_MU}, INT_MIN, INT_MAX, 0, "flags" }, |
| 1012 | {"size", "set size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE,{0}, 0, 0 }, | 1036 | {"size", "set size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE,{0}, 0, 0 }, |
| 1013 | {"pix_fmt", "set pixfmt", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT,{0}, 0, 0 }, | 1037 | {"pix_fmt", "set pixfmt", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT,{0}, 0, 0 }, |
| | 1038 | {"sample_fmt", "set samplefmt", OFFSET(sample_fmt), AV_OPT_TYPE_SAMPLE_FMT,{0}, 0, 0 }, |
| 1014 | {NULL}, | 1039 | {NULL}, |
| 1015 | }; | 1040 | }; |
| 1016 | | 1041 | |
| @@ -1058,6 +1083,9 @@ int main(void) · 41 unmodified lines |
| 1058 | "pix_fmt=yuv420p", | 1083 | "pix_fmt=yuv420p", |
| 1059 | "pix_fmt=2", | 1084 | "pix_fmt=2", |
| 1060 | "pix_fmt=bogus", | 1085 | "pix_fmt=bogus", |
| | 1086 | "sample_fmt=s16", |
| | 1087 | "sample_fmt=2", |
| | 1088 | "sample_fmt=bogus", |
| 1061 | }; | 1089 | }; |
| 1062 | | 1090 | |
| 1063 | test_ctx.class = &test_class; | 1091 | test_ctx.class = &test_class; |