Message ID | 20211019120047.827915-4-dorota.czaplejewicz@puri.sm (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [PATCHv3,1/4] media: imx: Remove unused functions | expand |
On Tue, 2021-10-19 at 14:14 +0200, Dorota Czaplejewicz wrote: > This splits out a format handler which takes into account > the capabilities of the i.MX7/8 video device, > as opposed to the default handler compatible with both i.MX5/6 and i.MX7/8. > > Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> Cc: Rui & Laurent Looks sane to me, but I'd like someone with i.MX7/8 media experience to have a look at this. Thread at https://lore.kernel.org/linux-media/20211019120047.827915-1-dorota.czaplejewicz@puri.sm/ regards Philipp
Hi Philipp, On Wed Nov 3, 2021 at 12:32 PM WET, Philipp Zabel wrote: > On Tue, 2021-10-19 at 14:14 +0200, Dorota Czaplejewicz wrote: > > This splits out a format handler which takes into account > > the capabilities of the i.MX7/8 video device, > > as opposed to the default handler compatible with both i.MX5/6 and i.MX7/8. > > > > Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> > > Cc: Rui & Laurent > > Looks sane to me, but I'd like someone with i.MX7/8 media experience to > have a look at this. Thanks for the CC, this really went off of my radar. I will try to take a look at it, but one of the comments on the first patch: "The use of `v4l2_fill_pixfmt` comes with the downside of breaking 10-bit Bayer formats, or at least until my other series gets accepted (Subject: "media: Add 16-bit Bayer formats". Sorry, I don't have the message id.)." made me wonder if that series was already accepted? without it this will break the warp7 setup. ------ Cheers, Rui > > Thread at > https://lore.kernel.org/linux-media/20211019120047.827915-1-dorota.czaplejewicz@puri.sm/ > > regards > Philipp
Hi Dorota, Since I marked "media: Add 16-bit Bayer formats" as 'Changes Requested', and since this patch appears to depend on that patch based on a comment in the first patch, I decided to mark this series as 'Changes Requested' (except for patch 1 which has already been accepted). Please post a v4 if you want this in, and add the "media: Add 16-bit Bayer formats" patch as well to that v4 series. Thanks! Hans On 19/10/2021 14:14, Dorota Czaplejewicz wrote: > This splits out a format handler which takes into account > the capabilities of the i.MX7/8 video device, > as opposed to the default handler compatible with both i.MX5/6 and i.MX7/8. > > Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> > --- > drivers/staging/media/imx/imx-media-utils.c | 56 +++++++++++++++++++-- > 1 file changed, 52 insertions(+), 4 deletions(-) > > diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c > index 8b5c6bcfd4fa..1ff7ec4c877a 100644 > --- a/drivers/staging/media/imx/imx-media-utils.c > +++ b/drivers/staging/media/imx/imx-media-utils.c > @@ -516,10 +516,9 @@ void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt, > } > EXPORT_SYMBOL_GPL(imx_media_try_colorimetry); > > -int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, > - const struct v4l2_mbus_framefmt *mbus, > - const struct imx_media_pixfmt *cc, > - enum imx_media_device_type type) > +static int imx56_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, > + const struct v4l2_mbus_framefmt *mbus, > + const struct imx_media_pixfmt *cc) > { > u32 width; > u32 stride; > @@ -568,6 +567,55 @@ int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, > > return 0; > } > + > +static int imx78_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, > + const struct v4l2_mbus_framefmt *mbus, > + const struct imx_media_pixfmt *cc) > +{ > + int ret; > + > + if (!cc) > + cc = imx_media_find_mbus_format(mbus->code, PIXFMT_SEL_ANY); > + > + /* > + * The hardware can handle line lengths divisible by 4 pixels > + * as long as the whole buffer size ends up divisible by 8 bytes. > + * If not, use the value of 8 pixels recommended in the datasheet. > + */ > + ret = v4l2_fill_pixfmt(pix, cc->fourcc, > + round_up(mbus->width, 4), mbus->height); > + if (ret) > + return ret; > + > + /* Only 8bits-per-pixel formats may need to get aligned to 8 pixels, > + * because both 10-bit and 16-bit pixels occupy 2 bytes. > + * In those, 4-pixel aligmnent is equal to 8-byte alignment. > + */ > + if (pix->sizeimage % 8 != 0) > + ret = v4l2_fill_pixfmt(pix, cc->fourcc, > + round_up(mbus->width, 8), mbus->height); > + > + pix->colorspace = mbus->colorspace; > + pix->xfer_func = mbus->xfer_func; > + pix->ycbcr_enc = mbus->ycbcr_enc; > + pix->quantization = mbus->quantization; > + pix->field = mbus->field; > + > + return ret; > +} > + > +int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, > + const struct v4l2_mbus_framefmt *mbus, > + const struct imx_media_pixfmt *cc, > + enum imx_media_device_type type) { > + switch (type) { > + case DEVICE_TYPE_IMX56: > + return imx56_media_mbus_fmt_to_pix_fmt(pix, mbus, cc); > + case DEVICE_TYPE_IMX78: > + return imx78_media_mbus_fmt_to_pix_fmt(pix, mbus, cc); > + } > + return -EINVAL; > +} > EXPORT_SYMBOL_GPL(imx_media_mbus_fmt_to_pix_fmt); > > void imx_media_free_dma_buf(struct device *dev,
diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c index 8b5c6bcfd4fa..1ff7ec4c877a 100644 --- a/drivers/staging/media/imx/imx-media-utils.c +++ b/drivers/staging/media/imx/imx-media-utils.c @@ -516,10 +516,9 @@ void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt, } EXPORT_SYMBOL_GPL(imx_media_try_colorimetry); -int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, - const struct v4l2_mbus_framefmt *mbus, - const struct imx_media_pixfmt *cc, - enum imx_media_device_type type) +static int imx56_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, + const struct v4l2_mbus_framefmt *mbus, + const struct imx_media_pixfmt *cc) { u32 width; u32 stride; @@ -568,6 +567,55 @@ int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, return 0; } + +static int imx78_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, + const struct v4l2_mbus_framefmt *mbus, + const struct imx_media_pixfmt *cc) +{ + int ret; + + if (!cc) + cc = imx_media_find_mbus_format(mbus->code, PIXFMT_SEL_ANY); + + /* + * The hardware can handle line lengths divisible by 4 pixels + * as long as the whole buffer size ends up divisible by 8 bytes. + * If not, use the value of 8 pixels recommended in the datasheet. + */ + ret = v4l2_fill_pixfmt(pix, cc->fourcc, + round_up(mbus->width, 4), mbus->height); + if (ret) + return ret; + + /* Only 8bits-per-pixel formats may need to get aligned to 8 pixels, + * because both 10-bit and 16-bit pixels occupy 2 bytes. + * In those, 4-pixel aligmnent is equal to 8-byte alignment. + */ + if (pix->sizeimage % 8 != 0) + ret = v4l2_fill_pixfmt(pix, cc->fourcc, + round_up(mbus->width, 8), mbus->height); + + pix->colorspace = mbus->colorspace; + pix->xfer_func = mbus->xfer_func; + pix->ycbcr_enc = mbus->ycbcr_enc; + pix->quantization = mbus->quantization; + pix->field = mbus->field; + + return ret; +} + +int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, + const struct v4l2_mbus_framefmt *mbus, + const struct imx_media_pixfmt *cc, + enum imx_media_device_type type) { + switch (type) { + case DEVICE_TYPE_IMX56: + return imx56_media_mbus_fmt_to_pix_fmt(pix, mbus, cc); + case DEVICE_TYPE_IMX78: + return imx78_media_mbus_fmt_to_pix_fmt(pix, mbus, cc); + } + return -EINVAL; +} EXPORT_SYMBOL_GPL(imx_media_mbus_fmt_to_pix_fmt); void imx_media_free_dma_buf(struct device *dev,
This splits out a format handler which takes into account the capabilities of the i.MX7/8 video device, as opposed to the default handler compatible with both i.MX5/6 and i.MX7/8. Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> --- drivers/staging/media/imx/imx-media-utils.c | 56 +++++++++++++++++++-- 1 file changed, 52 insertions(+), 4 deletions(-)