move syncpoint timestamp resetting code to a common file

Originally committed as revision 10020 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2007-08-09 16:29:30 +00:00
parent 9cb5a11ea8
commit 874abace12
4 changed files with 37 additions and 12 deletions

View File

@ -101,7 +101,7 @@ OBJS-$(CONFIG_MTV_DEMUXER) += mtv.o
OBJS-$(CONFIG_MXF_DEMUXER) += mxf.o OBJS-$(CONFIG_MXF_DEMUXER) += mxf.o
OBJS-$(CONFIG_NSV_DEMUXER) += nsvdec.o OBJS-$(CONFIG_NSV_DEMUXER) += nsvdec.o
OBJS-$(CONFIG_NULL_MUXER) += raw.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_NUV_DEMUXER) += nuv.o riff.o
OBJS-$(CONFIG_OGG_DEMUXER) += ogg2.o \ OBJS-$(CONFIG_OGG_DEMUXER) += ogg2.o \
oggparsevorbis.o \ oggparsevorbis.o \

33
libavformat/nut.c Normal file
View File

@ -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; i<nut->avf->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);
}
}

View File

@ -98,4 +98,6 @@ static unsigned long av_crc04C11DB7_update(unsigned long checksum, const uint8_t
return av_crc(av_crc04C11DB7, checksum, buf, len); 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 */ #endif /* AVFORMAT_NUT_H */

View File

@ -447,7 +447,6 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = &s->pb;
int64_t end, tmp; int64_t end, tmp;
int i;
AVRational time_base; AVRational time_base;
nut->last_syncpoint_pos= url_ftell(bc)-8; 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) if(*back_ptr < 0)
return -1; return -1;
time_base= nut->time_base[tmp % nut->time_base_count]; ff_nut_reset_ts(nut, nut->time_base[tmp % nut->time_base_count], tmp);
for(i=0; i<s->nb_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
if(skip_reserved(bc, end) || get_checksum(bc)){ if(skip_reserved(bc, end) || get_checksum(bc)){
av_log(s, AV_LOG_ERROR, "sync point checksum mismatch\n"); av_log(s, AV_LOG_ERROR, "sync point checksum mismatch\n");