gst: add buffer video meta support

Fixes video buffer strides handling.
This enables passing of image datas with right line padding.
This commit is contained in:
Huang-Huang Bao 2023-02-03 13:02:49 +08:00 committed by Wim Taymans
parent 38f88d3d25
commit 023577e391
5 changed files with 93 additions and 0 deletions

View file

@ -615,6 +615,24 @@ static GstBuffer *dequeue_buffer(GstPipeWireSrc *pwsrc)
}
}
if (pwsrc->is_video) {
GstVideoInfo *info = &pwsrc->video_info;
GstVideoMeta *meta = gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE,
GST_VIDEO_INFO_FORMAT (info),
GST_VIDEO_INFO_WIDTH (info),
GST_VIDEO_INFO_HEIGHT (info),
GST_VIDEO_INFO_N_PLANES (info),
info->offset,
info->stride);
meta->n_planes = b->buffer->n_datas;
for (i = 0; i < b->buffer->n_datas; i++) {
struct spa_data *d = &b->buffer->datas[i];
meta->offset[i] = d->chunk->offset;
meta->stride[i] = d->chunk->stride;
}
}
for (i = 0; i < b->buffer->n_datas; i++) {
struct spa_data *d = &b->buffer->datas[i];
GstMemory *pmem = gst_buffer_peek_memory (data->buf, i);
@ -958,6 +976,10 @@ on_param_changed (void *data, uint32_t id,
gst_caps_unref(pwsrc->caps);
pwsrc->caps = gst_caps_from_format (param);
pwsrc->is_video = pwsrc->caps != NULL
? gst_video_info_from_caps (&pwsrc->video_info, pwsrc->caps)
: FALSE;
pwsrc->negotiated = pwsrc->caps != NULL;
if (pwsrc->negotiated) {