[vlc-devel] Decoders & Invalid timestamp conversion problem
    Francois Cartegnie 
    fcvlcdev at free.fr
       
    Tue Mar 18 04:36:16 CET 2014
    
    
  
Hi,
I'm investigating the MP4 "Invalid timestamp conversion" errors
happening with some formats (3GP) on seek.
This problem happens with huge blocks where Demuxer returns 1 block or
containing N packets for a total of 20 seconds. (See #7150 for sample)
On seek, INPUT_SET_POSITION resets clock to -1, while the decoder thread
is still in its DecoderDecodeAudio() loop, processing the block.
>From this point, remaining packets are sent to DecoderPlayAudio which
now uses an invalid reference clock and triggers the error.
The problem stops when using the p_owner->b_flushing condition to drop
current block. I'm unsure if that's a correct fix.
    while( (p_aout_buf = p_dec->pf_decode_audio( p_dec, &p_block )) )
    {
-        if( DecoderIsExitRequested( p_dec ) )
+        if( DecoderIsExitRequested( p_dec ) || p_owner->b_flushing )
        {
            /* It prevent freezing VLC in case of broken decoder */
            block_Release( p_aout_buf );
            if( p_block )
                block_Release( p_block );
            break;
        }
        i_decoded++;
        if( p_owner->i_preroll_end > VLC_TS_INVALID &&
            p_aout_buf->i_pts < p_owner->i_preroll_end )
        {
            block_Release( p_aout_buf );
            continue;
        }
        if( p_owner->i_preroll_end > VLC_TS_INVALID )
        {
            msg_Dbg( p_dec, "End of audio preroll" );
            if( p_owner->p_aout )
                aout_DecFlush( p_owner->p_aout );
            /* */
            p_owner->i_preroll_end = VLC_TS_INVALID;
        }
        DecoderPlayAudio( p_dec, p_aout_buf, &i_played, &i_lost );
    }
Francois
    
    
More information about the vlc-devel
mailing list