• Albert Wang's avatar
    [media] media: soc_camera: don't clear pix->sizeimage in JPEG mode · a70a6c43
    Albert Wang authored
    In JPEG mode, the size of image is variable due to different JPEG compression
    rate. We only can get the pix->sizeimage from the user.
    
    If we clear pix->sizeimage in soc_camera_try_fmt() then we will get it from:
    	ret = soc_mbus_image_size(xlate->host_fmt, pix->bytesperline,
    				pix->height);
    	if (ret < 0)
    		return ret;
    
    	pix->sizeimage = max_t(u32, pix->sizeimage, ret);
    
    In general, this sizeimage will be larger than the actul JPEG image size.
    
    But vb2 will check the buffer and size of image in __qbuf_userptr():
    	/* Check if the provided plane buffer is large enough */
    	if (planes[plane].length < q->plane_sizes[plane])
    
    So we shouldn't clear the pix->sizeimage and also shouldn't re-calculate
    the pix->sizeimage in soc_mbus_image_size() in JPEG mode
    
    We also shouldn't re-calculate pix->bytesperline:
    	ret = soc_mbus_bytes_per_line(pix->width, xlate->host_fmt);
    	if (ret < 0)
    		return ret;
    
    	pix->bytesperline = max_t(u32, pix->bytesperline, ret);
    
    pix->bytesperline also should be set by the user or by the driver's
    try_fmt() implementation.
    
    Change-Id: I700690a2287346127a624b5260922eaa5427a596
    Signed-off-by: default avatarAlbert Wang <twang13@marvell.com>
    Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    a70a6c43
soc_camera.c 40.1 KB