Ticket #1334: vlc_transcode_drift_fps.diff

File vlc_transcode_drift_fps.diff, 3.1 kB (added by ileoo, 11 months ago)

scale transcode drift according to fps values

  • transcode.c

    old new  
    440440    /* Sync */ 
    441441    vlc_bool_t      b_master_sync; 
    442442    mtime_t         i_master_drift; 
     443    long            i_master_sync_drift; 
    443444}; 
    444445 
    445446struct decoder_owner_sys_t 
     
    15591560        if( p_sys->b_master_sync ) 
    15601561        { 
    15611562            mtime_t i_dts = date_Get( &id->interpolated_pts ) + 1; 
    1562             if ( p_audio_buf->start_date - i_dts > MASTER_SYNC_MAX_DRIFT 
    1563                   || p_audio_buf->start_date - i_dts < -MASTER_SYNC_MAX_DRIFT
     1563            if ( p_audio_buf->start_date - i_dts > p_sys->i_master_sync_drift  
     1564                  || p_audio_buf->start_date - i_dts < -p_sys->i_master_sync_drift
    15641565            { 
    15651566                msg_Dbg( p_stream, "drift is too high, resetting master sync" ); 
    15661567                date_Set( &id->interpolated_pts, p_audio_buf->start_date ); 
     
    20162017            id->p_encoder->fmt_out.video.i_frame_rate_base = 1; 
    20172018        } 
    20182019    } 
     2020    p_sys->i_master_sync_drift=(MASTER_SYNC_MAX_DRIFT*id->p_decoder->fmt_out.video.i_frame_rate)/(p_sys->f_fps*id->p_decoder->fmt_out.video.i_frame_rate_base); 
     2021    msg_Dbg( p_stream, "master sync %d", p_sys->i_master_sync_drift); 
    20192022 
     2023 
    20202024    id->p_encoder->fmt_in.video.i_frame_rate = 
    20212025        id->p_encoder->fmt_out.video.i_frame_rate; 
    20222026    id->p_encoder->fmt_in.video.i_frame_rate_base = 
     
    21722176            mtime_t i_pts; 
    21732177 
    21742178            i_pts = date_Get( &id->interpolated_pts ) + 1; 
    2175             if ( p_pic->date - i_pts > MASTER_SYNC_MAX_DRIFT 
    2176                   || p_pic->date - i_pts < -MASTER_SYNC_MAX_DRIFT
     2179            if ( p_pic->date - i_pts > p_sys->i_master_sync_drift 
     2180                  || p_pic->date - i_pts < -p_sys->i_master_sync_drift
    21772181            { 
    21782182                msg_Dbg( p_stream, "drift is too high, resetting master sync" ); 
    21792183                date_Set( &id->interpolated_pts, p_pic->date ); 
     
    24202424        if( p_sys->b_master_sync ) 
    24212425        { 
    24222426            mtime_t i_pts = date_Get( &id->interpolated_pts ) + 1; 
    2423             if ( p_pic->date - i_pts > MASTER_SYNC_MAX_DRIFT 
    2424                   || p_pic->date - i_pts < -MASTER_SYNC_MAX_DRIFT
     2427            if ( p_pic->date - i_pts > p_sys->i_master_sync_drift 
     2428                  || p_pic->date - i_pts < -p_sys->i_master_sync_drift
    24252429            { 
    24262430                msg_Dbg( p_stream, "drift is too high, resetting master sync" ); 
    24272431                date_Set( &id->interpolated_pts, p_pic->date ); 
     
    24332437        if( p_sys->b_master_sync && i_duplicate > 1 ) 
    24342438        { 
    24352439            mtime_t i_pts = date_Get( &id->interpolated_pts ) + 1; 
    2436             if( (p_pic->date - i_pts > MASTER_SYNC_MAX_DRIFT
    2437                  || ((p_pic->date - i_pts) < -MASTER_SYNC_MAX_DRIFT) ) 
     2440            if( (p_pic->date - i_pts > p_sys->i_master_sync_drift
     2441                 || ((p_pic->date - i_pts) < -p_sys->i_master_sync_drift) ) 
    24382442            { 
    24392443                msg_Dbg( p_stream, "drift is too high, resetting master sync" ); 
    24402444                date_Set( &id->interpolated_pts, p_pic->date );