static bool wave_encoder_open(struct encoder *_encoder, G_GNUC_UNUSED struct audio_format *audio_format, G_GNUC_UNUSED GError **error) { struct wave_encoder *encoder = (struct wave_encoder *)_encoder; assert(audio_format_valid(audio_format)); switch (audio_format->format) { case SAMPLE_FORMAT_S8: encoder->bits = 8; break; case SAMPLE_FORMAT_S16: encoder->bits = 16; break; case SAMPLE_FORMAT_S24: audio_format->format = SAMPLE_FORMAT_S24_P32; encoder->bits = 24; break; case SAMPLE_FORMAT_S24_P32: encoder->bits = 24; break; case SAMPLE_FORMAT_S32: encoder->bits = 32; break; default: audio_format->format = SAMPLE_FORMAT_S16; encoder->bits = 16; break; } encoder->buffer = growing_fifo_new(); struct wave_header *header = growing_fifo_write(&encoder->buffer, sizeof(*header)); /* create PCM wave header in initial buffer */ fill_wave_header(header, audio_format->channels, encoder->bits, audio_format->sample_rate, (encoder->bits / 8) * audio_format->channels ); fifo_buffer_append(encoder->buffer, sizeof(*header)); return true; }
static bool wave_encoder_open(struct encoder *_encoder, G_GNUC_UNUSED struct audio_format *audio_format, G_GNUC_UNUSED GError **error) { struct wave_encoder *encoder = (struct wave_encoder *)_encoder; void *buffer; assert(audio_format_valid(audio_format)); switch (audio_format->format) { case SAMPLE_FORMAT_S8: encoder->bits = 8; break; case SAMPLE_FORMAT_S16: encoder->bits = 16; break; case SAMPLE_FORMAT_S24_P32: encoder->bits = 24; break; case SAMPLE_FORMAT_S32: encoder->bits = 32; break; default: audio_format->format = SAMPLE_FORMAT_S16; encoder->bits = 16; break; } buffer = pcm_buffer_get(&encoder->buffer, sizeof(struct wave_header) ); /* create PCM wave header in initial buffer */ fill_wave_header((struct wave_header *) buffer, audio_format->channels, encoder->bits, audio_format->sample_rate, (encoder->bits / 8) * audio_format->channels ); encoder->buffer_length = sizeof(struct wave_header); return true; }