diff options
-rw-r--r-- | src/outputBuffer_accessors.h | 88 | ||||
-rw-r--r-- | src/outputBuffer_ob_send.h | 133 |
2 files changed, 0 insertions, 221 deletions
diff --git a/src/outputBuffer_accessors.h b/src/outputBuffer_accessors.h deleted file mode 100644 index 8d59429dd..000000000 --- a/src/outputBuffer_accessors.h +++ /dev/null @@ -1,88 +0,0 @@ -/* the Music Player Daemon (MPD) - * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com) - * This project's homepage is: http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * Some of the most boring code in the world that I didn't want cluttering - * up outputBuffer.c - */ - -unsigned long ob_get_elapsed_time(void) -{ - return (unsigned long)(ob.elapsed_time + 0.5); -} - -unsigned long ob_get_total_time(void) -{ - return (unsigned long)(ob.total_time + 0.5); -} - -unsigned int ob_get_bit_rate(void) -{ - return (unsigned int)ob.bit_rate; -} - -unsigned int ob_get_channels(void) -{ - return (unsigned int)ob.audio_format.channels; -} - -unsigned int ob_get_sample_rate(void) -{ - return (unsigned int)ob.audio_format.sampleRate; -} - -unsigned int ob_get_bits(void) -{ - return (unsigned int)ob.audio_format.bits; -} - -void ob_set_sw_volume(int volume) -{ - ob.sw_vol = (volume > 1000) ? 1000 : (volume < 0 ? 0 : volume); -} - -void ob_set_xfade(float xfade_sec) -{ - ob.xfade_time = (xfade_sec < 0) ? 0 : xfade_sec; -} - -float ob_get_xfade(void) -{ - return ob.xfade_time; -} - -enum ob_state ob_get_state(void) -{ - return ob.state; -} - -AudioFormat *ob_audio_format(void) -{ - return &ob.audio_format; -} - -uint8_t ob_get_decoder_sequence(void) -{ - return ob.seq_decoder; -} - -uint8_t ob_get_player_sequence(void) -{ - return ob.seq_player; -} - diff --git a/src/outputBuffer_ob_send.h b/src/outputBuffer_ob_send.h deleted file mode 100644 index f27a5c0dc..000000000 --- a/src/outputBuffer_ob_send.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file only contains ob_send() and private functions - * needed to implement ob_send() - */ - -/* - * This is one of two places where dc.thread can block, - * the other is readFromInputStream - */ -static enum dc_action await_buffer_space(void) -{ - assert(pthread_equal(pthread_self(), dc.thread)); - /* DEBUG("Waiting for buffer space\n"); */ - assert(dc.state != DC_STATE_STOP); - - dc_halt(); - /* DEBUG("done waiting for buffer space\n"); */ - return dc.action; -} - -/* This will modify its input */ -static void do_audio_conversion(void **data, size_t *len) -{ - size_t newlen; - - assert(pthread_equal(pthread_self(), dc.thread)); - newlen = pcm_sizeOfConvBuffer(&dc.audio_format, *len, &ob.audio_format); - if (newlen > ob.conv_buf_len) { - ob.conv_buf = xrealloc(ob.conv_buf, newlen); - ob.conv_buf_len = newlen; - } - *len = pcm_convertAudioFormat(&dc.audio_format, *data, *len, - &ob.audio_format, ob.conv_buf, - &ob.conv_state); - *data = ob.conv_buf; -} - -static void ensure_audio_format_sanity(void **data, size_t *len) -{ - static uint8_t seq_last; - - assert(pthread_equal(pthread_self(), dc.thread)); - if (mpd_unlikely(seq_last != ob.seq_decoder)) { - seq_last = ob.seq_decoder; - if (cmpAudioFormat(&dc.audio_format, &ob.audio_format)) - getOutputAudioFormat(&dc.audio_format, - &ob.audio_format); - } - if (cmpAudioFormat(&ob.audio_format, &dc.audio_format)) - do_audio_conversion(data, len); -} - -static void start_playback(void) -{ - assert(pthread_equal(pthread_self(), dc.thread)); - if (mpd_unlikely(ob.state == OB_STATE_STOP && - player_errno == PLAYER_ERROR_NONE)) { - ob_trigger_action(OB_ACTION_PLAY); - } -} - -enum dc_action -ob_send(void *data, size_t len, - float decode_time, uint16_t bit_rate, ReplayGainInfo * rgi) -{ - struct rbvec vec[2]; - struct ob_chunk *c; - size_t idx; - size_t i, j; - - assert(pthread_equal(pthread_self(), dc.thread)); - - ensure_audio_format_sanity(&data, &len); - - if (rgi && (replayGainState != REPLAYGAIN_OFF)) - doReplayGain(rgi, data, len, &ob.audio_format); - else if (normalizationEnabled) - normalizeData(data, len, &ob.audio_format); - - while (1) { - /* full buffer, loop check in case of spurious wakeups */ - while (!ringbuf_get_write_vector(ob.index, vec)) { - enum dc_action rv = await_buffer_space(); - if (rv != DC_ACTION_NONE) - return rv; - } - - for (i = 0; i < ARRAY_SIZE(vec); i++) { - for (j = 0; j < vec[i].len; j++) { - size_t c_len; - idx = vec[i].base - ob.index->buf + j; - c = &(ob.chunks[idx]); - - if (!c->len) { /* populate empty chunk */ - c->seq = ob.seq_decoder; - c->time = decode_time; - c->bit_rate = bit_rate; - c_len = len > CHUNK_SIZE ? CHUNK_SIZE - : len; - c->len = (uint16_t)c_len; - memcpy(c->data, data, c_len); - } else { /* partially filled chunk */ - size_t max = CHUNK_SIZE - c->len; - assert(c->seq == ob.seq_decoder); - c_len = len > max ? max : len; - assert(c_len <= CHUNK_SIZE); - memcpy(c->data + c->len, data, c_len); - c->len += c_len; - assert(c->len <= CHUNK_SIZE); - } - - /* - * feed ob.thread ASAP, otherwise ob.thread - * will just play silence - */ - if (c->len == CHUNK_SIZE) - ringbuf_write_advance(ob.index, 1); - - assert(len >= c_len); - len -= c_len; - if (!len) { - start_playback(); - return dc.action; - } - data = (unsigned char *)data + c_len; - } - } - } - assert(__FILE__ && __LINE__ && "We should never get here" && 0); - return DC_ACTION_NONE; -} - - |