diff options
author | Luca Abeni <lucabe72@email.it> | 2004-04-27 13:28:16 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-04-27 13:28:16 +0000 |
commit | 3834be5858df8a307a71108cc10bddeda635061e (patch) | |
tree | e98ad736a7c140c0f3d3aa148d554d9bb47fc5e4 /libavformat | |
parent | 7daabccb5d36e9bf649d157ab14ccb2a016f1c53 (diff) | |
download | ffmpeg-3834be5858df8a307a71108cc10bddeda635061e.tar.gz |
fix rounding errors with NTSC patch by (Luca Abeni <lucabe72 at email dot it>)
Originally committed as revision 3084 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/grab.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/libavformat/grab.c b/libavformat/grab.c index 755680ec29..0e3a447575 100644 --- a/libavformat/grab.c +++ b/libavformat/grab.c @@ -178,7 +178,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) val = 1; ioctl(video_fd, VIDIOCCAPTURE, &val); - s->time_frame = av_gettime(); + s->time_frame = av_gettime() * s->frame_rate / s->frame_rate_base; s->use_mmap = 0; /* ATI All In Wonder automatic activation */ @@ -197,7 +197,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) goto fail; } s->gb_frame = 0; - s->time_frame = av_gettime(); + s->time_frame = av_gettime() * s->frame_rate / s->frame_rate_base; /* start to grab the first frame */ s->gb_buf.frame = s->gb_frame % s->gb_buffers.frames; @@ -305,19 +305,18 @@ static int grab_read_packet(AVFormatContext *s1, AVPacket *pkt) VideoData *s = s1->priv_data; int64_t curtime, delay; struct timespec ts; - int64_t per_frame = (int64_t_C(1000000) * s->frame_rate_base) / s->frame_rate; /* Calculate the time of the next frame */ - s->time_frame += per_frame; + s->time_frame += int64_t_C(1000000); /* wait based on the frame rate */ for(;;) { curtime = av_gettime(); - delay = s->time_frame - curtime; + delay = s->time_frame * s->frame_rate_base / s->frame_rate - curtime; if (delay <= 0) { - if (delay < -per_frame) { + if (delay < int64_t_C(-1000000) * s->frame_rate_base / s->frame_rate) { /* printf("grabbing is %d frames late (dropping)\n", (int) -(delay / 16666)); */ - s->time_frame += per_frame; + s->time_frame += int64_t_C(1000000); } break; } |