1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #include "precompile.h"
- #include "audiostream.h"
- #include "audiolog.h"
- #include "audiocontext.h"
- void audiostream_init(audioengine_t *engine, audiostream_vtbl_t *vtbl, audiostream_t *stream)
- {
- stream->vtbl = vtbl;
- stream->engine = engine;
- stream->ctx = NULL;
- stream->direction = STREAM_DIR_NONE;
- stream->user_data = NULL;
- stream->event_handler = NULL;
- stream->upstream = stream->downstream = NULL;
- }
- void audiostream_raise_event(audiostream_t *stream, int evt, int param1, int param2)
- {
- apr_status_t status;
- audiostream_t *p;
- if (stream->event_handler) {
- if ((*stream->event_handler)(stream, stream->user_data, evt, param1, param2))
- return;
- }
- p = stream;
- while (p) {
- if (p->ctx) {
- status = audiocontext_put_stream_event(p->ctx, stream, evt, param1, param2);
- if (status != APR_SUCCESS) {
- AUDIO_LOG_ERROR("put stream event failed");
- }
- break;
- }
- p = p->upstream;
- }
- }
- audiostream_t* audiostream_connect_pipeline(int direction, ...)
- {
- va_list arg;
- audiostream_t *first = NULL;
- audiostream_t *upstream = NULL;
- audiostream_t *downstream = NULL;
- va_start(arg, direction);
- for (;;) {
- audiostream_t *st = va_arg(arg, audiostream_t*);
- if (st) {
- if (!first) {
- first = st;
- first->direction = direction;
- }
- if (upstream) {
- st->upstream = upstream;
- upstream->downstream = st;
- }
- upstream = st;
- } else {
- break;
- }
- }
- va_end(arg);
- return first;
- }
- void audiostream_disconnect_pipeline(audiostream_t *stream)
- {
- audiostream_t *s;
- s = stream;
- while (s) {
- audiostream_t *next = s->downstream;
- s->upstream = NULL;
- s->downstream = NULL;
- s->direction = STREAM_DIR_NONE;
- s = next;
- }
- }
|