From afcc0b3c50815c9e7e85071b341f50d5ed09e13c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 28 Nov 2014 10:27:28 +0100 Subject: [PATCH] video-frame: Mapping a frame with inconsistent values between GstVideoMeta and GstVideoInfo is a bug It will cause the frame to be initialized with inconsistent values that then later can cause crashes or any other kind of interesting and hard to debug bugs. --- gst-libs/gst/video/video-frame.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c index 8a9ae96..353b416 100644 --- a/gst-libs/gst/video/video-frame.c +++ b/gst-libs/gst/video/video-frame.c @@ -72,13 +72,19 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info, frame->info = *info; if (meta) { + /* All these values must be consistent */ + g_return_val_if_fail (info->finfo->format == meta->format, FALSE); + g_return_val_if_fail (info->width == meta->width, FALSE); + g_return_val_if_fail (info->height == meta->height, FALSE); + g_return_val_if_fail (info->finfo->n_planes == meta->n_planes, FALSE); + frame->info.finfo = gst_video_format_get_info (meta->format); frame->info.width = meta->width; frame->info.height = meta->height; frame->id = meta->id; frame->flags = meta->flags; - for (i = 0; i < info->finfo->n_planes; i++) { + for (i = 0; i < meta->n_planes; i++) { frame->info.offset[i] = meta->offset[i]; if (!gst_video_meta_map (meta, i, &frame->map[i], &frame->data[i], &frame->info.stride[i], flags)) -- 2.7.4