Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mpegts: tables - add mux name to log msgs
  • Loading branch information
perexg committed May 22, 2015
1 parent 57ea801 commit 41bb51a
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 24 deletions.
7 changes: 4 additions & 3 deletions src/input/mpegts/dvb.h
Expand Up @@ -271,7 +271,7 @@ typedef struct mpegts_psi_table
* Assemble SI section
*/
void mpegts_psi_section_reassemble
( mpegts_psi_table_t *mt, const uint8_t *tsb, int crc,
( mpegts_psi_table_t *mt, const char *logpref, const uint8_t *tsb, int crc,
mpegts_psi_section_callback_t cb, void *opaque );

/* PSI table parser helpers */
Expand All @@ -296,8 +296,9 @@ void dvb_table_parse_init
void dvb_table_parse_done ( mpegts_psi_table_t *mt);

void dvb_table_parse
(mpegts_psi_table_t *mt, const uint8_t *tsb, int len,
int crc, int full, mpegts_psi_parse_callback_t cb);
(mpegts_psi_table_t *mt, const char *logprefix,
const uint8_t *tsb, int len, int crc, int full,
mpegts_psi_parse_callback_t cb);

int dvb_table_append_crc32(uint8_t *dst, int off, int maxlen);

Expand Down
27 changes: 16 additions & 11 deletions src/input/mpegts/dvb_psi_lib.c
Expand Up @@ -63,7 +63,8 @@ dvb_servicetype_lookup ( int t )
*/
static int
mpegts_psi_section_reassemble0
( mpegts_psi_table_t *mt, const uint8_t *data,
( mpegts_psi_table_t *mt, const char *logpref,
const uint8_t *data,
int len, int start, int crc,
mpegts_psi_section_callback_t cb, void *opaque)
{
Expand Down Expand Up @@ -99,9 +100,10 @@ mpegts_psi_section_reassemble0
}

if(crc && tvh_crc32(p, tsize, 0xffffffff)) {
if (tvhlog_limit(&mt->mt_err_log, 10))
tvhwarn(mt->mt_name, "invalid checksum (len %i, errors %zi)",
tsize, mt->mt_err_log.count);
if (tvhlog_limit(&mt->mt_err_log, 10)) {
tvhwarn(mt->mt_name, "%s: invalid checksum (len %i, errors %zi)",
logpref, tsize, mt->mt_err_log.count);
}
return -1;
}

Expand All @@ -119,7 +121,8 @@ mpegts_psi_section_reassemble0
*/
void
mpegts_psi_section_reassemble
(mpegts_psi_table_t *mt, const uint8_t *tsb, int crc,
(mpegts_psi_table_t *mt, const char *logprefix,
const uint8_t *tsb, int crc,
mpegts_psi_section_callback_t cb, void *opaque)
{
int pusi = tsb[1] & 0x40;
Expand All @@ -130,7 +133,8 @@ mpegts_psi_section_reassemble
if (cc & 0x10) {
if (mt->mt_sect.ps_cc != -1 && mt->mt_sect.ps_cc != (cc & 0x0f)) {
uint16_t pid = ((tsb[1] & 0x1f) << 8) | tsb[2];
tvhdebug(mt->mt_name, "PID %04X CC error %d != %d", pid, cc & 0x0f, mt->mt_sect.ps_cc);
tvhdebug(mt->mt_name, "%s: PID %04X CC error %d != %d",
logprefix, pid, cc & 0x0f, mt->mt_sect.ps_cc);
mt->mt_sect.ps_lock = 0;
}
mt->mt_sect.ps_cc = (cc + 1) & 0x0f;
Expand All @@ -148,13 +152,13 @@ mpegts_psi_section_reassemble
mt->mt_sect.ps_lock = 0;
return;
}
mpegts_psi_section_reassemble0(mt, tsb + off, len, 0, crc, cb, opaque);
mpegts_psi_section_reassemble0(mt, logprefix, tsb + off, len, 0, crc, cb, opaque);
off += len;
}
}

while(off < 188) {
r = mpegts_psi_section_reassemble0(mt, tsb + off, 188 - off, pusi, crc,
r = mpegts_psi_section_reassemble0(mt, logprefix, tsb + off, 188 - off, pusi, crc,
cb, opaque);
if(r < 0) {
mt->mt_sect.ps_lock = 0;
Expand Down Expand Up @@ -405,8 +409,9 @@ dvb_table_parse_cb( const uint8_t *sec, size_t len, void *opaque )
}

void dvb_table_parse
(mpegts_psi_table_t *mt, const uint8_t *tsb, int len,
int crc, int full, mpegts_psi_parse_callback_t cb)
(mpegts_psi_table_t *mt, const char *logprefix,
const uint8_t *tsb, int len,
int crc, int full, mpegts_psi_parse_callback_t cb)
{
const uint8_t *end;
struct psi_parse parse;
Expand All @@ -416,7 +421,7 @@ void dvb_table_parse
parse.full = full ? 3 : 0;

for (end = tsb + len; tsb < end; tsb += 188)
mpegts_psi_section_reassemble(mt, tsb, crc,
mpegts_psi_section_reassemble(mt, logprefix, tsb, crc,
dvb_table_parse_cb, &parse);
}

Expand Down
25 changes: 18 additions & 7 deletions src/input/mpegts/mpegts_input.c
Expand Up @@ -940,7 +940,8 @@ mpegts_input_recv_packets
}

static void
mpegts_input_table_dispatch ( mpegts_mux_t *mm, const uint8_t *tsb, int tsb_len )
mpegts_input_table_dispatch
( mpegts_mux_t *mm, const char *logprefix, const uint8_t *tsb, int tsb_len )
{
int i, len = 0, c = 0;
const uint8_t *tsb2, *tsb2_end;
Expand Down Expand Up @@ -970,8 +971,8 @@ mpegts_input_table_dispatch ( mpegts_mux_t *mm, const uint8_t *tsb, int tsb_len
mt = vec[i];
if (!mt->mt_destroyed && mt->mt_pid == pid)
for (tsb2 = tsb, tsb2_end = tsb + tsb_len; tsb2 < tsb2_end; tsb2 += 188)
mpegts_psi_section_reassemble((mpegts_psi_table_t *)mt, tsb2,
mt->mt_flags & MT_CRC,
mpegts_psi_section_reassemble((mpegts_psi_table_t *)mt, logprefix,
tsb2, mt->mt_flags & MT_CRC,
mpegts_table_dispatch, mt);
mpegts_table_release(mt);
}
Expand Down Expand Up @@ -1067,10 +1068,13 @@ mpegts_input_process
#if ENABLE_TSDEBUG
off_t tsdebug_pos;
#endif
char muxname[256];

if (mm == NULL || (mmi = mm->mm_active) == NULL)
return 0;

mpegts_mux_nice_name(mm, muxname, sizeof(muxname));

assert(mm == mmi->mmi_mux);

#if ENABLE_TSDEBUG
Expand Down Expand Up @@ -1119,7 +1123,7 @@ mpegts_input_process
tsb2 < tsb2_end; tsb2 += 188) {
cc = tsb2[3] & 0x0f;
if (cc2 != 0xff && cc2 != cc) {
tvhtrace("mpegts", "pid %04X cc err %2d != %2d", pid, cc, cc2);
tvhtrace("mpegts", "%s: pid %04X cc err %2d != %2d", muxname, pid, cc, cc2);
++mmi->tii_stats.cc;
}
cc2 = (cc + 1) & 0xF;
Expand Down Expand Up @@ -1163,7 +1167,7 @@ mpegts_input_process
if (type & (MPS_TABLE | MPS_FTABLE)) {
if (!(tsb[1] & 0x80)) {
if (type & MPS_FTABLE)
mpegts_input_table_dispatch(mm, tsb, llen);
mpegts_input_table_dispatch(mm, muxname, tsb, llen);
if (type & MPS_TABLE) {
mpegts_table_feed_t *mtf = malloc(sizeof(mpegts_table_feed_t)+llen);
mtf->mtf_len = llen;
Expand Down Expand Up @@ -1309,6 +1313,8 @@ mpegts_input_table_thread ( void *aux )
{
mpegts_table_feed_t *mtf;
mpegts_input_t *mi = aux;
mpegts_mux_t *mm = NULL;
char muxname[256];

pthread_mutex_lock(&mi->mi_output_lock);
while (mi->mi_running) {
Expand All @@ -1323,8 +1329,13 @@ mpegts_input_table_thread ( void *aux )

/* Process */
pthread_mutex_lock(&global_lock);
if (mtf->mtf_mux && mtf->mtf_mux->mm_active)
mpegts_input_table_dispatch(mtf->mtf_mux, mtf->mtf_tsb, mtf->mtf_len);
if (mm != mtf->mtf_mux) {
mm = mtf->mtf_mux;
if (mm)
mpegts_mux_nice_name(mm, muxname, sizeof(muxname));
}
if (mm && mm->mm_active)
mpegts_input_table_dispatch(mm, muxname, mtf->mtf_tsb, mtf->mtf_len);
pthread_mutex_unlock(&global_lock);

/* Cleanup */
Expand Down
6 changes: 3 additions & 3 deletions src/muxer/muxer_pass.c
Expand Up @@ -525,17 +525,17 @@ pass_muxer_write_ts(muxer_t *m, pktbuf_t *pb)
/* PAT */
if (pid == DVB_PAT_PID) {

dvb_table_parse(&pm->pm_pat, tsb, l, 1, 0, pass_muxer_pat_cb);
dvb_table_parse(&pm->pm_pat, "-", tsb, l, 1, 0, pass_muxer_pat_cb);

/* SDT */
} else if (pid == DVB_SDT_PID) {

dvb_table_parse(&pm->pm_sdt, tsb, l, 1, 0, pass_muxer_sdt_cb);
dvb_table_parse(&pm->pm_sdt, "-", tsb, l, 1, 0, pass_muxer_sdt_cb);

/* EIT */
} else if (pid == DVB_EIT_PID) {

dvb_table_parse(&pm->pm_eit, tsb, l, 1, 0, pass_muxer_eit_cb);
dvb_table_parse(&pm->pm_eit, "-", tsb, l, 1, 0, pass_muxer_eit_cb);

/* PMT */
} else {
Expand Down

0 comments on commit 41bb51a

Please sign in to comment.