Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-1.1
Commits
1c34c14b
Commit
1c34c14b
authored
Sep 23, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
No functionnal changes in clock algo.
parent
e2c71160
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
33 deletions
+27
-33
src/input/clock.c
src/input/clock.c
+26
-32
src/input/input_internal.h
src/input/input_internal.h
+1
-1
No files found.
src/input/clock.c
View file @
1c34c14b
...
@@ -66,16 +66,6 @@
...
@@ -66,16 +66,6 @@
* new_average = (old_average * c_average + new_sample_value) / (c_average +1)
* new_average = (old_average * c_average + new_sample_value) / (c_average +1)
*/
*/
enum
/* Synchro states */
{
SYNCHRO_OK
=
0
,
SYNCHRO_START
=
1
,
SYNCHRO_REINIT
=
2
,
};
static
void
ClockNewRef
(
input_clock_t
*
p_pgrm
,
mtime_t
i_clock
,
mtime_t
i_sysdate
);
/*****************************************************************************
/*****************************************************************************
* Constants
* Constants
*****************************************************************************/
*****************************************************************************/
...
@@ -92,7 +82,7 @@ static void ClockNewRef( input_clock_t * p_pgrm,
...
@@ -92,7 +82,7 @@ static void ClockNewRef( input_clock_t * p_pgrm,
*****************************************************************************/
*****************************************************************************/
static
mtime_t
ClockToSysdate
(
input_clock_t
*
cl
,
mtime_t
i_clock
)
static
mtime_t
ClockToSysdate
(
input_clock_t
*
cl
,
mtime_t
i_clock
)
{
{
if
(
cl
->
i_synchro_state
!=
SYNCHRO_OK
)
if
(
!
cl
->
b_has_reference
)
return
0
;
return
0
;
return
(
i_clock
-
cl
->
cr_ref
)
*
cl
->
i_rate
/
INPUT_RATE_DEFAULT
+
return
(
i_clock
-
cl
->
cr_ref
)
*
cl
->
i_rate
/
INPUT_RATE_DEFAULT
+
...
@@ -102,10 +92,11 @@ static mtime_t ClockToSysdate( input_clock_t *cl, mtime_t i_clock )
...
@@ -102,10 +92,11 @@ static mtime_t ClockToSysdate( input_clock_t *cl, mtime_t i_clock )
/*****************************************************************************
/*****************************************************************************
* ClockCurrent: converts current system date to clock units
* ClockCurrent: converts current system date to clock units
*****************************************************************************
*****************************************************************************
* Caution :
the synchro state must be SYNCHRO_OK
for this to operate.
* Caution :
a valid reference point is needed
for this to operate.
*****************************************************************************/
*****************************************************************************/
static
mtime_t
ClockCurrent
(
input_clock_t
*
cl
)
static
mtime_t
ClockCurrent
(
input_clock_t
*
cl
)
{
{
assert
(
cl
->
b_has_reference
);
return
(
mdate
()
-
cl
->
sysdate_ref
)
*
INPUT_RATE_DEFAULT
/
cl
->
i_rate
+
return
(
mdate
()
-
cl
->
sysdate_ref
)
*
INPUT_RATE_DEFAULT
/
cl
->
i_rate
+
cl
->
cr_ref
;
cl
->
cr_ref
;
}
}
...
@@ -116,6 +107,7 @@ static mtime_t ClockCurrent( input_clock_t *cl )
...
@@ -116,6 +107,7 @@ static mtime_t ClockCurrent( input_clock_t *cl )
static
void
ClockNewRef
(
input_clock_t
*
cl
,
static
void
ClockNewRef
(
input_clock_t
*
cl
,
mtime_t
i_clock
,
mtime_t
i_sysdate
)
mtime_t
i_clock
,
mtime_t
i_sysdate
)
{
{
cl
->
b_has_reference
=
true
;
cl
->
cr_ref
=
i_clock
;
cl
->
cr_ref
=
i_clock
;
cl
->
sysdate_ref
=
i_sysdate
;
cl
->
sysdate_ref
=
i_sysdate
;
}
}
...
@@ -126,7 +118,7 @@ static void ClockNewRef( input_clock_t *cl,
...
@@ -126,7 +118,7 @@ static void ClockNewRef( input_clock_t *cl,
*****************************************************************************/
*****************************************************************************/
void
input_ClockInit
(
input_clock_t
*
cl
,
bool
b_master
,
int
i_cr_average
,
int
i_rate
)
void
input_ClockInit
(
input_clock_t
*
cl
,
bool
b_master
,
int
i_cr_average
,
int
i_rate
)
{
{
cl
->
i_synchro_state
=
SYNCHRO_START
;
cl
->
b_has_reference
=
false
;
cl
->
last_cr
=
0
;
cl
->
last_cr
=
0
;
cl
->
last_pts
=
0
;
cl
->
last_pts
=
0
;
...
@@ -153,21 +145,15 @@ void input_ClockSetPCR( input_thread_t *p_input,
...
@@ -153,21 +145,15 @@ void input_ClockSetPCR( input_thread_t *p_input,
mtime_t
i_ck_stream
,
mtime_t
i_ck_system
)
mtime_t
i_ck_stream
,
mtime_t
i_ck_system
)
{
{
const
bool
b_synchronize
=
p_input
->
b_can_pace_control
&&
cl
->
b_master
;
const
bool
b_synchronize
=
p_input
->
b_can_pace_control
&&
cl
->
b_master
;
bool
b_reset_reference
=
false
;
if
(
(
cl
->
i_synchro_state
!=
SYNCHRO_OK
)
||
if
(
(
!
cl
->
b_has_reference
)
||
(
i_ck_stream
==
0
&&
cl
->
last_cr
!=
0
)
)
(
i_ck_stream
==
0
&&
cl
->
last_cr
!=
0
)
)
{
{
/* Feed synchro with a new reference point. */
cl
->
last_update
=
0
;
ClockNewRef
(
cl
,
i_ck_stream
,
__MAX
(
cl
->
last_pts
+
CR_MEAN_PTS_GAP
,
i_ck_system
)
);
/* */
cl
->
i_synchro_state
=
SYNCHRO_OK
;
b_reset_reference
=
true
;
if
(
!
b_synchronize
)
{
cl
->
delta_cr
=
0
;
cl
->
i_delta_cr_residue
=
0
;
cl
->
last_update
=
0
;
}
}
}
else
if
(
cl
->
last_cr
!=
0
&&
else
if
(
cl
->
last_cr
!=
0
&&
(
(
cl
->
last_cr
-
i_ck_stream
)
>
CR_MAX_GAP
||
(
(
cl
->
last_cr
-
i_ck_stream
)
>
CR_MAX_GAP
||
...
@@ -177,12 +163,20 @@ void input_ClockSetPCR( input_thread_t *p_input,
...
@@ -177,12 +163,20 @@ void input_ClockSetPCR( input_thread_t *p_input,
* warning from the stream control facilities (dd-edited
* warning from the stream control facilities (dd-edited
* stream ?). */
* stream ?). */
msg_Warn
(
p_input
,
"clock gap, unexpected stream discontinuity"
);
msg_Warn
(
p_input
,
"clock gap, unexpected stream discontinuity"
);
input_ClockInit
(
cl
,
cl
->
b_master
,
cl
->
i_cr_average
,
cl
->
i_rate
);
cl
->
last_pts
=
0
;
/* Feed synchro with a new reference point. */
/* */
msg_Warn
(
p_input
,
"feeding synchro with a new reference point trying to recover from clock gap"
);
msg_Warn
(
p_input
,
"feeding synchro with a new reference point trying to recover from clock gap"
);
b_reset_reference
=
true
;
}
if
(
b_reset_reference
)
{
cl
->
delta_cr
=
0
;
cl
->
i_delta_cr_residue
=
0
;
/* Feed synchro with a new reference point. */
ClockNewRef
(
cl
,
i_ck_stream
,
ClockNewRef
(
cl
,
i_ck_stream
,
__MAX
(
cl
->
last_pts
+
CR_MEAN_PTS_GAP
,
i_ck_system
)
);
__MAX
(
cl
->
last_pts
+
CR_MEAN_PTS_GAP
,
i_ck_system
)
);
cl
->
i_synchro_state
=
SYNCHRO_OK
;
}
}
cl
->
last_cr
=
i_ck_stream
;
cl
->
last_cr
=
i_ck_stream
;
...
@@ -209,7 +203,7 @@ void input_ClockSetPCR( input_thread_t *p_input,
...
@@ -209,7 +203,7 @@ void input_ClockSetPCR( input_thread_t *p_input,
*****************************************************************************/
*****************************************************************************/
void
input_ClockResetPCR
(
input_clock_t
*
cl
)
void
input_ClockResetPCR
(
input_clock_t
*
cl
)
{
{
cl
->
i_synchro_state
=
SYNCHRO_REINIT
;
cl
->
b_has_reference
=
false
;
cl
->
last_pts
=
0
;
cl
->
last_pts
=
0
;
}
}
...
@@ -219,7 +213,7 @@ void input_ClockResetPCR( input_clock_t *cl )
...
@@ -219,7 +213,7 @@ void input_ClockResetPCR( input_clock_t *cl )
mtime_t
input_ClockGetTS
(
input_thread_t
*
p_input
,
mtime_t
input_ClockGetTS
(
input_thread_t
*
p_input
,
input_clock_t
*
cl
,
mtime_t
i_ts
)
input_clock_t
*
cl
,
mtime_t
i_ts
)
{
{
if
(
cl
->
i_synchro_state
!=
SYNCHRO_OK
)
if
(
!
cl
->
b_has_reference
)
return
0
;
return
0
;
cl
->
last_pts
=
ClockToSysdate
(
cl
,
i_ts
+
cl
->
delta_cr
);
cl
->
last_pts
=
ClockToSysdate
(
cl
,
i_ts
+
cl
->
delta_cr
);
...
@@ -232,7 +226,7 @@ mtime_t input_ClockGetTS( input_thread_t * p_input,
...
@@ -232,7 +226,7 @@ mtime_t input_ClockGetTS( input_thread_t * p_input,
void
input_ClockSetRate
(
input_clock_t
*
cl
,
int
i_rate
)
void
input_ClockSetRate
(
input_clock_t
*
cl
,
int
i_rate
)
{
{
/* Move the reference point */
/* Move the reference point */
if
(
cl
->
i_synchro_state
==
SYNCHRO_OK
)
if
(
cl
->
b_has_reference
)
ClockNewRef
(
cl
,
cl
->
last_cr
,
cl
->
last_sysdate
);
ClockNewRef
(
cl
,
cl
->
last_cr
,
cl
->
last_sysdate
);
cl
->
i_rate
=
i_rate
;
cl
->
i_rate
=
i_rate
;
...
@@ -244,7 +238,7 @@ void input_ClockSetRate( input_clock_t *cl, int i_rate )
...
@@ -244,7 +238,7 @@ void input_ClockSetRate( input_clock_t *cl, int i_rate )
mtime_t
input_ClockGetWakeup
(
input_thread_t
*
p_input
,
input_clock_t
*
cl
)
mtime_t
input_ClockGetWakeup
(
input_thread_t
*
p_input
,
input_clock_t
*
cl
)
{
{
/* Not synchronized, we cannot wait */
/* Not synchronized, we cannot wait */
if
(
cl
->
i_synchro_state
!=
SYNCHRO_OK
)
if
(
!
cl
->
b_has_reference
)
return
0
;
return
0
;
/* We must not wait if not pace controled, or we are not the
/* We must not wait if not pace controled, or we are not the
...
...
src/input/input_internal.h
View file @
1c34c14b
...
@@ -365,7 +365,7 @@ typedef struct
...
@@ -365,7 +365,7 @@ typedef struct
* discontinuities */
* discontinuities */
mtime_t
last_pts
;
mtime_t
last_pts
;
mtime_t
last_update
;
mtime_t
last_update
;
int
i_synchro_stat
e
;
bool
b_has_referenc
e
;
bool
b_master
;
bool
b_master
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment