diff --git a/libavformat/Makefile b/libavformat/Makefile index 01e4edcb53..4263719045 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -101,7 +101,7 @@ OBJS-$(CONFIG_MTV_DEMUXER) += mtv.o OBJS-$(CONFIG_MXF_DEMUXER) += mxf.o OBJS-$(CONFIG_NSV_DEMUXER) += nsvdec.o OBJS-$(CONFIG_NULL_MUXER) += raw.o -OBJS-$(CONFIG_NUT_DEMUXER) += nutdec.o riff.o +OBJS-$(CONFIG_NUT_DEMUXER) += nutdec.o nut.o riff.o OBJS-$(CONFIG_NUV_DEMUXER) += nuv.o riff.o OBJS-$(CONFIG_OGG_DEMUXER) += ogg2.o \ oggparsevorbis.o \ diff --git a/libavformat/nut.c b/libavformat/nut.c new file mode 100644 index 0000000000..5f81957b12 --- /dev/null +++ b/libavformat/nut.c @@ -0,0 +1,33 @@ +/* + * nut + * Copyright (c) 2004-2007 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "nut.h" + +void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val){ + int i; + for(i=0; iavf->nb_streams; i++){ + nut->stream[i].last_pts= av_rescale_rnd( + val / nut->time_base_count, + time_base.num * (int64_t)nut->stream[i].time_base->den, + time_base.den * (int64_t)nut->stream[i].time_base->num, + AV_ROUND_DOWN); + } +} diff --git a/libavformat/nut.h b/libavformat/nut.h index 03d8c5a2fd..9dadbffe52 100644 --- a/libavformat/nut.h +++ b/libavformat/nut.h @@ -98,4 +98,6 @@ static unsigned long av_crc04C11DB7_update(unsigned long checksum, const uint8_t return av_crc(av_crc04C11DB7, checksum, buf, len); } +void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val); + #endif /* AVFORMAT_NUT_H */ diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 1ef7bcd73b..322ed2518e 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -447,7 +447,6 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){ AVFormatContext *s= nut->avf; ByteIOContext *bc = &s->pb; int64_t end, tmp; - int i; AVRational time_base; nut->last_syncpoint_pos= url_ftell(bc)-8; @@ -460,16 +459,7 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){ if(*back_ptr < 0) return -1; - time_base= nut->time_base[tmp % nut->time_base_count]; - for(i=0; inb_streams; i++){ - nut->stream[i].last_pts= av_rescale_rnd( - tmp / nut->time_base_count, - time_base.num * (int64_t)nut->stream[i].time_base->den, - time_base.den * (int64_t)nut->stream[i].time_base->num, - AV_ROUND_DOWN); - //last_key_frame ? - } - //FIXME put this in a reset func maybe + ff_nut_reset_ts(nut, nut->time_base[tmp % nut->time_base_count], tmp); if(skip_reserved(bc, end) || get_checksum(bc)){ av_log(s, AV_LOG_ERROR, "sync point checksum mismatch\n");