My mistake - I should have said that you need to process your input
image twice, doing 1/2 of the frame at a time.
Essentially what you are doing in any IPIPE processing pass is to
convert 1/2 of a line, skip 1/2 (so now you are at the beginning of the
next line) and so on. Then you call the IPIPE driver again with an
input/output buffer offset of 1/2 of a line - this processes the second
half of the input and skips the part of the line that you have already
processed.
The routine that you have below already does the skipping for you. The
code below is what I use to convert a 5mp (2592x1944) image to yuv
before running the JPEG encoder.
If this works I expect to see my name emblazoned in bold capital letters
throughout your code, and huge royalty checks appearing in my mailbox on
a regular basis... ok so maybe that is stretching it a bit...
Enjoy:
setparms(pIpipeParam, width, height);
ret = ioctl(fd_ipipe, IPIPE_SET_PARAM,pIpipeParam);
if (ret < 0) {
printf("IPIPE_SET_PARAM fail\n");
return 0;
}
if ((ret = ioctl(fd_ipipe, IPIPE_START, &convert)) < 0){
printf("IPIPE_START fail\n");
return 0;
}
/* I'm not sure why, but the IPIPE seems to hang after the first
* conversion - but it does finish what it was supposed to.
* Stopping and starting the pipe seems to get it moving again.
* weird...
*/
IPIPE_end(resolution);
IPIPE_init(pIpipeParam ,width, height, resolution);
/* the second half of the operation we take the original input file
* skewed by 1/2 a line as input and send it to the IPIPE output
* buffer (where it should merge).
* we set the offset of 1/2 of a horizontal line so that
* we process the right side of the image. Don't forget that there
* is an overlap between the frames for blending...
*/
convert.in_buff.index = -1;
convert.out_buff.index = -1;
convert.in_buff.offset = input_phy_add+width-32;
convert.out_buff.offset = (unsigned int)output_phy_add+width-32;
// convert.out_buff.offset = (unsigned int)buff[0].phys+2592-32;
setparms(pIpipeParam, width, height);
ret = ioctl(fd_ipipe, IPIPE_SET_PARAM,pIpipeParam);
if (ret < 0) {
printf("IPIPE_SET_PARAM fail\n");
return 0;
}
if ((ret = ioctl(fd_ipipe, IPIPE_START, &convert)) < 0){
printf("IPIPE_START fail\n");
printf("Error # %d en %d\n",ret, errno);
return 0;
}
ashish pareek wrote:
>
> I captured a frame in bayers RAW format of width > 1344 . U mean
> before DoIpipe i have to slice RAW image into into 2 parts x and y
> (say) and than call Doipipe(x) and DoIpipe(y) ?
>
> How a Raw image can be spilleted like this ?
>
>
>
> On Thu, 13 Nov 2008 Stephen Berry wrote :
> >That routine looks familiar.
> >
> >Are you calling the IPIPE twice? When you have an image larger than 1344
> >you have to split the image and process them both independently.
> >
> >The second time you call the IPIPE you need to shift the input and
> >output buffer addresses by the width of your image.
> >
> > Steve
> >
> >ashish pareek wrote:
> > >
> > > Hi ,
> > > Even i am having similar problem .I want to see 1920x1080 resolution
> > > image but i am getting it on left side tht too divided in 2 sections .
> > >
> > > Ashish
> > >
> > > My Setparams func looks like
> > >
> > > pIpipeParam->ipipeif_param.hnum = width;
> > > pIpipeParam->ipipeif_param.vnum = height;
> > > pIpipeParam->ipipeif_param.glob_hor_size = width + 8;
> > > pIpipeParam->ipipeif_param.glob_ver_size = height + 10;
> > > pIpipeParam->ipipeif_param.adofs = ((width * 2 + 31)&(~31));
> > > pIpipeParam->ipipeif_param.decimation = 1;
> > >
> > > pIpipeParam->ipipeif_param.data_shift = BITS11_0;
> > >
> > > pIpipeParam->prefilter.pre_en = DISABLE;
> > > pIpipeParam->false_color_suppresion.fcs_en = DISABLE;
> > > pIpipeParam->edge_enhancer.yee_emf = DISABLE;
> > > pIpipeParam->rgb2yuv.yuv_adj_ctr = 0x20;
> > > pIpipeParam->rgb2yuv.yuv_adj_brt = 0;
> > >
> > > if (width > 1344)
> > > pIpipeParam->ipipe_hsz = (width>>1)+32 - 1;
> > > else
> > > pIpipeParam->ipipe_hsz = width - 1;
> > >
> > > pIpipeParam->ipipe_vsz = height - 1;
> > >
> > > if (width == 1280) {
> > > pIpipeParam->ipipe_vst = 1;
> > > pIpipeParam->ipipe_hst = 1;
> > > } else {
> > > pIpipeParam->ipipe_vst = 0;
> > > pIpipeParam->ipipe_hst = 0;
> > > }
> > >
> > > pIpipeParam->wb.wb2_dgn = 256;
> > > pIpipeParam->wb.wb2_wg_r = 128;
> > > pIpipeParam->wb.wb2_wg_gr = 128;
> > > pIpipeParam->wb.wb2_wg_gb = 128;
> > > pIpipeParam->wb.wb2_wg_b = 128;
> > >
> > > pIpipeParam->rsz_rsc_param[0].rsz_i_hst = 0;
> > > pIpipeParam->rsz_rsc_param[0].rsz_o_hst = 0;
> > > pIpipeParam->rsz_rsc_param[0].rsz_h_phs = 0;
> > >
> > > if (width > 1344)
> > > pIpipeParam->rsz_rsc_param[0].rsz_o_hsz = (width>>1)+32-1;
> > > else
> > > pIpipeParam->rsz_rsc_param[0].rsz_o_hsz = width - 1 ;
> > >
> > > pIpipeParam->rsz_rsc_param[0].rsz_h_dif = 256;// (width* 256
> > > /width );
> > > pIpipeParam->rsz_rsc_param[0].rsz_v_dif = 256 ;// ((height )* 256
> > > / height);
> > > pIpipeParam->rsz_rsc_param[0].rsz_o_vsz = height - 1 ;
> > >
> > > pIpipeParam->ext_mem_param[0].rsz_sdr_oft = ((width * 2+
> 31)&(~31));
> > > pIpipeParam->ext_mem_param[0].rsz_sdr_ptr_e = height;
> > >
> > > #if 0
> > > pIpipeParam->ipipe_dpaths_fmt = RAW2RAW; //YUV2YUV;
> > > pIpipeParam->ipipe_dpaths_bypass = RAW_MODE_ON;
> > > #else
> > > pIpipeParam->ipipe_dpaths_fmt = RAW2YUV;
> > > pIpipeParam->ipipe_dpaths_bypass = RAW_MODE_OFF;
> > > #endif
> > >
> > >
> > > On Thu, 13 Nov 2008 pavelhan wrote :
> > > >yes,I have test the ipipeif rsz and the ccdc culling pattern,I think
> > > these two methon is different in their implement:
> > > >the ipipeif rsz only dicimate the pixels that is larger than 1280
> > > pixels,so it is not the real scale,which means you can only get the
> > > left block of the image;
> > > >and the culling pattern decimate the pixels in a different way,you
> > > can specifies the decimation parameter in a 8x8 windows,so you can get
> > > a whole look of the image
> > > >Am I right?
> > > >
> > > >
> > > >2008-11-13
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >Pavel Han
> > > >Oplinx Co.,Ltd
> > > >Address:Hanggang Fuchun Business Mansion 2116# Futian, Shenzhen
> > > 518041,PRC
> > > >Tel: (086)0755-88359865
> > > >Website:www.oplinx.com.cn
> > > >E-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > >
> > > >·¢¼þÈË£º Karicheri, Muralidharan
> > > >·¢ËÍʱ¼ä£º 2008-11-13 02:01:37
> > > >ÊÕ¼þÈË£º pavelhan; davinci-linux-open-source
> > > >³ËÍ£º
> > > >Ö÷Ì⣺ RE: Is there anyone use the ipipeif resizer on the dm355?
> > > >
> > > >I have done resize of 1920 pixels to 1280 pixels. You need to set the
> > > rsz parameter to
> > > >input width * 16 / output width. Also set decm in ipipeif cfg
> > > register to 1 to enable decimation at the ipipeif. If you are using
> > > the ipipe driver provided with MV LSP, this can be achieved by setting
> > > these parameters in the ipipeif structure for IPIPE_SET_PARAM ioctl.
> > > >structure name ipipeif
> > > >parameters :-
> > > >decimation = 1;
> > > >rsz = <value calculated as above>
> > > >
> > > >
> > > >
> > > > From:
> > >
> [EMAIL PROTECTED]
> > >
> [mailto:[EMAIL PROTECTED]
> > > On Behalf Of pavelhan
> > > >Sent: Thursday, October 09, 2008 5:24 AM
> > > >To: davinci-linux-open-source
> > > >Subject: Is there anyone use the ipipeif resizer on the dm355?
> > > >
> > > >Hello All!
> > > > From the dm355 VPFE datasheet,the resizer block on the ipipeif(not
> > > ipipe) has the ability to resize the input image to its 1x to 1/7x
> > > resolution.But in my application, I find that if I use it to resize a
> > > 1920x1080 image to its 1/2 resolution and then perform the ipipe
> > > processing,I only can get the left block of the image displayed on the
> > > TV.In my viewpoint, I hope I can get a full image with a smaller
> > > resolution disaplayed on my TV,not just the left block.Is it possible
> > > to use the ipipeif resizer to achieve this goal?
> > > >Thank you! Any help will be appreciated!
> > > >
> > > >2008-10-09
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >Pavel Han
> > > >Oplinx Co.,Ltd
> > > >Address:Hanggang Fuchun Business Mansion 2116# Futian, Shenzhen
> > > 518041,PRC
> > > >Tel: (086)0755-88359865
> > > >Website:www.oplinx.com.cn
> > > >E-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > >__________ Information from ESET Smart Security, version of virus
> > > signature database 3608 (20081113) __________
> > > >
> > > >The message was checked by ESET Smart Security.
> > > >
> > > >http://www.eset.com
> > > >_______________________________________________
> > > >Davinci-linux-open-source mailing list
> > > >[email protected]
> > >
> >http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
> > >
> > >
> > >
> > > Rediff Shopping
> > >
> <http://adworks.rediff.com/cgi-bin/AdWorks/click.cgi/www.rediff.com/signature-default.htm/[EMAIL
> PROTECTED]/2206641_2199021/2201651/1?PARTNER=3&OAS_QUERY=null>
> > >
> > >
> > >
> ------------------------------------------------------------------------
> > >
> > > _______________________________________________
> > > Davinci-linux-open-source mailing list
> > > [email protected]
> > > http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
> > >
>
>
>
> Rediff Shopping
> <http://adworks.rediff.com/cgi-bin/AdWorks/click.cgi/www.rediff.com/signature-default.htm/[EMAIL
> PROTECTED]/2206641_2199021/2201651/1?PARTNER=3&OAS_QUERY=null>
>
>
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source