media: bcm2835-unicam: Retain packing information on G_FMT

The change to retrieve the pixel format always on g_fmt didn't
check whether the native or unpacked version of the format
had been requested, and always returned the packed one.
Correct this so that the packing setting is retained whereever
possible.

Fixes "9d59e89 media: bcm2835-unicam: Re-fetch mbus code from subdev
on a g_fmt call"

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
This commit is contained in:
Dave Stevenson
2020-05-19 11:46:47 +01:00
committed by popcornmix
parent d62b4f2f57
commit 6dfeeea616

View File

@@ -974,8 +974,23 @@ static int unicam_g_fmt_vid_cap(struct file *file, void *priv,
if (!fmt) if (!fmt)
return -EINVAL; return -EINVAL;
node->fmt = fmt; if (node->fmt != fmt) {
/*
* The sensor format has changed so the pixelformat needs to
* be updated. Try and retain the packed/unpacked choice if
* at all possible.
*/
if (node->fmt->repacked_fourcc ==
node->v_fmt.fmt.pix.pixelformat)
/* Using the repacked format */
node->v_fmt.fmt.pix.pixelformat = fmt->repacked_fourcc;
else
/* Using the native format */
node->v_fmt.fmt.pix.pixelformat = fmt->fourcc; node->v_fmt.fmt.pix.pixelformat = fmt->fourcc;
node->fmt = fmt;
}
*f = node->v_fmt; *f = node->v_fmt;
return 0; return 0;