Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
bouquets: scan + bat tables - fix the scan end condition for bouquets
  • Loading branch information
perexg committed Nov 8, 2014
1 parent 851982f commit f60ecec
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 22 deletions.
22 changes: 13 additions & 9 deletions src/input/mpegts.h
Expand Up @@ -110,6 +110,7 @@ typedef struct mpegts_table_state
uint64_t extraid;
int version;
int complete;
int working;
uint32_t sections[8];
RB_ENTRY(mpegts_table_state) link;
} mpegts_table_state_t;
Expand Down Expand Up @@ -142,15 +143,16 @@ struct mpegts_table
*/
int mt_flags;

#define MT_CRC 0x0001
#define MT_FULL 0x0002
#define MT_QUICKREQ 0x0004
#define MT_RECORD 0x0008
#define MT_SKIPSUBS 0x0010
#define MT_SCANSUBS 0x0020
#define MT_FAST 0x0040
#define MT_SLOW 0x0080
#define MT_DEFER 0x0100
#define MT_CRC 0x0001
#define MT_FULL 0x0002
#define MT_QUICKREQ 0x0004
#define MT_FASTSWITCH 0x0008
#define MT_RECORD 0x0010
#define MT_SKIPSUBS 0x0020
#define MT_SCANSUBS 0x0040
#define MT_FAST 0x0080
#define MT_SLOW 0x0100
#define MT_DEFER 0x0200

/**
* Cycle queue
Expand Down Expand Up @@ -184,6 +186,8 @@ struct mpegts_table
#define MT_DEFER_OPEN_PID 1
#define MT_DEFER_CLOSE_PID 2

int mt_working;

int mt_count;

int mt_pid;
Expand Down
23 changes: 20 additions & 3 deletions src/input/mpegts/dvb_psi.c
Expand Up @@ -1165,8 +1165,11 @@ dvb_nit_callback
if (r == 0) {
if (tableid == 0x4A) {
if ((b = mt->mt_bat) != NULL) {
if (!b->complete)
if (!b->complete) {
dvb_bat_completed(b, mt->mt_name, tableid, mm->mm_tsid, nbid, mm);
mt->mt_working -= st->working;
st->working = 0;
}
if (b->complete)
dvb_bat_destroy_lists(mt);
}
Expand Down Expand Up @@ -1205,6 +1208,11 @@ dvb_nit_callback
TAILQ_INIT(&bi->services);
LIST_INSERT_HEAD(&b->bats, bi, link);
}
if (!st->working) {
st->working = 1;
mt->mt_working++;
mt->mt_flags |= MT_FASTSWITCH;
}
}

/* Network Descriptors */
Expand Down Expand Up @@ -1639,7 +1647,11 @@ dvb_fs_sdt_callback
if (tableid != 0xBD)
return -1;
r = dvb_table_begin(mt, ptr, len, tableid, nbid, 7, &st, &sect, &last, &ver);
if (r == 0) bouquet_completed(bq);
if (r == 0) {
mt->mt_working -= st->working;
st->working = 0;
bouquet_completed(bq);
}
if (r != 1) return r;
if (len < 5) return -1;
ptr += 5;
Expand Down Expand Up @@ -1751,14 +1763,19 @@ dvb_fs_sdt_callback
idnode_changed(&s->s_id);
service_refresh_channel((service_t*)s);
}

if (!st->working) {
st->working = 1;
mt->mt_working++;
mt->mt_flags |= MT_FASTSWITCH;
}
}

if (bq && bq->bq_saveflag)
bouquet_save(bq, 1);

/* End */
return dvb_table_end(mt, st, sect);

}
#endif

Expand Down
16 changes: 9 additions & 7 deletions src/input/mpegts/mpegts_mux.c
Expand Up @@ -866,7 +866,7 @@ mpegts_mux_scan_done ( mpegts_mux_t *mm, const char *buf, int res )
static void
mpegts_mux_scan_timeout ( void *aux )
{
int c, q;
int c, q, w;
char buf[256];
mpegts_mux_t *mm = aux;
mpegts_table_t *mt;
Expand All @@ -884,17 +884,19 @@ mpegts_mux_scan_timeout ( void *aux )
again:
pthread_mutex_lock(&mm->mm_tables_lock);
mpegts_table_consistency_check(mm);
c = q = 0;
c = q = w = 0;
LIST_FOREACH(mt, &mm->mm_tables, mt_link) {
if (!(mt->mt_flags & MT_QUICKREQ)) continue;
if (!(mt->mt_flags & MT_QUICKREQ) && !mt->mt_working) continue;
if (!mt->mt_count) {
mpegts_table_grab(mt);
pthread_mutex_unlock(&mm->mm_tables_lock);
mpegts_table_destroy(mt);
mpegts_table_release(mt);
goto again;
} else if (!mt->mt_complete) {
} else if (!mt->mt_complete || mt->mt_working) {
q++;
if (mt->mt_working)
w++;
} else {
c++;
}
Expand All @@ -906,10 +908,10 @@ mpegts_mux_scan_timeout ( void *aux )
tvhinfo("mpegts", "%s - scan no data, failed", buf);
mpegts_mux_scan_done(mm, buf, 0);

/* Pending tables (another 20s - bit arbitrary) */
/* Pending tables (another 20s or 30s - bit arbitrary) */
} else if (q) {
tvhinfo("mepgts", "%s - scan needs more time", buf);
gtimer_arm(&mm->mm_scan_timeout, mpegts_mux_scan_timeout, mm, 20);
tvhinfo("mpegts", "%s - scan needs more time", buf);
gtimer_arm(&mm->mm_scan_timeout, mpegts_mux_scan_timeout, mm, w ? 30 : 20);
return;

/* Complete */
Expand Down
7 changes: 4 additions & 3 deletions src/input/mpegts/mpegts_table.c
Expand Up @@ -52,8 +52,9 @@ mpegts_table_fastswitch ( mpegts_mux_t *mm )

pthread_mutex_lock(&mm->mm_tables_lock);
LIST_FOREACH(mt, &mm->mm_tables, mt_link) {
if (!(mt->mt_flags & MT_QUICKREQ)) continue;
if(!mt->mt_complete) {
if (!(mt->mt_flags & MT_QUICKREQ) && !mt->mt_working)
continue;
if(!mt->mt_complete || mt->mt_working) {
pthread_mutex_unlock(&mm->mm_tables_lock);
return;
}
Expand Down Expand Up @@ -126,7 +127,7 @@ mpegts_table_dispatch
if(ret >= 0)
mt->mt_count++;

if(!ret && mt->mt_flags & MT_QUICKREQ)
if(!ret && mt->mt_flags & (MT_QUICKREQ|MT_FASTSWITCH))
mpegts_table_fastswitch(mt->mt_mux);
}

Expand Down

0 comments on commit f60ecec

Please sign in to comment.