| @@ -35,6 +35,7 @@ · 34 unmodified lines |
| 35 | 35 | #include "parseutils.h" |
| 36 | 36 | #include "pixdesc.h" |
| 37 | 37 | #include "mathematics.h" |
| 38 | +#include "samplefmt.h" |
| 38 | 39 | |
| 39 | 40 | #if FF_API_FIND_OPT |
| 40 | 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 | 281 | *(enum AVPixelFormat *)dst = ret; |
| 281 | 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 | 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 | 484 | case AV_OPT_TYPE_PIXEL_FMT: |
| 468 | 485 | ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum AVPixelFormat *)dst), "none")); |
| 469 | 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 | 490 | default: |
| 471 | 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 | 662 | case AV_OPT_TYPE_PIXEL_FMT: |
| 643 | 663 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<pix_fmt>"); |
| 644 | 664 | break; |
| 665 | + case AV_OPT_TYPE_SAMPLE_FMT: |
| 666 | + av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<sample_fmt>"); |
| 667 | + break; |
| 645 | 668 | case AV_OPT_TYPE_CONST: |
| 646 | 669 | default: |
| 647 | 670 | av_log(av_log_obj, AV_LOG_INFO, "%-7s ", ""); |
| @@ -992,6 +1015,7 @@ typedef struct TestContext · 344 unmodified lines |
| 992 | 1015 | AVRational rational; |
| 993 | 1016 | int w, h; |
| 994 | 1017 | enum AVPixelFormat pix_fmt; |
| 1018 | + enum AVSampleFormat sample_fmt; |
| 995 | 1019 | } TestContext; |
| 996 | 1020 | |
| 997 | 1021 | #define OFFSET(x) offsetof(TestContext, x) |
| @@ -1011,6 +1035,7 @@ static const AVOption test_options[]= { · 13 unmodified lines |
| 1011 | 1035 | {"mu", "set mu flag ", 0, AV_OPT_TYPE_CONST, {.i64 = TEST_FLAG_MU}, INT_MIN, INT_MAX, 0, "flags" }, |
| 1012 | 1036 | {"size", "set size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE,{0}, 0, 0 }, |
| 1013 | 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 | 1039 | {NULL}, |
| 1015 | 1040 | }; |
| 1016 | 1041 | |
| @@ -1058,6 +1083,9 @@ int main(void) · 41 unmodified lines |
| 1058 | 1083 | "pix_fmt=yuv420p", |
| 1059 | 1084 | "pix_fmt=2", |
| 1060 | 1085 | "pix_fmt=bogus", |
| 1086 | + "sample_fmt=s16", |
| 1087 | + "sample_fmt=2", |
| 1088 | + "sample_fmt=bogus", |
| 1061 | 1089 | }; |
| 1062 | 1090 | |
| 1063 | 1091 | test_ctx.class = &test_class; |