Commit 3d2ac805 authored by Marian Durkovic's avatar Marian Durkovic

backport of [13220] [13191] [13192]

parent 95ab5e44
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "vlc_codec.h" #include "vlc_codec.h"
#include "vlc_meta.h" #include "vlc_meta.h"
#define MPGA_PACKET_SIZE 4096 #define MPGA_PACKET_SIZE 1024
/***************************************************************************** /*****************************************************************************
* Module descriptor * Module descriptor
......
...@@ -133,6 +133,7 @@ void input_ClockInit( input_clock_t *cl, vlc_bool_t b_master, int i_cr_average ) ...@@ -133,6 +133,7 @@ void input_ClockInit( input_clock_t *cl, vlc_bool_t b_master, int i_cr_average )
cl->last_cr = 0; cl->last_cr = 0;
cl->last_pts = 0; cl->last_pts = 0;
cl->last_sysdate = 0;
cl->cr_ref = 0; cl->cr_ref = 0;
cl->sysdate_ref = 0; cl->sysdate_ref = 0;
cl->delta_cr = 0; cl->delta_cr = 0;
...@@ -264,15 +265,17 @@ void input_ClockSetPCR( input_thread_t *p_input, ...@@ -264,15 +265,17 @@ void input_ClockSetPCR( input_thread_t *p_input,
else else
{ {
cl->last_cr = 0; cl->last_cr = 0;
cl->last_sysdate = 0;
cl->delta_cr = 0; cl->delta_cr = 0;
cl->i_delta_cr_residue = 0; cl->i_delta_cr_residue = 0;
} }
} }
else else
{ {
mtime_t clock_max_gap = CR_MAX_GAP * 90 / p_input->i_rate;
if ( cl->last_cr != 0 && if ( cl->last_cr != 0 &&
( (cl->last_cr - i_clock) > CR_MAX_GAP ( (cl->last_cr - i_clock) > clock_max_gap
|| (cl->last_cr - i_clock) < - CR_MAX_GAP ) ) || (cl->last_cr - i_clock) < - clock_max_gap ) )
{ {
/* Stream discontinuity, for which we haven't received a /* Stream discontinuity, for which we haven't received a
* warning from the stream control facilities (dd-edited * warning from the stream control facilities (dd-edited
...@@ -308,7 +311,7 @@ void input_ClockSetPCR( input_thread_t *p_input, ...@@ -308,7 +311,7 @@ void input_ClockSetPCR( input_thread_t *p_input,
input_ClockManageControl( p_input, cl, i_clock ); input_ClockManageControl( p_input, cl, i_clock );
#endif #endif
} }
else else if ( mdate() - cl->last_sysdate > 200000 )
{ {
/* Smooth clock reference variations. */ /* Smooth clock reference variations. */
mtime_t i_extrapoled_clock = ClockCurrent( p_input, cl ); mtime_t i_extrapoled_clock = ClockCurrent( p_input, cl );
...@@ -324,6 +327,7 @@ void input_ClockSetPCR( input_thread_t *p_input, ...@@ -324,6 +327,7 @@ void input_ClockSetPCR( input_thread_t *p_input,
+ cl->i_delta_cr_residue ) + cl->i_delta_cr_residue )
% cl->i_cr_average; % cl->i_cr_average;
cl->delta_cr = delta_cr; cl->delta_cr = delta_cr;
cl->last_sysdate = mdate();
} }
} }
} }
......
...@@ -133,6 +133,7 @@ typedef struct ...@@ -133,6 +133,7 @@ typedef struct
/* Synchronization information */ /* Synchronization information */
mtime_t delta_cr; mtime_t delta_cr;
mtime_t cr_ref, sysdate_ref; mtime_t cr_ref, sysdate_ref;
mtime_t last_sysdate;
mtime_t last_cr; /* reference to detect unexpected stream mtime_t last_cr; /* reference to detect unexpected stream
* discontinuities */ * discontinuities */
mtime_t last_pts; mtime_t last_pts;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment