Skip to content
GitLab
Explore
Sign in
Register
Commits on Source (2)
Print bitrate status for each service
· e761bab7
Clément Vasseur
authored
Jul 16, 2019
e761bab7
Merge branch 'nto-bitrate-status'
· 619e3e93
Christophe Massiot
authored
Jul 21, 2019
619e3e93
Hide whitespace changes
Inline
Side-by-side
NEWS
View file @
619e3e93
Changes between 3.4 and 3.5:
----------------------------
* Print bitrate status for each service
Changes between 3.3 and 3.4:
----------------------------
* Fix segfault with dvblastctl when getting large tables
...
...
demux.c
View file @
619e3e93
...
...
@@ -80,6 +80,9 @@ typedef struct ts_pid_t
int
i_pes_status
;
/* pes + unscrambled */
struct
ev_timer
timeout_watcher
;
/* last service selecting this pid, only used for statistics */
uint16_t
i_sid
;
}
ts_pid_t
;
struct
eit_sections
{
...
...
@@ -95,6 +98,7 @@ typedef struct sid_t
uint16_t
i_sid
,
i_pmt_pid
;
uint8_t
*
p_current_pmt
;
struct
eit_sections
eit_table
[
MAX_EIT_TABLES
];
unsigned
long
i_packets_passed
;
}
sid_t
;
mtime_t
i_wallclock
=
0
;
...
...
@@ -269,12 +273,13 @@ static inline sid_t *FindSID( uint16_t i_sid )
*****************************************************************************/
static
void
PrintCb
(
struct
ev_loop
*
loop
,
struct
ev_timer
*
w
,
int
revents
)
{
int
i
;
uint64_t
i_bitrate
=
i_nb_packets
*
TS_SIZE
*
8
*
1000000
/
i_print_period
;
switch
(
i_print_type
)
{
case
PRINT_XML
:
fprintf
(
print_fh
,
"<STATUS type=
\"
bitrate
\"
status=
\"
%d
\"
value=
\"
%"
PRIu64
"
\"
/>
\n
"
,
"<STATUS type=
\"
bitrate
\"
status=
\"
%d
\"
value=
\"
%"
PRIu64
"
\"
>
"
,
i_bitrate
?
1
:
0
,
i_bitrate
);
break
;
case
PRINT_TEXT
:
...
...
@@ -285,6 +290,36 @@ static void PrintCb( struct ev_loop *loop, struct ev_timer *w, int revents )
}
i_nb_packets
=
0
;
for
(
i
=
0
;
i
<
i_nb_sids
;
i
++
)
{
sid_t
*
p_sid
=
pp_sids
[
i
];
uint64_t
i_bitrate
=
p_sid
->
i_packets_passed
*
TS_SIZE
*
8
*
1000000
/
i_print_period
;
switch
(
i_print_type
)
{
case
PRINT_XML
:
fprintf
(
print_fh
,
"<PROGRAM number=
\"
%u
\"
bitrate=
\"
%"
PRIu64
"
\"
/>"
,
p_sid
->
i_sid
,
i_bitrate
);
break
;
case
PRINT_TEXT
:
fprintf
(
print_fh
,
" - program number %u bitrate: %"
PRIu64
"
\n
"
,
p_sid
->
i_sid
,
i_bitrate
);
break
;
default:
break
;
}
p_sid
->
i_packets_passed
=
0
;
}
switch
(
i_print_type
)
{
case
PRINT_XML
:
fprintf
(
print_fh
,
"</STATUS>
\n
"
);
break
;
default:
break
;
}
if
(
i_nb_invalids
)
{
switch
(
i_print_type
)
...
...
@@ -544,6 +579,13 @@ static void demux_Handle( block_t *p_ts )
if
(
p_pid
->
info
.
i_first_packet_ts
==
0
)
p_pid
->
info
.
i_first_packet_ts
=
i_wallclock
;
if
(
i_print_period
&&
p_pid
->
i_sid
>
0
)
{
sid_t
*
p_sid
=
FindSID
(
p_pid
->
i_sid
);
if
(
p_sid
!=
NULL
)
p_sid
->
i_packets_passed
++
;
}
if
(
i_pid
!=
PADDING_PID
&&
p_pid
->
i_last_cc
!=
-
1
&&
!
ts_check_duplicate
(
i_cc
,
p_pid
->
i_last_cc
)
&&
ts_check_discontinuity
(
i_cc
,
p_pid
->
i_last_cc
)
)
...
...
@@ -1079,6 +1121,8 @@ static void SelectPID( uint16_t i_sid, uint16_t i_pid, bool b_pcr )
{
int
i
;
p_pids
[
i_pid
].
i_sid
=
i_sid
;
for
(
i
=
0
;
i
<
i_nb_outputs
;
i
++
)
{
if
(
(
pp_outputs
[
i
]
->
config
.
i_config
&
OUTPUT_VALID
)
...
...
@@ -1102,6 +1146,8 @@ static void UnselectPID( uint16_t i_sid, uint16_t i_pid )
{
int
i
;
p_pids
[
i_pid
].
i_sid
=
0
;
for
(
i
=
0
;
i
<
i_nb_outputs
;
i
++
)
if
(
(
pp_outputs
[
i
]
->
config
.
i_config
&
OUTPUT_VALID
)
&&
pp_outputs
[
i
]
->
config
.
i_sid
==
i_sid
...
...
@@ -1118,6 +1164,7 @@ static void SelectPMT( uint16_t i_sid, uint16_t i_pid )
p_pids
[
i_pid
].
i_psi_refcount
++
;
p_pids
[
i_pid
].
b_pes
=
false
;
p_pids
[
i_pid
].
i_sid
=
i_sid
;
if
(
b_select_pmts
)
SetPID
(
i_pid
);
...
...
@@ -1131,6 +1178,8 @@ static void UnselectPMT( uint16_t i_sid, uint16_t i_pid )
{
int
i
;
p_pids
[
i_pid
].
i_sid
=
0
;
p_pids
[
i_pid
].
i_psi_refcount
--
;
if
(
!
p_pids
[
i_pid
].
i_psi_refcount
)
psi_assemble_reset
(
&
p_pids
[
i_pid
].
p_psi_buffer
,
...
...