/*
- * Copyright (C) 2005-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
OggVorbis_File *vf;
/** The number of bytes consumed from the input buffer. */
size_t converted;
- /** When to start producing output. */
- struct timeval stream_start;
/** The number of channels of the current stream. */
unsigned int channels;
/** Current sample rate in Hz. */
struct btr_node *btrn = fn->btrn;
int ret, oret;
size_t iqs;
- struct timeval delay = {0, 500 * 1000};
pod->vf = para_malloc(sizeof(struct OggVorbis_File));
PARA_NOTICE_LOG("iqs: %zu, min_iqs: %zu, opening ov callbacks\n",
pod->samplerate = ov_info(pod->vf, 0)->rate;
PARA_NOTICE_LOG("%d channels, %d Hz\n", pod->channels,
pod->samplerate);
- /* wait a bit to avoid buffer underruns */
- tv_add(now, &delay, &pod->stream_start);
ret = 1;
out:
if (ret <= 0) {
struct filter_node *fn = container_of(t, struct filter_node, task);
struct private_oggdec_data *pod = fn->private_data;
struct btr_node *btrn = fn->btrn;
- size_t iqs, len;
- int ret;
- char *in;
+ int ret, ns;
pod->converted = 0;
t->error = 0;
- ret = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL);
- if (ret <= 0)
- goto out;
- btr_merge(btrn, fn->min_iqs);
- len = btr_next_buffer(btrn, &in);
- iqs = btr_get_input_queue_size(btrn);
+ ret = ns = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL);
if (!pod->vf) {
+ if (ret <= 0)
+ goto out;
+ btr_merge(btrn, fn->min_iqs);
ret = ogg_init(fn);
if (ret <= 0)
goto out;
pod->converted = 0;
if (read_ret <= 0)
free(out);
- if (read_ret == 0) {
- if (btr_no_parent(btrn))
- ret = -E_OGGDEC_EOF;
- else
- ret = 0;
- goto out;
- }
- ret = 0;
- if (read_ret == OV_HOLE)
+ ret = ns;
+ if (read_ret == 0 || read_ret == OV_HOLE)
goto out;
ret = -E_OGGDEC_BADLINK;
if (read_ret < 0)
goto out;
btr_add_output(out, read_ret, btrn);
- if (btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL) == 0)
+ if (btr_get_output_queue_size(btrn) > 640 * 1024)
return; /* enough data for the moment */
}
out: