[vlc-commits] avcodec: on audio encode, sync timestamps more often from input
Ilkka Ollakka
git at videolan.org
Sun Oct 20 16:19:09 CEST 2013
vlc/vlc-2.1 | branch: master | Ilkka Ollakka <ileoo at videolan.org> | Mon Oct 14 21:47:05 2013 +0300| [20af3a4e83d97f3ca3292706c65f89f96dfcbf99] | committer: Jean-Baptiste Kempf
avcodec: on audio encode, sync timestamps more often from input
Ref #9022
(cherry picked from commit 4f7537d370551e74792878a4fc570de7a85db2bf)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=20af3a4e83d97f3ca3292706c65f89f96dfcbf99
---
modules/codec/avcodec/encoder.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c
index be473bf..3c1ef3c 100644
--- a/modules/codec/avcodec/encoder.c
+++ b/modules/codec/avcodec/encoder.c
@@ -1127,6 +1127,14 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf )
//Calculate how many bytes we would need from current buffer to fill frame
size_t leftover_samples = __MAX(0,__MIN((ssize_t)i_samples_left, (ssize_t)(p_sys->i_frame_size - p_sys->i_samples_delay)));
+ if( ( p_aout_buf && ( p_aout_buf->i_pts > VLC_TS_INVALID ) &&
+ ((p_aout_buf->i_pts - p_sys->i_samples_delay) != date_Get( &p_sys->buffer_date ) ) ) )
+ {
+ date_Set( &p_sys->buffer_date, p_aout_buf->i_dts );
+ /* take back amount we have leftover from previous buffer*/
+ date_Decrement( &p_sys->buffer_date, p_sys->i_samples_delay );
+ }
+
// Check if we have enough samples in delay_buffer and current p_aout_buf to fill frame
// Or if we are cleaning up
if( ( buffer_delay > 0 ) &&
@@ -1151,12 +1159,11 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf )
p_sys->frame->format = p_sys->p_context->sample_fmt;
p_sys->frame->nb_samples = leftover_samples + p_sys->i_samples_delay;
- if( unlikely( p_aout_buf && ( p_aout_buf->i_pts > VLC_TS_INVALID ) &&
- (p_aout_buf->i_pts != date_Get( &p_sys->buffer_date ) ) ) )
- date_Set( &p_sys->buffer_date, p_aout_buf->i_pts );
p_sys->frame->pts = date_Get( &p_sys->buffer_date );
- date_Increment( &p_sys->buffer_date, p_sys->i_frame_size );
+ if( likely( p_sys->frame->pts != (int64_t)AV_NOPTS_VALUE) )
+ date_Increment( &p_sys->buffer_date, p_sys->i_frame_size );
+
if( likely( p_aout_buf ) )
{
More information about the vlc-commits
mailing list