summaryrefslogtreecommitdiff
path: root/libavformat/grab.c
diff options
context:
space:
mode:
authorLuca Abeni <lucabe72@email.it>2004-04-27 13:28:16 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-04-27 13:28:16 +0000
commit3834be5858df8a307a71108cc10bddeda635061e (patch)
treee98ad736a7c140c0f3d3aa148d554d9bb47fc5e4 /libavformat/grab.c
parent7daabccb5d36e9bf649d157ab14ccb2a016f1c53 (diff)
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/grab.c')
-rw-r--r--libavformat/grab.c13
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;
}