# HG changeset patch
# User Janne Grunau <j@jannau.net>
# Date 1265820041 -3600
# Node ID 28369a87b6c7db2a5704be5dda8ed60a4cbf3397
# Parent 80e9da1c00934139c817b33430bf44836f51406e
szap: move duplicate function set_pesfilter|demux to a common object
@@ -1,6 +1,6 @@
# Makefile for linuxtv.org dvb-apps/util/szap
-objects = lnb.o
+objects = lnb.o util.o
binaries = azap \
czap \
@@ -13,6 +13,8 @@
#include <linux/dvb/frontend.h>
#include <linux/dvb/dmx.h>
+#include "util.h"
+
static char FRONTEND_DEV [80];
static char DEMUX_DEV [80];
@@ -209,31 +211,6 @@
static
-int set_pesfilter (int fd, int pid, dmx_pes_type_t type, int dvr)
-{
- struct dmx_pes_filter_params pesfilter;
-
- if (pid <= 0 || pid >= 0x1fff)
- return 0;
-
- pesfilter.pid = pid;
- pesfilter.input = DMX_IN_FRONTEND;
- pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
- pesfilter.pes_type = type;
- pesfilter.flags = DMX_IMMEDIATE_START;
-
- if (ioctl(fd, DMX_SET_PES_FILTER, &pesfilter) < 0) {
- PERROR ("ioctl(DMX_SET_PES_FILTER) for %s PID failed",
- type == DMX_PES_AUDIO ? "Audio" :
- type == DMX_PES_VIDEO ? "Video" : "??");
- return -1;
- }
-
- return 0;
-}
-
-
-static
int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend)
{
struct dvb_frontend_info fe_info;
@@ -13,6 +13,8 @@
#include <linux/dvb/frontend.h>
#include <linux/dvb/dmx.h>
+#include "util.h"
+
static char FRONTEND_DEV [80];
static char DEMUX_DEV [80];
@@ -178,31 +180,6 @@
}
-
-static
-int set_pesfilter (int fd, int pid, dmx_pes_type_t type, int dvr)
-{
- struct dmx_pes_filter_params pesfilter;
-
- if (pid <= 0 || pid >= 0x1fff)
- return 0;
-
- pesfilter.pid = pid;
- pesfilter.input = DMX_IN_FRONTEND;
- pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
- pesfilter.pes_type = type;
- pesfilter.flags = DMX_IMMEDIATE_START;
-
- if (ioctl(fd, DMX_SET_PES_FILTER, &pesfilter) < 0) {
- PERROR ("ioctl(DMX_SET_PES_FILTER) for %s PID failed",
- type == DMX_PES_AUDIO ? "Audio" :
- type == DMX_PES_VIDEO ? "Video" : "??");
- return -1;
- }
-
- return 0;
-}
-
static
int setup_frontend(int fe_fd, struct dvb_frontend_parameters *frontend)
{
@@ -48,6 +48,7 @@
#include <linux/dvb/dmx.h>
#include <linux/dvb/audio.h>
#include "lnb.h"
+#include "util.h"
#ifndef TRUE
#define TRUE (1==1)
@@ -92,34 +93,6 @@
" -p : add pat and pmt to TS recording (implies -r)\n"
" or -n numbers for zapping\n";
-static int set_demux(int dmxfd, int pid, int pes_type, int dvr)
-{
- struct dmx_pes_filter_params pesfilter;
-
- if (pid < 0 || pid >= 0x1fff) /* ignore this pid to allow radio services */
- return TRUE;
-
- if (dvr) {
- int buffersize = 64 * 1024;
- if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1)
- perror("DMX_SET_BUFFER_SIZE failed");
- }
-
- pesfilter.pid = pid;
- pesfilter.input = DMX_IN_FRONTEND;
- pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
- pesfilter.pes_type = pes_type;
- pesfilter.flags = DMX_IMMEDIATE_START;
-
- if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) {
- fprintf(stderr, "DMX_SET_PES_FILTER failed "
- "(PID = 0x%04x): %d %m\n", pid, errno);
- return FALSE;
- }
-
- return TRUE;
-}
-
int get_pmt_pid(char *dmxdev, int sid)
{
int patfd, count;
@@ -390,10 +363,10 @@
if (diseqc(fefd, sat_no, pol, hiband))
if (do_tune(fefd, ifreq, sr))
- if (set_demux(dmxfdv, vpid, DMX_PES_VIDEO, dvr))
+ if (set_pesfilter(dmxfdv, vpid, DMX_PES_VIDEO, dvr))
if (audiofd >= 0)
(void)ioctl(audiofd, AUDIO_SET_BYPASS_MODE, bypass);
- if (set_demux(dmxfda, apid, DMX_PES_AUDIO, dvr)) {
+ if (set_pesfilter(dmxfda, apid, DMX_PES_AUDIO, dvr)) {
if (rec_psi) {
pmtpid = get_pmt_pid(dmxdev, sid);
if (pmtpid < 0) {
@@ -403,8 +376,8 @@
fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
result = FALSE;
}
- if (set_demux(patfd, 0, DMX_PES_OTHER, dvr))
- if (set_demux(pmtfd, pmtpid, DMX_PES_OTHER, dvr))
+ if (set_pesfilter(patfd, 0, DMX_PES_OTHER, dvr))
+ if (set_pesfilter(pmtfd, pmtpid, DMX_PES_OTHER, dvr))
result = TRUE;
} else {
result = TRUE;
@@ -35,6 +35,8 @@
#include <linux/dvb/frontend.h>
#include <linux/dvb/dmx.h>
+#include "util.h"
+
static char FRONTEND_DEV [80];
static char DEMUX_DEV [80];
static char DVR_DEV [80];
@@ -351,31 +353,6 @@
static
-int set_pesfilter (int fd, int pid, dmx_pes_type_t type, int dvr)
-{
- struct dmx_pes_filter_params pesfilter;
-
- if (pid <= 0 || pid >= 0x1fff)
- return 0;
-
- pesfilter.pid = pid;
- pesfilter.input = DMX_IN_FRONTEND;
- pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
- pesfilter.pes_type = type;
- pesfilter.flags = DMX_IMMEDIATE_START;
-
- if (ioctl(fd, DMX_SET_PES_FILTER, &pesfilter) < 0) {
- PERROR ("ioctl(DMX_SET_PES_FILTER) for %s PID failed",
- type == DMX_PES_AUDIO ? "Audio" :
- type == DMX_PES_VIDEO ? "Video" : "??");
- return -1;
- }
-
- return 0;
-}
-
-
-static
int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend)
{
struct dvb_frontend_info fe_info;
@@ -0,0 +1,65 @@
+/*
+ * util functions for various ?zap implementations
+ *
+ * Copyright (C) 2001 Johannes Stezenbach (js@convergence.de)
+ * for convergence integrated media
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <linux/dvb/frontend.h>
+#include <linux/dvb/dmx.h>
+
+
+int set_pesfilter(int dmxfd, int pid, int pes_type, int dvr)
+{
+ struct dmx_pes_filter_params pesfilter;
+
+ /* ignore this pid to allow radio services */
+ if (pid < 0 ||
+ pid >= 0x1fff ||
+ (pid == 0 && pes_type != DMX_PES_OTHER))
+ return 0;
+
+ if (dvr) {
+ int buffersize = 64 * 1024;
+ if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1)
+ perror("DMX_SET_BUFFER_SIZE failed");
+ }
+
+ pesfilter.pid = pid;
+ pesfilter.input = DMX_IN_FRONTEND;
+ pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
+ pesfilter.pes_type = pes_type;
+ pesfilter.flags = DMX_IMMEDIATE_START;
+
+ if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) {
+ fprintf(stderr, "DMX_SET_PES_FILTER failed "
+ "(PID = 0x%04x): %d %m\n", pid, errno);
+ return -1;
+ }
+
+ return 0;
+}
@@ -0,0 +1,22 @@
+/*
+ * util functions for various ?zap implementations
+ *
+ * Copyright (C) 2001 Johannes Stezenbach (js@convergence.de)
+ * for convergence integrated media
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+int set_pesfilter(int dmxfd, int pid, int pes_type, int dvr);