diff --git a/pinos/modules/spa/spa-alsa-sink.c b/pinos/modules/spa/spa-alsa-sink.c index a383f3040..9354f01bb 100644 --- a/pinos/modules/spa/spa-alsa-sink.c +++ b/pinos/modules/spa/spa-alsa-sink.c @@ -121,7 +121,7 @@ on_sink_event (SpaHandle *handle, SpaEvent *event, void *user_data) g_debug ("pull ringbuffer %p", buf); size = buf->size; - data = buf->datas[0].data; + data = buf->datas[0].ptr; pinos_ringbuffer_get_read_areas (priv->ringbuffer, areas); diff --git a/pinos/modules/spa/spa-v4l2-source.c b/pinos/modules/spa/spa-v4l2-source.c index f04546d12..6ac6f1549 100644 --- a/pinos/modules/spa/spa-v4l2-source.c +++ b/pinos/modules/spa/spa-v4l2-source.c @@ -200,9 +200,9 @@ on_source_event (SpaHandle *handle, SpaEvent *event, void *user_data) pinos_buffer_builder_add_header (&builder, &hdr); if (b->datas[0].type == SPA_DATA_TYPE_FD) { - fd = *((int *)b->datas[0].data); + fd = *((int *)b->datas[0].ptr); } else { - fd = tmpfile_create (source, b->datas[0].data, b->size); + fd = tmpfile_create (source, b->datas[0].ptr, b->size); } p.fd_index = pinos_buffer_builder_add_fd (&builder, fd); p.id = pinos_fd_manager_get_id (priv->fdmanager); @@ -267,7 +267,7 @@ create_pipeline (PinosSpaV4l2Source *this) g_debug ("got get_props error %d", res); value.type = SPA_PROP_TYPE_STRING; - value.value = "/dev/video1"; + value.value = "/dev/video0"; value.size = strlen (value.value)+1; props->set_prop (props, spa_props_index_for_name (props, "device"), &value); diff --git a/spa/include/spa/buffer.h b/spa/include/spa/buffer.h index 1540be550..8eff18f50 100644 --- a/spa/include/spa/buffer.h +++ b/spa/include/spa/buffer.h @@ -70,7 +70,7 @@ typedef struct { } SpaMetaHeader; typedef struct { - const char *type; + const char *ptr_type; void *ptr; } SpaMetaPointer; @@ -101,27 +101,34 @@ typedef struct { /** * SpaDataType: * @SPA_DATA_TYPE_INVALID: invalid data type, is ignored - * @SPA_DATA_TYPE_MEMPTR: data and size point to memory - * @SPA_DATA_TYPE_FD: data points to an int file descriptor + * @SPA_DATA_TYPE_MEMPTR: data and size point to memory accassible by the + * CPU. + * @SPA_DATA_TYPE_FD: data points to an int file descriptor that can be + * mmapped. + * @SPA_DATA_TYPE_POINTER: data points to some other datastructure, the + * type can be found in ptr_type */ typedef enum { SPA_DATA_TYPE_INVALID = 0, SPA_DATA_TYPE_MEMPTR, SPA_DATA_TYPE_FD, + SPA_DATA_TYPE_POINTER, } SpaDataType; /** * SpaData: * @id: user id * @type: the type of data - * @data: pointer to data or fd + * @ptr_type: more info abouut the type of @ptr + * @ptr: pointer to data or fd * @offset: offset of data * @size: size of data - * @stride: stride of data + * @stride: stride of data if applicable */ typedef struct { SpaDataType type; - void *data; + const char *ptr_type; + void *ptr; unsigned int offset; size_t size; size_t stride; diff --git a/spa/plugins/alsa/alsa-utils.c b/spa/plugins/alsa/alsa-utils.c index 3be5dfb03..b427060e2 100644 --- a/spa/plugins/alsa/alsa-utils.c +++ b/spa/plugins/alsa/alsa-utils.c @@ -232,7 +232,8 @@ pull_input (SpaALSASink *this, void *data, snd_pcm_uframes_t frames) buffer->meta[0].size = sizeof (buffer->header); buffer->data[0].type = SPA_DATA_TYPE_MEMPTR; - buffer->data[0].data = data; + buffer->data[0].ptr = data; + buffer->data[0].ptr_type = "sysmem"; buffer->data[0].size = frames * sizeof (uint16_t) * 2; this->event_cb (&this->handle, &event,this->user_data); diff --git a/spa/plugins/audiomixer/audiomixer.c b/spa/plugins/audiomixer/audiomixer.c index d4a9b583d..36945a531 100644 --- a/spa/plugins/audiomixer/audiomixer.c +++ b/spa/plugins/audiomixer/audiomixer.c @@ -548,7 +548,8 @@ pull_port (SpaAudioMixer *this, uint32_t port_id, SpaOutputInfo *info, size_t pu buffer->meta[0].size = sizeof (buffer->header); buffer->data[0].type = SPA_DATA_TYPE_MEMPTR; - buffer->data[0].data = buffer->samples; + buffer->data[0].ptr = buffer->samples; + buffer->data[0].ptr_type = "sysmem"; buffer->data[0].size = pull_size; this->event_cb (&this->handle, &event, this->user_data); @@ -565,11 +566,11 @@ add_port_data (SpaAudioMixer *this, SpaBuffer *out, SpaAudioMixerPort *port) while (true) { if (op == NULL) { - op = out->datas[oi].data; + op = out->datas[oi].ptr; os = out->datas[oi].size; } if (ip == NULL) { - ip = port->buffer->datas[port->buffer_index].data; + ip = port->buffer->datas[port->buffer_index].ptr; is = port->buffer->datas[port->buffer_index].size; ip += port->buffer_offset; is -= port->buffer_offset; diff --git a/spa/plugins/audiotestsrc/audiotestsrc.c b/spa/plugins/audiotestsrc/audiotestsrc.c index 357835fbc..cb1155933 100644 --- a/spa/plugins/audiotestsrc/audiotestsrc.c +++ b/spa/plugins/audiotestsrc/audiotestsrc.c @@ -467,7 +467,7 @@ spa_audiotestsrc_node_port_pull_output (SpaHandle *handle, continue; } - ptr = info[i].buffer->datas[0].data; + ptr = info[i].buffer->datas[0].ptr; size = info[i].buffer->datas[0].size; for (j = 0; j < size; j++) diff --git a/spa/plugins/v4l2/v4l2-utils.c b/spa/plugins/v4l2/v4l2-utils.c index 11a8469c5..3f14191bd 100644 --- a/spa/plugins/v4l2/v4l2-utils.c +++ b/spa/plugins/v4l2/v4l2-utils.c @@ -459,7 +459,7 @@ spa_v4l2_import_buffers (SpaV4l2Source *this, SpaBuffer **buffers, uint32_t n_bu b->v4l2_buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; b->v4l2_buffer.memory = state->memtype; b->v4l2_buffer.index = i; - b->v4l2_buffer.m.userptr = (unsigned long) b->buffer.datas[0].data; + b->v4l2_buffer.m.userptr = (unsigned long) b->buffer.datas[0].ptr; b->v4l2_buffer.length = b->buffer.datas[0].size; v4l2_buffer_free (b); @@ -542,22 +542,24 @@ mmap_init (SpaV4l2Source *this) b->dmafd = expbuf.fd; b->datas[0].type = SPA_DATA_TYPE_FD; - b->datas[0].data = &b->dmafd; + b->datas[0].ptr = &b->dmafd; + b->datas[0].ptr_type = "dmabuf"; b->datas[0].offset = 0; b->datas[0].size = buf.length; b->datas[0].stride = state->fmt.fmt.pix.bytesperline; } else { b->datas[0].type = SPA_DATA_TYPE_MEMPTR; - b->datas[0].data = mmap (NULL, - buf.length, - PROT_READ | PROT_WRITE, - MAP_SHARED, - state->fd, - buf.m.offset); + b->datas[0].ptr_type = "sysmem"; + b->datas[0].ptr = mmap (NULL, + buf.length, + PROT_READ | PROT_WRITE, + MAP_SHARED, + state->fd, + buf.m.offset); b->datas[0].offset = 0; b->datas[0].size = buf.length; b->datas[0].stride = state->fmt.fmt.pix.bytesperline; - if (b->datas[0].data == MAP_FAILED) { + if (b->datas[0].ptr == MAP_FAILED) { perror ("mmap"); continue; } @@ -662,7 +664,7 @@ spa_v4l2_stop (SpaV4l2Source *this) if (state->export_buf) { close (b->dmafd); } else { - munmap (b->datas[0].data, b->datas[0].size); + munmap (b->datas[0].ptr, b->datas[0].size); } } state->have_buffers = false; diff --git a/spa/plugins/volume/volume.c b/spa/plugins/volume/volume.c index 8e41cac2b..ebee9f80b 100644 --- a/spa/plugins/volume/volume.c +++ b/spa/plugins/volume/volume.c @@ -520,8 +520,8 @@ spa_volume_node_port_pull_output (SpaHandle *handle, di++; continue; } - src = (uint16_t*) ((uint8_t*)sd->data + soff); - dst = (uint16_t*) ((uint8_t*)dd->data + doff); + src = (uint16_t*) ((uint8_t*)sd->ptr + soff); + dst = (uint16_t*) ((uint8_t*)dd->ptr + doff); n_bytes = MIN (sd->size - soff, dd->size - doff); n_samples = n_bytes / sizeof (uint16_t); diff --git a/spa/tests/test-v4l2.c b/spa/tests/test-v4l2.c index 3a1a54090..d3d970a8e 100644 --- a/spa/tests/test-v4l2.c +++ b/spa/tests/test-v4l2.c @@ -126,7 +126,7 @@ on_source_event (SpaHandle *handle, SpaEvent *event, void *user_data) b = info[0].buffer; if (b->metas[1].type == SPA_META_TYPE_POINTER && - strcmp (((SpaMetaPointer*)b->metas[1].data)->type, "SDL_Texture") == 0) { + strcmp (((SpaMetaPointer*)b->metas[1].data)->ptr_type, "SDL_Texture") == 0) { SDL_Texture *texture; texture = ((SpaMetaPointer*)b->metas[1].data)->ptr; @@ -140,7 +140,8 @@ on_source_event (SpaHandle *handle, SpaEvent *event, void *user_data) fprintf (stderr, "Couldn't lock texture: %s\n", SDL_GetError()); return; } - b->datas[0].data = sdata; + b->datas[0].ptr = sdata; + b->datas[0].ptr_type = "sysmem"; b->datas[0].size = sstride * 240; b->datas[0].stride = sstride; } else { @@ -148,7 +149,7 @@ on_source_event (SpaHandle *handle, SpaEvent *event, void *user_data) fprintf (stderr, "Couldn't lock texture: %s\n", SDL_GetError()); return; } - sdata = b->datas[0].data; + sdata = b->datas[0].ptr; sstride = b->datas[0].stride; for (i = 0; i < 240; i++) { @@ -257,7 +258,8 @@ alloc_buffers (AppData *data) b->metas[1].size = sizeof (b->ptr); b->datas[0].type = SPA_DATA_TYPE_MEMPTR; - b->datas[0].data = mem; + b->datas[0].ptr = mem; + b->datas[0].ptr_type = "sysmem"; b->datas[0].offset = 0; b->datas[0].size = stride * 240; b->datas[0].stride = stride;