On Wed, 6 Mar 2013, Albert Wang wrote:

> Hi, Guennadi
> 
> 
> >-----Original Message-----
> >From: Guennadi Liakhovetski [mailto:g.liakhovet...@gmx.de]
> >Sent: Wednesday, 06 March, 2013 23:02
> >To: Albert Wang
> >Cc: cor...@lwn.net; linux-media@vger.kernel.org; Libin Yang
> >Subject: RE: [REVIEW PATCH V4 12/12] [media] marvell-ccic: add 3 frame 
> >buffers
> >support in DMA_CONTIG mode
> >
> >On Wed, 6 Mar 2013, Albert Wang wrote:
> >
> >[snip]
> >
> >> >> +               if (cam->frame_state.usebufs == 0)
> >> >> +                       cam->frame_state.usebufs++;
> >> >> +               else {
> >> >> +                       set_bit(CF_SINGLE_BUFFER, &cam->flags);
> >> >> +                       cam->frame_state.singles++;
> >> >> +                       if (cam->frame_state.usebufs < 2)
> >> >> +                               cam->frame_state.usebufs++;
> >> >
> >> >What is this .usebufs actually supposed to do? AFAICS, it is only used to
> >> >decide, whether it should be changed, I don't see it having any effect on
> >> >anything else?
> >> >
> >> Actually, we use .usebufs to decide if will enter single buffer mode.
> >> Only usebufs == 2 can enter single buffer mode.
> >> But when init it:
> >>    If CCIC use Two Buffers mode, init usebufs == 1
> >>    If CCIC use Three Buffers mode, init usebufs == 0
> >> That means when CCIC use Two Buffers mode, once buffer used out, CCIC will 
> >> enter
> >single buffer mode soon
> >> But when CCIC use Three Buffers mode, we can have 1 frame time to wait for
> >> new buffer and needn't enter single buffer mode.
> >> If we still can't get new buffer after 1 frame, then CCIC has to enter 
> >> single buffer mode.
> >> But if we are lucky enough and get new buffer when next frame come, then
> >> we can still run in normal mode.
> >
> >Thanks for the explanation. Could you please tell me where in the code
> >this .usebufs field is used as you describe?
> >
> Firstly, we will init this field, the initial value depends on selected CCIC 
> buffer mode:
> +     /*
> +      *  If CCIC use Two Buffers mode, init usebufs == 1
> +      *  If CCIC use Three Buffers mode, init usebufs == 0
> +      */
> +     cam->frame_state.usebufs = 3 - MAX_FRAME_BUFS;
> 
> Then:
>               /*
> +              * If there are no available buffers
> +              * go into single buffer mode
> +              *
> But it depends on usebufs state:
> +             if (cam->frame_state.usebufs == 0)
> +                     cam->frame_state.usebufs++;
> +             else {
> +                     set_bit(CF_SINGLE_BUFFER, &cam->flags);
> +                     cam->frame_state.singles++;
> +                     if (cam->frame_state.usebufs < 2)
> +                             cam->frame_state.usebufs++;

Aaargh, I must've been blind, sorry :(

> +             }
> usebufs range is 0, 1, 2:
> 0 - Use Three buffer mode, and CCIC needn't enter single buffer mode when 
> buffer used out in the first time
> 1 - Use Two buffer mode and CCIC need enter single buffer mode
>    Or Use Three buffer mode and CCIC also need enter single buffer mode when 
> we still can't get new buffer after continuous 2 frames
> 2 - CCIC had enterer single buffer mode whatever use Two buffer or Three 
> buffer mode
> 
> And if:
>               /*
>                * OK, we have a buffer we can use.
> 
> We will exit the single buffer mode:
> 
>               clear_bit(CF_SINGLE_BUFFER, &cam->flags);
> +             if (cam->frame_state.usebufs != (3 - MAX_FRAME_BUFS))
> +                     cam->frame_state.usebufs--;
>       }
> And we will try to let usebufs back to initial value.

Ok, it's clearer now. So, in fact, it is a kind of a remaining available 
buffer count, right? You could probably also do it the natural way - 
initialise this field not to 3 - MAX_FRAME_BUFS, but to cam->nbufs (or 
cam->nbufs - 1 if you prefer) directly and then count it down?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to