[vlc-devel] [PATCH] decoder: simplify the plane constraints processing
Rémi Denis-Courmont
remi at remlab.net
Wed Mar 22 15:05:51 CET 2017
Le keskiviikkona 22. maaliskuuta 2017, 14.20.25 EET Steve Lhomme a écrit :
> On Wed, Mar 22, 2017 at 8:28 AM, Rémi Denis-Courmont <remi at remlab.net>
wrote:
> > Le tiistaina 21. maaliskuuta 2017, 16.22.53 EET Steve Lhomme a écrit :
> >> This is really rounding to the upper modulo.
> >> ---
> >>
> >> src/input/decoder.c | 8 ++++----
> >> 1 file changed, 4 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/src/input/decoder.c b/src/input/decoder.c
> >> index 9f95bb824c..fee2a4b8e7 100644
> >> --- a/src/input/decoder.c
> >> +++ b/src/input/decoder.c
> >> @@ -403,10 +403,10 @@ static int vout_update_format( decoder_t *p_dec )
> >>
> >> const vlc_chroma_description_t *dsc =
> >>
> >> vlc_fourcc_GetChromaDescription( fmt.i_chroma ); for( unsigned int i = 0;
> >> dsc && i < dsc->plane_count; i++ ) {
> >> - while( fmt.i_width % dsc->p[i].w.den )
> >> - fmt.i_width++;
> >> - while( fmt.i_height % dsc->p[i].h.den )
> >> - fmt.i_height++;
> >> + fmt.i_width = dsc->p[i].w.den *
> >> + ((fmt.i_width + dsc->p[i].w.den - 1) /
> >> dsc->p[i].w.den);
> >> + fmt.i_height = dsc->p[i].h.den *
> >> + ((fmt.i_height + dsc->p[i].h.den - 1) /
> >> dsc->p[i].h.den); }
> >>
> >> }
> >
> > AFAICT, this would be simpler:
> > a += b - (a % b)
>
> I like Francois's version: a = (a + d-1) & ~(d-1)
> It's probably more efficient.
>
> But it works only for powers of 2.
As I wrote before (I think?), with power of twos, the simplest possible
formula is:
a += (-a) & (d - 1);
It works because bit masking works like Euclidian/European division.
> Which I think is the case with pixel subsampling (?).
It is true in all cases that I am aware of. It should be true in all VLC-
supported pixel formats.
--
雷米‧德尼-库尔蒙
https://www.remlab.net/
More information about the vlc-devel
mailing list