[vlc-devel] [vlc-commits] rawvideo: fix the picth/line computation for odd lines/heights

Steve Lhomme robux4 at ycbcr.xyz
Wed Apr 18 08:56:08 CEST 2018



Le 17/04/2018 à 17:44, Tristan Matthews a écrit :
> Hi,
>
> On Tue, Apr 17, 2018 at 10:13 AM, Steve Lhomme <git at videolan.org> wrote:
>> vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Tue Apr 17 16:10:52 2018 +0200| [9d12c0827930eb023db54570b2cc9299594c6e04] | committer: Steve Lhomme
>>
>> rawvideo: fix the picth/line computation for odd lines/heights
>>
>> Fixes #20303
> This does fix playback, however transcoding fails as there is now a
> mismatch between the frame_size (provided by the rawvid demuxer) and
> the value of p_block->i_buffer. I get this warning for every frame and
> each block is rejected:
>
> rawvideo decoder warning: invalid frame size (37800 < 37872)
> from:
> http://git.videolan.org/?p=vlc.git;a=blob;f=modules/codec/rawvideo.c#l184
>
> So this probably needs an update as well:
> http://git.videolan.org/?p=vlc.git;a=blob;f=modules/demux/rawvid.c;h=60886ae6de9fc151a81439318ab78449cf3bdae7;hb=HEAD#l352

Indeed. width * height * bits_per_pixel is not accurate when rounding is 
involved. We need to take in account the plane constraints.

I see other places that do the same kind of computing that will need 
some fixing too.

It is not really a regresion as before it was probably missing a line 
(or transcoding nothing with 1x1 pixel).

> Best,
> Tristan
>
>>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9d12c0827930eb023db54570b2cc9299594c6e04
>> ---
>>
>>   modules/codec/rawvideo.c | 8 ++++----
>>   1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/modules/codec/rawvideo.c b/modules/codec/rawvideo.c
>> index b616ddfdd4..e98061dc60 100644
>> --- a/modules/codec/rawvideo.c
>> +++ b/modules/codec/rawvideo.c
>> @@ -116,10 +116,10 @@ static int OpenCommon( decoder_t *p_dec )
>>
>>       for( unsigned i = 0; i < dsc->plane_count; i++ )
>>       {
>> -        unsigned pitch = p_dec->fmt_in.video.i_width * dsc->pixel_size
>> -                         * dsc->p[i].w.num / dsc->p[i].w.den;
>> -        unsigned lines = p_dec->fmt_in.video.i_height
>> -                         * dsc->p[i].h.num / dsc->p[i].h.den;
>> +        unsigned pitch = ((p_dec->fmt_in.video.i_width + (dsc->p[i].w.den - 1)) / dsc->p[i].w.den)
>> +                         * dsc->p[i].w.num * dsc->pixel_size;
>> +        unsigned lines = ((p_dec->fmt_in.video.i_height + (dsc->p[i].h.den - 1)) / dsc->p[i].h.den)
>> +                         * dsc->p[i].h.num;
>>
>>           p_sys->pitches[i] = pitch;
>>           p_sys->lines[i] = lines;
>>
>> _______________________________________________
>> vlc-commits mailing list
>> vlc-commits at videolan.org
>> https://mailman.videolan.org/listinfo/vlc-commits
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list