Example #1
0
int ogv_demuxer_process() {
	do {
		// read at most this many bytes in one go
		// should be enough to resync ogg stream
		int64_t headroom = bq_headroom(bufferQueue);
		size_t bufsize = 65536;
		if (headroom < bufsize) {
			bufsize = headroom;
		}

		int ret = oggz_read(oggz, bufsize);
		//printf("demuxer returned %d on %d bytes\n", ret, bufsize);
		if (ret == OGGZ_ERR_STOP_OK) {
			// We got a packet!
			return 1;
		} else if (ret > 0) {
			// We read some data, but no packets yet.
			//printf("read %d bytes\n", ret);
			continue;
		} else if (ret == 0) {
			//printf("EOF %d from oggz_read\n", ret);
			return 0;
		} else if (ret < 0) {
			printf("Error %d from oggz_read\n", ret);
			return 0;
		}
	} while(1);

	return 0;
}
Example #2
0
int bq_read(BufferQueue *queue, char *data, size_t len) {
    if (bq_headroom(queue) < len) {
        return -1;
    }

    size_t offset = 0;
    size_t remaining = len;
    for (int i = 0; i < queue->len; i++) {
        if (queue->items[i].start + queue->items[i].len < queue->pos) {
            //printf("bq_read skipped item at pos %lld len %d\n", queue->items[i].start, queue->items[i].len);
            continue;
        }
        size_t chunkStart = queue->pos - queue->items[i].start;
        size_t chunkLen = queue->items[i].len - chunkStart;
        if (chunkLen > remaining) {
            chunkLen = remaining;
        }
        memcpy(data + offset, queue->items[i].bytes + chunkStart, chunkLen);
        //printf("bq_read copy chunkStart %d chunkLen %d to offset %d; from item %d start %lld len %d (pos %lld)\n", chunkStart, chunkLen, offset, i, queue->items[i].start, queue->items[i].len, queue->pos);
        queue->pos += chunkLen;
        offset += chunkLen;
        remaining -= chunkLen;
        if (remaining <= 0) {
            return 0;
        }
    }
    return -1;
}
Example #3
0
static size_t readCallback(void *user_handle, void *buf, size_t n)
{
	BufferQueue *bq = (BufferQueue *)user_handle;
	size_t available = bq_headroom(bq);
	size_t to_read;
	if (n < available) {
		to_read = n;
	} else {
		to_read = available;
	}
	int ret = bq_read(bq, buf, to_read);
	if (ret < 0) {
		return -1;
	} else {
		return to_read;
	}
}