1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "precompile.h"
- #include "audiocustom.h"
- #include "audiocontext.h"
- static apr_status_t read_frame(void *self, audioframe_t *frame)
- {
- audiocustom_t *audiocust = CONTAINING_RECORD(self, audiocustom_t, base);
- apr_status_t status;
- if (audiocust->base.downstream) {
- status = audiocust->base.downstream->vtbl->read_frame(audiocust->base.downstream, frame);
- if (status == APR_SUCCESS) {
- if (audiocust->on_read)
- (*audiocust->on_read)(self, frame, audiocust->user_data);
- }
- } else {
- if (audiocust->on_read)
- return (*audiocust->on_read)(self, frame, audiocust->user_data);
- }
- return APR_SUCCESS;
- }
- static apr_status_t write_frame(void *self, const audioframe_t *frame)
- {
- audiocustom_t *audiocust = CONTAINING_RECORD(self, audiocustom_t, base);
- apr_status_t status;
- if (audiocust->base.downstream) {
- status = audiocust->base.downstream->vtbl->write_frame(audiocust->base.downstream, frame);
- if (status == APR_SUCCESS) {
- if (audiocust->on_write)
- (*audiocust->on_write)(self, frame, audiocust->user_data);
- }
- } else {
- if (audiocust->on_write)
- (*audiocust->on_write)(self, frame, audiocust->user_data);
- }
- return APR_SUCCESS;
- }
- static audiostream_vtbl_t g_stream_vtbl = {
- &read_frame,
- &write_frame,
- };
- apr_status_t audiocustom_create(apr_pool_t *pool,
- audioengine_t *engine,
- audiocustom_on_read_frame on_read,
- audiocustom_on_write_frame on_write,
- void *user_data,
- audiocustom_t **p_audiocust)
- {
- audiocustom_t *audiocust;
- audiocust = apr_palloc(pool, sizeof(audiocustom_t));
- memset(audiocust, 0, sizeof(audiocustom_t));
- audiocust->on_read = on_read;
- audiocust->on_write = on_write;
- audiocust->user_data = user_data;
- audiostream_init(engine, &g_stream_vtbl, &audiocust->base);
- *p_audiocust = audiocust;
- return APR_SUCCESS;
- }
- apr_status_t audiocustom_destroy(audiocustom_t *audiocust)
- {
- return APR_SUCCESS;
- }
|