diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0585-staging-bcm2835-codec-Allow-a-different-stride-align.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0585-staging-bcm2835-codec-Allow-a-different-stride-align.patch | 590 |
1 files changed, 590 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0585-staging-bcm2835-codec-Allow-a-different-stride-align.patch b/target/linux/bcm27xx/patches-5.15/950-0585-staging-bcm2835-codec-Allow-a-different-stride-align.patch new file mode 100644 index 0000000000..befbc0f96a --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0585-staging-bcm2835-codec-Allow-a-different-stride-align.patch @@ -0,0 +1,590 @@ +From 9d12ccfea8cdc6d1dbb796a3023e8c8297a4465e Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.com> +Date: Mon, 29 Nov 2021 19:11:29 +0000 +Subject: [PATCH] staging/bcm2835-codec: Allow a different stride + alignment per role + +Deinterlace and decode aren't affected in the same way as encode +and ISP by the alignment requirement on 3 plane YUV420. +Decode would be affected, but it always aligns the height up to +a macroblock, and uses the selection API to reflect that. + +Add in the facility to set the bytesperline alignment per role. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> +--- + .../bcm2835-codec/bcm2835-v4l2-codec.c | 135 ++++++++++-------- + 1 file changed, 74 insertions(+), 61 deletions(-) + +--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c ++++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c +@@ -88,6 +88,7 @@ enum bcm2835_codec_role { + ENCODE, + ISP, + DEINTERLACE, ++ NUM_ROLES + }; + + static const char * const roles[] = { +@@ -145,7 +146,7 @@ static const char * const components[] = + struct bcm2835_codec_fmt { + u32 fourcc; + int depth; +- int bytesperline_align; ++ u8 bytesperline_align[NUM_ROLES]; + u32 flags; + u32 mmal_fmt; + int size_multiplier_x2; +@@ -157,63 +158,63 @@ static const struct bcm2835_codec_fmt su + /* YUV formats */ + .fourcc = V4L2_PIX_FMT_YUV420, + .depth = 8, +- .bytesperline_align = 64, ++ .bytesperline_align = { 32, 64, 64, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_I420, + .size_multiplier_x2 = 3, + }, { + .fourcc = V4L2_PIX_FMT_YVU420, + .depth = 8, +- .bytesperline_align = 64, ++ .bytesperline_align = { 32, 64, 64, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_YV12, + .size_multiplier_x2 = 3, + }, { + .fourcc = V4L2_PIX_FMT_NV12, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_NV12, + .size_multiplier_x2 = 3, + }, { + .fourcc = V4L2_PIX_FMT_NV21, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_NV21, + .size_multiplier_x2 = 3, + }, { + .fourcc = V4L2_PIX_FMT_RGB565, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_RGB16, + .size_multiplier_x2 = 2, + }, { + .fourcc = V4L2_PIX_FMT_YUYV, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_YUYV, + .size_multiplier_x2 = 2, + }, { + .fourcc = V4L2_PIX_FMT_UYVY, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_UYVY, + .size_multiplier_x2 = 2, + }, { + .fourcc = V4L2_PIX_FMT_YVYU, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_YVYU, + .size_multiplier_x2 = 2, + }, { + .fourcc = V4L2_PIX_FMT_VYUY, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_VYUY, + .size_multiplier_x2 = 2, +@@ -221,21 +222,21 @@ static const struct bcm2835_codec_fmt su + /* RGB formats */ + .fourcc = V4L2_PIX_FMT_RGB24, + .depth = 24, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_RGB24, + .size_multiplier_x2 = 2, + }, { + .fourcc = V4L2_PIX_FMT_BGR24, + .depth = 24, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BGR24, + .size_multiplier_x2 = 2, + }, { + .fourcc = V4L2_PIX_FMT_BGR32, + .depth = 32, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BGRA, + .size_multiplier_x2 = 2, +@@ -244,7 +245,7 @@ static const struct bcm2835_codec_fmt su + /* 8 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB8, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB8, + .size_multiplier_x2 = 2, +@@ -252,7 +253,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR8, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR8, + .size_multiplier_x2 = 2, +@@ -260,7 +261,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG8, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG8, + .size_multiplier_x2 = 2, +@@ -268,7 +269,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG8, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG8, + .size_multiplier_x2 = 2, +@@ -277,7 +278,7 @@ static const struct bcm2835_codec_fmt su + /* 10 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB10P, + .depth = 10, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB10P, + .size_multiplier_x2 = 2, +@@ -285,7 +286,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR10P, + .depth = 10, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR10P, + .size_multiplier_x2 = 2, +@@ -293,7 +294,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG10P, + .depth = 10, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG10P, + .size_multiplier_x2 = 2, +@@ -301,7 +302,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG10P, + .depth = 10, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG10P, + .size_multiplier_x2 = 2, +@@ -310,7 +311,7 @@ static const struct bcm2835_codec_fmt su + /* 12 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB12P, + .depth = 12, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB12P, + .size_multiplier_x2 = 2, +@@ -318,7 +319,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR12P, + .depth = 12, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR12P, + .size_multiplier_x2 = 2, +@@ -326,7 +327,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG12P, + .depth = 12, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG12P, + .size_multiplier_x2 = 2, +@@ -334,7 +335,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG12P, + .depth = 12, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG12P, + .size_multiplier_x2 = 2, +@@ -343,7 +344,7 @@ static const struct bcm2835_codec_fmt su + /* 14 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB14P, + .depth = 14, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB14P, + .size_multiplier_x2 = 2, +@@ -351,7 +352,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR14P, + .depth = 14, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR14P, + .size_multiplier_x2 = 2, +@@ -360,7 +361,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG14P, + .depth = 14, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG14P, + .size_multiplier_x2 = 2, +@@ -368,7 +369,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG14P, + .depth = 14, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG14P, + .size_multiplier_x2 = 2, +@@ -377,7 +378,7 @@ static const struct bcm2835_codec_fmt su + /* 16 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB16, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB16, + .size_multiplier_x2 = 2, +@@ -385,7 +386,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR16, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR16, + .size_multiplier_x2 = 2, +@@ -393,7 +394,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG16, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG16, + .size_multiplier_x2 = 2, +@@ -401,7 +402,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG16, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG16, + .size_multiplier_x2 = 2, +@@ -411,7 +412,7 @@ static const struct bcm2835_codec_fmt su + /* 10 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB10, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB10, + .size_multiplier_x2 = 2, +@@ -419,7 +420,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR10, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR10, + .size_multiplier_x2 = 2, +@@ -427,7 +428,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG10, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG10, + .size_multiplier_x2 = 2, +@@ -435,7 +436,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG10, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG10, + .size_multiplier_x2 = 2, +@@ -444,7 +445,7 @@ static const struct bcm2835_codec_fmt su + /* 12 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB12, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB12, + .size_multiplier_x2 = 2, +@@ -452,7 +453,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR12, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR12, + .size_multiplier_x2 = 2, +@@ -460,7 +461,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG12, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG12, + .size_multiplier_x2 = 2, +@@ -468,7 +469,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG12, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG12, + .size_multiplier_x2 = 2, +@@ -477,7 +478,7 @@ static const struct bcm2835_codec_fmt su + /* 14 bit */ + .fourcc = V4L2_PIX_FMT_SRGGB14, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB14, + .size_multiplier_x2 = 2, +@@ -485,7 +486,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SBGGR14, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR14, + .size_multiplier_x2 = 2, +@@ -493,7 +494,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGRBG14, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG14, + .size_multiplier_x2 = 2, +@@ -501,7 +502,7 @@ static const struct bcm2835_codec_fmt su + }, { + .fourcc = V4L2_PIX_FMT_SGBRG14, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG14, + .size_multiplier_x2 = 2, +@@ -511,7 +512,7 @@ static const struct bcm2835_codec_fmt su + /* 8 bit */ + .fourcc = V4L2_PIX_FMT_GREY, + .depth = 8, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_GREY, + .size_multiplier_x2 = 2, +@@ -519,7 +520,7 @@ static const struct bcm2835_codec_fmt su + /* 10 bit */ + .fourcc = V4L2_PIX_FMT_Y10P, + .depth = 10, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y10P, + .size_multiplier_x2 = 2, +@@ -527,7 +528,7 @@ static const struct bcm2835_codec_fmt su + /* 12 bit */ + .fourcc = V4L2_PIX_FMT_Y12P, + .depth = 12, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y12P, + .size_multiplier_x2 = 2, +@@ -535,7 +536,7 @@ static const struct bcm2835_codec_fmt su + /* 14 bit */ + .fourcc = V4L2_PIX_FMT_Y14P, + .depth = 14, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y14P, + .size_multiplier_x2 = 2, +@@ -543,7 +544,7 @@ static const struct bcm2835_codec_fmt su + /* 16 bit */ + .fourcc = V4L2_PIX_FMT_Y16, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y16, + .size_multiplier_x2 = 2, +@@ -551,7 +552,7 @@ static const struct bcm2835_codec_fmt su + /* 10 bit as 16bpp */ + .fourcc = V4L2_PIX_FMT_Y10, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y10, + .size_multiplier_x2 = 2, +@@ -559,7 +560,7 @@ static const struct bcm2835_codec_fmt su + /* 12 bit as 16bpp */ + .fourcc = V4L2_PIX_FMT_Y12, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y12, + .size_multiplier_x2 = 2, +@@ -567,7 +568,7 @@ static const struct bcm2835_codec_fmt su + /* 14 bit as 16bpp */ + .fourcc = V4L2_PIX_FMT_Y14, + .depth = 16, +- .bytesperline_align = 32, ++ .bytesperline_align = { 32, 32, 32, 32 }, + .flags = 0, + .mmal_fmt = MMAL_ENCODING_Y14, + .size_multiplier_x2 = 2, +@@ -840,9 +841,10 @@ static inline unsigned int get_sizeimage + } + + static inline unsigned int get_bytesperline(int width, +- struct bcm2835_codec_fmt *fmt) ++ struct bcm2835_codec_fmt *fmt, ++ enum bcm2835_codec_role role) + { +- return ALIGN((width * fmt->depth) >> 3, fmt->bytesperline_align); ++ return ALIGN((width * fmt->depth) >> 3, fmt->bytesperline_align[role]); + } + + static void setup_mmal_port_format(struct bcm2835_codec_ctx *ctx, +@@ -1040,7 +1042,7 @@ static void handle_fmt_changed(struct bc + */ + q_data->selection_set = true; + q_data->bytesperline = get_bytesperline(format->es.video.width, +- q_data->fmt); ++ q_data->fmt, ctx->dev->role); + + q_data->height = format->es.video.height; + q_data->sizeimage = format->buffer_size_min; +@@ -1422,11 +1424,13 @@ static int vidioc_try_fmt(struct bcm2835 + f->fmt.pix_mp.height = ALIGN(f->fmt.pix_mp.height, 16); + } + f->fmt.pix_mp.num_planes = 1; +- min_bytesperline = get_bytesperline(f->fmt.pix_mp.width, fmt); ++ min_bytesperline = get_bytesperline(f->fmt.pix_mp.width, fmt, ++ ctx->dev->role); + if (f->fmt.pix_mp.plane_fmt[0].bytesperline < min_bytesperline) + f->fmt.pix_mp.plane_fmt[0].bytesperline = min_bytesperline; + f->fmt.pix_mp.plane_fmt[0].bytesperline = +- ALIGN(f->fmt.pix_mp.plane_fmt[0].bytesperline, fmt->bytesperline_align); ++ ALIGN(f->fmt.pix_mp.plane_fmt[0].bytesperline, ++ fmt->bytesperline_align[ctx->dev->role]); + + sizeimage = get_sizeimage(f->fmt.pix_mp.plane_fmt[0].bytesperline, + f->fmt.pix_mp.width, f->fmt.pix_mp.height, +@@ -1581,7 +1585,8 @@ static int vidioc_s_fmt(struct bcm2835_c + q_data_dst->height = ALIGN(q_data->crop_height, 16); + + q_data_dst->bytesperline = +- get_bytesperline(f->fmt.pix_mp.width, q_data_dst->fmt); ++ get_bytesperline(f->fmt.pix_mp.width, q_data_dst->fmt, ++ ctx->dev->role); + q_data_dst->sizeimage = get_sizeimage(q_data_dst->bytesperline, + q_data_dst->crop_width, + q_data_dst->height, +@@ -1810,6 +1815,8 @@ static int vidioc_g_selection(struct fil + } + } + break; ++ case NUM_ROLES: ++ break; + } + + return 0; +@@ -1920,6 +1927,8 @@ static int vidioc_s_selection(struct fil + } + break; + } ++ case NUM_ROLES: ++ break; + } + + return 0; +@@ -3087,7 +3096,8 @@ static int bcm2835_codec_open(struct fil + ctx->q_data[V4L2_M2M_SRC].height = DEFAULT_HEIGHT; + ctx->q_data[V4L2_M2M_SRC].bytesperline = + get_bytesperline(DEFAULT_WIDTH, +- ctx->q_data[V4L2_M2M_SRC].fmt); ++ ctx->q_data[V4L2_M2M_SRC].fmt, ++ dev->role); + ctx->q_data[V4L2_M2M_SRC].sizeimage = + get_sizeimage(ctx->q_data[V4L2_M2M_SRC].bytesperline, + ctx->q_data[V4L2_M2M_SRC].crop_width, +@@ -3100,7 +3110,8 @@ static int bcm2835_codec_open(struct fil + ctx->q_data[V4L2_M2M_DST].height = DEFAULT_HEIGHT; + ctx->q_data[V4L2_M2M_DST].bytesperline = + get_bytesperline(DEFAULT_WIDTH, +- ctx->q_data[V4L2_M2M_DST].fmt); ++ ctx->q_data[V4L2_M2M_DST].fmt, ++ dev->role); + ctx->q_data[V4L2_M2M_DST].sizeimage = + get_sizeimage(ctx->q_data[V4L2_M2M_DST].bytesperline, + ctx->q_data[V4L2_M2M_DST].crop_width, +@@ -3230,6 +3241,8 @@ static int bcm2835_codec_open(struct fil + v4l2_ctrl_handler_init(hdl, 0); + } + break; ++ case NUM_ROLES: ++ break; + } + + ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, &queue_init); |