:::::: :::::: Manual check reason: "low confidence bisect report" :::::: Manual check reason: "low confidence static check warning: drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1448:63: warning: dereference of NULL 'fmt' [CWE-476] [-Wanalyzer-null-dereference]" ::::::
CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: linux-ker...@vger.kernel.org TO: Mauro Carvalho Chehab <mche...@kernel.org> CC: linux-me...@vger.kernel.org tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 30306f6194cadcc29c77f6ddcd416a75bf5c0232 commit: f4104b7851a8d8b9a70899dcbecdb393eb16cd8a media: platform: rename s5p-jpeg/ to samsung/s5p-jpeg/ date: 3 months ago :::::: branch date: 22 hours ago :::::: commit date: 3 months ago config: arm-randconfig-c002-20220615 (https://download.01.org/0day-ci/archive/20220617/202206170333.eakzcei3-...@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f4104b7851a8d8b9a70899dcbecdb393eb16cd8a git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout f4104b7851a8d8b9a70899dcbecdb393eb16cd8a # save the config file ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <l...@intel.com> gcc-analyzer warnings: (new ones prefixed by >>) drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c: In function 'vidioc_try_fmt': >> drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1448:63: warning: >> dereference of NULL 'fmt' [CWE-476] [-Wanalyzer-null-dereference] 1448 | S5P_JPEG_MAX_WIDTH, fmt->h_align, | ~~~^~~~~~~~~ 's5p_jpeg_try_fmt_vid_cap': events 1-2 | | 1473 | static int s5p_jpeg_try_fmt_vid_cap(struct file *file, void *priv, | | ^~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) entry to 's5p_jpeg_try_fmt_vid_cap' |...... | 1481 | fmt = s5p_jpeg_find_format(ctx, f->fmt.pix.pixelformat, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 's5p_jpeg_find_format' from 's5p_jpeg_try_fmt_vid_cap' | 1482 | FMT_TYPE_CAPTURE); | | ~~~~~~~~~~~~~~~~~ | +--> 's5p_jpeg_find_format': event 3 | | 1365 | static struct s5p_jpeg_fmt *s5p_jpeg_find_format(struct s5p_jpeg_ctx *ctx, | | ^~~~~~~~~~~~~~~~~~~~ | | | | | (3) entry to 's5p_jpeg_find_format' | 's5p_jpeg_find_format': event 4 | | 1376 | SJPEG_FMT_FLAG_DEC_OUTPUT : | 's5p_jpeg_find_format': event 5 | |cc1: | (5): ...to here | 's5p_jpeg_find_format': events 6-7 | | 1379 | for (k = 0; k < ARRAY_SIZE(sjpeg_formats); k++) { | 1380 | struct s5p_jpeg_fmt *fmt = &sjpeg_formats[k]; | | ~~~ | | | | | (7) ...to here | <------+ | 's5p_jpeg_try_fmt_vid_cap': events 8-17 | | 1481 | fmt = s5p_jpeg_find_format(ctx, f->fmt.pix.pixelformat, | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) returning to 's5p_jpeg_try_fmt_vid_cap' from 's5p_jpeg_find_format' | 1482 | FMT_TYPE_CAPTURE); | | ~~~~~~~~~~~~~~~~~ | 1483 | if (!fmt) { | | ~ | | | | | (9) following 'false' branch (when 'fmt' is non-NULL)... |...... | 1490 | if (!ctx->jpeg->variant->hw_ex4_compat || ctx->mode != S5P_JPEG_DECODE) | | ~ ~~~~~~~~~ | | | | | | | (10) ...to here | | (11) following 'false' branch... |...... | 1499 | if ((fmt->flags & SJPEG_FMT_NON_RGB) && | | ~~~~~~~~~~ | | | | | (12) ...to here |...... | 1518 | if (ctx->subsampling == V4L2_JPEG_CHROMA_SUBSAMPLING_420 && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (13) following 'true' branch... (15) following 'true' branch... | 1519 | (ctx->out_q.w & 1) && | | ~~~~~~~~~~~~~~~~~~ | | | | | (14) ...to here | 1520 | (pix->pixelformat == V4L2_PIX_FMT_NV12 || | | ~~~~~~~~~~~~~~~~ | | | | | (16) ...to here |...... | 1524 | fmt = s5p_jpeg_find_format(ctx, pix->pixelformat, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) calling 's5p_jpeg_find_format' from 's5p_jpeg_try_fmt_vid_cap' | 1525 | FMT_TYPE_CAPTURE); | | ~~~~~~~~~~~~~~~~~ | +--> 's5p_jpeg_find_format': event 18 | | 1365 | static struct s5p_jpeg_fmt *s5p_jpeg_find_format(struct s5p_jpeg_ctx *ctx, | | ^~~~~~~~~~~~~~~~~~~~ | | | | | (18) entry to 's5p_jpeg_find_format' | 's5p_jpeg_find_format': event 19 | | 1376 | SJPEG_FMT_FLAG_DEC_OUTPUT : | 's5p_jpeg_find_format': event 20 | |cc1: | (20): ...to here | 's5p_jpeg_find_format': events 21-22 | | 1379 | for (k = 0; k < ARRAY_SIZE(sjpeg_formats); k++) { | 1380 | struct s5p_jpeg_fmt *fmt = &sjpeg_formats[k]; | | ~~~ | | | | | (22) ...to here | <------+ | 's5p_jpeg_try_fmt_vid_cap': events 23-24 | | 1524 | fmt = s5p_jpeg_find_format(ctx, pix->pixelformat, | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (23) return of NULL to 's5p_jpeg_try_fmt_vid_cap' from 's5p_jpeg_find_format' | 1525 | FMT_TYPE_CAPTURE); | | ~~~~~~~~~~~~~~~~~ |...... | 1529 | return vidioc_try_fmt(f, fmt, ctx, FMT_TYPE_CAPTURE); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (24) calling 'vidioc_try_fmt' from 's5p_jpeg_try_fmt_vid_cap' | +--> 'vidioc_try_fmt': events 25-30 | | 1428 | static int vidioc_try_fmt(struct v4l2_format *f, struct s5p_jpeg_fmt *fmt, | | ^~~~~~~~~~~~~~ | | | | | (25) entry to 'vidioc_try_fmt' |...... | 1435 | else if (pix->field != V4L2_FIELD_NONE) | | ~ | | | | | (26) following 'false' branch... |...... | 1441 | if (q_type == FMT_TYPE_OUTPUT) | | ~ | | | | | (27) ...to here | | (28) following 'false' branch (when 'q_type != 0')... |...... | 1447 | jpeg_bound_align_image(ctx, &pix->width, S5P_JPEG_MIN_WIDTH, | | ~~~~~~~~~~~ | | | | | (29) ...to here | 1448 | S5P_JPEG_MAX_WIDTH, fmt->h_align, | | ~~~~~~~~~~~~ | | | | | (30) dereference of NULL 'fmt' | drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c: In function 's5p_jpeg_s_fmt': >> drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1611:28: warning: >> dereference of NULL '*ct.out_q.fmt' [CWE-476] [-Wanalyzer-null-dereference] 1611 | q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG)) { | ~~~~~~~~~~~^~~~~~~~ 's5p_jpeg_s_fmt': events 1-5 | | 1323 | if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT) | | ~ | | | | | (4) following 'true' branch... | 1324 | return &ctx->out_q; | | ~~~~~~~~~~~ | | | | | (5) ...to here |...... | 1584 | static int s5p_jpeg_s_fmt(struct s5p_jpeg_ctx *ct, struct v4l2_format *f) | | ^~~~~~~~~~~~~~ | | | | | (1) entry to 's5p_jpeg_s_fmt' |...... | 1594 | if (!vq) | | ~ | | | | | (2) following 'false' branch (when 'vq' is non-NULL)... |...... | 1597 | q_data = get_q_data(ct, f->type); | | ~~~~~~~ | | | | | (3) ...to here | 's5p_jpeg_s_fmt': event 6 | |include/asm-generic/bug.h:161:35: | 161 | #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) | | ^ | | | | | (6) following 'false' branch... drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1598:9: note: in expansion of macro 'BUG_ON' | 1598 | BUG_ON(q_data == NULL); | | ^~~~~~ | 's5p_jpeg_s_fmt': event 7 | |include/media/videobuf2-core.h:1136:18: | 1136 | return (q->num_buffers > 0); | | ~^~~~~~~~~~~~~ | | | | | (7) ...to here | 's5p_jpeg_s_fmt': event 8 | |drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1600:12: | 1600 | if (vb2_is_busy(vq)) { | | ^ | | | | | (8) following 'false' branch... | 's5p_jpeg_s_fmt': event 9 | |cc1: | (9): ...to here | 's5p_jpeg_s_fmt': event 10 | |cc1: | (10): following 'case 2 ... 3:' branch... | 's5p_jpeg_s_fmt': events 11-12 | | 1605 | f_type = V4L2_TYPE_IS_OUTPUT(f->type) ? |...... | 1608 | q_data->fmt = s5p_jpeg_find_format(ct, pix->pixelformat, f_type); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (12) calling 's5p_jpeg_find_format' from 's5p_jpeg_s_fmt' | +--> 's5p_jpeg_find_format': event 13 | | 1365 | static struct s5p_jpeg_fmt *s5p_jpeg_find_format(struct s5p_jpeg_ctx *ctx, | | ^~~~~~~~~~~~~~~~~~~~ | | | | | (13) entry to 's5p_jpeg_find_format' | 's5p_jpeg_find_format': event 14 | | 1376 | SJPEG_FMT_FLAG_DEC_OUTPUT : | 's5p_jpeg_find_format': event 15 | |cc1: | (15): ...to here | 's5p_jpeg_find_format': events 16-17 | | 1379 | for (k = 0; k < ARRAY_SIZE(sjpeg_formats); k++) { | 1380 | struct s5p_jpeg_fmt *fmt = &sjpeg_formats[k]; | | ~~~ | | | | | (17) ...to here | <------+ | 's5p_jpeg_s_fmt': events 18-24 | | 1608 | q_data->fmt = s5p_jpeg_find_format(ct, pix->pixelformat, f_type); | | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (18) returning to 's5p_jpeg_s_fmt' from 's5p_jpeg_find_format' | | (19) '*ct.out_q.fmt' is NULL | 1609 | if (ct->mode == S5P_JPEG_ENCODE || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (21) ...to here | | | (22) following 'true' branch... | | (20) following 'false' branch... | 1610 | (ct->mode == S5P_JPEG_DECODE && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1611 | q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (23) ...to here | | (24) dereference of NULL 's5p_jpeg_find_format(ct, *(struct v4l2_pix_format *)((char *)f + 4).pixelformat, f_type)' | >> drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1611:28: warning: >> dereference of NULL '*ct.cap_q.fmt' [CWE-476] [-Wanalyzer-null-dereference] 1611 | q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG)) { | ~~~~~~~~~~~^~~~~~~~ 's5p_jpeg_s_fmt': events 1-7 | | 1323 | if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT) | | ~ | | | | | (4) following 'false' branch... | 1324 | return &ctx->out_q; | 1325 | if (type == V4L2_BUF_TYPE_VIDEO_CAPTURE) | | ~ | | | | | (5) ...to here | | (6) following 'true' branch... | 1326 | return &ctx->cap_q; | | ~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1584 | static int s5p_jpeg_s_fmt(struct s5p_jpeg_ctx *ct, struct v4l2_format *f) | | ^~~~~~~~~~~~~~ | | | | | (1) entry to 's5p_jpeg_s_fmt' |...... | 1594 | if (!vq) | | ~ | | | | | (2) following 'false' branch (when 'vq' is non-NULL)... |...... | 1597 | q_data = get_q_data(ct, f->type); | | ~~~~~~~ | | | | | (3) ...to here | 's5p_jpeg_s_fmt': event 8 | |include/asm-generic/bug.h:161:35: | 161 | #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) | | ^ | | | | | (8) following 'false' branch... drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1598:9: note: in expansion of macro 'BUG_ON' | 1598 | BUG_ON(q_data == NULL); | | ^~~~~~ | 's5p_jpeg_s_fmt': event 9 | |include/media/videobuf2-core.h:1136:18: | 1136 | return (q->num_buffers > 0); | | ~^~~~~~~~~~~~~ | | | | | (9) ...to here | 's5p_jpeg_s_fmt': event 10 | |drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1600:12: | 1600 | if (vb2_is_busy(vq)) { | | ^ | | | | | (10) following 'false' branch... | 's5p_jpeg_s_fmt': event 11 | |cc1: | (11): ...to here | 's5p_jpeg_s_fmt': event 12 | |cc1: | (12): following 'default:' branch... | 's5p_jpeg_s_fmt': event 13 | |cc1: | (13): ...to here | 's5p_jpeg_s_fmt': event 14 | | 1608 | q_data->fmt = s5p_jpeg_find_format(ct, pix->pixelformat, f_type); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (14) calling 's5p_jpeg_find_format' from 's5p_jpeg_s_fmt' | +--> 's5p_jpeg_find_format': event 15 | | 1365 | static struct s5p_jpeg_fmt *s5p_jpeg_find_format(struct s5p_jpeg_ctx *ctx, | | ^~~~~~~~~~~~~~~~~~~~ | | | | | (15) entry to 's5p_jpeg_find_format' | 's5p_jpeg_find_format': event 16 | | 1376 | SJPEG_FMT_FLAG_DEC_OUTPUT : | 's5p_jpeg_find_format': event 17 | |cc1: | (17): ...to here | 's5p_jpeg_find_format': events 18-19 | | 1379 | for (k = 0; k < ARRAY_SIZE(sjpeg_formats); k++) { | 1380 | struct s5p_jpeg_fmt *fmt = &sjpeg_formats[k]; | | ~~~ | | | | | (19) ...to here | <------+ | 's5p_jpeg_s_fmt': events 20-26 | | 1608 | q_data->fmt = s5p_jpeg_find_format(ct, pix->pixelformat, f_type); | | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (20) returning to 's5p_jpeg_s_fmt' from 's5p_jpeg_find_format' | | (21) '*ct.cap_q.fmt' is NULL | 1609 | if (ct->mode == S5P_JPEG_ENCODE || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (23) ...to here | | | (24) following 'true' branch... | | (22) following 'false' branch... | 1610 | (ct->mode == S5P_JPEG_DECODE && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1611 | q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) ...to here | | (26) dereference of NULL 's5p_jpeg_find_format(ct, *(struct v4l2_pix_format *)((char *)f + 4).pixelformat, f_type)' | >> drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1611:28: warning: >> dereference of NULL '0' [CWE-476] [-Wanalyzer-null-dereference] 1611 | q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG)) { | ~~~~~~~~~~~^~~~~~~~ 's5p_jpeg_s_fmt_vid_cap.part.0': events 1-2 | | 1673 | static int s5p_jpeg_s_fmt_vid_cap(struct file *file, void *priv, | | ^~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) entry to 's5p_jpeg_s_fmt_vid_cap.part.0' |...... | 1682 | return s5p_jpeg_s_fmt(fh_to_ctx(priv), f); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 's5p_jpeg_s_fmt' from 's5p_jpeg_s_fmt_vid_cap.part.0' | +--> 's5p_jpeg_s_fmt': events 3-7 | | 1323 | if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT) | | ~ | | | | | (6) following 'true' branch... | 1324 | return &ctx->out_q; | | ~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1584 | static int s5p_jpeg_s_fmt(struct s5p_jpeg_ctx *ct, struct v4l2_format *f) | | ^~~~~~~~~~~~~~ | | | | | (3) entry to 's5p_jpeg_s_fmt' |...... | 1594 | if (!vq) | | ~ | | | | | (4) following 'false' branch (when 'vq' is non-NULL)... |...... | 1597 | q_data = get_q_data(ct, f->type); | | ~~~~~~~ | | | | | (5) ...to here | 's5p_jpeg_s_fmt': event 8 | |include/asm-generic/bug.h:161:35: | 161 | #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) | | ^ | | | | | (8) following 'false' branch... drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1598:9: note: in expansion of macro 'BUG_ON' | 1598 | BUG_ON(q_data == NULL); | | ^~~~~~ | 's5p_jpeg_s_fmt': event 9 | |include/media/videobuf2-core.h:1136:18: | 1136 | return (q->num_buffers > 0); | | ~^~~~~~~~~~~~~ | | | | | (9) ...to here | 's5p_jpeg_s_fmt': event 10 | |drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c:1600:12: | 1600 | if (vb2_is_busy(vq)) { | | ^ | | | | | (10) following 'false' branch... | 's5p_jpeg_s_fmt': event 11 | |cc1: | (11): ...to here | 's5p_jpeg_s_fmt': event 12 | |cc1: | (12): following 'case 2 ... 3:' branch... | 's5p_jpeg_s_fmt': events 13-14 | | 1605 | f_type = V4L2_TYPE_IS_OUTPUT(f->type) ? |...... | 1608 | q_data->fmt = s5p_jpeg_find_format(ct, pix->pixelformat, f_type); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (14) calling 's5p_jpeg_find_format' from 's5p_jpeg_s_fmt' | +--> 's5p_jpeg_find_format': event 15 | | 1365 | static struct s5p_jpeg_fmt *s5p_jpeg_find_format(struct s5p_jpeg_ctx *ctx, | | ^~~~~~~~~~~~~~~~~~~~ | | | | | (15) entry to 's5p_jpeg_find_format' | 's5p_jpeg_find_format': event 16 | | 1376 | SJPEG_FMT_FLAG_DEC_OUTPUT : | 's5p_jpeg_find_format': event 17 | |cc1: vim +/fmt +1448 drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1427 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1428 static int vidioc_try_fmt(struct v4l2_format *f, struct s5p_jpeg_fmt *fmt, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1429 struct s5p_jpeg_ctx *ctx, int q_type) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1430 { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1431 struct v4l2_pix_format *pix = &f->fmt.pix; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1432 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1433 if (pix->field == V4L2_FIELD_ANY) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1434 pix->field = V4L2_FIELD_NONE; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1435 else if (pix->field != V4L2_FIELD_NONE) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1436 return -EINVAL; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1437 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1438 /* V4L2 specification suggests the driver corrects the format struct 605b8920614017 drivers/media/platform/s5p-jpeg/jpeg-core.c Shuah Khan 2016-07-14 1439 * if any of the dimensions is unsupported 605b8920614017 drivers/media/platform/s5p-jpeg/jpeg-core.c Shuah Khan 2016-07-14 1440 */ 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1441 if (q_type == FMT_TYPE_OUTPUT) e9e7dfe5ef577d drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1442 jpeg_bound_align_image(ctx, &pix->width, S5P_JPEG_MIN_WIDTH, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1443 S5P_JPEG_MAX_WIDTH, 0, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1444 &pix->height, S5P_JPEG_MIN_HEIGHT, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1445 S5P_JPEG_MAX_HEIGHT, 0); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1446 else e9e7dfe5ef577d drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1447 jpeg_bound_align_image(ctx, &pix->width, S5P_JPEG_MIN_WIDTH, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 @1448 S5P_JPEG_MAX_WIDTH, fmt->h_align, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1449 &pix->height, S5P_JPEG_MIN_HEIGHT, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1450 S5P_JPEG_MAX_HEIGHT, fmt->v_align); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1451 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1452 if (fmt->fourcc == V4L2_PIX_FMT_JPEG) { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1453 if (pix->sizeimage <= 0) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1454 pix->sizeimage = PAGE_SIZE; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1455 pix->bytesperline = 0; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1456 } else { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1457 u32 bpl = pix->bytesperline; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1458 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1459 if (fmt->colplanes > 1 && bpl < pix->width) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1460 bpl = pix->width; /* planar */ bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1461 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1462 if (fmt->colplanes == 1 && /* packed */ cc690904247fdb drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-25 1463 (bpl << 3) / fmt->depth < pix->width) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1464 bpl = (pix->width * fmt->depth) >> 3; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1465 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1466 pix->bytesperline = bpl; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1467 pix->sizeimage = (pix->width * pix->height * fmt->depth) >> 3; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1468 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1469 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1470 return 0; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1471 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1472 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1473 static int s5p_jpeg_try_fmt_vid_cap(struct file *file, void *priv, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1474 struct v4l2_format *f) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1475 { 275de24dc0076f drivers/media/video/s5p-jpeg/jpeg-core.c Sylwester Nawrocki 2012-02-17 1476 struct s5p_jpeg_ctx *ctx = fh_to_ctx(priv); 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1477 struct v4l2_pix_format *pix = &f->fmt.pix; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1478 struct s5p_jpeg_fmt *fmt; 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1479 int ret; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1480 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1481 fmt = s5p_jpeg_find_format(ctx, f->fmt.pix.pixelformat, 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1482 FMT_TYPE_CAPTURE); 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1483 if (!fmt) { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1484 v4l2_err(&ctx->jpeg->v4l2_dev, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1485 "Fourcc format (0x%08x) invalid.\n", bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1486 f->fmt.pix.pixelformat); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1487 return -EINVAL; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1488 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1489 6c96dbbc2aa9f5 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-09-18 1490 if (!ctx->jpeg->variant->hw_ex4_compat || ctx->mode != S5P_JPEG_DECODE) 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1491 goto exit; 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1492 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1493 /* 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1494 * The exynos4x12 device requires resulting YUV image 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1495 * subsampling not to be lower than the input jpeg subsampling. 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1496 * If this requirement is not met then downgrade the requested 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1497 * capture format to the one with subsampling equal to the input jpeg. 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1498 */ 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1499 if ((fmt->flags & SJPEG_FMT_NON_RGB) && 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1500 (fmt->subsampling < ctx->subsampling)) { 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1501 ret = s5p_jpeg_adjust_fourcc_to_subsampling(ctx->subsampling, 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1502 fmt->fourcc, 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1503 &pix->pixelformat, 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1504 ctx); 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1505 if (ret < 0) 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1506 pix->pixelformat = V4L2_PIX_FMT_GREY; 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1507 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1508 fmt = s5p_jpeg_find_format(ctx, pix->pixelformat, 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1509 FMT_TYPE_CAPTURE); 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1510 } 337777a42d033b drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-22 1511 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1512 /* 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1513 * Decompression of a JPEG file with 4:2:0 subsampling and odd 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1514 * width to the YUV 4:2:0 compliant formats produces a raw image 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1515 * with broken luma component. Adjust capture format to RGB565 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1516 * in such a case. 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1517 */ 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1518 if (ctx->subsampling == V4L2_JPEG_CHROMA_SUBSAMPLING_420 && 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1519 (ctx->out_q.w & 1) && 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1520 (pix->pixelformat == V4L2_PIX_FMT_NV12 || 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1521 pix->pixelformat == V4L2_PIX_FMT_NV21 || 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1522 pix->pixelformat == V4L2_PIX_FMT_YUV420)) { 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1523 pix->pixelformat = V4L2_PIX_FMT_RGB565; 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1524 fmt = s5p_jpeg_find_format(ctx, pix->pixelformat, 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1525 FMT_TYPE_CAPTURE); 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1526 } 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1527 2caeeb0c1672c6 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1528 exit: 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1529 return vidioc_try_fmt(f, fmt, ctx, FMT_TYPE_CAPTURE); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1530 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1531 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1532 static int s5p_jpeg_try_fmt_vid_out(struct file *file, void *priv, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1533 struct v4l2_format *f) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1534 { 275de24dc0076f drivers/media/video/s5p-jpeg/jpeg-core.c Sylwester Nawrocki 2012-02-17 1535 struct s5p_jpeg_ctx *ctx = fh_to_ctx(priv); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1536 struct s5p_jpeg_fmt *fmt; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1537 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1538 fmt = s5p_jpeg_find_format(ctx, f->fmt.pix.pixelformat, 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1539 FMT_TYPE_OUTPUT); 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1540 if (!fmt) { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1541 v4l2_err(&ctx->jpeg->v4l2_dev, bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1542 "Fourcc format (0x%08x) invalid.\n", bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1543 f->fmt.pix.pixelformat); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1544 return -EINVAL; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1545 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1546 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1547 return vidioc_try_fmt(f, fmt, ctx, FMT_TYPE_OUTPUT); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1548 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1549 b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1550 static int exynos4_jpeg_get_output_buffer_size(struct s5p_jpeg_ctx *ctx, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1551 struct v4l2_format *f, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1552 int fmt_depth) b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1553 { b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1554 struct v4l2_pix_format *pix = &f->fmt.pix; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1555 u32 pix_fmt = f->fmt.pix.pixelformat; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1556 int w = pix->width, h = pix->height, wh_align; 77401dd7394c5d drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-12-08 1557 int padding = 0; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1558 b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1559 if (pix_fmt == V4L2_PIX_FMT_RGB32 || 77401dd7394c5d drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-12-08 1560 pix_fmt == V4L2_PIX_FMT_RGB565 || b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1561 pix_fmt == V4L2_PIX_FMT_NV24 || b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1562 pix_fmt == V4L2_PIX_FMT_NV42 || b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1563 pix_fmt == V4L2_PIX_FMT_NV12 || b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1564 pix_fmt == V4L2_PIX_FMT_NV21 || b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1565 pix_fmt == V4L2_PIX_FMT_YUV420) b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1566 wh_align = 4; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1567 else b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1568 wh_align = 1; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1569 e9e7dfe5ef577d drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1570 jpeg_bound_align_image(ctx, &w, S5P_JPEG_MIN_WIDTH, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1571 S5P_JPEG_MAX_WIDTH, wh_align, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1572 &h, S5P_JPEG_MIN_HEIGHT, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1573 S5P_JPEG_MAX_HEIGHT, wh_align); b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1574 77401dd7394c5d drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-12-08 1575 if (ctx->jpeg->variant->version == SJPEG_EXYNOS4) 77401dd7394c5d drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-12-08 1576 padding = PAGE_SIZE; 77401dd7394c5d drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-12-08 1577 77401dd7394c5d drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-12-08 1578 return (w * h * fmt_depth >> 3) + padding; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1579 } b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1580 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1581 static int exynos3250_jpeg_try_downscale(struct s5p_jpeg_ctx *ctx, 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1582 struct v4l2_rect *r); 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1583 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1584 static int s5p_jpeg_s_fmt(struct s5p_jpeg_ctx *ct, struct v4l2_format *f) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1585 { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1586 struct vb2_queue *vq; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1587 struct s5p_jpeg_q_data *q_data = NULL; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1588 struct v4l2_pix_format *pix = &f->fmt.pix; 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1589 struct v4l2_ctrl *ctrl_subs; 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1590 struct v4l2_rect scale_rect; 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1591 unsigned int f_type; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1592 718cf4a9da22b2 drivers/media/platform/s5p-jpeg/jpeg-core.c Sylwester Nawrocki 2013-08-25 1593 vq = v4l2_m2m_get_vq(ct->fh.m2m_ctx, f->type); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1594 if (!vq) bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1595 return -EINVAL; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1596 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1597 q_data = get_q_data(ct, f->type); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1598 BUG_ON(q_data == NULL); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1599 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1600 if (vb2_is_busy(vq)) { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1601 v4l2_err(&ct->jpeg->v4l2_dev, "%s queue busy\n", __func__); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1602 return -EBUSY; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1603 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1604 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1605 f_type = V4L2_TYPE_IS_OUTPUT(f->type) ? 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1606 FMT_TYPE_OUTPUT : FMT_TYPE_CAPTURE; 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1607 80529ae5c13725 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-12-18 1608 q_data->fmt = s5p_jpeg_find_format(ct, pix->pixelformat, f_type); 19dc3e08663767 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2017-08-11 1609 if (ct->mode == S5P_JPEG_ENCODE || 19dc3e08663767 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2017-08-11 1610 (ct->mode == S5P_JPEG_DECODE && 19dc3e08663767 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2017-08-11 @1611 q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG)) { 19dc3e08663767 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2017-08-11 1612 q_data->w = pix->width; 19dc3e08663767 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2017-08-11 1613 q_data->h = pix->height; 19dc3e08663767 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2017-08-11 1614 } b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1615 if (q_data->fmt->fourcc != V4L2_PIX_FMT_JPEG) { b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1616 /* b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1617 * During encoding Exynos4x12 SoCs access wider memory area b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1618 * than it results from Image_x and Image_y values written to b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1619 * the JPEG_IMAGE_SIZE register. In order to avoid sysmmu b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1620 * page fault calculate proper buffer size in such a case. b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1621 */ 6c96dbbc2aa9f5 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-09-18 1622 if (ct->jpeg->variant->hw_ex4_compat && b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1623 f_type == FMT_TYPE_OUTPUT && ct->mode == S5P_JPEG_ENCODE) b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1624 q_data->size = exynos4_jpeg_get_output_buffer_size(ct, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1625 f, b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1626 q_data->fmt->depth); bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1627 else b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1628 q_data->size = q_data->w * q_data->h * b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1629 q_data->fmt->depth >> 3; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1630 } else { bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1631 q_data->size = pix->sizeimage; b2254d6fdd6c72 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-04-10 1632 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1633 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1634 if (f_type == FMT_TYPE_OUTPUT) { 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1635 ctrl_subs = v4l2_ctrl_find(&ct->ctrl_handler, 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1636 V4L2_CID_JPEG_CHROMA_SUBSAMPLING); 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1637 if (ctrl_subs) 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1638 v4l2_ctrl_s_ctrl(ctrl_subs, q_data->fmt->subsampling); dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1639 ct->crop_altered = false; dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1640 } dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1641 dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1642 /* dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1643 * For decoding init crop_rect with capture buffer dimmensions which dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1644 * contain aligned dimensions of the input JPEG image and do it only dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1645 * if crop rectangle hasn't been altered by the user space e.g. with dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1646 * S_SELECTION ioctl. For encoding assign output buffer dimensions. dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1647 */ dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1648 if (!ct->crop_altered && dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1649 ((ct->mode == S5P_JPEG_DECODE && f_type == FMT_TYPE_CAPTURE) || dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1650 (ct->mode == S5P_JPEG_ENCODE && f_type == FMT_TYPE_OUTPUT))) { dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1651 ct->crop_rect.width = pix->width; dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1652 ct->crop_rect.height = pix->height; dfd96900b29601 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1653 } 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1654 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1655 /* 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1656 * Prevent downscaling to YUV420 format by more than 2 7c15fd4bf3d367 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-03-09 1657 * for Exynos3250/compatible SoC as it produces broken raw image 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1658 * in such cases. 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1659 */ 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1660 if (ct->mode == S5P_JPEG_DECODE && 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1661 f_type == FMT_TYPE_CAPTURE && 7c15fd4bf3d367 drivers/media/platform/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2015-03-09 1662 ct->jpeg->variant->hw3250_compat && 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1663 pix->pixelformat == V4L2_PIX_FMT_YUV420 && 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1664 ct->scale_factor > 2) { 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1665 scale_rect.width = ct->out_q.w / 2; 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1666 scale_rect.height = ct->out_q.h / 2; 5a71671af37275 drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2014-07-11 1667 exynos3250_jpeg_try_downscale(ct, &scale_rect); 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1668 } 4a30d30b87e5aa drivers/media/platform/s5p-jpeg/jpeg-core.c Jacek Anaszewski 2013-11-21 1669 bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1670 return 0; bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1671 } bb677f3ac434cb drivers/media/video/s5p-jpeg/jpeg-core.c Andrzej Pietrasiewicz 2011-11-24 1672 :::::: The code at line 1448 was first introduced by commit :::::: bb677f3ac434cb1708938f1e76a41d9098affd05 [media] Exynos4 JPEG codec v4l2 driver :::::: TO: Andrzej Pietrasiewicz <andrze...@samsung.com> :::::: CC: Mauro Carvalho Chehab <mche...@redhat.com> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org