[Xvid-devel] Division by Zero

Michael Militzer michael at xvid.org
Mon Jul 25 11:41:20 CEST 2011


Hi Cédric,

actually, TRD should never be zero in BVOP ME. Have you set a proper
framerate for your input?

You can either specify a constant framerate by filling "fincr"/"fbase" in
the xvid_enc_create_t struct or a variable one by setting "fincr" per
input frame in xvid_enc_frame_t...

Best regards,
Michael


Quoting Cédric OCHS <kervala at gmail.com>:

> Hi there,
>
> I compiled the last revision of xvidcore from SVN in a x64 static library
> under Windows with MS VC++ 2010 Express.
>
> I declared a 320x240 RGB24 format for image and initialized its buffer
> with :
>
> size_t buffer_size = 320*240*3;
>
> uint8_t *buffer = new uint8_t[buffer_size];
>
> for(size_t i = 0; i < buffer_size; ++i)
> {
> 	buffer[i] = i % 256;
> }
>
> And when I try to encode this RGB24 buffer to a XVid video (in fact, a
> still image), it generates a Division by Zero exception at the 4th frame
> (a B Frame apparently).
>
> The exception occurs in SearchDirect_initial function of
> xvidcore/src/motion/estimation_bvop.c especially at the lines :
>
> Data->directmvF[k].x = ((TRB * Data->referencemv[k].x) / TRD);
> Data->directmvB[k].x = ((TRB - TRD) * Data->referencemv[k].x) / TRD;
> Data->directmvF[k].y = ((TRB * Data->referencemv[k].y) / TRD);
> Data->directmvB[k].y = ((TRB - TRD) * Data->referencemv[k].y) / TRD;
>
> Because both TRD and TRB are set to 0.
>
> I tried with a full white image (all bytes set to 255), it doesn't
> generate any exception and it works fine.
>
> Please someone could check if it's reproducible ?
>
> Currently, I fixed it replacing it by :
>
> if (TRD)
> {
> 	Data->directmvF[k].x = ((TRB * Data->referencemv[k].x) / TRD);
> 	Data->directmvB[k].x = ((TRB - TRD) * Data->referencemv[k].x) / TRD;
> 	Data->directmvF[k].y = ((TRB * Data->referencemv[k].y) / TRD);
> 	Data->directmvB[k].y = ((TRB - TRD) * Data->referencemv[k].y) / TRD;
> }
> else
> {
> 	Data->directmvF[k].x = 0;
> 	Data->directmvB[k].x = 0;
> 	Data->directmvF[k].y = 0;
> 	Data->directmvB[k].y = 0;
> }
>
> Thanks a lot :)
>
> Cédric
> _______________________________________________
> Xvid-devel mailing list
> Xvid-devel at xvid.org
> http://list.xvid.org/mailman/listinfo/xvid-devel
>





More information about the Xvid-devel mailing list