g_return_if_fail (src != NULL);
g_return_if_fail (dest != NULL);
+ /* Check the frames we've been passed match the layout
+ * we were configured for or we might go out of bounds */
+ if (G_UNLIKELY (GST_VIDEO_INFO_FORMAT (&convert->in_info) !=
+ GST_VIDEO_FRAME_FORMAT (src)
+ || GST_VIDEO_INFO_WIDTH (&convert->in_info) !=
+ GST_VIDEO_FRAME_WIDTH (src)
+ || GST_VIDEO_INFO_HEIGHT (&convert->in_info) !=
+ GST_VIDEO_FRAME_HEIGHT (src))) {
+ g_critical ("Input video frame does not match configuration");
+ return;
+ }
+ if (G_UNLIKELY (GST_VIDEO_INFO_FORMAT (&convert->out_info) !=
+ GST_VIDEO_FRAME_FORMAT (dest)
+ || GST_VIDEO_INFO_WIDTH (&convert->out_info) !=
+ GST_VIDEO_FRAME_WIDTH (dest)
+ || GST_VIDEO_INFO_HEIGHT (&convert->out_info) !=
+ GST_VIDEO_FRAME_HEIGHT (dest))) {
+ g_critical ("Output video frame does not match configuration");
+ return;
+ }
+
convert->convert (convert, src, dest);
}
GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT, 230, NULL));
gst_video_converter_frame (convert, &inframe, &outframe);
+
+ /* Check that video convert doesn't crash if we give it frames with different info
+ * than we configured it with by swapping width/height */
+ gst_video_frame_unmap (&inframe);
+ fail_unless (gst_video_info_set_format (&ininfo, GST_VIDEO_FORMAT_ARGB, 240,
+ 320));
+ gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ);
+ ASSERT_CRITICAL (gst_video_converter_frame (convert, &inframe, &outframe));
+
gst_video_converter_free (convert);
gst_video_frame_unmap (&outframe);