diff options
author | wm4 <wm4@nowhere> | 2013-10-22 01:01:41 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-10-22 01:01:41 +0200 |
commit | 33707c6d6394592f528fb200af2dd6e104fc6df6 (patch) | |
tree | 5f9aa685683d8dc952c4a2caf122a972414867fa /audio | |
parent | bb5fe4d874e2eded092e47812aea0e52ce1fa6cb (diff) | |
download | mpv-33707c6d6394592f528fb200af2dd6e104fc6df6.tar.bz2 mpv-33707c6d6394592f528fb200af2dd6e104fc6df6.tar.xz |
audio/format: add some helper functions
Diffstat (limited to 'audio')
-rw-r--r-- | audio/format.c | 30 | ||||
-rw-r--r-- | audio/format.h | 3 |
2 files changed, 33 insertions, 0 deletions
diff --git a/audio/format.c b/audio/format.c index aa6099022f..c6c617cf28 100644 --- a/audio/format.c +++ b/audio/format.c @@ -42,6 +42,27 @@ int af_fmt2bits(int format) return 0; } +static int bits_to_mask(int bits) +{ + switch (bits) { + case 8: return AF_FORMAT_8BIT; + case 16: return AF_FORMAT_16BIT; + case 24: return AF_FORMAT_24BIT; + case 32: return AF_FORMAT_32BIT; + case 64: return AF_FORMAT_64BIT; + } + return 0; +} + +int af_fmt_change_bits(int format, int bits) +{ + if (!af_fmt_is_valid(format) || (format & AF_FORMAT_SPECIAL_MASK)) + return 0; + int mask = bits_to_mask(bits); + format = (format & ~AF_FORMAT_BITS_MASK) | mask; + return af_fmt_is_valid(format) ? format : 0; +} + /* Convert format to str input str is a buffer for the converted string, size is the size of the buffer */ char* af_fmt2str(int format, char* str, int size) @@ -90,6 +111,15 @@ const struct af_fmt_entry af_fmtstr_table[] = { {0} }; +bool af_fmt_is_valid(int format) +{ + for (int i = 0; af_fmtstr_table[i].name; i++) { + if (af_fmtstr_table[i].format == format) + return true; + } + return false; +} + const char *af_fmt2str_short(int format) { int i; diff --git a/audio/format.h b/audio/format.h index e4173550c6..66eec17cd8 100644 --- a/audio/format.h +++ b/audio/format.h @@ -131,6 +131,7 @@ extern const struct af_fmt_entry af_fmtstr_table[]; int af_str2fmt_short(bstr str); int af_fmt2bits(int format); +int af_fmt_change_bits(int format, int bits); // Amount of bytes that contain audio of the given duration, aligned to frames. int af_fmt_seconds_to_bytes(int format, float seconds, int channels, int samplerate); @@ -138,4 +139,6 @@ int af_fmt_seconds_to_bytes(int format, float seconds, int channels, int sampler char* af_fmt2str(int format, char* str, int size); const char* af_fmt2str_short(int format); +bool af_fmt_is_valid(int format); + #endif /* MPLAYER_AF_FORMAT_H */ |