Commit f70bb084 authored by Nicolas Dufresne's avatar Nicolas Dufresne
Browse files

v4l2object: Fix tiled stride request

Fix stride request for tiled format and improve logging.
parent 36dfdff8
...@@ -2393,31 +2393,61 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, GstCaps * caps) ...@@ -2393,31 +2393,61 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, GstCaps * caps)
format.fmt.pix_mp.field = field; format.fmt.pix_mp.field = field;
format.fmt.pix_mp.num_planes = n_v4l_planes; format.fmt.pix_mp.num_planes = n_v4l_planes;
/* try to ask our prefered stride but it's not a failure /* try to ask our prefered stride but it's not a failure if not
* if not accepted */ * accepted */
for (i = 0; i < format.fmt.pix_mp.num_planes; i++) for (i = 0; i < n_v4l_planes; i++) {
format.fmt.pix_mp.plane_fmt[i].bytesperline = gint stride = GST_VIDEO_INFO_PLANE_STRIDE (&info, i);
GST_VIDEO_INFO_PLANE_STRIDE (&info, i);
if (GST_VIDEO_FORMAT_INFO_IS_TILED (info.finfo))
stride = GST_VIDEO_TILE_X_TILES (stride) <<
GST_VIDEO_FORMAT_INFO_TILE_WS (info.finfo);
format.fmt.pix_mp.plane_fmt[i].bytesperline = stride;
}
if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ENCODED) if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ENCODED)
format.fmt.pix_mp.plane_fmt[0].sizeimage = ENCODED_BUFFER_SIZE; format.fmt.pix_mp.plane_fmt[0].sizeimage = ENCODED_BUFFER_SIZE;
} else { } else {
gint stride = GST_VIDEO_INFO_PLANE_STRIDE (&info, 0);
format.type = v4l2object->type; format.type = v4l2object->type;
format.fmt.pix.width = width; format.fmt.pix.width = width;
format.fmt.pix.height = height; format.fmt.pix.height = height;
format.fmt.pix.pixelformat = pixelformat; format.fmt.pix.pixelformat = pixelformat;
format.fmt.pix.field = field; format.fmt.pix.field = field;
if (GST_VIDEO_FORMAT_INFO_IS_TILED (info.finfo))
stride = GST_VIDEO_TILE_X_TILES (stride) <<
GST_VIDEO_FORMAT_INFO_TILE_WS (info.finfo);
/* try to ask our prefered stride */ /* try to ask our prefered stride */
format.fmt.pix.bytesperline = GST_VIDEO_INFO_PLANE_STRIDE (&info, 0); format.fmt.pix.bytesperline = stride;
if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ENCODED) if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ENCODED)
format.fmt.pix.sizeimage = ENCODED_BUFFER_SIZE; format.fmt.pix.sizeimage = ENCODED_BUFFER_SIZE;
} }
GST_DEBUG_OBJECT (v4l2object->element, "Desired format is %dx%d, format "
"%" GST_FOURCC_FORMAT ", nb planes %d", format.fmt.pix.width,
format.fmt.pix_mp.height,
GST_FOURCC_ARGS (format.fmt.pix.pixelformat),
is_mplane ? format.fmt.pix_mp.num_planes : 1);
#ifndef GST_DISABLE_GST_DEBUG
if (is_mplane) {
for (i = 0; i < format.fmt.pix_mp.num_planes; i++)
GST_DEBUG_OBJECT (v4l2object->element, " stride %d",
format.fmt.pix_mp.plane_fmt[i].bytesperline);
} else {
GST_DEBUG_OBJECT (v4l2object->element, " stride %d",
format.fmt.pix.bytesperline);
}
#endif
if (v4l2_ioctl (fd, VIDIOC_S_FMT, &format) < 0) if (v4l2_ioctl (fd, VIDIOC_S_FMT, &format) < 0)
goto set_fmt_failed; goto set_fmt_failed;
GST_DEBUG_OBJECT (v4l2object->element, "Got format to %dx%d, format " GST_DEBUG_OBJECT (v4l2object->element, "Got format of %dx%d, format "
"%" GST_FOURCC_FORMAT ", nb planes %d", format.fmt.pix.width, "%" GST_FOURCC_FORMAT ", nb planes %d", format.fmt.pix.width,
format.fmt.pix_mp.height, format.fmt.pix_mp.height,
GST_FOURCC_ARGS (format.fmt.pix.pixelformat), GST_FOURCC_ARGS (format.fmt.pix.pixelformat),
...@@ -2426,8 +2456,12 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, GstCaps * caps) ...@@ -2426,8 +2456,12 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, GstCaps * caps)
#ifndef GST_DISABLE_GST_DEBUG #ifndef GST_DISABLE_GST_DEBUG
if (is_mplane) { if (is_mplane) {
for (i = 0; i < format.fmt.pix_mp.num_planes; i++) for (i = 0; i < format.fmt.pix_mp.num_planes; i++)
GST_DEBUG_OBJECT (v4l2object->element, " stride %d", GST_DEBUG_OBJECT (v4l2object->element, " stride %d, sizeimage %d",
format.fmt.pix_mp.plane_fmt[i].bytesperline); format.fmt.pix_mp.plane_fmt[i].bytesperline,
format.fmt.pix_mp.plane_fmt[i].sizeimage);
} else {
GST_DEBUG_OBJECT (v4l2object->element, " stride %d, sizeimage %d",
format.fmt.pix.bytesperline, format.fmt.pix.sizeimage);
} }
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment