2025-03-09 23:45:43 +09:00

50 lines
1.4 KiB
C

/*
* Audio frame
*/
#define AUDIO_TIMEBASE 1000000U
/**
* Defines a frame of audio samples
*/
struct auframe {
enum aufmt fmt; /**< Sample format (enum aufmt) */
uint32_t srate; /**< Samplerate */
void *sampv; /**< Audio samples (must be mem_ref'd) */
size_t sampc; /**< Total number of audio samples */
uint64_t timestamp; /**< Timestamp in AUDIO_TIMEBASE units */
double level; /**< Audio level in dBov */
uint16_t id; /**< Frame/Channel identifier */
uint8_t ch; /**< Channels */
uint8_t padding[5];
};
void auframe_init(struct auframe *af, enum aufmt fmt, void *sampv,
size_t sampc, uint32_t srate, uint8_t ch);
/**
* Update an audio frame
*
* @param af Audio frame
* @param sampv Audio samples
* @param sampc Total number of audio samples
* @param timestamp Timestamp in AUDIO_TIMEBASE units
*/
static inline void auframe_update(struct auframe *af, void *sampv,
size_t sampc, uint64_t timestamp)
{
if (!af)
return;
af->sampv = sampv;
af->sampc = sampc;
af->timestamp = timestamp;
af->level = AULEVEL_UNDEF;
}
size_t auframe_size(const struct auframe *af);
void auframe_mute(struct auframe *af);
double auframe_level(struct auframe *af);
uint64_t auframe_bytes_to_timestamp(const struct auframe *af, size_t n);
uint64_t auframe_bytes_to_ms(const struct auframe *af, size_t n);