mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
libcamera: use the data type mask to select a type
In alloc_buffers we need to look at the data types mask. Select DmaBuf when not invalid and the DmaBuf flag is set, otherwise select memptr. See #1054
This commit is contained in:
parent
6e0ba50a9c
commit
cd79cdfb40
1 changed files with 14 additions and 4 deletions
|
|
@ -756,7 +756,19 @@ mmap_init(struct impl *this,
|
|||
|
||||
spa_log_info(this->log, "libcamera: In mmap_init()");
|
||||
|
||||
port->memtype = SPA_DATA_DmaBuf;
|
||||
if (n_buffers > 0) {
|
||||
d = buffers[0]->datas;
|
||||
|
||||
if (d[0].type != SPA_ID_INVALID &&
|
||||
d[0].type & (1u << SPA_DATA_DmaBuf)) {
|
||||
port->memtype = SPA_DATA_DmaBuf;
|
||||
} else if (d[0].type & (1u << SPA_DATA_MemPtr)) {
|
||||
port->memtype = SPA_DATA_MemPtr;
|
||||
} else {
|
||||
spa_log_error(this->log, "v4l2: can't use buffers of type %d", d[0].type);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
/* get n_buffers from libcamera */
|
||||
uint32_t libcamera_nbuffers = libcamera_get_nbuffers(port->dev.camera);
|
||||
|
|
@ -778,7 +790,7 @@ mmap_init(struct impl *this,
|
|||
|
||||
d = buffers[i]->datas;
|
||||
for(j = 0; j < buffers[i]->n_datas; ++j) {
|
||||
d[j].type = SPA_DATA_DmaBuf;
|
||||
d[j].type = port->memtype;
|
||||
d[j].flags = SPA_DATA_FLAG_READABLE;
|
||||
d[j].mapoffset = 0;
|
||||
d[j].maxsize = libcamera_get_max_size(port->dev.camera);
|
||||
|
|
@ -787,8 +799,6 @@ mmap_init(struct impl *this,
|
|||
d[j].chunk->stride = port->fmt.bytesperline; /* FIXME:: This needs to be appropriately filled */
|
||||
d[j].chunk->flags = 0;
|
||||
|
||||
d[j].flags = SPA_DATA_FLAG_READABLE;
|
||||
|
||||
if(port->memtype == SPA_DATA_DmaBuf) {
|
||||
d[j].fd = libcamera_get_fd(port->dev.camera, i, j);
|
||||
spa_log_info(this->log, "libcamera: Got fd = %ld for buffer: #%d\n", d[j].fd, i);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue