Re: SV: OMAP3 isp single-shot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Daniel,

On Thursday 24 March 2011 11:26:01 Daniel Lundborg wrote:
> > Daniel Lundborg wrote:
> > >
> > > I am successfully using the gumstix overo board together with a camera
> > > sensor Aptina MT9V034 with the kernel 2.6.35 and patches from
> > > http://git.linuxtv.org/pinchartl/media.git (isp6).
> > 
> > Which branch did you use?
> 
> I am using the media-2.6.35-0006-sensors branch which could be found
> just a couple of weeks ago. It has the mt9v032 sensor in it. My mt9v034
> driver is based on the mt9v032 code.

Now that the OMAP3 ISP driver is on its way to mainline, I've reorganized the 
repository. You can use the media-2.6.38-0002-sensors branch for 2.6.38.

> > > I can use the media-ctl program and yavta to take pictures in continous
> > > streaming mode.
> > > 
> > > media-ctl -r -l '"mt9034 3-0048":0->"OMAP3 ISP CCDC":0[1], "OMAP3 ISP
> > > CCDC":1->"OMAP3 ISP CCDC output":0[1]'
> > > media-ctl -f '"mt9v034 3-0048":0[SGRBG10 752x480], "OMAP3 ISP
> > > CCDC":1[SGRBG10 752x480]
> > > 
> > > and then:
> > > 
> > > yavta -f SGRBG10 -s 752x480 -n 1 --capture=1 -F /dev/video2
> > > 
> > > Is there a way to set the ISP in single shot mode?
> > 
> > Single shot for the ISP is the same as to queue just one buffer. I assume
> > the single shot mode is something that the sensor supports?
> > 
> > > I have tested setting the mt9v034 in snapshot mode and manually trigger
> > > the camera, but the ISP does not send a picture. Is there a way to solve
> > > this with the current OMAP3 isp code?
> > 
> > Do you get any errors, or you just don't get any video buffers?
> 
> This is the output from yavta when I put the sensor in streaming mode:
> 
> root@overo:~/yavta# ./yavta -f SGRBG10 -s 752x480 -n 1 --capture=1 -F
> /dev/video2
> 
> Device /dev/video2 opened: OMAP3 ISP CCDC output (media).
> Video format set: width: 752 height: 480 buffer size: 721920
> Video format: BA10 (30314142) 752x480
> 1 buffers requested.
> length: 721920 offset: 0
> Buffer 0 mapped at address 0x4014d000.
> 0 (0) [-] 0 721920 bytes 65877.098848 1300958239.111966 0.001 fps
> Captured 1 frames in 0.000062 seconds (16129.032258 fps,
> 11643870967.741936 B/s).
> 1 buffers released.
> 
> And the output when putting the sensor in snapshot mode:
> 
> root@overo:~/yavta# ./yavta -f SGRBG10 -s 752x480 -n 1 --capture=1 -F
> /dev/video2
> 
> Device /dev/video2 opened: OMAP3 ISP CCDC output (media).
> Video format set: width: 752 height: 480 buffer size: 721920
> Video format: BA10 (30314142) 752x480
> 1 buffers requested.
> length: 721920 offset: 0
> Buffer 0 mapped at address 0x4014d000.
> 
> And it freezes. I can stop yavta with CTRL+C.

Have you tried to trigger the sensor multiple times in a row ?

> To put the sensor in snapshot/shutter mode I set the ext_trig = 1 in the
> platform_data structure in my board file.
> 
> struct mt9v034_platform_data {
> 	unsigned int clk_pol:1;
> 	unsigned int ext_trig:1;
> 
> 	void (*set_clock)(struct v4l2_subdev *subdev, unsigned int rate);
> };
> 
> And in the s_stream I set the chip_control register for the MT9V034
> sensor to:
> 
> static int mt9v034_s_stream(struct v4l2_subdev *subdev, int enable)
> {
>   struct mt9v034 *mt9v034 = to_mt9v034(subdev);
>   const u16 chip_clear = mt9v034->pdata->ext_trig? 0x0100 : 0;
>   const u16 chip_set = mt9v034->pdata->ext_trig? 0x18 :
> MT9V034_CHIP_CONTROL_MASTER_MODE | MT9V034_CHIP_CONTROL_DOUT_ENABLE |
> MT9V034_CHIP_CONTROL_SEQUENTIAL;
>   struct i2c_client *client = v4l2_get_subdevdata(subdev);
>   struct v4l2_mbus_framefmt *format = &mt9v034->format;
>   struct v4l2_rect *crop = &mt9v034->crop;
>   unsigned int hratio;
>   unsigned int vratio;
>   int ret;
> 
>   if (!enable) {
>     ret = mt9v034_set_chip_control(mt9v034, chip_clear, chip_set);
>     if (ret < 0)
>       return ret;
> 
>     return __mt9v034_set_power(mt9v034, 0);
>   }
> 
>   ret = __mt9v034_set_power(mt9v034, 1);
>   if (ret < 0)
>     return ret;
> 
>   /* Configure the window size and row/column bin */
>   hratio = DIV_ROUND_CLOSEST(crop->width, format->width);
>   vratio = DIV_ROUND_CLOSEST(crop->height, format->height);
> 
>   ret = mt9v034_write(client, MT9V034_READ_MODE,
>         (hratio - 1) << MT9V034_READ_MODE_ROW_BIN_SHIFT |
>         (vratio - 1) << MT9V034_READ_MODE_COLUMN_BIN_SHIFT);
>   if (ret < 0)
>     return ret;
> 
>   ret = mt9v034_write(client, MT9V034_COLUMN_START, crop->left);
>   if (ret < 0)
>     return ret;
> 
>   ret = mt9v034_write(client, MT9V034_ROW_START, crop->top);
>   if (ret < 0)
>     return ret;
> 
>   ret = mt9v034_write(client, MT9V034_WINDOW_WIDTH, crop->width);
>   if (ret < 0)
>     return ret;
> 
>   ret = mt9v034_write(client, MT9V034_WINDOW_HEIGHT, crop->height);
>   if (ret < 0)
>     return ret;
> 
>   /* Disable the noise correction algorithm and restore the controls. */
>   ret  = mt9v034_write(client, MT9V034_ROW_NOISE_CORR_CONTROL, 0);
>   if (ret < 0)
>     return ret;
> 
>   v4l2_ctrl_handler_setup(&mt9v034->ctrls);
> 
>   ret = mt9v034_set_chip_control(mt9v034, chip_clear, chip_set);
> 
>   return ret;
> }
> 
> I can see on the oscilloscope that the sensor is sending something when
> I trigger it, but no picture is received..

"something" is a bit vague, can you check the hsync/vsync signals and make 
sure they're identical in both modes ?

> > As the sensor works in streaming mode, are you sure it outputs the image
> > of correct size in the single shot mode?
> 
> The sensor has the same output in streaming and single shot mode.

-- 
Regards,

Laurent Pinchart
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux