[vlc-devel] [PATCH] transcode: Correctly reset video drift
Aurélien Nephtali
aurelien.nephtali at gmail.com
Fri Jun 8 15:40:25 CEST 2012
On Fri, Jun 8, 2012 at 3:24 PM, Laurent Aimar <fenrir at elivagar.org> wrote:
> On Fri, Jun 08, 2012 at 12:27:37PM +0200, Aurélien Nephtali wrote:
>> >> I think your patch is incomplete to fully fix the issue.
>> >> The code is:
>> >>
>> >>> if( p_sys->b_master_sync )
>> >>> {
>> >>> mtime_t i_pts = date_Get( &id->interpolated_pts ) + 1;
>> >>> if (unlikely ( p_pic->date - i_pts > MASTER_SYNC_MAX_DRIFT
>> >>> || p_pic->date - i_pts < -MASTER_SYNC_MAX_DRIFT ) )
>> >>> {
>> >>> msg_Dbg( p_stream, "drift is too high, resetting master sync" );
>> >>> date_Set( &id->interpolated_pts, p_pic->date );
>> >>> i_pts = p_pic->date + 1;
>> >> I don't understand the need of this line (after the comment below).
>> >>> }
>> >>> date_Increment( &id->interpolated_pts, 1 );
>> >> I think i_pts should be set to the result of the increment.
>> >>>
>> >>> if( unlikely( b_need_duplicate ) )
>> >>> {
>> >> [Here your patch add a missing date_Increment() ]
>> >>> if( p_sys->i_threads >= 1 )
>> >>> {
>> >>> /* We can't modify the picture, we need to duplicate it */
>> >>> p_pic2 = video_new_buffer_decoder( id->p_decoder );
>> >>> if( likely( p_pic2 != NULL ) )
>> >>> {
>> >>> picture_Copy( p_pic2, p_pic );
>> >>> p_pic2->date = i_pts;
>> >>> }
>> >>> }
>> >>> else
>> >>> {
>> >>> block_t *p_block;
>> >>> p_pic->date = i_pts;
>> >>> p_block = id->p_encoder->pf_encode_video(id->p_encoder, p_pic);
>> >>> block_ChainAppend( out, p_block );
>> >>> }
>> >>> }
>> >>> }
>> >>
>> >> Could you recheck against your test cases?
>> >>
>> >
>> > With my patch and your suggestion it still works.
>> > I will test this with more streams to see if it is OK.
>> >
>>
>> In fact, the result is not good at all. The video is not smooth even
>> with a clean stream.
>> My first test was wrong (I just tested quality).
>>
>> You can see the results here :
>> - http://86.65.94.103/ok.ts (only my patch)
>> - http://86.65.94.103/ko.ts (my patch + your suggestion)
>>
>> This is the dump that makes vlc-git duplicates each frame on a
>> particular glitch (during the Jeep ad) but this time the "not smooth"
>> effect is visible since the start of the encoding.
> Could you send the patch you tested?
>
Here it is.
--
Aurélien Nephtali
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.diff
Type: application/octet-stream
Size: 662 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20120608/6ea42398/attachment.obj>
More information about the vlc-devel
mailing list