Message ID | 20200311174300.19407-7-ezequiel@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hantro: set of small cleanups and fixes | expand |
On Wed, 2020-03-11 at 14:43 -0300, Ezequiel Garcia wrote: > Refactor how S_FMT and TRY_FMT are handled, and also make sure > internal initial format and format reset are done properly. > > The latter is achieved by making sure the same hantro_{set,try}_fmt > helpers are called on all paths that set the format (which is > part of the driver state). > > This commit removes the following v4l2-compliance warnings: > > test VIDIOC_G_FMT: OK > fail: v4l2-test-formats.cpp(711): Video Capture Multiplanar: TRY_FMT(G_FMT) != G_FMT > test VIDIOC_TRY_FMT: FAIL > fail: v4l2-test-formats.cpp(1116): Video Capture Multiplanar: S_FMT(G_FMT) != G_FMT > test VIDIOC_S_FMT: FAIL > > Reported-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> > Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> > --- [..] > @@ -227,12 +232,12 @@ static int vidioc_g_fmt_cap_mplane(struct file *file, void *priv, > return 0; > } > > -static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f, > - bool capture) > +static int hantro_try_fmt(const struct hantro_ctx *ctx, Oops, it seems there's a warning due to ctx being const-qualified. That should be fixed of course. Regards, Ezequiel
Le mercredi 11 mars 2020 à 16:01 -0300, Ezequiel Garcia a écrit : > On Wed, 2020-03-11 at 14:43 -0300, Ezequiel Garcia wrote: > > Refactor how S_FMT and TRY_FMT are handled, and also make sure > > internal initial format and format reset are done properly. > > > > The latter is achieved by making sure the same hantro_{set,try}_fmt > > helpers are called on all paths that set the format (which is > > part of the driver state). > > > > This commit removes the following v4l2-compliance warnings: > > > > test VIDIOC_G_FMT: OK > > fail: v4l2-test-formats.cpp(711): Video Capture Multiplanar: TRY_FMT(G_FMT) != G_FMT > > test VIDIOC_TRY_FMT: FAIL > > fail: v4l2-test-formats.cpp(1116): Video Capture Multiplanar: S_FMT(G_FMT) != G_FMT > > test VIDIOC_S_FMT: FAIL > > > > Reported-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> > > Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> > > --- > [..] > > @@ -227,12 +232,12 @@ static int vidioc_g_fmt_cap_mplane(struct file *file, void *priv, > > return 0; > > } > > > > -static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f, > > - bool capture) > > +static int hantro_try_fmt(const struct hantro_ctx *ctx, > > Oops, it seems there's a warning due to ctx being const-qualified. Indeed: drivers/staging/media/hantro/hantro_v4l2.c: In function ‘hantro_try_fmt’: drivers/staging/media/hantro/hantro_v4l2.c:282:30: warning: passing argument 1 of ‘hantro_needs_postproc’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 282 | !hantro_needs_postproc(ctx, fmt)) | ^~~ In file included from drivers/staging/media/hantro/hantro_v4l2.c:29: drivers/staging/media/hantro/hantro.h:420:42: note: expected ‘struct hantro_ctx *’ but argument is of type ‘const struct hantro_ctx *’ 420 | hantro_needs_postproc(struct hantro_ctx *ctx, const struct hantro_fmt *fmt) | ~~~~~~~~~~~~~~~~~~~^~~ > > That should be fixed of course. > > Regards, > Ezequiel > >
Hi Ezequiel,
I love your patch! Perhaps something to improve:
[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v5.6-rc5 next-20200311]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Ezequiel-Garcia/hantro-set-of-small-cleanups-and-fixes/20200312-061234
base: git://linuxtv.org/media_tree.git master
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=9.2.0 make.cross ARCH=sh
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/staging/media/hantro/hantro_v4l2.c: In function 'hantro_try_fmt':
>> drivers/staging/media/hantro/hantro_v4l2.c:282:30: warning: passing argument 1 of 'hantro_needs_postproc' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
282 | !hantro_needs_postproc(ctx, fmt))
| ^~~
In file included from drivers/staging/media/hantro/hantro_v4l2.c:29:
drivers/staging/media/hantro/hantro.h:420:42: note: expected 'struct hantro_ctx *' but argument is of type 'const struct hantro_ctx *'
420 | hantro_needs_postproc(struct hantro_ctx *ctx, const struct hantro_fmt *fmt)
| ~~~~~~~~~~~~~~~~~~~^~~
vim +282 drivers/staging/media/hantro/hantro_v4l2.c
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 234
0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 235 static int hantro_try_fmt(const struct hantro_ctx *ctx,
0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 236 struct v4l2_pix_format_mplane *pix_mp,
0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 237 enum v4l2_buf_type type)
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 238 {
5980d40276b36b drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 239 const struct hantro_fmt *fmt, *vpu_fmt;
0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 240 bool capture = !V4L2_TYPE_IS_OUTPUT(type);
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 241 bool coded;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 242
a29add8c9bb29d drivers/staging/media/hantro/hantro_v4l2.c Philipp Zabel 2019-06-12 243 coded = capture == hantro_is_encoder_ctx(ctx);
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 244
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 245 vpu_debug(4, "trying format %c%c%c%c\n",
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 246 (pix_mp->pixelformat & 0x7f),
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 247 (pix_mp->pixelformat >> 8) & 0x7f,
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 248 (pix_mp->pixelformat >> 16) & 0x7f,
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 249 (pix_mp->pixelformat >> 24) & 0x7f);
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 250
5980d40276b36b drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 251 fmt = hantro_find_format(ctx, pix_mp->pixelformat);
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 252 if (!fmt) {
5980d40276b36b drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 253 fmt = hantro_get_default_fmt(ctx, coded);
0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 254 pix_mp->pixelformat = fmt->fourcc;
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 255 }
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 256
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 257 if (coded) {
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 258 pix_mp->num_planes = 1;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 259 vpu_fmt = fmt;
a29add8c9bb29d drivers/staging/media/hantro/hantro_v4l2.c Philipp Zabel 2019-06-12 260 } else if (hantro_is_encoder_ctx(ctx)) {
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 261 vpu_fmt = ctx->vpu_dst_fmt;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 262 } else {
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 263 vpu_fmt = ctx->vpu_src_fmt;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 264 /*
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 265 * Width/height on the CAPTURE end of a decoder are ignored and
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 266 * replaced by the OUTPUT ones.
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 267 */
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 268 pix_mp->width = ctx->src_fmt.width;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 269 pix_mp->height = ctx->src_fmt.height;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 270 }
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 271
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 272 pix_mp->field = V4L2_FIELD_NONE;
0a4f091c12b3ea drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Boris Brezillon 2019-05-28 273
0a4f091c12b3ea drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Boris Brezillon 2019-05-28 274 v4l2_apply_frmsize_constraints(&pix_mp->width, &pix_mp->height,
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 275 &vpu_fmt->frmsize);
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 276
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 277 if (!coded) {
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 278 /* Fill remaining fields */
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 279 v4l2_fill_pixfmt_mp(pix_mp, fmt->fourcc, pix_mp->width,
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 280 pix_mp->height);
8c2d66b036c778 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 281 if (ctx->vpu_src_fmt->fourcc == V4L2_PIX_FMT_H264_SLICE &&
042584e9055b61 drivers/staging/media/hantro/hantro_v4l2.c Philipp Zabel 2020-01-27 @282 !hantro_needs_postproc(ctx, fmt))
a9471e25629b02 drivers/staging/media/hantro/hantro_v4l2.c Hertz Wong 2019-08-16 283 pix_mp->plane_fmt[0].sizeimage +=
6574b7394c10e2 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 284 hantro_h264_mv_size(pix_mp->width,
6574b7394c10e2 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 285 pix_mp->height);
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 286 } else if (!pix_mp->plane_fmt[0].sizeimage) {
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 287 /*
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 288 * For coded formats the application can specify
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 289 * sizeimage. If the application passes a zero sizeimage,
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 290 * let's default to the maximum frame size.
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 291 */
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 292 pix_mp->plane_fmt[0].sizeimage = fmt->header_size +
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 293 pix_mp->width * pix_mp->height * fmt->max_depth;
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 294 }
953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 295
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 296 return 0;
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 297 }
775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 298
:::::: The code at line 282 was first introduced by commit
:::::: 042584e9055b615ac917239884fb0d65690f56ec media: hantro: fix extra MV/MC sync space calculation
:::::: TO: Philipp Zabel <p.zabel@pengutronix.de>
:::::: CC: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Ezequiel, I love your patch! Perhaps something to improve: [auto build test WARNING on linuxtv-media/master] [also build test WARNING on v5.6-rc5 next-20200312] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Ezequiel-Garcia/hantro-set-of-small-cleanups-and-fixes/20200312-061234 base: git://linuxtv.org/media_tree.git master reproduce: # apt-get install sparse # sparse version: v0.6.1-174-g094d5a94-dirty make ARCH=x86_64 allmodconfig make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) >> drivers/staging/media/hantro/hantro_v4l2.c:282:44: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected struct hantro_ctx *ctx @@ got structstruct hantro_ctx *ctx @@ >> drivers/staging/media/hantro/hantro_v4l2.c:282:44: sparse: expected struct hantro_ctx *ctx >> drivers/staging/media/hantro/hantro_v4l2.c:282:44: sparse: got struct hantro_ctx const *ctx vim +282 drivers/staging/media/hantro/hantro_v4l2.c 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 234 0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 235 static int hantro_try_fmt(const struct hantro_ctx *ctx, 0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 236 struct v4l2_pix_format_mplane *pix_mp, 0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 237 enum v4l2_buf_type type) 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 238 { 5980d40276b36b drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 239 const struct hantro_fmt *fmt, *vpu_fmt; 0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 240 bool capture = !V4L2_TYPE_IS_OUTPUT(type); 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 241 bool coded; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 242 a29add8c9bb29d drivers/staging/media/hantro/hantro_v4l2.c Philipp Zabel 2019-06-12 243 coded = capture == hantro_is_encoder_ctx(ctx); 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 244 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 245 vpu_debug(4, "trying format %c%c%c%c\n", 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 246 (pix_mp->pixelformat & 0x7f), 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 247 (pix_mp->pixelformat >> 8) & 0x7f, 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 248 (pix_mp->pixelformat >> 16) & 0x7f, 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 249 (pix_mp->pixelformat >> 24) & 0x7f); 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 250 5980d40276b36b drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 251 fmt = hantro_find_format(ctx, pix_mp->pixelformat); 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 252 if (!fmt) { 5980d40276b36b drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 253 fmt = hantro_get_default_fmt(ctx, coded); 0f07bff2f08018 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 254 pix_mp->pixelformat = fmt->fourcc; 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 255 } 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 256 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 257 if (coded) { 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 258 pix_mp->num_planes = 1; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 259 vpu_fmt = fmt; a29add8c9bb29d drivers/staging/media/hantro/hantro_v4l2.c Philipp Zabel 2019-06-12 260 } else if (hantro_is_encoder_ctx(ctx)) { 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 261 vpu_fmt = ctx->vpu_dst_fmt; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 262 } else { 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 263 vpu_fmt = ctx->vpu_src_fmt; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 264 /* 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 265 * Width/height on the CAPTURE end of a decoder are ignored and 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 266 * replaced by the OUTPUT ones. 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 267 */ 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 268 pix_mp->width = ctx->src_fmt.width; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 269 pix_mp->height = ctx->src_fmt.height; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 270 } 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 271 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 272 pix_mp->field = V4L2_FIELD_NONE; 0a4f091c12b3ea drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Boris Brezillon 2019-05-28 273 0a4f091c12b3ea drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Boris Brezillon 2019-05-28 274 v4l2_apply_frmsize_constraints(&pix_mp->width, &pix_mp->height, 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 275 &vpu_fmt->frmsize); 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 276 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 277 if (!coded) { 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 278 /* Fill remaining fields */ 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 279 v4l2_fill_pixfmt_mp(pix_mp, fmt->fourcc, pix_mp->width, 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 280 pix_mp->height); 8c2d66b036c778 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2019-12-05 281 if (ctx->vpu_src_fmt->fourcc == V4L2_PIX_FMT_H264_SLICE && 042584e9055b61 drivers/staging/media/hantro/hantro_v4l2.c Philipp Zabel 2020-01-27 @282 !hantro_needs_postproc(ctx, fmt)) a9471e25629b02 drivers/staging/media/hantro/hantro_v4l2.c Hertz Wong 2019-08-16 283 pix_mp->plane_fmt[0].sizeimage += 6574b7394c10e2 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 284 hantro_h264_mv_size(pix_mp->width, 6574b7394c10e2 drivers/staging/media/hantro/hantro_v4l2.c Ezequiel Garcia 2020-03-11 285 pix_mp->height); 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 286 } else if (!pix_mp->plane_fmt[0].sizeimage) { 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 287 /* 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 288 * For coded formats the application can specify 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 289 * sizeimage. If the application passes a zero sizeimage, 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 290 * let's default to the maximum frame size. 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 291 */ 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 292 pix_mp->plane_fmt[0].sizeimage = fmt->header_size + 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 293 pix_mp->width * pix_mp->height * fmt->max_depth; 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 294 } 953aaa1492c538 drivers/staging/media/rockchip/vpu/rockchip_vpu_v4l2.c Boris Brezillon 2019-05-28 295 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 296 return 0; 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 297 } 775fec69008d30 drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c Ezequiel Garcia 2018-12-05 298 :::::: The code at line 282 was first introduced by commit :::::: 042584e9055b615ac917239884fb0d65690f56ec media: hantro: fix extra MV/MC sync space calculation :::::: TO: Philipp Zabel <p.zabel@pengutronix.de> :::::: CC: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/staging/media/hantro/hantro_v4l2.c b/drivers/staging/media/hantro/hantro_v4l2.c index 458b502ff01b..f28a94e2fa93 100644 --- a/drivers/staging/media/hantro/hantro_v4l2.c +++ b/drivers/staging/media/hantro/hantro_v4l2.c @@ -30,6 +30,11 @@ #include "hantro_hw.h" #include "hantro_v4l2.h" +static int hantro_set_fmt_out(struct hantro_ctx *ctx, + struct v4l2_pix_format_mplane *pix_mp); +static int hantro_set_fmt_cap(struct hantro_ctx *ctx, + struct v4l2_pix_format_mplane *pix_mp); + static const struct hantro_fmt * hantro_get_formats(const struct hantro_ctx *ctx, unsigned int *num_fmts) { @@ -227,12 +232,12 @@ static int vidioc_g_fmt_cap_mplane(struct file *file, void *priv, return 0; } -static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f, - bool capture) +static int hantro_try_fmt(const struct hantro_ctx *ctx, + struct v4l2_pix_format_mplane *pix_mp, + enum v4l2_buf_type type) { - struct hantro_ctx *ctx = fh_to_ctx(priv); - struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp; const struct hantro_fmt *fmt, *vpu_fmt; + bool capture = !V4L2_TYPE_IS_OUTPUT(type); bool coded; coded = capture == hantro_is_encoder_ctx(ctx); @@ -246,7 +251,7 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f, fmt = hantro_find_format(ctx, pix_mp->pixelformat); if (!fmt) { fmt = hantro_get_default_fmt(ctx, coded); - f->fmt.pix_mp.pixelformat = fmt->fourcc; + pix_mp->pixelformat = fmt->fourcc; } if (coded) { @@ -294,13 +299,13 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f, static int vidioc_try_fmt_cap_mplane(struct file *file, void *priv, struct v4l2_format *f) { - return vidioc_try_fmt(file, priv, f, true); + return hantro_try_fmt(fh_to_ctx(priv), &f->fmt.pix_mp, f->type); } static int vidioc_try_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f) { - return vidioc_try_fmt(file, priv, f, false); + return hantro_try_fmt(fh_to_ctx(priv), &f->fmt.pix_mp, f->type); } static void @@ -334,11 +339,12 @@ hantro_reset_encoded_fmt(struct hantro_ctx *ctx) } hantro_reset_fmt(fmt, vpu_fmt); - fmt->num_planes = 1; fmt->width = vpu_fmt->frmsize.min_width; fmt->height = vpu_fmt->frmsize.min_height; - fmt->plane_fmt[0].sizeimage = vpu_fmt->header_size + - fmt->width * fmt->height * vpu_fmt->max_depth; + if (hantro_is_encoder_ctx(ctx)) + hantro_set_fmt_cap(ctx, fmt); + else + hantro_set_fmt_out(ctx, fmt); } static void @@ -360,9 +366,12 @@ hantro_reset_raw_fmt(struct hantro_ctx *ctx) } hantro_reset_fmt(raw_fmt, raw_vpu_fmt); - v4l2_fill_pixfmt_mp(raw_fmt, raw_vpu_fmt->fourcc, - encoded_fmt->width, - encoded_fmt->height); + raw_fmt->width = encoded_fmt->width; + raw_fmt->width = encoded_fmt->width; + if (hantro_is_encoder_ctx(ctx)) + hantro_set_fmt_out(ctx, raw_fmt); + else + hantro_set_fmt_cap(ctx, raw_fmt); } void hantro_reset_fmts(struct hantro_ctx *ctx) @@ -388,15 +397,15 @@ hantro_update_requires_request(struct hantro_ctx *ctx, u32 fourcc) } } -static int -vidioc_s_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f) +static int hantro_set_fmt_out(struct hantro_ctx *ctx, + struct v4l2_pix_format_mplane *pix_mp) { - struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp; - struct hantro_ctx *ctx = fh_to_ctx(priv); - struct vb2_queue *vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type); + struct vb2_queue *vq; int ret; - ret = vidioc_try_fmt_out_mplane(file, priv, f); + vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, + V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); + ret = hantro_try_fmt(ctx, pix_mp, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); if (ret) return ret; @@ -458,16 +467,15 @@ vidioc_s_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f) return 0; } -static int vidioc_s_fmt_cap_mplane(struct file *file, void *priv, - struct v4l2_format *f) +static int hantro_set_fmt_cap(struct hantro_ctx *ctx, + struct v4l2_pix_format_mplane *pix_mp) { - struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp; - struct hantro_ctx *ctx = fh_to_ctx(priv); struct vb2_queue *vq; int ret; /* Change not allowed if queue is busy. */ - vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type); + vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, + V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); if (vb2_is_busy(vq)) return -EBUSY; @@ -488,7 +496,7 @@ static int vidioc_s_fmt_cap_mplane(struct file *file, void *priv, return -EBUSY; } - ret = vidioc_try_fmt_cap_mplane(file, priv, f); + ret = hantro_try_fmt(ctx, pix_mp, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); if (ret) return ret; @@ -522,6 +530,18 @@ static int vidioc_s_fmt_cap_mplane(struct file *file, void *priv, return 0; } +static int +vidioc_s_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f) +{ + return hantro_set_fmt_out(fh_to_ctx(priv), &f->fmt.pix_mp); +} + +static int +vidioc_s_fmt_cap_mplane(struct file *file, void *priv, struct v4l2_format *f) +{ + return hantro_set_fmt_cap(fh_to_ctx(priv), &f->fmt.pix_mp); +} + const struct v4l2_ioctl_ops hantro_ioctl_ops = { .vidioc_querycap = vidioc_querycap, .vidioc_enum_framesizes = vidioc_enum_framesizes,
Refactor how S_FMT and TRY_FMT are handled, and also make sure internal initial format and format reset are done properly. The latter is achieved by making sure the same hantro_{set,try}_fmt helpers are called on all paths that set the format (which is part of the driver state). This commit removes the following v4l2-compliance warnings: test VIDIOC_G_FMT: OK fail: v4l2-test-formats.cpp(711): Video Capture Multiplanar: TRY_FMT(G_FMT) != G_FMT test VIDIOC_TRY_FMT: FAIL fail: v4l2-test-formats.cpp(1116): Video Capture Multiplanar: S_FMT(G_FMT) != G_FMT test VIDIOC_S_FMT: FAIL Reported-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> --- drivers/staging/media/hantro/hantro_v4l2.c | 70 ++++++++++++++-------- 1 file changed, 45 insertions(+), 25 deletions(-)