diff options
author | etobi <git@e-tobi.net> | 2013-09-03 09:48:47 +0200 |
---|---|---|
committer | etobi <git@e-tobi.net> | 2013-09-03 09:48:47 +0200 |
commit | 76c08672bc6c2984ebd7045a71862099890c9118 (patch) | |
tree | 31e3232493a151138c510886eb97ad4362623357 /util/szap | |
parent | 9fe4d4ea9c054e539ab679ed2e9c076c35beb69d (diff) | |
download | linux-dvb-apps-upstream/1.1.1+rev1457.tar.gz |
Imported Upstream version 1.1.1+rev1457upstream/1.1.1+rev1457
Diffstat (limited to '')
-rw-r--r-- | util/szap/azap.c | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/util/szap/azap.c b/util/szap/azap.c index 93addf8..ea13236 100644 --- a/util/szap/azap.c +++ b/util/szap/azap.c @@ -171,7 +171,7 @@ int try_parse_param(int fd, const Param * plist, int list_size, int *param, int parse(const char *fname, const char *channel, - struct dvb_frontend_parameters *frontend, int *vpid, int *apid) + struct dvb_frontend_parameters *frontend, int *vpid, int *apid, int *sid) { int fd; int err; @@ -204,6 +204,9 @@ int parse(const char *fname, const char *channel, if ((err = try_parse_int(fd, apid, "Audio PID"))) return -6; + if ((err = try_parse_int(fd, sid, "Service ID"))) + return -7; + close(fd); return 0; @@ -266,7 +269,7 @@ int check_frontend (int fe_fd) } -static const char *usage = "\nusage: %s [-a adapter_num] [-f frontend_id] [-d demux_id] [-c conf_file] [-r] <channel name>\n\n"; +static const char *usage = "\nusage: %s [-a adapter_num] [-f frontend_id] [-d demux_id] [-c conf_file] [-r] [-p] <channel name>\n\n"; int main(int argc, char **argv) @@ -276,11 +279,13 @@ int main(int argc, char **argv) char *confname = NULL; char *channel = NULL; int adapter = 0, frontend = 0, demux = 0, dvr = 0; - int vpid, apid; + int vpid, apid, sid, pmtpid = 0; + int pat_fd, pmt_fd; int frontend_fd, audio_fd, video_fd; int opt; + int rec_psi = 0; - while ((opt = getopt(argc, argv, "hrn:a:f:d:c:")) != -1) { + while ((opt = getopt(argc, argv, "hrpn:a:f:d:c:")) != -1) { switch (opt) { case 'a': adapter = strtoul(optarg, NULL, 0); @@ -294,6 +299,9 @@ int main(int argc, char **argv) case 'r': dvr = 1; break; + case 'p': + rec_psi = 1; + break; case 'c': confname = optarg; break; @@ -333,7 +341,7 @@ int main(int argc, char **argv) memset(&frontend_param, 0, sizeof(struct dvb_frontend_parameters)); - if (parse (confname, channel, &frontend_param, &vpid, &apid)) + if (parse (confname, channel, &frontend_param, &vpid, &apid, &sid)) return -1; if ((frontend_fd = open(FRONTEND_DEV, O_RDWR)) < 0) { @@ -344,6 +352,29 @@ int main(int argc, char **argv) if (setup_frontend (frontend_fd, &frontend_param) < 0) return -1; + + if (rec_psi) { + pmtpid = get_pmt_pid(DEMUX_DEV, sid); + if (pmtpid <= 0) { + fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid); + return -1; + } + + if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) { + perror("opening pat demux failed"); + return -1; + } + if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0) + return -1; + + if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) { + perror("opening pmt demux failed"); + return -1; + } + if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0) + return -1; + } + if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) { PERROR("failed opening '%s'", DEMUX_DEV); return -1; @@ -363,6 +394,8 @@ int main(int argc, char **argv) check_frontend (frontend_fd); + close (pat_fd); + close (pmt_fd); close (audio_fd); close (video_fd); close (frontend_fd); |