[FFmpeg-devel] [PATCH] fbdev: simplify logic in fbdev_read_packet()

Michael Niedermayer michaelni at gmx.at
Mon Apr 11 03:02:33 CEST 2011


Hi

ive seen this in libav (and skiped it because its obviosuly
buggy) but seem to have missed it here :(
sorry, for the (too) late review

On Sat, Mar 12, 2011 at 03:28:40PM +0100, Stefano Sabatini wrote:
> ---
>  libavdevice/fbdev.c |   18 ++++++++----------
>  1 files changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/libavdevice/fbdev.c b/libavdevice/fbdev.c
> index 121f02c..37bba3d 100644
> --- a/libavdevice/fbdev.c
> +++ b/libavdevice/fbdev.c
> @@ -190,22 +190,20 @@ static int fbdev_read_packet(AVFormatContext *avctx, AVPacket *pkt)
>          fbdev->time_frame = av_gettime();
>  
>      /* wait based on the frame rate */
> -    while (1) {
> -        curtime = av_gettime();
> -        delay = fbdev->time_frame - curtime;
> -        av_dlog(avctx,
> -                "time_frame:%"PRId64" curtime:%"PRId64" delay:%"PRId64"\n",
> -                fbdev->time_frame, curtime, delay);
> -        if (delay <= 0) {
> -            fbdev->time_frame += INT64_C(1000000) * av_q2d(fbdev->time_base);
> -            break;
> -        }
> +    curtime = av_gettime();  <-------------------------- time read
> +    delay = fbdev->time_frame - curtime;
> +    av_dlog(avctx,
> +            "time_frame:%"PRId64" curtime:%"PRId64" delay:%"PRId64"\n",
> +            fbdev->time_frame, curtime, delay);
> +    if (delay > 0) {
>          if (avctx->flags & AVFMT_FLAG_NONBLOCK)
>              return AVERROR(EAGAIN);
>          ts.tv_sec  =  delay / 1000000;
>          ts.tv_nsec = (delay % 1000000) * 1000;
>          while (nanosleep(&ts, &ts) < 0 && errno == EINTR); <--------------------wait
>      }
> +    /* compute the time of the next frame */
> +    fbdev->time_frame += INT64_C(1000000) * av_q2d(fbdev->time_base);
>  
>      if ((ret = av_new_packet(pkt, fbdev->frame_size)) < 0)
>          return ret;

some point later <-------------------- read frame
even later   <------------------- curtime from above used, but its no
                                  longer correct due to the wait


-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Avoid a single point of failure, be that a person or equipment.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110411/dd8826e1/attachment.asc>


More information about the ffmpeg-devel mailing list