| @@ -28,6 +28,7 @@ · 27 unmodified lines |
| 28 | 28 | #include "libavutil/bprint.h" |
| 29 | 29 | #include "libavutil/dict.h" |
| 30 | 30 | #include "libavutil/internal.h" |
| 31 | +#include "libavutil/intmath.h" |
| 31 | 32 | #include "libavutil/opt.h" |
| 32 | 33 | #include "libavutil/parseutils.h" |
| 33 | 34 | #include "libavutil/pixfmt.h" |
| @@ -1965,3 +1966,49 @@ void ff_format_set_url(AVFormatContext *s, char *url) · 1931 unmodified lines |
| 1965 | 1966 | av_freep(&s->url); |
| 1966 | 1967 | s->url = url; |
| 1967 | 1968 | } |
| 1969 | + |
| 1970 | +static const struct { |
| 1971 | + const char *str; |
| 1972 | + int disposition; |
| 1973 | +} dispositions[] = { |
| 1974 | + { "default", AV_DISPOSITION_DEFAULT }, |
| 1975 | + { "dub", AV_DISPOSITION_DUB }, |
| 1976 | + { "original", AV_DISPOSITION_ORIGINAL }, |
| 1977 | + { "comment", AV_DISPOSITION_COMMENT }, |
| 1978 | + { "lyrics", AV_DISPOSITION_LYRICS }, |
| 1979 | + { "karaoke", AV_DISPOSITION_KARAOKE }, |
| 1980 | + { "forced", AV_DISPOSITION_FORCED }, |
| 1981 | + { "hearing_impaired", AV_DISPOSITION_HEARING_IMPAIRED }, |
| 1982 | + { "visual_impaired", AV_DISPOSITION_VISUAL_IMPAIRED }, |
| 1983 | + { "clean_effects", AV_DISPOSITION_CLEAN_EFFECTS }, |
| 1984 | + { "attached_pic", AV_DISPOSITION_ATTACHED_PIC }, |
| 1985 | + { "timed_thumbnails", AV_DISPOSITION_TIMED_THUMBNAILS }, |
| 1986 | + { "captions", AV_DISPOSITION_CAPTIONS }, |
| 1987 | + { "descriptions", AV_DISPOSITION_DESCRIPTIONS }, |
| 1988 | + { "metadata", AV_DISPOSITION_METADATA }, |
| 1989 | + { "dependent", AV_DISPOSITION_DEPENDENT }, |
| 1990 | + { "still_image", AV_DISPOSITION_STILL_IMAGE }, |
| 1991 | +}; |
| 1992 | + |
| 1993 | +int av_disposition_from_string(const char *disp) |
| 1994 | +{ |
| 1995 | + for (int i = 0; i < FF_ARRAY_ELEMS(dispositions); i++) |
| 1996 | + if (!strcmp(disp, dispositions[i].str)) |
| 1997 | + return dispositions[i].disposition; |
| 1998 | + return AVERROR(EINVAL); |
| 1999 | +} |
| 2000 | + |
| 2001 | +const char *av_disposition_to_string(int disposition) |
| 2002 | +{ |
| 2003 | + int val; |
| 2004 | + |
| 2005 | + if (disposition <= 0) |
| 2006 | + return NULL; |
| 2007 | + |
| 2008 | + val = 1 << ff_ctz(disposition); |
| 2009 | + for (int i = 0; i < FF_ARRAY_ELEMS(dispositions); i++) |
| 2010 | + if (dispositions[i].disposition == val) |
| 2011 | + return dispositions[i].str; |
| 2012 | + |
| 2013 | + return NULL; |
| 2014 | +} |