From 98679cbd530c3636c93be7d945b1f39d5d58a20e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 3 Aug 2016 22:11:03 +0200 Subject: [PATCH] make test app work again Some cleanups and removal of unused code --- pinos/client/stream.c | 7 --- pinos/modules/spa/spa-v4l2-source.c | 92 ----------------------------- spa/plugins/remote/proxy.c | 74 +++-------------------- spa/plugins/v4l2/v4l2-source.c | 2 +- spa/plugins/v4l2/v4l2-utils.c | 4 +- spa/tests/test-v4l2.c | 48 ++++++++------- 6 files changed, 38 insertions(+), 189 deletions(-) diff --git a/pinos/client/stream.c b/pinos/client/stream.c index cc835abeb..b67648eac 100644 --- a/pinos/client/stream.c +++ b/pinos/client/stream.c @@ -1269,12 +1269,5 @@ pinos_stream_send_buffer (PinosStream *stream, g_return_val_if_fail (PINOS_IS_STREAM (stream), FALSE); g_return_val_if_fail (buffer != NULL, FALSE); -#if 0 - if (!spa_control_write (priv->fd, buffer, &error)) { - g_warning ("stream %p: failed to write buffer: %s", stream, error->message); - g_clear_error (&error); - return FALSE; - } -#endif return TRUE; } diff --git a/pinos/modules/spa/spa-v4l2-source.c b/pinos/modules/spa/spa-v4l2-source.c index 7468cea3a..bc8a01866 100644 --- a/pinos/modules/spa/spa-v4l2-source.c +++ b/pinos/modules/spa/spa-v4l2-source.c @@ -207,7 +207,6 @@ static void setup_node (PinosSpaV4l2Source *this) { PinosNode *node = PINOS_NODE (this); - PinosSpaV4l2SourcePrivate *priv = this->priv; SpaResult res; SpaProps *props; SpaPropValue value; @@ -226,94 +225,6 @@ setup_node (PinosSpaV4l2Source *this) g_debug ("got set_props error %d", res); } -#if 0 -static SpaResult -negotiate_formats (PinosSpaV4l2Source *this) -{ - PinosNode *node = PINOS_NODE (this); - PinosSpaV4l2SourcePrivate *priv = this->priv; - SpaResult res; - SpaFormat *format; - SpaProps *props; - uint32_t val; - SpaPropValue value; - void *state = NULL; - SpaFraction frac; - SpaRectangle rect; - const gchar *str; - - if ((res = spa_node_port_enum_formats (node->node, 0, &format, NULL, &state)) < 0) - return res; - - props = &format->props; - - value.type = SPA_PROP_TYPE_UINT32; - value.size = sizeof (uint32_t); - value.value = &val; - - val = SPA_VIDEO_FORMAT_YUY2; - if ((res = spa_props_set_prop (props, spa_props_index_for_id (props, SPA_PROP_ID_VIDEO_FORMAT), &value)) < 0) - return res; - - value.type = SPA_PROP_TYPE_RECTANGLE; - value.size = sizeof (SpaRectangle); - value.value = ▭ - rect.width = 320; - rect.height = 240; - if ((res = spa_props_set_prop (props, spa_props_index_for_id (props, SPA_PROP_ID_VIDEO_SIZE), &value)) < 0) - return res; - - value.type = SPA_PROP_TYPE_FRACTION; - value.size = sizeof (SpaFraction); - value.value = &frac; - frac.num = 25; - frac.denom = 1; - if ((res = spa_props_set_prop (props, spa_props_index_for_id (props, SPA_PROP_ID_VIDEO_FRAMERATE), &value)) < 0) - return res; - - if ((res = spa_node_port_set_format (node->node, 0, 0, format)) < 0) - return res; - - str = "video/x-raw," - " format=(string)YUY2," - " width=(int)320," - " height=(int)240," - " framerate=(fraction)30/1"; - priv->format = g_bytes_new_static (str, strlen (str)+1); - - priv->n_buffers = 16; - if ((res = spa_node_port_alloc_buffers (node->node, 0, NULL, 0, priv->buffers, &priv->n_buffers)) < 0) - return res; - - return SPA_RESULT_OK; -} -#endif - -static void -start_pipeline (PinosSpaV4l2Source *this) -{ -#if 0 - PinosSpaV4l2SourcePrivate *priv = this->priv; - PinosNode *node = PINOS_NODE (this); - SpaResult res; - SpaCommand cmd; - int err; - - g_debug ("spa-v4l2-source %p: starting pipeline", this); - negotiate_formats (this); - - cmd.type = SPA_COMMAND_START; - if ((res = spa_node_send_command (node->node, &cmd)) < 0) - g_debug ("got error %d", res); - - priv->running = true; - if ((err = pthread_create (&priv->thread, NULL, loop, this)) != 0) { - g_debug ("spa-v4l2-source %p: can't create thread", strerror (err)); - priv->running = false; - } -#endif -} - static void stop_pipeline (PinosSpaV4l2Source *this) { @@ -360,7 +271,6 @@ set_state (PinosNode *node, break; case PINOS_NODE_STATE_RUNNING: - start_pipeline (this); break; case PINOS_NODE_STATE_ERROR: @@ -476,8 +386,6 @@ static gboolean on_received_event (PinosPort *port, SpaEvent *event, GError **error, gpointer user_data) { PinosNode *node = user_data; - PinosSpaV4l2Source *source = PINOS_SPA_V4L2_SOURCE (node); - PinosSpaV4l2SourcePrivate *priv = source->priv; SpaResult res; switch (event->type) { diff --git a/spa/plugins/remote/proxy.c b/spa/plugins/remote/proxy.c index 9673812ba..514726212 100644 --- a/spa/plugins/remote/proxy.c +++ b/spa/plugins/remote/proxy.c @@ -616,71 +616,6 @@ add_buffer (SpaProxy *this, uint32_t port_id, SpaBuffer *buffer) return SPA_RESULT_OK; } -#if 0 -static SpaResult -add_buffer (SpaProxy *this, uint32_t port_id, SpaBuffer *buffer) -{ - SpaControl control; - SpaControlBuilder builder; - uint8_t buf[1024]; - int fds[16]; - SpaControlCmdAddMem am; - SpaControlCmdAddBuffer ab; - int i; - SpaResult res; - SpaBuffer *b; - SpaMemory *bmem; - - spa_control_builder_init_into (&builder, buf, sizeof (buf), fds, sizeof (fds)); - - bmem = spa_memory_alloc_with_fd (0, buffer, buffer->size); - b = spa_memory_ensure_ptr (bmem); - b->mem_id = bmem->id; - b->offset = 0; - - am.port_id = port_id; - am.mem_id = bmem->id; - am.mem_type = 0; - am.fd_index = spa_control_builder_add_fd (&builder, bmem->fd, false); - am.offset = 0; - am.size = buffer->size; - spa_control_builder_add_cmd (&builder, SPA_CONTROL_CMD_ADD_MEM, &am); - - for (i = 0; i < b->n_datas; i++) { - SpaData *d = &SPA_BUFFER_DATAS (b)[i]; - SpaMemory *mem; - - if (!(mem = spa_memory_find (0, d->mem_id))) { - fprintf (stderr, "proxy %p: error invalid memory\n", this); - continue; - } - - am.port_id = port_id; - am.mem_id = mem->id; - am.mem_type = 0; - am.fd_index = spa_control_builder_add_fd (&builder, mem->fd, false); - am.offset = d->offset; - am.size = d->size; - spa_control_builder_add_cmd (&builder, SPA_CONTROL_CMD_ADD_MEM, &am); - } - ab.port_id = port_id; - ab.buffer_id = b->id; - ab.mem_id = bmem->id; - ab.offset = 0; - ab.size = b->size; - spa_control_builder_add_cmd (&builder, SPA_CONTROL_CMD_ADD_BUFFER, &ab); - - spa_control_builder_end (&builder, &control); - - if ((res = spa_control_write (&control, this->fds[0].fd)) < 0) - fprintf (stderr, "proxy %p: error writing control\n", this); - - spa_control_clear (&control); - - return SPA_RESULT_OK; -} -#endif - static SpaResult remove_buffer (SpaProxy *this, uint32_t port_id, SpaBuffer *buffer) { @@ -688,6 +623,7 @@ remove_buffer (SpaProxy *this, uint32_t port_id, SpaBuffer *buffer) SpaControlBuilder builder; uint8_t buf[1024]; SpaControlCmdRemoveBuffer rb; + SpaControlCmdRemoveMem rm; unsigned int i; SpaResult res; @@ -695,11 +631,15 @@ remove_buffer (SpaProxy *this, uint32_t port_id, SpaBuffer *buffer) rb.port_id = port_id; rb.buffer_id = buffer->id; spa_control_builder_add_cmd (&builder, SPA_CONTROL_CMD_REMOVE_BUFFER, &rb); + rm.port_id = port_id; + rm.mem_id = buffer->mem_id; + spa_control_builder_add_cmd (&builder, SPA_CONTROL_CMD_REMOVE_MEM, &rm); for (i = 0; i < buffer->n_datas; i++) { - SpaControlCmdRemoveMem rm; + SpaData *d = &SPA_BUFFER_DATAS (buffer)[i]; + rm.port_id = port_id; - rm.mem_id = buffer->id * 64 + i; + rm.mem_id = d->mem_id; spa_control_builder_add_cmd (&builder, SPA_CONTROL_CMD_REMOVE_MEM, &rm); } spa_control_builder_end (&builder, &control); diff --git a/spa/plugins/v4l2/v4l2-source.c b/spa/plugins/v4l2/v4l2-source.c index fc0cbda5c..bc0319294 100644 --- a/spa/plugins/v4l2/v4l2-source.c +++ b/spa/plugins/v4l2/v4l2-source.c @@ -634,7 +634,7 @@ spa_v4l2_source_node_port_pull_output (SpaNode *node, b->outstanding = true; - info[i].buffer_id = b->buffer.id; + info[i].buffer_id = b->outbuf->id; info[i].status = SPA_RESULT_OK; } if (have_error) diff --git a/spa/plugins/v4l2/v4l2-utils.c b/spa/plugins/v4l2/v4l2-utils.c index b7c96a235..396561972 100644 --- a/spa/plugins/v4l2/v4l2-utils.c +++ b/spa/plugins/v4l2/v4l2-utils.c @@ -559,6 +559,8 @@ spa_v4l2_import_buffers (SpaV4l2Source *this, SpaBuffer **buffers, uint32_t n_bu b->v4l2_buffer.m.userptr = (unsigned long) ((uint8_t*)mem->ptr + d[0].offset); b->v4l2_buffer.length = d[0].size; + spa_debug_buffer (b->outbuf); + spa_v4l2_buffer_recycle (this, buffers[i]->id); } state->have_buffers = true; @@ -688,7 +690,7 @@ mmap_init (SpaV4l2Source *this, b->v4l2_buffer.memory = state->memtype; b->v4l2_buffer.index = i; - spa_debug_buffer (&b->buffer); + spa_debug_buffer (b->outbuf); spa_v4l2_buffer_recycle (this, i); } diff --git a/spa/tests/test-v4l2.c b/spa/tests/test-v4l2.c index 0ff3b3676..b2b0abfab 100644 --- a/spa/tests/test-v4l2.c +++ b/spa/tests/test-v4l2.c @@ -33,8 +33,6 @@ #include #include -#undef USE_BUFFER - #define MAX_BUFFERS 8 typedef struct { @@ -47,9 +45,13 @@ typedef struct { typedef struct { SpaNode *source; + SDL_Renderer *renderer; SDL_Window *window; SDL_Texture *texture; + + bool use_buffer; + bool running; pthread_t thread; SpaPollFd fds[16]; @@ -214,14 +216,14 @@ make_nodes (AppData *data, const char *device) value.type = SPA_PROP_TYPE_STRING; value.value = device ? device : "/dev/video0"; value.size = strlen (value.value)+1; - props->set_prop (props, spa_props_index_for_name (props, "device"), &value); + spa_props_set_prop (props, spa_props_index_for_name (props, "device"), &value); if ((res = spa_node_set_props (data->source, props)) < 0) printf ("got set_props error %d\n", res); + return res; } -#ifdef USE_BUFFER static void alloc_buffers (AppData *data) { @@ -230,7 +232,8 @@ alloc_buffers (AppData *data) for (i = 0; i < MAX_BUFFERS; i++) { SDLBuffer *b = &data->buffers[i]; SDL_Texture *texture; - void *mem; + SpaMemory *mem; + void *ptr; int stride; data->bp[i] = &b->buffer; @@ -243,7 +246,7 @@ alloc_buffers (AppData *data) printf ("can't create texture: %s\n", SDL_GetError ()); return; } - if (SDL_LockTexture (texture, NULL, &mem, &stride) < 0) { + if (SDL_LockTexture (texture, NULL, &ptr, &stride) < 0) { fprintf (stderr, "Couldn't lock texture: %s\n", SDL_GetError()); return; } @@ -251,36 +254,40 @@ alloc_buffers (AppData *data) b->buffer.id = i; b->buffer.size = sizeof (SDLBuffer); b->buffer.n_metas = 2; - b->buffer.metas = b->metas; + b->buffer.metas = offsetof (SDLBuffer, metas); b->buffer.n_datas = 1; - b->buffer.datas = b->datas; + b->buffer.datas = offsetof (SDLBuffer, datas); b->header.flags = 0; b->header.seq = 0; b->header.pts = 0; b->header.dts_offset = 0; b->metas[0].type = SPA_META_TYPE_HEADER; - b->metas[0].data = &b->header; + b->metas[0].offset = offsetof (SDLBuffer, header); b->metas[0].size = sizeof (b->header); b->ptr.ptr_type = "SDL_Texture"; b->ptr.ptr = texture; b->metas[1].type = SPA_META_TYPE_POINTER; - b->metas[1].data = &b->ptr; + b->metas[1].offset = offsetof (SDLBuffer, ptr); b->metas[1].size = sizeof (b->ptr); - b->datas[0].type = SPA_DATA_TYPE_MEMPTR; - b->datas[0].ptr = mem; - b->datas[0].ptr_type = "sysmem"; + mem = spa_memory_alloc (0); + mem->flags = SPA_MEMORY_FLAG_READWRITE; + mem->type = "sysmem"; + mem->fd = -1; + mem->ptr = ptr; + mem->size = stride * 240; + + b->datas[0].mem_id = mem->id; b->datas[0].offset = 0; - b->datas[0].size = stride * 240; + b->datas[0].size = mem->size; b->datas[0].stride = stride; } data->n_buffers = MAX_BUFFERS; spa_node_port_use_buffers (data->source, 0, data->bp, MAX_BUFFERS); } -#endif typedef struct { SpaFormat fmt; @@ -336,10 +343,9 @@ negotiate_formats (AppData *data) spa_debug_port_info (info); -#ifdef USE_BUFFER - alloc_buffers (data); -#else - { + if (data->use_buffer) { + alloc_buffers (data); + } else { unsigned int n_buffers; data->texture = SDL_CreateTexture (data->renderer, @@ -357,8 +363,6 @@ negotiate_formats (AppData *data) } data->n_buffers = n_buffers; } -#endif - return SPA_RESULT_OK; } @@ -447,6 +451,8 @@ main (int argc, char *argv[]) spa_memory_init (); + data.use_buffer = true; + if (SDL_Init (SDL_INIT_VIDEO) < 0) { printf ("can't initialize SDL: %s\n", SDL_GetError ()); return -1;