diff options
Diffstat (limited to 'src/audio_format.h')
-rw-r--r-- | src/audio_format.h | 136 |
1 files changed, 28 insertions, 108 deletions
diff --git a/src/audio_format.h b/src/audio_format.h index bb79de39..021aa10a 100644 --- a/src/audio_format.h +++ b/src/audio_format.h @@ -27,27 +27,6 @@ #include <libavutil/samplefmt.h> -enum sample_format { - SAMPLE_FORMAT_UNDEFINED = 0, - - SAMPLE_FORMAT_S8, - SAMPLE_FORMAT_S16, - - /** - * Signed 24 bit integer samples, packed in 32 bit integers - * (the most significant byte is filled with the sign bit). - */ - SAMPLE_FORMAT_S24_P32, - - SAMPLE_FORMAT_S32, - - /** - * 32 bit floating point samples in the host's format. The - * range is -1.0f to +1.0f. - */ - SAMPLE_FORMAT_FLOAT, -}; - static const unsigned MAX_CHANNELS = 8; /** @@ -65,7 +44,7 @@ struct audio_format { * The format samples are stored in. See the #sample_format * enum for valid values. */ - uint8_t format; + enum AVSampleFormat format; /** * The number of channels. Only mono (1) and stereo (2) are @@ -88,7 +67,7 @@ struct audio_format_string { static inline void audio_format_clear(struct audio_format *af) { af->sample_rate = 0; - af->format = SAMPLE_FORMAT_UNDEFINED; + af->format = AV_SAMPLE_FMT_NONE; af->channels = 0; } @@ -98,11 +77,11 @@ static inline void audio_format_clear(struct audio_format *af) */ static inline void audio_format_init(struct audio_format *af, uint32_t sample_rate, - enum sample_format format, uint8_t channels) + enum AVSampleFormat format, uint8_t channels) { - af->sample_rate = sample_rate; - af->format = (uint8_t)format; - af->channels = channels; + af->sample_rate = sample_rate; + af->format = format; + af->channels = channels; } /** @@ -119,11 +98,10 @@ static inline bool audio_format_defined(const struct audio_format *af) * attributes are defined. This is more complete than * audio_format_defined(), but slower. */ -static inline bool -audio_format_fully_defined(const struct audio_format *af) +static inline bool audio_format_fully_defined(const struct audio_format *af) { - return af->sample_rate != 0 && af->format != SAMPLE_FORMAT_UNDEFINED && - af->channels != 0; + return af->sample_rate != 0 && af->format != AV_SAMPLE_FMT_NONE && + af->channels != 0; } /** @@ -133,8 +111,8 @@ audio_format_fully_defined(const struct audio_format *af) static inline bool audio_format_mask_defined(const struct audio_format *af) { - return af->sample_rate != 0 || af->format != SAMPLE_FORMAT_UNDEFINED || - af->channels != 0; + return af->sample_rate != 0 || af->format != AV_SAMPLE_FMT_NONE || + af->channels != 0; } /** @@ -153,22 +131,9 @@ audio_valid_sample_rate(unsigned sample_rate) * * @param bits the number of significant bits per sample */ -static inline bool -audio_valid_sample_format(enum sample_format format) +static inline bool audio_valid_sample_format(enum AVSampleFormat format) { - switch (format) { - case SAMPLE_FORMAT_S8: - case SAMPLE_FORMAT_S16: - case SAMPLE_FORMAT_S24_P32: - case SAMPLE_FORMAT_S32: - case SAMPLE_FORMAT_FLOAT: - return true; - - case SAMPLE_FORMAT_UNDEFINED: - break; - } - - return false; + return format != AV_SAMPLE_FMT_NONE; } /** @@ -184,26 +149,24 @@ audio_valid_channel_count(unsigned channels) * Returns false if the format is not valid for playback with MPD. * This function performs some basic validity checks. */ -G_GNUC_PURE static inline bool audio_format_valid(const struct audio_format *af) { - return audio_valid_sample_rate(af->sample_rate) && - audio_valid_sample_format((enum sample_format)af->format) && - audio_valid_channel_count(af->channels); + return audio_valid_sample_rate(af->sample_rate) && + audio_valid_sample_format(af->format) && + audio_valid_channel_count(af->channels); } /** * Returns false if the format mask is not valid for playback with * MPD. This function performs some basic validity checks. */ -G_GNUC_PURE static inline bool audio_format_mask_valid(const struct audio_format *af) { - return (af->sample_rate == 0 || - audio_valid_sample_rate(af->sample_rate)) && - (af->format == SAMPLE_FORMAT_UNDEFINED || - audio_valid_sample_format((enum sample_format)af->format)) && - (af->channels == 0 || audio_valid_channel_count(af->channels)); + return (af->sample_rate == 0 || + audio_valid_sample_rate(af->sample_rate)) && + (af->format == AV_SAMPLE_FMT_NONE || + audio_valid_sample_format(af->format)) && + (af->channels == 0 || audio_valid_channel_count(af->channels)); } static inline bool audio_format_equals(const struct audio_format *a, @@ -214,58 +177,21 @@ static inline bool audio_format_equals(const struct audio_format *a, a->channels == b->channels; } -void -audio_format_mask_apply(struct audio_format *af, - const struct audio_format *mask); - -G_GNUC_CONST -static inline unsigned -sample_format_size(enum sample_format format) -{ - switch (format) { - case SAMPLE_FORMAT_S8: - return 1; - - case SAMPLE_FORMAT_S16: - return 2; - - case SAMPLE_FORMAT_S24_P32: - case SAMPLE_FORMAT_S32: - case SAMPLE_FORMAT_FLOAT: - return 4; - - case SAMPLE_FORMAT_UNDEFINED: - return 0; - } - - assert(false); - return 0; -} - -/** - * Returns the size of each (mono) sample in bytes. - */ -G_GNUC_PURE -static inline unsigned audio_format_sample_size(const struct audio_format *af) -{ - return sample_format_size((enum sample_format)af->format); -} +void audio_format_mask_apply(struct audio_format *af, + const struct audio_format *mask); /** * Returns the size of each full frame in bytes. */ -G_GNUC_PURE -static inline unsigned -audio_format_frame_size(const struct audio_format *af) +static inline unsigned audio_format_frame_size(const struct audio_format *af) { - return audio_format_sample_size(af) * af->channels; + return av_get_bytes_per_sample(af->format) * af->channels; } /** * Returns the floating point factor which converts a time span to a * storage size in bytes. */ -G_GNUC_PURE static inline double audio_format_time_to_size(const struct audio_format *af) { return af->sample_rate * audio_format_frame_size(af); @@ -278,9 +204,7 @@ static inline double audio_format_time_to_size(const struct audio_format *af) * @param format a #sample_format enum value * @return the string */ -G_GNUC_PURE G_GNUC_MALLOC -const char * -sample_format_to_string(enum sample_format format); +const char *sample_format_to_string(enum AVSampleFormat format); /** * Renders the #audio_format object into a string, e.g. for printing @@ -290,11 +214,7 @@ sample_format_to_string(enum sample_format format); * @param s a buffer to print into * @return the string, or NULL if the #audio_format object is invalid */ -G_GNUC_PURE G_GNUC_MALLOC -const char * -audio_format_to_string(const struct audio_format *af, - struct audio_format_string *s); - -enum AVSampleFormat sample_fmt_native_to_libav(enum sample_format); +const char *audio_format_to_string(const struct audio_format *af, + struct audio_format_string *s); #endif |