Hello
I made driver for ar0132, that can work with yavta.
I can capture one frame in raw10 format and transform it to bmp. All looks fine. Now i am trying to capture avi file with gstreamer. For beginning i try to see video on screen:
gst-launch-1.0 v4l2src ! xvimagesink
i see only black screen in window. If i set export GST_DEBUG=6, i see a lot of debug messages: LOG, DEBUG and INFO types. Only that is strange for me is strings:
0:00:01.253140733 7254 0x518940 DEBUG v4l2 gstv4l2object.c:2474:gst_v4l2_object_probe_caps_for_format:<v4l2src0> Enumerating frame sizes for RGGB
0:00:01.253181672 7254 0x518940 LOG v4l2 gstv4l2object.c:2482:gst_v4l2_object_probe_caps_for_format:<v4l2src0> got discrete frame size 1280x960
0:00:01.253210318 7254 0x518940 LOG v4l2 gstv4l2object.c:2210:gst_v4l2_object_probe_caps_for_format_and_size:<v4l2src0> get frame interval for 1280x960, RGGB
0:00:01.253252663 7254 0x518940 LOG v4l2 gstv4l2object.c:2234:gst_v4l2_object_probe_caps_for_format_and_size:<v4l2src0> adding discrete framerate: 45/1
0:00:01.277707008 7254 0x518940 DEBUG v4l2 gstv4l2object.c:1955:gst_v4l2_object_get_colorspace: Unknown enum v4l2_colorspace 0
Unknown enum v4l2_colorspace 0 is message in string 2010 (GStreamer (Good Plugins): sys/v4l2/gstv4l2object.c | Fossies) and i dont understand why colorspace is zero.
my dmesg log:
[95107.468336] ar0132 6-0010: camera_common_s_fmt(4106) size 1280 x 960
[95107.474712] camera_common_colorfmt i = 5
[95107.478765] ar0132 6-0010: camera_common_try_fmt: size 1280 x 960
[95107.499489] ar0132 6-0010: camera_common_s_fmt: ret = 0
[95107.504710] camera_common_s_fmt:0
[95107.508031] ar0132_set_format:0
[95107.522312] ar0132_get_format
[95107.525311] ar0132 6-0010: camera_common_g_fmt++
[95107.529947] ar0132 6-0010: 1 fmt->code = 4106
[95107.534644] ar0132 6-0010: 2 fmt->colorspace = 8
[95107.539285] ar0132 6-0010: 3 s_data->fmt_width = 1280
[95107.544347] ar0132 6-0010: 4 s_data->fmt_height = 960
[95107.561572] vi 54080000.vi: Calibrate csi port 2
[95107.566401] ar0132 6-0010: ar0132_s_stream++ enable 1
[95107.580919] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3088= 0x8000 - OK
[95107.600953] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3086= 0x225 - OK
...
[95109.760966] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3012= 0x2a0 - OK
[95109.768292] [ar0132] ar0132_linear_mode_setup ret=0
[95109.785230] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3032= 0x0 - OK
[95109.805234] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3002= 0x2 - OK
...
[95110.349221] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3126= 0x80 - OK
[95110.369004] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x311c= 0x3dd - OK
[95110.392875] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x311e= 0x2 - OK
[95110.400038] [ar0132] ar0132_set_autoexposure ret=0
[95110.421243] ar0132 6-0010: [ar0132]: write i2c-dev:0x10 addr:0x3070= 0x0 - OK
[95110.428392] ar0132 6-0010: ret: 00
/* Find a data format by a pixel code in an array */
const struct camera_common_colorfmt *camera_common_find_datafmt(
unsigned int code)
{
int i;
for (i = 0; i < ARRAY_SIZE(camera_common_color_fmts); i++)
if (camera_common_color_fmts[i].code == code) {
pr_info("camera_common_colorfmt i = %d \n", i);
return camera_common_color_fmts + i;
}
pr_info("camera_common_colorfmt return NULL code = %d\n", code);
return NULL;
}
EXPORT_SYMBOL(camera_common_find_datafmt);
...
int camera_common_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
struct camera_common_data *s_data = to_camera_common_data(client);
int ret;
dev_err(&client->dev, "%s(%u) size %i x %i\n", __func__,
mf->code, mf->width, mf->height);
/* MIPI CSI could have changed the format, double-check */
if (!camera_common_find_datafmt(mf->code)) {
dev_err(&client->dev, "%s: !camera_common_find_datafmt(mf->code)\n", __func__);
return -EINVAL;
}
ret = camera_common_try_fmt(sd, mf);
s_data->colorfmt = camera_common_find_datafmt(mf->code);
dev_err(&client->dev, "%s: ret = %d\n", __func__, ret);
return ret;
}
int camera_common_g_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
struct camera_common_data *s_data = to_camera_common_data(client);
const struct camera_common_colorfmt *fmt = s_data->colorfmt;
dev_err(&client->dev, "%s++\n", __func__);
mf->code = fmt->code;
dev_err(&client->dev, "1 fmt->code = %d\n", fmt->code);
mf->colorspace = fmt->colorspace;
dev_err(&client->dev, "2 fmt->colorspace = %d\n", fmt->colorspace);
mf->width = s_data->fmt_width;
dev_err(&client->dev, "3 s_data->fmt_width = %d\n", s_data->fmt_width);
mf->height = s_data->fmt_height;
dev_err(&client->dev, "4 s_data->fmt_height = %d\n", s_data->fmt_height);
mf->field = V4L2_FIELD_NONE;
mf->xfer_func = fmt->xfer_func;
mf->ycbcr_enc = fmt->ycbcr_enc;
mf->quantization = fmt->quantization;
return 0;
}
What i doing wrong? I have not ideas how debug this error, may be somebody can help me?
thanks!