staging: bcm2835-camera: Move encode component setup in its own function

The function mmal_setup_components has to many indention levels. So move
the setup code for encode component in its own function.

Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Link: https://lore.kernel.org/r/1585485901-10172-6-git-send-email-stefan.wahren@i2se.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Stefan Wahren
2020-03-29 14:44:57 +02:00
committed by Greg Kroah-Hartman
parent 576b4ff899
commit 3c0b37483b

View File

@@ -1001,6 +1001,94 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
return 0;
}
static int mmal_setup_encode_component(struct bm2835_mmal_dev *dev,
struct v4l2_format *f,
struct vchiq_mmal_port *port,
struct vchiq_mmal_port *camera_port,
struct vchiq_mmal_component *component)
{
struct mmal_fmt *mfmt = get_format(f);
int ret;
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"vid_cap - set up encode comp\n");
/* configure buffering */
camera_port->current_buffer.size = camera_port->recommended_buffer.size;
camera_port->current_buffer.num = camera_port->recommended_buffer.num;
ret = vchiq_mmal_port_connect_tunnel(dev->instance, camera_port,
&component->input[0]);
if (ret) {
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"%s failed to create connection\n", __func__);
/* ensure capture is not going to be tried */
dev->capture.port = NULL;
return ret;
}
port->es.video.width = f->fmt.pix.width;
port->es.video.height = f->fmt.pix.height;
port->es.video.crop.x = 0;
port->es.video.crop.y = 0;
port->es.video.crop.width = f->fmt.pix.width;
port->es.video.crop.height = f->fmt.pix.height;
port->es.video.frame_rate.num =
dev->capture.timeperframe.denominator;
port->es.video.frame_rate.den =
dev->capture.timeperframe.numerator;
port->format.encoding = mfmt->mmal;
port->format.encoding_variant = 0;
/* Set any encoding specific parameters */
switch (mfmt->mmal_component) {
case COMP_VIDEO_ENCODE:
port->format.bitrate = dev->capture.encode_bitrate;
break;
case COMP_IMAGE_ENCODE:
/* Could set EXIF parameters here */
break;
default:
break;
}
ret = vchiq_mmal_port_set_format(dev->instance, port);
if (ret) {
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"%s failed to set format %dx%d fmt %08X\n",
__func__,
f->fmt.pix.width,
f->fmt.pix.height,
f->fmt.pix.pixelformat);
return ret;
}
ret = vchiq_mmal_component_enable(dev->instance, component);
if (ret) {
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"%s Failed to enable encode components\n", __func__);
return ret;
}
/* configure buffering */
port->current_buffer.num = 1;
port->current_buffer.size = f->fmt.pix.sizeimage;
if (port->format.encoding == MMAL_ENCODING_JPEG) {
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"JPG - buf size now %d was %d\n",
f->fmt.pix.sizeimage,
port->current_buffer.size);
port->current_buffer.size =
(f->fmt.pix.sizeimage < (100 << 10)) ?
(100 << 10) : f->fmt.pix.sizeimage;
}
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"vid_cap - cur_buf.size set to %d\n", f->fmt.pix.sizeimage);
port->current_buffer.alignment = 0;
return 0;
}
static int mmal_setup_components(struct bm2835_mmal_dev *dev,
struct v4l2_format *f)
{
@@ -1147,100 +1235,9 @@ static int mmal_setup_components(struct bm2835_mmal_dev *dev,
dev->capture.port = NULL;
} else {
if (encode_component) {
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"vid_cap - set up encode comp\n");
/* configure buffering */
camera_port->current_buffer.size =
camera_port->recommended_buffer.size;
camera_port->current_buffer.num =
camera_port->recommended_buffer.num;
ret =
vchiq_mmal_port_connect_tunnel(
dev->instance,
camera_port,
&encode_component->input[0]);
if (ret) {
v4l2_dbg(1, bcm2835_v4l2_debug,
&dev->v4l2_dev,
"%s failed to create connection\n",
__func__);
/* ensure capture is not going to be tried */
dev->capture.port = NULL;
} else {
port->es.video.width = f->fmt.pix.width;
port->es.video.height = f->fmt.pix.height;
port->es.video.crop.x = 0;
port->es.video.crop.y = 0;
port->es.video.crop.width = f->fmt.pix.width;
port->es.video.crop.height = f->fmt.pix.height;
port->es.video.frame_rate.num =
dev->capture.timeperframe.denominator;
port->es.video.frame_rate.den =
dev->capture.timeperframe.numerator;
port->format.encoding = mfmt->mmal;
port->format.encoding_variant = 0;
/* Set any encoding specific parameters */
switch (mfmt->mmal_component) {
case COMP_VIDEO_ENCODE:
port->format.bitrate =
dev->capture.encode_bitrate;
break;
case COMP_IMAGE_ENCODE:
/* Could set EXIF parameters here */
break;
default:
break;
}
ret = vchiq_mmal_port_set_format(dev->instance,
port);
if (ret)
v4l2_dbg(1, bcm2835_v4l2_debug,
&dev->v4l2_dev,
"%s failed to set format %dx%d fmt %08X\n",
__func__,
f->fmt.pix.width,
f->fmt.pix.height,
f->fmt.pix.pixelformat
);
}
if (!ret) {
ret = vchiq_mmal_component_enable(
dev->instance,
encode_component);
if (ret) {
v4l2_dbg(1, bcm2835_v4l2_debug,
&dev->v4l2_dev,
"%s Failed to enable encode components\n",
__func__);
}
}
if (!ret) {
/* configure buffering */
port->current_buffer.num = 1;
port->current_buffer.size =
f->fmt.pix.sizeimage;
if (port->format.encoding ==
MMAL_ENCODING_JPEG) {
v4l2_dbg(1, bcm2835_v4l2_debug,
&dev->v4l2_dev,
"JPG - buf size now %d was %d\n",
f->fmt.pix.sizeimage,
port->current_buffer.size);
port->current_buffer.size =
(f->fmt.pix.sizeimage <
(100 << 10)) ?
(100 << 10) : f->fmt.pix.sizeimage;
}
v4l2_dbg(1, bcm2835_v4l2_debug,
&dev->v4l2_dev,
"vid_cap - cur_buf.size set to %d\n",
f->fmt.pix.sizeimage);
port->current_buffer.alignment = 0;
}
ret = mmal_setup_encode_component(dev, f, port,
camera_port,
encode_component);
} else {
/* configure buffering */
camera_port->current_buffer.num = 1;