From 7f03d0350b50f7582b8c1ece4317faeb44f4064c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 6 Mar 2014 12:42:06 +0100 Subject: [PATCH] Changed the PID lookup and other optimizations Followed the Adam's advice to remove _fast functions. --- src/input/mpegts.h | 6 +++--- src/input/mpegts/dvb_psi.c | 6 +++--- src/input/mpegts/mpegts_input.c | 2 +- src/input/mpegts/mpegts_mux.c | 2 +- src/input/mpegts/tsdemux.c | 16 ++++++++-------- src/service.c | 4 ++-- src/service.h | 12 ++++++------ 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 4a43f141..9b59b7b5 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -603,16 +603,16 @@ void mpegts_mux_remove_subscriber(mpegts_mux_t *mm, th_subscription_t *s, int re int mpegts_mux_subscribe(mpegts_mux_t *mm, const char *name, int weight); void mpegts_mux_unsubscribe_by_name(mpegts_mux_t *mm, const char *name); -#define mpegts_mux_find_pid_fast(mm, pid, create) ({ \ +#define mpegts_mux_find_pid(mm, pid, create) ({ \ mpegts_pid_t *__mp; \ if ((mm)->mm_last_pid != (pid)) \ - __mp = mpegts_mux_find_pid(mm, pid, create); \ + __mp = mpegts_mux_find_pid_(mm, pid, create); \ else \ __mp = (mm)->mm_last_mp; \ __mp; \ }) -mpegts_pid_t *mpegts_mux_find_pid(mpegts_mux_t *mm, int pid, int create); +mpegts_pid_t *mpegts_mux_find_pid_(mpegts_mux_t *mm, int pid, int create); size_t mpegts_input_recv_packets (mpegts_input_t *mi, mpegts_mux_instance_t *mmi, uint8_t *tsb, size_t len, diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 4b700edb..866c264f 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -1176,7 +1176,7 @@ psi_desc_add_ca tvhdebug("pmt", " caid %04X (%s) provider %08X pid %04X", caid, descrambler_caid2name(caid), provid, pid); - if((st = service_stream_find_fast((service_t*)t, pid)) == NULL) { + if((st = service_stream_find((service_t*)t, pid)) == NULL) { st = service_stream_create((service_t*)t, pid, SCT_CA); r |= PMT_UPDATE_NEW_CA_STREAM; } @@ -1282,7 +1282,7 @@ psi_desc_teletext(mpegts_service_t *t, const uint8_t *ptr, int size, // higher than normal MPEG TS (0x2000 ++) int pid = DVB_TELETEXT_BASE + page; - if((st = service_stream_find_fast((service_t*)t, pid)) == NULL) { + if((st = service_stream_find((service_t*)t, pid)) == NULL) { r |= PMT_UPDATE_NEW_STREAM; st = service_stream_create((service_t*)t, pid, SCT_TEXTSUB); st->es_delete_me = 1; @@ -1492,7 +1492,7 @@ psi_parse_pmt if(hts_stream_type != SCT_UNKNOWN) { - if((st = service_stream_find_fast((service_t*)t, pid)) == NULL) { + if((st = service_stream_find((service_t*)t, pid)) == NULL) { update |= PMT_UPDATE_NEW_STREAM; st = service_stream_create((service_t*)t, pid, hts_stream_type); } diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 0758406c..9c1227f2 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -373,7 +373,7 @@ mpegts_input_recv_packets name, pid, pid, mmi); /* Find PID */ - if ((mp = mpegts_mux_find_pid_fast(mm, pid, 0))) { + if ((mp = mpegts_mux_find_pid(mm, pid, 0))) { int stream = 0; int table = 0; diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index a5f5be6a..b2c02591 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -901,7 +901,7 @@ static int mp_cmp ( mpegts_pid_t *a, mpegts_pid_t *b ) }; mpegts_pid_t * -mpegts_mux_find_pid ( mpegts_mux_t *mm, int pid, int create ) +mpegts_mux_find_pid_ ( mpegts_mux_t *mm, int pid, int create ) { mpegts_pid_t *mp; diff --git a/src/input/mpegts/tsdemux.c b/src/input/mpegts/tsdemux.c index 7c13a5a1..7cb078d1 100644 --- a/src/input/mpegts/tsdemux.c +++ b/src/input/mpegts/tsdemux.c @@ -68,7 +68,7 @@ ts_recv_packet0 { int off, pusi, cc, error; - service_set_streaming_status_flags_fast((service_t*)t, TSS_MUX_PACKETS); + service_set_streaming_status_flags((service_t*)t, TSS_MUX_PACKETS); if(streaming_pad_probe_type(&t->s_streaming_pad, SMT_MPEGTS)) ts_remux(t, tsb); @@ -206,7 +206,7 @@ ts_recv_packet1 pthread_mutex_lock(&t->s_stream_mutex); - service_set_streaming_status_flags_fast((service_t*)t, TSS_INPUT_HARDWARE); + service_set_streaming_status_flags((service_t*)t, TSS_INPUT_HARDWARE); if(error) { /* Transport Error Indicator */ @@ -216,7 +216,7 @@ ts_recv_packet1 pid = (tsb[1] & 0x1f) << 8 | tsb[2]; - st = service_stream_find_fast((service_t*)t, pid); + st = service_stream_find((service_t*)t, pid); /* Extract PCR */ if (pcr != PTS_UNSET) @@ -228,7 +228,7 @@ ts_recv_packet1 } if(!error) - service_set_streaming_status_flags_fast((service_t*)t, TSS_INPUT_SERVICE); + service_set_streaming_status_flags((service_t*)t, TSS_INPUT_SERVICE); avgstat_add(&t->s_rate, 188, dispatch_clock); @@ -259,9 +259,9 @@ ts_recv_packet1 if(!error && t->s_scrambled != 0) { if(n == 0) { - service_set_streaming_status_flags_fast((service_t*)t, TSS_NO_DESCRAMBLER); + service_set_streaming_status_flags((service_t*)t, TSS_NO_DESCRAMBLER); } else if(m == n) { - service_set_streaming_status_flags_fast((service_t*)t, TSS_NO_ACCESS); + service_set_streaming_status_flags((service_t*)t, TSS_NO_ACCESS); } } @@ -282,7 +282,7 @@ ts_recv_packet2(mpegts_service_t *t, const uint8_t *tsb) elementary_stream_t *st; int pid = (tsb[1] & 0x1f) << 8 | tsb[2]; - if((st = service_stream_find_fast((service_t*)t, pid)) != NULL) + if((st = service_stream_find((service_t*)t, pid)) != NULL) ts_recv_packet0(t, st, tsb); } @@ -310,7 +310,7 @@ ts_remux(mpegts_service_t *t, const uint8_t *src) pktbuf_ref_dec(pb); - service_set_streaming_status_flags_fast((service_t*)t, TSS_PACKETS); + service_set_streaming_status_flags((service_t*)t, TSS_PACKETS); sbuf_reset(sb); } diff --git a/src/service.c b/src/service.c index 21ce9c00..a3ff609c 100644 --- a/src/service.c +++ b/src/service.c @@ -679,7 +679,7 @@ service_stream_create(service_t *t, int pid, * Find an elementary stream in a service */ elementary_stream_t * -service_stream_find(service_t *t, int pid) +service_stream_find_(service_t *t, int pid) { elementary_stream_t *st; @@ -796,7 +796,7 @@ service_servicetype_txt ( service_t *s ) * */ void -service_set_streaming_status_flags(service_t *t, int set) +service_set_streaming_status_flags_(service_t *t, int set) { int n; streaming_message_t *sm; diff --git a/src/service.h b/src/service.h index 2de8a7a8..77536db1 100644 --- a/src/service.h +++ b/src/service.h @@ -450,16 +450,16 @@ service_instance_t *service_find_instance(struct service *s, int *error, int weight); -#define service_stream_find_fast(t, pid) ({ \ +#define service_stream_find(t, pid) ({ \ elementary_stream_t *__es; \ if ((t)->s_last_pid != (pid)) \ - __es = service_stream_find(t, pid); \ + __es = service_stream_find_(t, pid); \ else \ __es = (t)->s_last_es; \ __es; \ }) -elementary_stream_t *service_stream_find(service_t *t, int pid); +elementary_stream_t *service_stream_find_(service_t *t, int pid); elementary_stream_t *service_stream_create(service_t *t, int pid, streaming_component_type_t type); @@ -483,11 +483,11 @@ void service_destroy(service_t *t, int delconf); void service_remove_subscriber(service_t *t, struct th_subscription *s, int reason); -void service_set_streaming_status_flags(service_t *t, int flag); +void service_set_streaming_status_flags_(service_t *t, int flag); -#define service_set_streaming_status_flags_fast(t, flag) \ +#define service_set_streaming_status_flags(t, flag) \ do { if (((t)->s_streaming_status & flag) != flag) \ - service_set_streaming_status_flags(t, flag); } while (0) + service_set_streaming_status_flags_(t, flag); } while (0) struct streaming_start; struct streaming_start *service_build_stream_start(service_t *t);