[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