summaryrefslogtreecommitdiffstats
path: root/isdb-t/br-sp-Capivari
blob: 67ab34b762898c6e0b3406b87dc14ae19a69dd7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Channel table for Capivari - SP - Brazil
# Source: http://portalbsd.com.br/novo/terrestres_channels.php?channels=1735

# Physical channel 30
[VTV]
	DELIVERY_SYSTEM = ISDBT
	BANDWIDTH_HZ = 6000000
	FREQUENCY = 569142857
	INVERSION = AUTO
	GUARD_INTERVAL = AUTO
	TRANSMISSION_MODE = AUTO
	INVERSION = AUTO
	GUARD_INTERVAL = AUTO
	TRANSMISSION_MODE = AUTO
	ISDBT_LAYER_ENABLED = 7
	ISDBT_SOUND_BROADCASTING = 0
	ISDBT_SB_SUBCHANNEL_ID = 0
	ISDBT_SB_SEGMENT_IDX = 0
	ISDBT_SB_SEGMENT_COUNT = 0
	ISDBT_LAYERA_FEC = AUTO
	ISDBT_LAYERA_MODULATION = QAM/AUTO
	ISDBT_LAYERA_SEGMENT_COUNT = 0
	ISDBT_LAYERA_TIME_INTERLEAVING = 0
	ISDBT_LAYERB_FEC = AUTO
	ISDBT_LAYERB_MODULATION = QAM/AUTO
	ISDBT_LAYERB_SEGMENT_COUNT = 0
	ISDBT_LAYERB_TIME_INTERLEAVING = 0
	ISDBT_LAYERC_FEC = AUTO
	ISDBT_LAYERC_MODULATION = QAM/AUTO
	ISDBT_LAYERC_SEGMENT_COUNT = 0
	ISDBT_LAYERC_TIME_INTERLEAVING = 0
#dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
 * test_dvr_play.c - Play TS file via dvr device.
 *
 * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
 *                  & Marcus Metzler <marcus@convergence.de>
 *                    for convergence integrated media GmbH
 * Copyright (C) 2003 Convergence GmbH
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1
 * 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 Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */

#include <sys/ioctl.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <sys/poll.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>

#include <linux/dvb/dmx.h>


#define BUFSIZE (512*188)

void play_file_dvr(int filefd, int dvrfd)
{
	char buf[BUFSIZE];
	int count, written, bytes, total = 0;

	while ((count = read(filefd, buf, BUFSIZE)) > 0) {
		total += count;
		fprintf(stderr, "read  %d (%d total)\n", count, total);
		written = 0;
		while (written < count) {
			bytes = write(dvrfd, buf + written, count - written);
			fprintf(stderr, "write %d\n", bytes);
			if (bytes < 0) {
				perror("write dvr");
				return;
			}
			else if (bytes == 0) {
				fprintf(stderr, "write dvr: 0 bytes !");
				return;
			}
			written += bytes;
		}
	}
}

void set_pid(int fd, int pid, int type)
{
	struct dmx_pes_filter_params pesFilterParams;

	fprintf(stderr, "set PID 0x%04x (%d)\n", pid, type);
	if (ioctl(fd, DMX_STOP) < 0)
		perror("DMX STOP:");

	if (ioctl(fd, DMX_SET_BUFFER_SIZE, 64*1024) < 0)
		perror("DMX SET BUFFER:");

	pesFilterParams.pid = pid;
	pesFilterParams.input = DMX_IN_DVR;
	pesFilterParams.output = DMX_OUT_DECODER;
	pesFilterParams.pes_type = type;
	pesFilterParams.flags = DMX_IMMEDIATE_START;
	if (ioctl(fd, DMX_SET_PES_FILTER, &pesFilterParams) < 0)
		perror("DMX SET FILTER");
}

int main(int argc, char **argv)
{
	char *dmxdev = "/dev/dvb/adapter0/demux0";
	char *dvrdev = "/dev/dvb/adapter0/dvr0";
	int vpid, apid;
	int filefd, dvrfd, vfd, afd;

	if (argc < 4) {
		fprintf(stderr, "usage: test_dvr_play TS-file video-PID audio-PID\n");
		return 1;
	}
	vpid = strtoul(argv[2], NULL, 0);
	apid = strtoul(argv[3], NULL, 0);

	filefd = open(argv[1], O_RDONLY);
	if (filefd == -1) {
		fprintf(stderr, "Failed to open '%s': %d %m\n", argv[1], errno);
		return 1;
	}

	fprintf(stderr, "Playing '%s', video PID 0x%04x, audio PID 0x%04x\n",
			argv[1], vpid, apid);

	if (getenv("DEMUX"))
		dmxdev = getenv("DEMUX");
	if (getenv("DVR"))
		dvrdev = getenv("DVR");

	if ((dvrfd = open(dvrdev, O_WRONLY)) == -1) {
		fprintf(stderr, "Failed to open '%s': %d %m\n", dvrdev, errno);
		return 1;
	}

	if ((vfd = open(dmxdev, O_WRONLY)) == -1) {
		fprintf(stderr, "Failed to open video '%s': %d %m\n", dmxdev, errno);
		return 1;
	}
	if ((afd = open(dmxdev, O_WRONLY)) == -1) {
		fprintf(stderr, "Failed to open audio '%s': %d %m\n", dmxdev, errno);
		return 1;
	}

	/* playback timing is controlled via A/V PTS, so we cannot start
	 * writing to the DVR device before the PIDs are set...
	 */
	set_pid(afd, apid, DMX_PES_AUDIO);
	set_pid(vfd, vpid, DMX_PES_VIDEO);

	play_file_dvr(filefd, dvrfd);

	close(dvrfd);
	close(afd);
	close(vfd);
	close(filefd);
	return 0;
}