diff options
Diffstat (limited to 'spa/plugins/audiotestsrc/audiotestsrc.c')
-rw-r--r-- | spa/plugins/audiotestsrc/audiotestsrc.c | 145 |
1 files changed, 88 insertions, 57 deletions
diff --git a/spa/plugins/audiotestsrc/audiotestsrc.c b/spa/plugins/audiotestsrc/audiotestsrc.c index a8e655ae..50960800 100644 --- a/spa/plugins/audiotestsrc/audiotestsrc.c +++ b/spa/plugins/audiotestsrc/audiotestsrc.c @@ -34,6 +34,7 @@ typedef struct { struct _SpaAudioTestSrc { SpaHandle handle; + SpaNode node; SpaAudioTestSrcProps props[2]; @@ -121,14 +122,16 @@ reset_audiotestsrc_props (SpaAudioTestSrcProps *props) } static SpaResult -spa_audiotestsrc_node_get_props (SpaHandle *handle, +spa_audiotestsrc_node_get_props (SpaNode *node, SpaProps **props) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; - if (handle == NULL || props == NULL) + if (node == NULL || node->handle == NULL || props == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + memcpy (&this->props[0], &this->props[1], sizeof (this->props[1])); *props = &this->props[0].props; @@ -136,16 +139,19 @@ spa_audiotestsrc_node_get_props (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_set_props (SpaHandle *handle, +spa_audiotestsrc_node_set_props (SpaNode *node, const SpaProps *props) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; - SpaAudioTestSrcProps *p = &this->props[1]; + SpaAudioTestSrc *this; + SpaAudioTestSrcProps *p; SpaResult res; - if (handle == NULL) + if (node == NULL || node->handle == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + p = &this->props[1]; + if (props == NULL) { reset_audiotestsrc_props (p); return SPA_RESULT_OK; @@ -156,14 +162,16 @@ spa_audiotestsrc_node_set_props (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_send_command (SpaHandle *handle, +spa_audiotestsrc_node_send_command (SpaNode *node, SpaCommand *command) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; - if (handle == NULL || command == NULL) + if (node == NULL || node->handle == NULL || command == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + switch (command->type) { case SPA_COMMAND_INVALID: return SPA_RESULT_INVALID_COMMAND; @@ -179,7 +187,7 @@ spa_audiotestsrc_node_send_command (SpaHandle *handle, event.data = NULL; event.size = 0; - this->event_cb (handle, &event, this->user_data); + this->event_cb (node, &event, this->user_data); } break; @@ -194,7 +202,7 @@ spa_audiotestsrc_node_send_command (SpaHandle *handle, event.data = NULL; event.size = 0; - this->event_cb (handle, &event, this->user_data); + this->event_cb (node, &event, this->user_data); } break; @@ -207,15 +215,17 @@ spa_audiotestsrc_node_send_command (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_set_event_callback (SpaHandle *handle, +spa_audiotestsrc_node_set_event_callback (SpaNode *node, SpaEventCallback event, void *user_data) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; - if (handle == NULL) + if (node == NULL || node->handle == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + this->event_cb = event; this->user_data = user_data; @@ -223,13 +233,13 @@ spa_audiotestsrc_node_set_event_callback (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_get_n_ports (SpaHandle *handle, +spa_audiotestsrc_node_get_n_ports (SpaNode *node, unsigned int *n_input_ports, unsigned int *max_input_ports, unsigned int *n_output_ports, unsigned int *max_output_ports) { - if (handle == NULL) + if (node == NULL || node->handle == NULL) return SPA_RESULT_INVALID_ARGUMENTS; if (n_input_ports) @@ -245,13 +255,13 @@ spa_audiotestsrc_node_get_n_ports (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_get_port_ids (SpaHandle *handle, +spa_audiotestsrc_node_get_port_ids (SpaNode *node, unsigned int n_input_ports, uint32_t *input_ids, unsigned int n_output_ports, uint32_t *output_ids) { - if (handle == NULL || input_ids == NULL || output_ids == NULL) + if (node == NULL || node->handle == NULL || input_ids == NULL || output_ids == NULL) return SPA_RESULT_INVALID_ARGUMENTS; if (n_output_ports > 0) @@ -261,33 +271,35 @@ spa_audiotestsrc_node_get_port_ids (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_add_port (SpaHandle *handle, +spa_audiotestsrc_node_add_port (SpaNode *node, SpaDirection direction, - uint32_t *port_id) + uint32_t port_id) { return SPA_RESULT_NOT_IMPLEMENTED; } static SpaResult -spa_audiotestsrc_node_remove_port (SpaHandle *handle, +spa_audiotestsrc_node_remove_port (SpaNode *node, uint32_t port_id) { return SPA_RESULT_NOT_IMPLEMENTED; } static SpaResult -spa_audiotestsrc_node_port_enum_formats (SpaHandle *handle, +spa_audiotestsrc_node_port_enum_formats (SpaNode *node, uint32_t port_id, SpaFormat **format, const SpaFormat *filter, void **state) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; int index; - if (handle == NULL || format == NULL || state == NULL) + if (node == NULL || node->handle == NULL || format == NULL || state == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + if (port_id != 0) return SPA_RESULT_INVALID_PORT; @@ -307,17 +319,19 @@ spa_audiotestsrc_node_port_enum_formats (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_set_format (SpaHandle *handle, +spa_audiotestsrc_node_port_set_format (SpaNode *node, uint32_t port_id, SpaPortFormatFlags flags, const SpaFormat *format) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; SpaResult res; - if (handle == NULL) + if (node == NULL || node->handle == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + if (port_id != 0) return SPA_RESULT_INVALID_PORT; @@ -335,15 +349,17 @@ spa_audiotestsrc_node_port_set_format (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_get_format (SpaHandle *handle, +spa_audiotestsrc_node_port_get_format (SpaNode *node, uint32_t port_id, const SpaFormat **format) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; - if (handle == NULL || format == NULL) + if (node == NULL || node->handle == NULL || format == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + if (port_id != 0) return SPA_RESULT_INVALID_PORT; @@ -356,15 +372,17 @@ spa_audiotestsrc_node_port_get_format (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_get_info (SpaHandle *handle, +spa_audiotestsrc_node_port_get_info (SpaNode *node, uint32_t port_id, const SpaPortInfo **info) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; - if (handle == NULL || info == NULL) + if (node == NULL || node->handle == NULL || info == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + if (port_id != 0) return SPA_RESULT_INVALID_PORT; @@ -374,7 +392,7 @@ spa_audiotestsrc_node_port_get_info (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_get_props (SpaHandle *handle, +spa_audiotestsrc_node_port_get_props (SpaNode *node, uint32_t port_id, SpaProps **props) { @@ -382,7 +400,7 @@ spa_audiotestsrc_node_port_get_props (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_set_props (SpaHandle *handle, +spa_audiotestsrc_node_port_set_props (SpaNode *node, uint32_t port_id, const SpaProps *props) { @@ -390,15 +408,17 @@ spa_audiotestsrc_node_port_set_props (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_get_status (SpaHandle *handle, +spa_audiotestsrc_node_port_get_status (SpaNode *node, uint32_t port_id, const SpaPortStatus **status) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; - if (handle == NULL || status == NULL) + if (node == NULL || node->handle == NULL || status == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + if (port_id != 0) return SPA_RESULT_INVALID_PORT; @@ -411,7 +431,7 @@ spa_audiotestsrc_node_port_get_status (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_use_buffers (SpaHandle *handle, +spa_audiotestsrc_node_port_use_buffers (SpaNode *node, uint32_t port_id, SpaBuffer **buffers, uint32_t n_buffers) @@ -420,7 +440,7 @@ spa_audiotestsrc_node_port_use_buffers (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_alloc_buffers (SpaHandle *handle, +spa_audiotestsrc_node_port_alloc_buffers (SpaNode *node, uint32_t port_id, SpaAllocParam **params, uint32_t n_params, @@ -432,7 +452,7 @@ spa_audiotestsrc_node_port_alloc_buffers (SpaHandle *handle, static SpaResult -spa_audiotestsrc_node_port_push_input (SpaHandle *handle, +spa_audiotestsrc_node_port_push_input (SpaNode *node, unsigned int n_info, SpaInputInfo *info) { @@ -440,19 +460,21 @@ spa_audiotestsrc_node_port_push_input (SpaHandle *handle, } static SpaResult -spa_audiotestsrc_node_port_pull_output (SpaHandle *handle, +spa_audiotestsrc_node_port_pull_output (SpaNode *node, unsigned int n_info, SpaOutputInfo *info) { - SpaAudioTestSrc *this = (SpaAudioTestSrc *) handle; + SpaAudioTestSrc *this; size_t j, size; uint8_t *ptr; unsigned int i; bool have_error = false; - if (handle == NULL || n_info == 0 || info == NULL) + if (node == NULL || node->handle == NULL || n_info == 0 || info == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) node->handle; + for (i = 0; i < n_info; i++) { if (info[i].port_id != 0) { info[i].status = SPA_RESULT_INVALID_PORT; @@ -466,14 +488,7 @@ spa_audiotestsrc_node_port_pull_output (SpaHandle *handle, continue; } - if (info[i].buffer == NULL || info[i].buffer->n_datas == 0) { - info[i].status = SPA_RESULT_INVALID_ARGUMENTS; - have_error = true; - continue; - } - - ptr = info[i].buffer->datas[0].ptr; - size = info[i].buffer->datas[0].size; + size = info[i].size; for (j = 0; j < size; j++) ptr[j] = rand(); @@ -486,7 +501,16 @@ spa_audiotestsrc_node_port_pull_output (SpaHandle *handle, return SPA_RESULT_OK; } +static SpaResult +spa_audiotestsrc_node_port_push_event (SpaNode *node, + uint32_t port_id, + SpaEvent *event) +{ + return SPA_RESULT_NOT_IMPLEMENTED; +} + static const SpaNode audiotestsrc_node = { + NULL, sizeof (SpaNode), spa_audiotestsrc_node_get_props, spa_audiotestsrc_node_set_props, @@ -507,19 +531,24 @@ static const SpaNode audiotestsrc_node = { spa_audiotestsrc_node_port_get_status, spa_audiotestsrc_node_port_push_input, spa_audiotestsrc_node_port_pull_output, + spa_audiotestsrc_node_port_push_event, }; static SpaResult -spa_audiotestsrc_get_interface (SpaHandle *handle, - uint32_t interface_id, - const void **interface) +spa_audiotestsrc_get_interface (SpaHandle *handle, + uint32_t interface_id, + void **interface) { + SpaAudioTestSrc *this; + if (handle == NULL || interface == NULL) return SPA_RESULT_INVALID_ARGUMENTS; + this = (SpaAudioTestSrc *) handle; + switch (interface_id) { case SPA_INTERFACE_ID_NODE: - *interface = &audiotestsrc_node; + *interface = &this->node; break; default: return SPA_RESULT_UNKNOWN_INTERFACE; @@ -539,6 +568,8 @@ audiotestsrc_init (const SpaHandleFactory *factory, handle->get_interface = spa_audiotestsrc_get_interface; this = (SpaAudioTestSrc *) handle; + this->node = audiotestsrc_node; + this->node.handle = handle; this->props[1].props.n_prop_info = PROP_ID_LAST; this->props[1].props.prop_info = prop_info; this->props[1].props.set_prop = spa_props_generic_set_prop; |