Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
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-gpu
Commits
03b02bd6
Commit
03b02bd6
authored
Sep 24, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Privatized input_clock_t to clock.c
parent
476ce3ee
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
80 additions
and
42 deletions
+80
-42
src/input/clock.c
src/input/clock.c
+48
-3
src/input/es_out.c
src/input/es_out.c
+25
-17
src/input/input_internal.h
src/input/input_internal.h
+7
-22
No files found.
src/input/clock.c
View file @
03b02bd6
...
...
@@ -77,6 +77,30 @@
* my dice --Meuuh */
#define CR_MEAN_PTS_GAP 300000
/*****************************************************************************
* Structures
*****************************************************************************/
struct
input_clock_t
{
/* Synchronization information */
mtime_t
delta_cr
;
mtime_t
cr_ref
,
sysdate_ref
;
mtime_t
last_sysdate
;
mtime_t
last_cr
;
/* reference to detect unexpected stream
* discontinuities */
mtime_t
last_pts
;
mtime_t
last_update
;
bool
b_has_reference
;
bool
b_master
;
int
i_rate
;
/* Config */
int
i_cr_average
;
int
i_delta_cr_residue
;
};
/*****************************************************************************
* ClockToSysdate: converts a movie clock to system date
*****************************************************************************/
...
...
@@ -113,11 +137,14 @@ static void ClockNewRef( input_clock_t *cl,
}
/*****************************************************************************
* input_ClockInit: reinitializes the clock reference after a stream
* discontinuity
* input_ClockNew: create a new clock
*****************************************************************************/
void
input_ClockInit
(
input_clock_t
*
cl
,
bool
b_master
,
int
i_cr_average
,
int
i_rate
)
input_clock_t
*
input_ClockNew
(
bool
b_master
,
int
i_cr_average
,
int
i_rate
)
{
input_clock_t
*
cl
=
malloc
(
sizeof
(
*
cl
)
);
if
(
!
cl
)
return
NULL
;
cl
->
b_has_reference
=
false
;
cl
->
last_cr
=
0
;
...
...
@@ -132,6 +159,16 @@ void input_ClockInit( input_clock_t *cl, bool b_master, int i_cr_average, int i_
cl
->
i_cr_average
=
i_cr_average
;
cl
->
b_master
=
b_master
;
return
cl
;
}
/*****************************************************************************
* input_ClockDelete: destroy a new clock
*****************************************************************************/
void
input_ClockDelete
(
input_clock_t
*
cl
)
{
free
(
cl
);
}
/*****************************************************************************
...
...
@@ -232,6 +269,14 @@ void input_ClockSetRate( input_clock_t *cl, int i_rate )
cl
->
i_rate
=
i_rate
;
}
/*****************************************************************************
* input_ClockSetMaster:
*****************************************************************************/
void
input_ClockSetMaster
(
input_clock_t
*
cl
,
bool
b_master
)
{
cl
->
b_master
=
b_master
;
}
/*****************************************************************************
* input_ClockGetWakeup
*****************************************************************************/
...
...
src/input/es_out.c
View file @
03b02bd6
...
...
@@ -60,7 +60,7 @@ typedef struct
bool
b_selected
;
/* Clock for this program */
input_clock_t
clock
;
input_clock_t
*
p_
clock
;
char
*
psz_name
;
char
*
psz_now_playing
;
...
...
@@ -317,6 +317,7 @@ void input_EsOutDelete( es_out_t *out )
for
(
i
=
0
;
i
<
p_sys
->
i_pgrm
;
i
++
)
{
es_out_pgrm_t
*
p_pgrm
=
p_sys
->
pgrm
[
i
];
input_ClockDelete
(
p_pgrm
->
p_clock
);
free
(
p_pgrm
->
psz_now_playing
);
free
(
p_pgrm
->
psz_publisher
);
free
(
p_pgrm
->
psz_name
);
...
...
@@ -354,7 +355,7 @@ mtime_t input_EsOutGetWakeup( es_out_t *out )
if
(
!
p_sys
->
p_pgrm
)
return
0
;
return
input_ClockGetWakeup
(
p_sys
->
p_input
,
&
p_sys
->
p_pgrm
->
clock
);
return
input_ClockGetWakeup
(
p_sys
->
p_input
,
p_sys
->
p_pgrm
->
p_
clock
);
}
static
void
EsOutDiscontinuity
(
es_out_t
*
out
,
bool
b_flush
,
bool
b_audio
)
...
...
@@ -385,7 +386,7 @@ void input_EsOutChangeRate( es_out_t *out, int i_rate )
EsOutDiscontinuity
(
out
,
false
,
false
);
for
(
i
=
0
;
i
<
p_sys
->
i_pgrm
;
i
++
)
input_ClockSetRate
(
&
p_sys
->
pgrm
[
i
]
->
clock
,
i_rate
);
input_ClockSetRate
(
p_sys
->
pgrm
[
i
]
->
p_
clock
,
i_rate
);
}
int
input_EsOutSetRecord
(
es_out_t
*
out
,
bool
b_record
)
...
...
@@ -638,11 +639,9 @@ static void EsOutProgramSelect( es_out_t *out, es_out_pgrm_t *p_pgrm )
p_pgrm
->
b_selected
=
true
;
/* Switch master stream */
if
(
p_sys
->
p_pgrm
&&
p_sys
->
p_pgrm
->
clock
.
b_master
)
{
p_sys
->
p_pgrm
->
clock
.
b_master
=
false
;
}
p_pgrm
->
clock
.
b_master
=
true
;
if
(
p_sys
->
p_pgrm
)
input_ClockSetMaster
(
p_sys
->
p_pgrm
->
p_clock
,
false
);
input_ClockSetMaster
(
p_pgrm
->
p_clock
,
true
);
p_sys
->
p_pgrm
=
p_pgrm
;
/* Update "program" */
...
...
@@ -680,7 +679,8 @@ static es_out_pgrm_t *EsOutProgramAdd( es_out_t *out, int i_group )
vlc_value_t
val
;
es_out_pgrm_t
*
p_pgrm
=
malloc
(
sizeof
(
es_out_pgrm_t
)
);
if
(
!
p_pgrm
)
return
NULL
;
if
(
!
p_pgrm
)
return
NULL
;
/* Init */
p_pgrm
->
i_id
=
i_group
;
...
...
@@ -690,7 +690,12 @@ static es_out_pgrm_t *EsOutProgramAdd( es_out_t *out, int i_group )
p_pgrm
->
psz_now_playing
=
NULL
;
p_pgrm
->
psz_publisher
=
NULL
;
p_pgrm
->
p_epg
=
NULL
;
input_ClockInit
(
&
p_pgrm
->
clock
,
false
,
p_input
->
p
->
input
.
i_cr_average
,
p_sys
->
i_rate
);
p_pgrm
->
p_clock
=
input_ClockNew
(
false
,
p_input
->
p
->
input
.
i_cr_average
,
p_sys
->
i_rate
);
if
(
!
p_pgrm
->
p_clock
)
{
free
(
p_pgrm
);
return
NULL
;
}
/* Append it */
TAB_APPEND
(
p_sys
->
i_pgrm
,
p_sys
->
pgrm
,
p_pgrm
);
...
...
@@ -743,7 +748,10 @@ static int EsOutProgramDel( es_out_t *out, int i_group )
TAB_REMOVE
(
p_sys
->
i_pgrm
,
p_sys
->
pgrm
,
p_pgrm
);
/* If program is selected we need to unselect it */
if
(
p_sys
->
p_pgrm
==
p_pgrm
)
p_sys
->
p_pgrm
=
NULL
;
if
(
p_sys
->
p_pgrm
==
p_pgrm
)
p_sys
->
p_pgrm
=
NULL
;
input_ClockDelete
(
p_pgrm
->
p_clock
);
free
(
p_pgrm
->
psz_name
);
free
(
p_pgrm
->
psz_now_playing
);
...
...
@@ -1153,7 +1161,7 @@ static void EsCreateDecoder( es_out_t *out, es_out_id_t *p_es )
}
static
void
EsDestroyDecoder
(
es_out_t
*
out
,
es_out_id_t
*
p_es
)
{
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
VLC_UNUSED
(
out
)
;
if
(
!
p_es
->
p_dec
)
return
;
...
...
@@ -1538,7 +1546,7 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
else
if
(
p_block
->
i_dts
>
0
)
{
p_block
->
i_dts
=
input_ClockGetTS
(
p_input
,
&
p_pgrm
->
clock
,
p_block
->
i_dts
)
+
i_delay
;
input_ClockGetTS
(
p_input
,
p_pgrm
->
p_
clock
,
p_block
->
i_dts
)
+
i_delay
;
}
if
(
p_block
->
i_pts
>
0
&&
(
p_block
->
i_flags
&
BLOCK_FLAG_PREROLL
)
)
{
...
...
@@ -1547,7 +1555,7 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
else
if
(
p_block
->
i_pts
>
0
)
{
p_block
->
i_pts
=
input_ClockGetTS
(
p_input
,
&
p_pgrm
->
clock
,
p_block
->
i_pts
)
+
i_delay
;
input_ClockGetTS
(
p_input
,
p_pgrm
->
p_
clock
,
p_block
->
i_pts
)
+
i_delay
;
}
if
(
p_block
->
i_rate
==
INPUT_RATE_DEFAULT
&&
es
->
fmt
.
i_codec
==
VLC_FOURCC
(
't'
,
'e'
,
'l'
,
'x'
)
)
...
...
@@ -1902,13 +1910,13 @@ static int EsOutControl( es_out_t *out, int i_query, va_list args )
i_pcr
=
(
int64_t
)
va_arg
(
args
,
int64_t
);
/* search program
* TODO do not use mdate() but proper stream acquisition date */
input_ClockSetPCR
(
p_sys
->
p_input
,
&
p_pgrm
->
clock
,
i_pcr
,
mdate
()
);
input_ClockSetPCR
(
p_sys
->
p_input
,
p_pgrm
->
p_
clock
,
i_pcr
,
mdate
()
);
return
VLC_SUCCESS
;
}
case
ES_OUT_RESET_PCR
:
for
(
i
=
0
;
i
<
p_sys
->
i_pgrm
;
i
++
)
input_ClockResetPCR
(
&
p_sys
->
pgrm
[
i
]
->
clock
);
input_ClockResetPCR
(
p_sys
->
pgrm
[
i
]
->
p_
clock
);
return
VLC_SUCCESS
;
case
ES_OUT_GET_TS
:
...
...
@@ -1917,7 +1925,7 @@ static int EsOutControl( es_out_t *out, int i_query, va_list args )
int64_t
i_ts
=
(
int64_t
)
va_arg
(
args
,
int64_t
);
int64_t
*
pi_ts
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_ts
=
input_ClockGetTS
(
p_sys
->
p_input
,
&
p_sys
->
p_pgrm
->
clock
,
i_ts
);
p_sys
->
p_pgrm
->
p_
clock
,
i_ts
);
return
VLC_SUCCESS
;
}
return
VLC_EGENERIC
;
...
...
src/input/input_internal.h
View file @
03b02bd6
...
...
@@ -355,32 +355,17 @@ void input_EsOutChangeState( es_out_t * );
void
input_EsOutChangePosition
(
es_out_t
*
);
bool
input_EsOutDecodersEmpty
(
es_out_t
*
);
typedef
struct
{
/* Synchronization information */
mtime_t
delta_cr
;
mtime_t
cr_ref
,
sysdate_ref
;
mtime_t
last_sysdate
;
mtime_t
last_cr
;
/* reference to detect unexpected stream
* discontinuities */
mtime_t
last_pts
;
mtime_t
last_update
;
bool
b_has_reference
;
bool
b_master
;
int
i_rate
;
/* Config */
int
i_cr_average
;
int
i_delta_cr_residue
;
}
input_clock_t
;
void
input_ClockInit
(
input_clock_t
*
,
bool
b_master
,
int
i_cr_average
,
int
i_rate
);
/* clock.c */
typedef
struct
input_clock_t
input_clock_t
;
input_clock_t
*
input_ClockNew
(
bool
b_master
,
int
i_cr_average
,
int
i_rate
);
void
input_ClockDelete
(
input_clock_t
*
);
void
input_ClockSetPCR
(
input_thread_t
*
,
input_clock_t
*
,
mtime_t
i_clock
,
mtime_t
i_system
);
void
input_ClockResetPCR
(
input_clock_t
*
);
mtime_t
input_ClockGetTS
(
input_thread_t
*
,
input_clock_t
*
,
mtime_t
);
void
input_ClockSetRate
(
input_clock_t
*
cl
,
int
i_rate
);
void
input_ClockSetMaster
(
input_clock_t
*
cl
,
bool
b_master
);
mtime_t
input_ClockGetWakeup
(
input_thread_t
*
,
input_clock_t
*
cl
);
/* Subtitles */
...
...
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