vlc | branch: master | Francois Cartegnie <[email protected]> | Fri May 25 09:54:21 2018 +0200| [10318107ac248f2d9b1be038265f3d29a6734c97] | committer: Francois Cartegnie
date_t: always init to TS_INVALID > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=10318107ac248f2d9b1be038265f3d29a6734c97 --- modules/access/cdda.c | 5 +++-- modules/access/jack.c | 3 ++- modules/access/qtsound.m | 3 ++- modules/access/timecode.c | 2 +- modules/codec/adpcm.c | 1 - modules/codec/aes3.c | 1 - modules/codec/araw.c | 1 - modules/codec/audiotoolbox_midi.c | 1 - modules/codec/avcodec/audio.c | 1 - modules/codec/avcodec/encoder.c | 28 ++++++++++++++++++---------- modules/codec/avcodec/video.c | 1 - modules/codec/dmo/dmo.c | 1 + modules/codec/faad.c | 5 ++--- modules/codec/flac.c | 3 +-- modules/codec/fluidsynth.c | 1 - modules/codec/g711.c | 1 - modules/codec/lpcm.c | 4 ++-- modules/codec/mpg123.c | 1 - modules/codec/omxil/omxil.c | 2 +- modules/codec/opus.c | 4 ++-- modules/codec/schroedinger.c | 21 +++++++++++---------- modules/codec/speex.c | 4 ++-- modules/codec/uleaddvaudio.c | 3 +-- modules/codec/vorbis.c | 4 ++-- modules/demux/cdg.c | 5 +++-- modules/demux/gme.c | 3 ++- modules/demux/image.c | 18 +++++++++--------- modules/demux/mod.c | 10 +++++----- modules/demux/rawaud.c | 3 ++- modules/demux/rawvid.c | 5 +++-- modules/demux/sid.cpp | 3 ++- modules/demux/voc.c | 1 + modules/demux/wav.c | 3 ++- modules/misc/stats.c | 4 ++-- modules/packetizer/dts.c | 4 ++-- modules/packetizer/flac.c | 1 - modules/packetizer/h264.c | 1 - modules/packetizer/hevc.c | 1 - modules/packetizer/mlp.c | 1 - modules/packetizer/mpeg4audio.c | 1 - modules/packetizer/mpegaudio.c | 1 - modules/packetizer/mpegvideo.c | 2 -- modules/video_filter/fps.c | 1 - src/misc/mtime.c | 6 +++++- 44 files changed, 89 insertions(+), 86 deletions(-) diff --git a/modules/access/cdda.c b/modules/access/cdda.c index f6f6770fef..7ce0924fad 100644 --- a/modules/access/cdda.c +++ b/modules/access/cdda.c @@ -156,11 +156,11 @@ static int Demux(demux_t *demux) sys->position += count; block->i_nb_samples = block->i_buffer / 4; - block->i_dts = block->i_pts = VLC_TS_0 + date_Get(&sys->pts); + block->i_dts = block->i_pts = date_Get(&sys->pts); date_Increment(&sys->pts, block->i_nb_samples); es_out_Send(demux->out, sys->es, block); - es_out_SetPCR(demux->out, VLC_TS_0 + date_Get(&sys->pts)); + es_out_SetPCR(demux->out, date_Get(&sys->pts)); return VLC_DEMUXER_SUCCESS; } @@ -254,6 +254,7 @@ static int DemuxOpen(vlc_object_t *obj, vcddev_t *dev, unsigned track) sys->es = es_out_Add(demux->out, &fmt); date_Init(&sys->pts, 44100, 1); + date_Set(&sys->pts, VLC_TS_0); sys->position = 0; demux->pf_demux = Demux; diff --git a/modules/access/jack.c b/modules/access/jack.c index 94d4c4e451..86dfc2f77c 100644 --- a/modules/access/jack.c +++ b/modules/access/jack.c @@ -290,6 +290,7 @@ static int Open( vlc_object_t *p_this ) p_sys->p_es_audio = es_out_Add( p_demux->out, &fmt ); date_Init( &p_sys->pts, fmt.audio.i_rate, 1 ); + date_Set( &p_sys->pts, 0 ); return VLC_SUCCESS; } @@ -463,7 +464,7 @@ static block_t *GrabJack( demux_t *p_demux ) i_read = jack_ringbuffer_read( p_sys->p_jack_ringbuffer, ( char * ) p_block->p_buffer, i_read ); - p_block->i_dts = p_block->i_pts = VLC_TS_0 + date_Increment( &p_sys->pts, + p_block->i_dts = p_block->i_pts = date_Increment( &p_sys->pts, i_read/(p_sys->i_channels * p_sys->jack_sample_size) ); p_sys->p_block_audio = p_block; diff --git a/modules/access/qtsound.m b/modules/access/qtsound.m index 9a16bb0a9e..2caa244056 100644 --- a/modules/access/qtsound.m +++ b/modules/access/qtsound.m @@ -97,6 +97,7 @@ vlc_module_end () p_qtsound = p_demux; currentAudioBuffer = nil; date_Init(&date, 44100, 1); + date_Set(&date, 0); currentPts = 0; previousPts = 0; } @@ -116,7 +117,7 @@ vlc_module_end () @synchronized (self) { numberOfSamples = [sampleBuffer numberOfSamples]; date_Increment(&date,numberOfSamples); - currentPts = VLC_TS_0 + date_Get(&date); + currentPts = date_Get(&date); tempAudioBufferList = [sampleBuffer audioBufferListWithOptions:0]; if (tempAudioBufferList->mNumberBuffers == 2) { diff --git a/modules/access/timecode.c b/modules/access/timecode.c index adbd0f50e9..551a2e010c 100644 --- a/modules/access/timecode.c +++ b/modules/access/timecode.c @@ -65,7 +65,7 @@ static int DemuxOnce (demux_t *demux, bool master) lldiv_t d; unsigned h, m, s, f; - d = lldiv (pts, CLOCK_FREQ); + d = lldiv (pts - VLC_TS_0, CLOCK_FREQ); f = d.rem * sys->date.i_divider_num / sys->date.i_divider_den / CLOCK_FREQ; d = lldiv (d.quot, 60); s = d.rem; diff --git a/modules/codec/adpcm.c b/modules/codec/adpcm.c index f478d235c5..fea140bd4b 100644 --- a/modules/codec/adpcm.c +++ b/modules/codec/adpcm.c @@ -270,7 +270,6 @@ static int OpenDecoder( vlc_object_t *p_this ) p_dec->fmt_out.audio.i_physical_channels = vlc_chan_maps[i_channels]; date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); p_dec->pf_decode = DecodeAudio; p_dec->pf_flush = Flush; diff --git a/modules/codec/aes3.c b/modules/codec/aes3.c index 6acff6511e..d4873870df 100644 --- a/modules/codec/aes3.c +++ b/modules/codec/aes3.c @@ -279,7 +279,6 @@ static int Open( decoder_t *p_dec, bool b_packetizer ) /* Misc init */ date_Init( &p_sys->end_date, 48000, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); /* Set output properties */ p_dec->fmt_out.audio.i_rate = 48000; diff --git a/modules/codec/araw.c b/modules/codec/araw.c index 53a361e8e0..2a8f35abee 100644 --- a/modules/codec/araw.c +++ b/modules/codec/araw.c @@ -289,7 +289,6 @@ static int DecoderOpen( vlc_object_t *p_this ) assert( p_sys->framebits ); date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); p_dec->pf_decode = DecodeBlock; p_dec->pf_flush = Flush; diff --git a/modules/codec/audiotoolbox_midi.c b/modules/codec/audiotoolbox_midi.c index 7d96e12716..a1edee031a 100644 --- a/modules/codec/audiotoolbox_midi.c +++ b/modules/codec/audiotoolbox_midi.c @@ -278,7 +278,6 @@ static int Open(vlc_object_t *p_this) // Initialize date (for PTS) date_Init(&p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1); - date_Set(&p_sys->end_date, VLC_TS_INVALID); p_dec->p_sys = p_sys; p_dec->pf_decode = DecodeBlock; diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c index 880a329b26..e05911a28e 100644 --- a/modules/codec/avcodec/audio.c +++ b/modules/codec/avcodec/audio.c @@ -251,7 +251,6 @@ int InitAudioDec( vlc_object_t *obj ) /* Try to set as much information as possible but do not trust it */ SetupOutputFormat( p_dec, false ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); if( !p_dec->fmt_out.audio.i_rate ) p_dec->fmt_out.audio.i_rate = p_dec->fmt_in.audio.i_rate; if( p_dec->fmt_out.audio.i_rate ) diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c index 87fff6d3c7..8f9408a221 100644 --- a/modules/codec/avcodec/encoder.c +++ b/modules/codec/avcodec/encoder.c @@ -727,7 +727,6 @@ int InitVideoEnc( vlc_object_t *p_this ) p_context->sample_rate = p_enc->fmt_out.audio.i_rate; date_Init( &p_sys->buffer_date, p_enc->fmt_out.audio.i_rate, 1 ); - date_Set( &p_sys->buffer_date, AV_NOPTS_VALUE ); p_context->time_base.num = 1; p_context->time_base.den = p_context->sample_rate; p_context->channels = p_enc->fmt_out.audio.i_channels; @@ -1266,11 +1265,15 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns p_sys->frame->format = p_sys->p_context->sample_fmt; p_sys->frame->nb_samples = leftover_samples + p_sys->i_samples_delay; - p_sys->frame->pts = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den / - CLOCK_FREQ / p_sys->p_context->time_base.num; - - if( likely( p_sys->frame->pts != AV_NOPTS_VALUE) ) + if( likely( date_Get( &p_sys->buffer_date ) != VLC_TS_INVALID) ) + { + /* Convert to AV timing */ + p_sys->frame->pts = date_Get( &p_sys->buffer_date ) - VLC_TS_0; + p_sys->frame->pts = p_sys->frame->pts * p_sys->p_context->time_base.den / + CLOCK_FREQ / p_sys->p_context->time_base.num; date_Increment( &p_sys->buffer_date, p_sys->frame->nb_samples ); + } + else p_sys->frame->pts = AV_NOPTS_VALUE; if( likely( p_aout_buf ) ) { @@ -1287,8 +1290,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns p_aout_buf->p_buffer += leftover; p_aout_buf->i_buffer -= leftover; - if( likely( p_sys->frame->pts != AV_NOPTS_VALUE) ) - p_aout_buf->i_pts = date_Get( &p_sys->buffer_date ); + p_aout_buf->i_pts = date_Get( &p_sys->buffer_date ); } if(unlikely( ( (leftover + buffer_delay) < p_sys->i_buffer_out ) && @@ -1391,8 +1393,14 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) else p_sys->frame->nb_samples = p_sys->i_frame_size; p_sys->frame->format = p_sys->p_context->sample_fmt; - p_sys->frame->pts = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den / - CLOCK_FREQ / p_sys->p_context->time_base.num; + if( likely(date_Get( &p_sys->buffer_date ) != VLC_TS_INVALID) ) + { + /* Convert to AV timing */ + p_sys->frame->pts = date_Get( &p_sys->buffer_date ) - VLC_TS_0; + p_sys->frame->pts = p_sys->frame->pts * p_sys->p_context->time_base.den / + CLOCK_FREQ / p_sys->p_context->time_base.num; + } + else p_sys->frame->pts = AV_NOPTS_VALUE; const int in_bytes = p_sys->frame->nb_samples * p_sys->p_context->channels * p_sys->i_sample_bytes; @@ -1421,7 +1429,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) p_aout_buf->p_buffer += in_bytes; p_aout_buf->i_buffer -= in_bytes; p_aout_buf->i_nb_samples -= p_sys->frame->nb_samples; - if( likely( p_sys->frame->pts != AV_NOPTS_VALUE) ) + if( likely(date_Get( &p_sys->buffer_date ) != VLC_TS_INVALID) ) date_Increment( &p_sys->buffer_date, p_sys->frame->nb_samples ); p_block = encode_avframe( p_enc, p_sys, p_sys->frame ); diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c index d171b4f5f3..f58af6545e 100644 --- a/modules/codec/avcodec/video.c +++ b/modules/codec/avcodec/video.c @@ -614,7 +614,6 @@ int InitVideoDec( vlc_object_t *obj ) /* ***** misc init ***** */ date_Init(&p_sys->pts, 1, 30001); - date_Set(&p_sys->pts, VLC_TS_INVALID); p_sys->b_first_frame = true; p_sys->i_late_frames = 0; p_sys->b_from_preroll = false; diff --git a/modules/codec/dmo/dmo.c b/modules/codec/dmo/dmo.c index fbb00bfa8b..baa9f3afca 100644 --- a/modules/codec/dmo/dmo.c +++ b/modules/codec/dmo/dmo.c @@ -597,6 +597,7 @@ static int DecOpen( decoder_t *p_dec ) date_Init( &p_sys->end_date, p_dec->fmt_in.audio.i_rate, 1 ); else date_Init( &p_sys->end_date, 25 /* FIXME */, 1 ); + date_Set( &p_sys->end_date, VLC_TS_0 ); free( p_vih ); free( p_wf ); diff --git a/modules/codec/faad.c b/modules/codec/faad.c index e3c9e0405f..5b9afc4dfb 100644 --- a/modules/codec/faad.c +++ b/modules/codec/faad.c @@ -128,8 +128,6 @@ static int Open( vlc_object_t *p_this ) } /* Misc init */ - date_Set( &p_sys->date, 0 ); - p_dec->fmt_out.audio.channel_type = p_dec->fmt_in.audio.channel_type; if( p_dec->fmt_in.i_extra > 0 ) @@ -160,6 +158,7 @@ static int Open( vlc_object_t *p_this ) /* Will be initalised from first frame */ p_dec->fmt_out.audio.i_rate = 0; p_dec->fmt_out.audio.i_channels = 0; + date_Set( &p_sys->date, VLC_TS_INVALID ); } p_dec->fmt_out.i_codec = HAVE_FPU ? VLC_CODEC_FL32 : VLC_CODEC_S16N; @@ -321,7 +320,7 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block ) { date_Set( &p_sys->date, i_pts ); } - else if( !date_Get( &p_sys->date ) ) + else if( date_Get( &p_sys->date ) == VLC_TS_INVALID ) { /* We've just started the stream, wait for the first PTS. */ FlushBuffer( p_sys, SIZE_MAX ); diff --git a/modules/codec/flac.c b/modules/codec/flac.c index 9142bf51c8..aca1cae9bf 100644 --- a/modules/codec/flac.c +++ b/modules/codec/flac.c @@ -326,7 +326,6 @@ static void DecoderMetadataCallback( const FLAC__StreamDecoder *decoder, p_sys->stream_info = metadata->data.stream_info; date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); break; case FLAC__METADATA_TYPE_VORBIS_COMMENT: @@ -628,7 +627,7 @@ static void Flush( decoder_t *p_dec ) if( p_sys->b_stream_info ) FLAC__stream_decoder_flush( p_sys->p_flac ); - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); } /**************************************************************************** diff --git a/modules/codec/fluidsynth.c b/modules/codec/fluidsynth.c index 41f597946f..61726c5343 100644 --- a/modules/codec/fluidsynth.c +++ b/modules/codec/fluidsynth.c @@ -174,7 +174,6 @@ static int Open (vlc_object_t *p_this) p_dec->fmt_out.i_codec = VLC_CODEC_FL32; p_dec->fmt_out.audio.i_bitspersample = 32; date_Init (&p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1); - date_Set(&p_sys->end_date, VLC_TS_INVALID); p_dec->p_sys = p_sys; p_dec->pf_decode = DecodeBlock; diff --git a/modules/codec/g711.c b/modules/codec/g711.c index 0b4c2e85c2..904f24d420 100644 --- a/modules/codec/g711.c +++ b/modules/codec/g711.c @@ -202,7 +202,6 @@ static int DecoderOpen( vlc_object_t *p_this ) p_sys->table = table; date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); return VLC_SUCCESS; } diff --git a/modules/codec/lpcm.c b/modules/codec/lpcm.c index f6b394a157..bb92b13365 100644 --- a/modules/codec/lpcm.c +++ b/modules/codec/lpcm.c @@ -252,7 +252,7 @@ static int OpenCommon( decoder_t *p_dec, bool b_packetizer ) /* Misc init */ p_sys->b_packetizer = b_packetizer; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); p_sys->i_type = i_type; p_sys->i_header_size = i_header_size; p_sys->i_chans_to_reorder = 0; @@ -317,7 +317,7 @@ static void Flush( decoder_t *p_dec ) { decoder_sys_t *p_sys = p_dec->p_sys; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); } /***************************************************************************** diff --git a/modules/codec/mpg123.c b/modules/codec/mpg123.c index fdfcb8f2ba..9011626d9e 100644 --- a/modules/codec/mpg123.c +++ b/modules/codec/mpg123.c @@ -190,7 +190,6 @@ static int UpdateAudioFormat( decoder_t *p_dec ) { p_dec->fmt_out.audio.i_rate = (unsigned int)frame_info.rate; date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); } return decoder_UpdateAudioFormat( p_dec ); diff --git a/modules/codec/omxil/omxil.c b/modules/codec/omxil/omxil.c index 92f7c1d258..2673d5feee 100644 --- a/modules/codec/omxil/omxil.c +++ b/modules/codec/omxil/omxil.c @@ -1471,7 +1471,7 @@ int DecodeAudio ( decoder_t *p_dec, block_t *p_block ) if( p_block->i_flags & BLOCK_FLAG_CORRUPTED ) { block_Release( p_block ); - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); if(!p_sys->in.b_flushed) { msg_Dbg(p_dec, "flushing"); diff --git a/modules/codec/opus.c b/modules/codec/opus.c index ae55db5c73..9597e215cc 100644 --- a/modules/codec/opus.c +++ b/modules/codec/opus.c @@ -179,7 +179,7 @@ static int OpenDecoder( vlc_object_t *p_this ) return VLC_ENOMEM; p_sys->b_has_headers = false; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); /* Set output properties */ p_dec->fmt_out.i_codec = VLC_CODEC_FL32; @@ -386,7 +386,7 @@ static void Flush( decoder_t *p_dec ) { decoder_sys_t *p_sys = p_dec->p_sys; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); } /***************************************************************************** diff --git a/modules/codec/schroedinger.c b/modules/codec/schroedinger.c index cd64dd8331..bba878421d 100644 --- a/modules/codec/schroedinger.c +++ b/modules/codec/schroedinger.c @@ -907,8 +907,8 @@ typedef struct block_t *p_chain; struct picture_pts_t pts_tlb[SCHRO_PTS_TLB_SIZE]; - mtime_t i_pts_offset; - mtime_t i_field_time; + unsigned i_pts_offset; + unsigned i_field_duration; bool b_eos_signalled; bool b_eos_pulled; @@ -1455,16 +1455,17 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic ) } } - date_Init( &date, p_enc->fmt_in.video.i_frame_rate, p_enc->fmt_in.video.i_frame_rate_base ); + date_Init( &date, p_enc->fmt_in.video.i_frame_rate * 2, p_enc->fmt_in.video.i_frame_rate_base ); + date_Set( &date, VLC_TS_0 ); /* FIXME - Unlike dirac-research codec Schro doesn't have a function that returns the delay in pics yet. * Use a default of 1 */ - date_Increment( &date, 1 ); - p_sys->i_pts_offset = date_Get( &date ); + date_Increment( &date, 2 /* 2 fields, 1 frame */ ); + p_sys->i_pts_offset = date_Get( &date ) - VLC_TS_0; if( schro_encoder_setting_get_double( p_sys->p_schro, "interlaced_coding" ) > 0.0 ) { - date_Set( &date, 0 ); - date_Increment( &date, 1); - p_sys->i_field_time = date_Get( &date ) / 2; + date_Set( &date, VLC_TS_0 ); + date_Increment( &date, 1 /* field */ ); + p_sys->i_field_duration = date_Get( &date ) - VLC_TS_0; } schro_video_format_set_std_signal_range( p_sys->p_format, SCHRO_SIGNAL_RANGE_8BIT_VIDEO ); @@ -1503,13 +1504,13 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic ) * pts lookaside buffer and dts queue, offset to correspond * to a one field delay. */ if( schro_encoder_setting_get_double( p_sys->p_schro, "interlaced_coding" ) > 0.0 ) { - StorePicturePTS( p_enc, p_sys->i_input_picnum, p_pic->date + p_sys->i_field_time ); + StorePicturePTS( p_enc, p_sys->i_input_picnum, p_pic->date + p_sys->i_field_duration ); p_sys->i_input_picnum++; p_block = block_Alloc( 1 ); if( !p_block ) return NULL; - p_block->i_dts = p_pic->date - p_sys->i_pts_offset + p_sys->i_field_time; + p_block->i_dts = p_pic->date - p_sys->i_pts_offset + p_sys->i_field_duration; block_FifoPut( p_sys->p_dts_fifo, p_block ); p_block = NULL; } diff --git a/modules/codec/speex.c b/modules/codec/speex.c index bcb692260c..bf3f0d5620 100644 --- a/modules/codec/speex.c +++ b/modules/codec/speex.c @@ -210,7 +210,7 @@ static int OpenDecoder( vlc_object_t *p_this ) p_sys->rtp_rate = p_dec->fmt_in.audio.i_rate; p_sys->b_has_headers = false; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); /* Set output properties */ p_dec->fmt_out.i_codec = VLC_CODEC_S16N; @@ -554,7 +554,7 @@ static void Flush( decoder_t *p_dec ) { decoder_sys_t *p_sys = p_dec->p_sys; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); } /***************************************************************************** diff --git a/modules/codec/uleaddvaudio.c b/modules/codec/uleaddvaudio.c index ac73ce3e31..7e3917d669 100644 --- a/modules/codec/uleaddvaudio.c +++ b/modules/codec/uleaddvaudio.c @@ -58,7 +58,7 @@ static void Flush(decoder_t *dec) { decoder_sys_t *sys = dec->p_sys; - date_Set(&sys->end_date, 0); + date_Set(&sys->end_date, VLC_TS_INVALID); } static block_t *DecodeBlock(decoder_t *dec, block_t **block_ptr) @@ -155,7 +155,6 @@ static int Open(vlc_object_t *object) sys->is_12bit = dec->fmt_in.audio.i_bitspersample == 12; date_Init(&sys->end_date, dec->fmt_in.audio.i_rate, 1); - date_Set(&sys->end_date, 0); for (unsigned i = 0; i < sizeof(sys->shuffle) / sizeof(*sys->shuffle); i++) { const unsigned a = sys->is_pal ? 18 : 15; diff --git a/modules/codec/vorbis.c b/modules/codec/vorbis.c index 2689bca54f..a1577d652c 100644 --- a/modules/codec/vorbis.c +++ b/modules/codec/vorbis.c @@ -244,7 +244,7 @@ static int OpenDecoder( vlc_object_t *p_this ) return VLC_ENOMEM; /* Misc init */ - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); p_sys->i_last_block_size = 0; p_sys->b_packetizer = false; p_sys->b_has_headers = false; @@ -455,7 +455,7 @@ static void Flush( decoder_t *p_dec ) { decoder_sys_t *p_sys = p_dec->p_sys; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); } /***************************************************************************** diff --git a/modules/demux/cdg.c b/modules/demux/cdg.c index d682d6f4b8..cc6af125fc 100644 --- a/modules/demux/cdg.c +++ b/modules/demux/cdg.c @@ -100,6 +100,7 @@ static int Open( vlc_object_t * p_this ) /* There is CDG_FRAME_RATE frames per second */ date_Init( &p_sys->pts, CDG_FRAME_RATE, 1 ); + date_Set( &p_sys->pts, VLC_TS_0 ); p_demux->pf_demux = Demux; p_demux->pf_control = Control; @@ -132,12 +133,12 @@ static int Demux( demux_t *p_demux ) if( i_date >= date_Get( &p_sys->pts ) + i_delta ) { p_block->i_dts = p_block->i_pts = VLC_TS_0 + i_date; - date_Set( &p_sys->pts, i_date ); + date_Set( &p_sys->pts, VLC_TS_0 + i_date ); } else { p_block->i_dts = VLC_TS_0 + i_date; - p_block->i_pts = VLC_TS_0 + date_Get( &p_sys->pts ); + p_block->i_pts = date_Get( &p_sys->pts ); } es_out_SetPCR( p_demux->out, p_block->i_pts ); diff --git a/modules/demux/gme.c b/modules/demux/gme.c index 07a38048f4..52adad0196 100644 --- a/modules/demux/gme.c +++ b/modules/demux/gme.c @@ -130,6 +130,7 @@ static int Open (vlc_object_t *obj) sys->es = es_out_Add (demux->out, &fmt); date_Init (&sys->pts, RATE, 1); + date_Set(&sys->pts, VLC_TS_0); /* Titles */ unsigned n = gme_track_count (sys->emu); @@ -228,7 +229,7 @@ static int Demux (demux_t *demux) return VLC_DEMUXER_EOF; } - block->i_pts = block->i_dts = VLC_TS_0 + date_Get (&sys->pts); + block->i_pts = block->i_dts = date_Get (&sys->pts); es_out_SetPCR (demux->out, block->i_pts); es_out_Send (demux->out, sys->es, block); date_Increment (&sys->pts, SAMPLES); diff --git a/modules/demux/image.c b/modules/demux/image.c index b2befd1a31..0e8586e74f 100644 --- a/modules/demux/image.c +++ b/modules/demux/image.c @@ -104,7 +104,7 @@ typedef struct es_out_id_t *es; mtime_t duration; bool is_realtime; - mtime_t pts_origin; + int64_t pts_offset; mtime_t pts_next; date_t pts; } demux_sys_t; @@ -191,7 +191,7 @@ static int Demux(demux_t *demux) return VLC_DEMUXER_EOF; mtime_t deadline; - const mtime_t pts_first = sys->pts_origin + date_Get(&sys->pts); + const mtime_t pts_first = sys->pts_offset + date_Get(&sys->pts); if (sys->pts_next != VLC_TS_INVALID) { deadline = sys->pts_next; } else if (sys->is_realtime) { @@ -208,8 +208,8 @@ static int Demux(demux_t *demux) } for (;;) { - const mtime_t pts = sys->pts_origin + date_Get(&sys->pts); - if (sys->duration >= 0 && pts >= sys->pts_origin + sys->duration) + const mtime_t pts = sys->pts_offset + date_Get(&sys->pts); + if (sys->duration >= 0 && pts >= VLC_TS_0 + sys->pts_offset + sys->duration) return VLC_DEMUXER_EOF; if (pts >= deadline) @@ -256,20 +256,20 @@ static int Control(demux_t *demux, int query, va_list args) } case DEMUX_GET_TIME: { int64_t *time = va_arg(args, int64_t *); - *time = sys->pts_origin + date_Get(&sys->pts); + *time = sys->pts_offset + date_Get(&sys->pts); return VLC_SUCCESS; } case DEMUX_SET_TIME: { if (sys->duration < 0 || sys->is_realtime) return VLC_EGENERIC; int64_t time = va_arg(args, int64_t); - date_Set(&sys->pts, VLC_CLIP(time - sys->pts_origin, 0, sys->duration)); + date_Set(&sys->pts, VLC_CLIP(time - sys->pts_offset, VLC_TS_0, sys->duration)); return VLC_SUCCESS; } case DEMUX_SET_NEXT_DEMUX_TIME: { mtime_t pts_next = VLC_TS_0 + va_arg(args, mtime_t); if (sys->pts_next == VLC_TS_INVALID) - sys->pts_origin = pts_next; + sys->pts_offset = pts_next - VLC_TS_0; sys->pts_next = pts_next; return VLC_SUCCESS; } @@ -733,10 +733,10 @@ static int Open(vlc_object_t *object) sys->es = es_out_Add(demux->out, &fmt); sys->duration = CLOCK_FREQ * var_InheritFloat(demux, "image-duration"); sys->is_realtime = var_InheritBool(demux, "image-realtime"); - sys->pts_origin = sys->is_realtime ? mdate() : 0; + sys->pts_offset = sys->is_realtime ? mdate() : 0; sys->pts_next = VLC_TS_INVALID; date_Init(&sys->pts, fmt.video.i_frame_rate, fmt.video.i_frame_rate_base); - date_Set(&sys->pts, 0); + date_Set(&sys->pts, VLC_TS_0); es_format_Clean(&fmt); diff --git a/modules/demux/mod.c b/modules/demux/mod.c index 644506037b..5f685094ad 100644 --- a/modules/demux/mod.c +++ b/modules/demux/mod.c @@ -217,7 +217,7 @@ static int Open( vlc_object_t *p_this ) /* init time */ date_Init( &p_sys->pts, settings.mFrequency, 1 ); - date_Set( &p_sys->pts, 0 ); + date_Set( &p_sys->pts, VLC_TS_0 ); p_sys->i_length = ModPlug_GetLength( p_sys->f ) * INT64_C(1000); msg_Dbg( p_demux, "MOD loaded name=%s length=%"PRId64"ms", @@ -277,7 +277,7 @@ static int Demux( demux_t *p_demux ) } p_frame->i_buffer = i_read; p_frame->i_dts = - p_frame->i_pts = VLC_TS_0 + date_Get( &p_sys->pts ); + p_frame->i_pts = date_Get( &p_sys->pts ); es_out_SetPCR( p_demux->out, p_frame->i_pts ); es_out_Send( p_demux->out, p_sys->es, p_frame ); @@ -304,7 +304,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) pf = va_arg( args, double* ); if( p_sys->i_length > 0 ) { - double current = date_Get( &p_sys->pts ); + double current = date_Get( &p_sys->pts ) - VLC_TS_0; double length = p_sys->i_length; *pf = current / length; return VLC_SUCCESS; @@ -318,7 +318,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) if( i64 >= 0 && i64 <= p_sys->i_length ) { ModPlug_Seek( p_sys->f, i64 / 1000 ); - date_Set( &p_sys->pts, i64 ); + date_Set( &p_sys->pts, VLC_TS_0 + i64 ); return VLC_SUCCESS; } @@ -340,7 +340,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) if( i64 >= 0 && i64 <= p_sys->i_length ) { ModPlug_Seek( p_sys->f, i64 / 1000 ); - date_Set( &p_sys->pts, i64 ); + date_Set( &p_sys->pts, VLC_TS_0 + i64 ); return VLC_SUCCESS; } diff --git a/modules/demux/rawaud.c b/modules/demux/rawaud.c index 3fbe034f1b..6a2b2fbe69 100644 --- a/modules/demux/rawaud.c +++ b/modules/demux/rawaud.c @@ -208,6 +208,7 @@ static int Open( vlc_object_t * p_this ) /* initialize timing */ date_Init( &p_sys->pts, p_sys->fmt.audio.i_rate, 1 ); + date_Set( &p_sys->pts, VLC_TS_0 ); /* calculate 50ms frame size/time */ p_sys->i_frame_samples = __MAX( p_sys->fmt.audio.i_rate / 20, 1 ); @@ -247,7 +248,7 @@ static int Demux( demux_t *p_demux ) if( p_block == NULL ) return VLC_DEMUXER_EOF; - p_block->i_dts = p_block->i_pts = VLC_TS_0 + date_Get( &p_sys->pts ); + p_block->i_dts = p_block->i_pts = date_Get( &p_sys->pts ); es_out_SetPCR( p_demux->out, p_block->i_pts ); es_out_Send( p_demux->out, p_sys->p_es, p_block ); diff --git a/modules/demux/rawvid.c b/modules/demux/rawvid.c index bce8b2cf2f..be49f680de 100644 --- a/modules/demux/rawvid.c +++ b/modules/demux/rawvid.c @@ -341,6 +341,7 @@ valid: u_fps_num, u_fps_den, 0); date_Init( &p_sys->pcr, p_sys->fmt_video.video.i_frame_rate, p_sys->fmt_video.video.i_frame_rate_base ); + date_Set( &p_sys->pcr, VLC_TS_0 ); if( !p_sys->fmt_video.video.i_bits_per_pixel ) { @@ -394,7 +395,7 @@ static int Demux( demux_t *p_demux ) mtime_t i_pcr = date_Get( &p_sys->pcr ); /* Call the pace control */ - es_out_SetPCR( p_demux->out, VLC_TS_0 + i_pcr ); + es_out_SetPCR( p_demux->out, i_pcr ); if( p_sys->b_y4m ) { @@ -417,7 +418,7 @@ static int Demux( demux_t *p_demux ) if( p_block == NULL ) return VLC_DEMUXER_EOF; - p_block->i_dts = p_block->i_pts = VLC_TS_0 + i_pcr; + p_block->i_dts = p_block->i_pts = i_pcr; es_out_Send( p_demux->out, p_sys->p_es_video, p_block ); date_Increment( &p_sys->pcr, 1 ); diff --git a/modules/demux/sid.cpp b/modules/demux/sid.cpp index da0abc3b01..aa87462e94 100644 --- a/modules/demux/sid.cpp +++ b/modules/demux/sid.cpp @@ -166,6 +166,7 @@ static int Open (vlc_object_t *obj) sys->es = es_out_Add (demux->out, &fmt); date_Init (&sys->pts, fmt.audio.i_rate, 1); + date_Set(&sys->pts, VLC_TS_0); sys->tune->selectSong (0); result = (sys->player->load (sys->tune) >=0 ); @@ -220,7 +221,7 @@ static int Demux (demux_t *demux) return VLC_DEMUXER_EOF; } block->i_buffer = i_read; - block->i_pts = block->i_dts = VLC_TS_0 + date_Get (&sys->pts); + block->i_pts = block->i_dts = date_Get (&sys->pts); es_out_SetPCR (demux->out, block->i_pts); diff --git a/modules/demux/voc.c b/modules/demux/voc.c index bf376e7c0f..9bb9e12927 100644 --- a/modules/demux/voc.c +++ b/modules/demux/voc.c @@ -117,6 +117,7 @@ static int Open( vlc_object_t * p_this ) p_sys->p_es = NULL; date_Init( &p_sys->pts, 1, 1 ); + date_Set( &p_sys->pts, VLC_TS_0 ); es_format_Init( &p_sys->fmt, AUDIO_ES, 0 ); p_demux->pf_demux = Demux; diff --git a/modules/demux/wav.c b/modules/demux/wav.c index 1a45525723..789bac08b5 100644 --- a/modules/demux/wav.c +++ b/modules/demux/wav.c @@ -428,6 +428,7 @@ static int Open( vlc_object_t * p_this ) goto error; date_Init( &p_sys->pts, p_sys->fmt.audio.i_rate, 1 ); + date_Set( &p_sys->pts, VLC_TS_0 ); return VLC_SUCCESS; @@ -469,7 +470,7 @@ static int Demux( demux_t *p_demux ) } p_block->i_dts = - p_block->i_pts = VLC_TS_0 + date_Get( &p_sys->pts ); + p_block->i_pts = date_Get( &p_sys->pts ); /* set PCR */ es_out_SetPCR( p_demux->out, p_block->i_pts ); diff --git a/modules/misc/stats.c b/modules/misc/stats.c index 3b0b6593f2..f60a153ca0 100644 --- a/modules/misc/stats.c +++ b/modules/misc/stats.c @@ -149,8 +149,7 @@ static int Demux( demux_t *p_demux ) if( !p_block ) return 1; - p_block->i_dts = p_block->i_pts = - VLC_TS_0 + date_Increment( &p_sys->pts, kBufferSize ); + p_block->i_dts = p_block->i_pts = date_Increment( &p_sys->pts, kBufferSize ); msg_Dbg( p_demux, "demux got %"PRId64" ms offset", (mdate() - *(mtime_t *)p_block->p_buffer) / 1000 ); @@ -190,6 +189,7 @@ static int OpenDemux ( vlc_object_t *p_this ) return VLC_ENOMEM; date_Init( &p_sys->pts, 1, 1 ); + date_Set( &p_sys->pts, VLC_TS_0 ); es_format_Init( &p_sys->fmt, VIDEO_ES, VLC_FOURCC('s','t','a','t') ); p_sys->fmt.video.i_width = 720; diff --git a/modules/packetizer/dts.c b/modules/packetizer/dts.c index ddb0a0e919..12245c2bcb 100644 --- a/modules/packetizer/dts.c +++ b/modules/packetizer/dts.c @@ -77,7 +77,7 @@ static void PacketizeFlush( decoder_t *p_dec ) decoder_sys_t *p_sys = p_dec->p_sys; p_sys->b_discontinuity = true; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); p_sys->i_state = STATE_NOSYNC; block_BytestreamEmpty( &p_sys->bytestream ); } @@ -352,7 +352,7 @@ static int Open( vlc_object_t *p_this ) /* Misc init */ p_sys->i_state = STATE_NOSYNC; - date_Set( &p_sys->end_date, 0 ); + date_Set( &p_sys->end_date, VLC_TS_INVALID ); p_sys->i_pts = VLC_TS_INVALID; p_sys->b_date_set = false; p_sys->b_discontinuity = false; diff --git a/modules/packetizer/flac.c b/modules/packetizer/flac.c index 09171193cb..6044042511 100644 --- a/modules/packetizer/flac.c +++ b/modules/packetizer/flac.c @@ -554,7 +554,6 @@ static int Open(vlc_object_t *p_this) p_sys->i_next_block_flags = 0; block_BytestreamInit(&p_sys->bytestream); date_Init( &p_sys->pts, 1, 1 ); - date_Set( &p_sys->pts, VLC_TS_INVALID ); /* */ es_format_Copy(&p_dec->fmt_out, &p_dec->fmt_in); diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c index 7a567b7a6a..4f8a97d0f6 100644 --- a/modules/packetizer/h264.c +++ b/modules/packetizer/h264.c @@ -372,7 +372,6 @@ static int Open( vlc_object_t *p_this ) p_sys->prevdatedpoc.pts = VLC_TS_INVALID; date_Init( &p_sys->dts, 30000 * 2, 1001 ); - date_Set( &p_sys->dts, VLC_TS_INVALID ); /* Setup properties */ es_format_Copy( &p_dec->fmt_out, &p_dec->fmt_in ); diff --git a/modules/packetizer/hevc.c b/modules/packetizer/hevc.c index 80ec727b81..d71a0bfe75 100644 --- a/modules/packetizer/hevc.c +++ b/modules/packetizer/hevc.c @@ -204,7 +204,6 @@ static int Open(vlc_object_t *p_this) p_dec->fmt_in.video.i_frame_rate_base ); else date_Init( &p_sys->dts, 2 * 30000, 1001 ); - date_Set( &p_sys->dts, VLC_TS_INVALID ); p_sys->pts = VLC_TS_INVALID; p_sys->b_need_ts = true; diff --git a/modules/packetizer/mlp.c b/modules/packetizer/mlp.c index 365d483ed9..6f16e6c8c3 100644 --- a/modules/packetizer/mlp.c +++ b/modules/packetizer/mlp.c @@ -482,7 +482,6 @@ static int Open( vlc_object_t *p_this ) /* */ p_sys->i_state = STATE_NOSYNC; date_Init( &p_sys->end_date, 1, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); block_BytestreamInit( &p_sys->bytestream ); p_sys->b_mlp = false; diff --git a/modules/packetizer/mpeg4audio.c b/modules/packetizer/mpeg4audio.c index 3814dda031..9237853a3e 100644 --- a/modules/packetizer/mpeg4audio.c +++ b/modules/packetizer/mpeg4audio.c @@ -293,7 +293,6 @@ static int OpenPacketizer(vlc_object_t *p_this) date_Init(&p_sys->end_date, p_dec->fmt_out.audio.i_rate ? p_dec->fmt_out.audio.i_rate : 48000, 1); - date_Set(&p_sys->end_date, VLC_TS_INVALID); /* Set callbacks */ p_dec->pf_packetize = Packetize; diff --git a/modules/packetizer/mpegaudio.c b/modules/packetizer/mpegaudio.c index acbf674676..ab01b5b5c4 100644 --- a/modules/packetizer/mpegaudio.c +++ b/modules/packetizer/mpegaudio.c @@ -630,7 +630,6 @@ static int Open( vlc_object_t *p_this ) /* Misc init */ p_sys->i_state = STATE_NOSYNC; date_Init( &p_sys->end_date, 1, 1 ); - date_Set( &p_sys->end_date, VLC_TS_INVALID ); block_BytestreamInit( &p_sys->bytestream ); p_sys->i_pts = VLC_TS_INVALID; p_sys->b_discontinuity = false; diff --git a/modules/packetizer/mpegvideo.c b/modules/packetizer/mpegvideo.c index 95d89e1853..318b3f7181 100644 --- a/modules/packetizer/mpegvideo.c +++ b/modules/packetizer/mpegvideo.c @@ -222,9 +222,7 @@ static int Open( vlc_object_t *p_this ) p_sys->i_dts = p_sys->i_pts = VLC_TS_INVALID; date_Init( &p_sys->dts, 30000, 1001 ); - date_Set( &p_sys->dts, VLC_TS_INVALID ); date_Init( &p_sys->prev_iframe_dts, 30000, 1001 ); - date_Set( &p_sys->prev_iframe_dts, VLC_TS_INVALID ); p_sys->i_frame_rate = 2 * 30000; p_sys->i_frame_rate_base = 1001; diff --git a/modules/video_filter/fps.c b/modules/video_filter/fps.c index 689efc9632..43c967662d 100644 --- a/modules/video_filter/fps.c +++ b/modules/video_filter/fps.c @@ -169,7 +169,6 @@ static int Open( vlc_object_t *p_this) date_Init( &p_sys->next_output_pts, p_filter->fmt_out.video.i_frame_rate, p_filter->fmt_out.video.i_frame_rate_base ); - date_Set( &p_sys->next_output_pts, VLC_TS_INVALID ); p_sys->p_previous_pic = NULL; p_filter->pf_video_filter = Filter; diff --git a/src/misc/mtime.c b/src/misc/mtime.c index 2087516957..8f835e91eb 100644 --- a/src/misc/mtime.c +++ b/src/misc/mtime.c @@ -78,7 +78,7 @@ char *secstotimestr( char *psz_buffer, int32_t i_seconds ) void date_Init( date_t *p_date, uint32_t i_divider_n, uint32_t i_divider_d ) { - p_date->date = 0; + p_date->date = VLC_TS_INVALID; p_date->i_divider_num = i_divider_n; p_date->i_divider_den = i_divider_d; p_date->i_remainder = 0; @@ -94,6 +94,8 @@ void date_Change( date_t *p_date, uint32_t i_divider_n, uint32_t i_divider_d ) mtime_t date_Increment( date_t *p_date, uint32_t i_nb_samples ) { + if(unlikely(p_date->date == VLC_TS_INVALID)) + return VLC_TS_INVALID; assert( p_date->i_divider_num != 0 ); mtime_t i_dividend = i_nb_samples * CLOCK_FREQ * p_date->i_divider_den; lldiv_t d = lldiv( i_dividend, p_date->i_divider_num ); @@ -114,6 +116,8 @@ mtime_t date_Increment( date_t *p_date, uint32_t i_nb_samples ) mtime_t date_Decrement( date_t *p_date, uint32_t i_nb_samples ) { + if(unlikely(p_date->date == VLC_TS_INVALID)) + return VLC_TS_INVALID; mtime_t i_dividend = (mtime_t)i_nb_samples * CLOCK_FREQ * p_date->i_divider_den; p_date->date -= i_dividend / p_date->i_divider_num; unsigned i_rem_adjust = i_dividend % p_date->i_divider_num; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
