diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2002-12-27 00:53:49 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2002-12-27 00:53:49 +0000 |
commit | eadff9a874810b5963dd483a044a481c291a6199 (patch) | |
tree | 70d99f5a5cd70e9b4026d37f2958d1067166c8b5 | |
parent | 4b80217cb872335e6f01de22d58fc0778da265c6 (diff) | |
download | xine-lib-eadff9a874810b5963dd483a044a481c291a6199.tar.gz xine-lib-eadff9a874810b5963dd483a044a481c291a6199.tar.bz2 |
finally - dvb support in xine :)
CVS patchset: 3687
CVS date: 2002/12/27 00:53:49
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | doc/Makefile.am | 2 | ||||
-rw-r--r-- | doc/README.dvb | 86 | ||||
-rw-r--r-- | doc/dvb_channels | 1836 | ||||
-rw-r--r-- | src/demuxers/demux_ts.c | 50 | ||||
-rw-r--r-- | src/input/Makefile.am | 9 | ||||
-rw-r--r-- | src/input/input_dvb.c | 865 | ||||
-rw-r--r-- | src/input/ost/Makefile.am | 22 | ||||
-rw-r--r-- | src/input/ost/README | 9 | ||||
-rw-r--r-- | src/input/ost/ca.h | 84 | ||||
-rw-r--r-- | src/input/ost/demux.h | 346 | ||||
-rw-r--r-- | src/input/ost/dmx.h | 141 | ||||
-rw-r--r-- | src/input/ost/frontend.h | 208 | ||||
-rw-r--r-- | src/input/ost/sec.h | 118 | ||||
-rw-r--r-- | src/xine-engine/audio_decoder.c | 18 | ||||
-rw-r--r-- | src/xine-engine/xine.c | 4 |
17 files changed, 3786 insertions, 16 deletions
@@ -1,5 +1,6 @@ * what a GOOM! post plugin - + * Digital TV (DVB) input plugin (experimental) + xine-lib (1-beta1) * updated libfaad * improved engine for seeking and slider positioning diff --git a/configure.ac b/configure.ac index 632d4573c..b68698879 100644 --- a/configure.ac +++ b/configure.ac @@ -1176,6 +1176,7 @@ src/dxr3/Makefile src/input/Makefile src/input/libdvdnav/Makefile src/input/libdvdread/Makefile +src/input/ost/Makefile src/input/librtsp/Makefile src/input/libreal/Makefile src/liba52/Makefile diff --git a/doc/Makefile.am b/doc/Makefile.am index 3b329656f..6b5e3b956 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,7 +1,7 @@ SUBDIRS = man hackersguide -EXTRA_DIST = $(docs_DOCS) README README.plugins MRLs dataflow.dia +EXTRA_DIST = $(docs_DOCS) README README.plugins MRLs dataflow.dia README.dvb dvb_channels docdir = $(prefix)/share/doc/xine docs_DOCS = diff --git a/doc/README.dvb b/doc/README.dvb new file mode 100644 index 000000000..8412c243e --- /dev/null +++ b/doc/README.dvb @@ -0,0 +1,86 @@ + +xine Digital TV (DVB) +===================== + +xine can be used to watch digital television. + +xine supports Digital TV (Digital Video Broadcasting - DVB) cards +using the Linux DVB driver from Convergence (so far this has only been +tested using a Hauppauge WinTV Nova DVB-S card). + +driver download and installation +-------------------------------- + +Download and install the latest drivers from www.linuxtv.org. You will +need kernel sources configured for your configuration for a successfull build, +preferably in /usr/src/linux. Once you have that, unpack the driver sources + +# tar xfvz siemens_dvb-0.9.4.tar.gz + +and compile the driver + +# cd DVB/driver +# make + +if that doesn't fail, do a + +# make insmod + +to load the generated modules into your running kernel. If everything went +fine, you should have a line like + +dvb: 1 dvb(s) found! + +in your dmesg. + + +install a channel list +---------------------- + +xine's dvb input plugin needs a channel/transponder list that fits your +satellite equipment. If you happen to live in central europe and want to +watch free channels from the astra 1a position you're lucky - you can simply +copy the dvb_channels file that comes with libxine (doc directory) + +$ mkdir ~/.xine +$ cp doc/dvb_channels ~/.xine + +otherwise you'll probably want to write your own channels file. The file +format is very simple: for each station add three lines: + +Program Name +A BBBBBBBB C DDDDDDDD E FFF GGG +(empty line) + +with + +A - diseqc number + +B - Frequency + +C - LNB voltage (H/V polarisation switch) + +D - Symbol Rate + +E - FEC + +F - vpid (video program id) + +G - apid (audio program id) + +once you have written a working dvb_channels file for your location/satellite, +you might want to share it with others on the xine-user mailing list :-) + + +using xine to watch digital television +-------------------------------------- + +make sure you have a recent libxine and frontend installed (latest CVS as of +this writing). then simply start something like + +$ gxine dvb:// + +you should be able to zap around using the NumPad-8 / NumPad-2 keys. +An OSD menu for channel selection is currently being implemented. + +Have fun. diff --git a/doc/dvb_channels b/doc/dvb_channels new file mode 100644 index 000000000..940e876d0 --- /dev/null +++ b/doc/dvb_channels @@ -0,0 +1,1836 @@ +ARD Das Erste +0 11837000 4 27500000 2 101 102 +EinsMuXx +0 12109000 4 27500000 2 301 302 +EinsExtra +0 12109000 4 27500000 2 101 102 +EinsFestival +0 12109000 4 27500000 2 201 202 +ZDF +0 11954000 4 27500000 2 110 120 +ZDFtheaterkanal +0 11954000 4 27500000 2 1110 1120 +RTL Television +0 12188000 4 27500000 2 163 104 +SAT.1-CH +0 12148000 4 27500000 2 255 256 +ProSieben +0 12483000 2 27502000 2 255 256 +RTL2 +0 12188000 4 27500000 2 166 128 +VOX +0 12188000 4 27500000 2 167 136 +KABEL1 +0 12483000 2 27502000 2 511 512 +Super RTL +0 12188000 4 27500000 2 165 120 +NEUN LIVE Television +0 12483000 2 27502000 2 767 768 +TW1 +0 12692000 4 22000000 3 166 167 +ARTE +0 10788000 4 22000000 3 167 136 +ZIK / XXL +0 12266000 4 27500000 2 164 96 +N24 +0 12483000 2 27502000 2 2047 2048 +n-tv +0 12670000 2 22000000 3 162 96 +CNN Int. +0 12168000 2 27500000 2 165 100 +EuroNews +0 11954000 4 27500000 2 2221 2233 +fox news +2 10983000 2 27500000 2 523 751 +CNBC +0 11954000 4 27500000 2 510 520 +CNBC Europe +0 12610000 2 22000000 3 944 945 +Sky News +0 12552000 2 22000000 3 305 306 +Phoenix +0 11837000 4 27500000 2 901 902 +XXP +2 11095000 4 27500000 2 33 44 +DW-TV +0 10788000 2 22000000 3 305 306 +BR-alpha +0 11837000 4 27500000 2 701 702 +NBC +2 11054000 4 27500000 3 550 551 +arte +0 11837000 4 27500000 2 401 402 +Bloomberg TV Germany +0 12552000 2 22000000 3 162 99 +Bloomberg English TV +2 11647000 4 27500000 2 1560 1520 +ZDFdokukanal +0 11954000 4 27500000 2 660 670 +ZDFinfokanal +0 11954000 4 27500000 2 610 620 +MTV Central +0 12699000 2 22000000 3 3031 3032 +VIVA +0 12670000 2 22000000 3 309 310 +VIVA PLUS +0 12552000 2 22000000 3 171 172 +3sat +0 11954000 4 27500000 2 210 220 +SFB1 +0 12109000 4 27500000 2 601 602 +SR Fernsehen Suedwes +0 11837000 4 27500000 2 501 502 +SÜDWEST BW +0 11837000 4 27500000 2 801 802 +WDR FERNSEHEN +0 11837000 4 27500000 2 601 602 +Bayerisches FS +0 11837000 4 27500000 2 201 202 +hessen fernsehen +0 11837000 4 27500000 2 301 302 +MDR FERNSEHEN +0 12109000 4 27500000 2 401 402 +NDR Fernsehen +0 12109000 4 27500000 2 2401 2402 +ORB-Fernsehen +0 12109000 4 27500000 2 501 502 +SÜDWEST RP +0 12109000 4 27500000 2 3101 3102 +tv.nrw +2 11604000 4 27500000 3 111 112 +ONTV Regional +0 12148000 4 27500000 2 2303 2304 +FASHION-TV +0 12266000 4 27500000 2 169 116 +Eurosport +0 11954000 4 27500000 2 410 420 +RTL TELE Letzebuerg +0 12552000 2 22000000 3 168 144 +Iraq +2 12654000 4 27500000 2 1960 1920 +Tele5 +0 10832000 4 22000000 3 58 65 +TV POLONIA +2 10719000 2 27500000 2 163 92 +ALLOCINE INFO +0 11739000 2 27500000 2 167 108 +Chamber TV +0 12552000 2 22000000 3 55 56 +LCP +0 12207000 2 27500000 2 165 100 +TEST +0 12188000 4 27500000 2 50 51 +FEED +2 12437000 4 27500000 2 308 256 +RTL2 AUSTRIA +2 11054000 4 27500000 2 520 521 +ProSieben Schweiz +0 12051000 2 27500000 2 289 290 +RTL Television +2 11054000 4 27500000 2 160 80 +RAI 1 +0 10788000 2 22000000 3 289 290 +ESC1 - EGYPTE +0 10788000 2 22000000 3 163 104 +Canal Algerie +0 10788000 2 22000000 3 168 138 +Test-R +0 11837000 4 27500000 2 901 902 +RTM - MAROC +0 10788000 2 22000000 2 162 96 +RTPI +0 10788000 2 22000000 2 300 301 +TV 5 +0 10788000 2 22000000 2 164 112 +TV7 +0 10788000 2 22000000 2 166 128 +Polonia 1 +0 10832000 4 22000000 2 54 57 +Tango TV +0 10832000 4 22000000 2 61 62 +TV Puls +0 10832000 4 22000000 2 59 60 +FRANCE 5 +0 11608000 2 22000000 2 160 80 +ANDALUCÍA TV +0 11686000 2 22000000 2 162 88 +Canal Canarias +0 11686000 2 22000000 2 160 80 +ETB SAT +0 11686000 2 22000000 2 163 92 +TM SAT/LA OTRA +0 11686000 2 22000000 2 164 96 +TVC INT. +0 11686000 2 22000000 2 161 84 +Kabel 1 Austria +0 12051000 2 27500000 2 166 167 +Kabel 1 Schweiz +0 12051000 2 27500000 2 162 163 +ProSieben Austria +0 12051000 2 27500000 2 161 84 +SAT.1 A +0 12051000 2 27500000 2 800 801 +FRANCE 5 +0 12207000 2 27500000 2 160 80 +AB SAT / XXL +0 12266000 4 27500000 2 164 96 +MOTEURS +0 12266000 4 27500000 2 160 80 +CA TV +0 12324000 2 27500000 2 165 100 +LE SESAME C+ +0 12324000 2 27500000 2 165 1965 +MOSAIQUE +0 12324000 2 27500000 2 162 0 +RealityTV +0 12382000 4 27500000 2 169 110 +K13 +0 12402000 2 27500000 2 163 92 +ANDALUCÍA TV +0 12441000 2 27500000 2 162 88 +Canal Canarias +0 12441000 2 27500000 2 160 80 +ETB SAT +0 12441000 2 27500000 2 163 92 +FASHION TV +0 12441000 2 27500000 2 165 100 +TAQUILLA 0 +0 12441000 2 27500000 2 166 104 +TM SAT/LA OTRA +0 12441000 2 27500000 2 164 96 +TVC INT. +0 12441000 2 27500000 2 161 84 +DSF +0 12483000 2 27502000 2 1023 1024 +Sonnenklar TV +0 12090000 2 27500000 2 1023 1024 +Home Shopping Europe +0 12483000 2 27502000 2 1279 1280 +RTL Shop +0 12188000 4 27500000 2 168 137 +QVC GERMANY +0 12552000 2 22000000 3 165 166 +Travel +0 12168000 2 27500000 2 163 92 +Promo +2 12169000 4 27500000 2 521 740 +ASTRA Mosaik +0 12552000 2 22000000 3 175 176 +ASTRA-Mosaic 2 +0 12552000 2 22000000 3 179 120 +ASTRA-Mosaic 3 +0 12552000 2 22000000 3 182 169 +ASTRA-Mosaic 4 +0 12552000 2 22000000 3 185 170 +ASTRA-Mosaic 5 +0 12552000 2 22000000 3 163 164 +BVN +0 12574000 4 22000000 2 164 96 +Liberty TV.com +0 12610000 2 22000000 2 941 943 +LibertyTV.com +0 12610000 2 22000000 2 941 942 +Motors TV +0 12610000 2 22000000 2 191 192 +RTBF SAT +0 12610000 2 22000000 2 48 49 +TV5 Europe +0 12610000 2 22000000 2 45 46 +Wishline +0 12610000 2 22000000 2 214 215 +No-ZAP TV +0 12640000 4 22000000 2 160 80 +TV-NIEP II +0 12670000 2 22000000 2 77 78 +BL-SPIEL 1 +0 11719000 4 27500000 2 255 256 +BL-SPIEL 2 +0 11719000 4 27500000 2 2047 2048 +BL-SPIEL 3 +0 11719000 4 27500000 2 2303 2304 +BL-SPIEL 4 +0 11719000 4 27500000 2 2559 2560 +BL-SPIEL 5 +0 11719000 4 27500000 2 2815 2816 +BL-SPIEL 6 +0 11719000 4 27500000 2 3071 3072 +F1 Box +0 11719000 4 27500000 2 2559 2560 +F1 Cockpit +0 11719000 4 27500000 2 2303 2304 +F1 Info +0 11719000 4 27500000 2 3071 3072 +F1 Portal +0 11719000 4 27500000 2 255 256 +F1 Super +0 11719000 4 27500000 2 2047 2048 +F1 Verfolger +0 11719000 4 27500000 2 2815 2816 +PREM EROTIK 2 +0 11719000 4 27500000 2 1535 1536 +PREM EROTIK 3 +0 11719000 4 27500000 2 1791 1792 +PREM EROTIK 4 +0 11719000 4 27500000 2 3583 3584 +PREMIERE DIREKT 1 +0 11719000 4 27500000 2 1023 1024 +PREMIERE DIREKT 2 +0 11719000 4 27500000 2 767 768 +PREMIERE DIREKT 3 +0 11719000 4 27500000 2 511 512 +PREMIERE DIREKT 3 +0 11719000 4 27500000 2 1279 1280 +PREMIERE SPORT 1 +0 11719000 4 27500000 2 255 256 +CINE CINEMA 16/9 +0 11739000 2 27500000 2 160 80 +CLUB TELEACHAT +0 11739000 2 27500000 2 162 88 +GOURMET TV +0 11739000 2 27500000 2 170 120 +KTO +0 11739000 2 27500000 2 163 92 +MATCH TV +0 11739000 2 27500000 2 165 100 +MCM +0 11739000 2 27500000 2 161 84 +MCM 2 +0 11739000 2 27500000 2 164 96 +MCM AFRICA +0 11739000 2 27500000 2 166 104 +NAT GEOGRAPHIC +0 11739000 2 27500000 2 169 116 +TiJi +0 11739000 2 27500000 2 168 112 +13 TH STREET +0 11758000 4 27500000 2 2303 2304 +BEATE-UHSE.TV +0 11758000 4 27500000 2 1023 1024 +CLASSICA +0 11758000 4 27500000 2 767 768 +FOX KIDS +0 11758000 4 27500000 2 1279 1280 +GOLDSTAR TV +0 11758000 4 27500000 2 3839 3840 +HEIMATKANAL +0 11758000 4 27500000 2 1535 1536 +JUNIOR +0 11758000 4 27500000 2 255 256 +K-TOON +0 11758000 4 27500000 2 511 512 +CANAL J +0 11778000 2 27500000 2 167 108 +CUISINE.TV +0 11778000 2 27500000 2 165 100 +EUROSPORT +0 11778000 2 27500000 2 160 80 +LCI +0 11778000 2 27500000 2 166 104 +PARIS PREMIERE +0 11778000 2 27500000 2 163 92 +PLANETE +0 11778000 2 27500000 2 162 88 +SANTE - VIE PLUS +0 11778000 2 27500000 2 168 112 +SANTE-VIE +0 11778000 2 27500000 2 168 112 +TMC +0 11778000 2 27500000 2 161 84 +VOYAGE +0 11778000 2 27500000 2 164 96 +PREMIERE 1 +0 11797000 4 27500000 2 511 512 +PREMIERE 2 +0 11797000 4 27500000 2 1791 1792 +PREMIERE 3 +0 11797000 4 27500000 2 2303 2304 +PREMIERE 4 +0 11797000 4 27500000 2 767 768 +PREMIERE 5 +0 11797000 4 27500000 2 1279 1280 +PREMIERE 6 +0 11797000 4 27500000 2 1535 1536 +PREMIERE 7 +0 11797000 4 27500000 2 1023 1024 +PREMIERE START +0 11797000 4 27500000 2 255 256 +BLOOMBERG TV +0 11817000 2 27500000 2 163 92 +CANAL JIMMY +0 11817000 2 27500000 2 165 100 +CINECINEMAS 2 +0 11817000 2 27500000 2 161 84 +CINECINEMAS 3 +0 11817000 2 27500000 2 162 88 +i TELEVISION +0 11817000 2 27500000 2 169 116 +LA CHAINE METEO +0 11817000 2 27500000 2 167 108 +MEZZO +0 11817000 2 27500000 2 166 104 +MEZZO[esp] +0 11817000 2 27500000 2 166 104 +PATHE SPORT: +0 11817000 2 27500000 2 168 112 +SEASONS +0 11817000 2 27500000 2 160 80 +CANAL+ +0 11856000 2 27500000 2 160 80 +CANAL+ 16/9 +0 11856000 2 27500000 2 163 92 +CANAL+ BLEU +0 11856000 2 27500000 2 161 84 +CANAL+ JAUNE +0 11856000 2 27500000 2 162 88 +CANAL+ VERT +0 11856000 2 27500000 2 167 108 +CINE CLASSICS +0 11856000 2 27500000 2 2047 0 +CINECINEMAS 1 +0 11856000 2 27500000 2 165 100 +DISNEY CHANNEL +0 11856000 2 27500000 2 166 104 +EQUIDIA +0 11856000 2 27500000 2 168 112 +PMU sur Canal+ +0 11856000 2 27500000 2 160 80 +40 LATINO +0 11934000 2 27500000 2 160 80 +CANAL+ ...30 +0 11934000 2 27500000 2 167 108 +CINECLASSICS +0 11934000 2 27500000 2 162 88 +CNN+ +0 11934000 2 27500000 2 172 128 +EUROSPORTNEWS +0 11934000 2 27500000 2 173 132 +FOX NEWS +0 11934000 2 27500000 2 168 112 +MÉTEO +0 11934000 2 27500000 2 169 116 +Nat Geographic +0 11934000 2 27500000 2 170 120 +REAL MADRID TV +0 11934000 2 27500000 2 171 124 +40 LATINO +0 11941000 2 27500000 2 160 80 +CANAL+ ...30 +0 11941000 2 27500000 2 167 108 +CINECLASSICS +0 11941000 2 27500000 2 162 88 +40 TV +0 11973000 2 27500000 2 165 100 +CANAL+ +0 11973000 2 27500000 2 160 80 +CANAL+ AZUL +0 11973000 2 27500000 2 161 84 +CANAL+ ROJO +0 11973000 2 27500000 2 162 88 +DISCOVERY +0 11973000 2 27500000 2 166 104 +DISNEY CHANNEL +0 11973000 2 27500000 2 163 92 +SPORTMANÍA +0 11973000 2 27500000 2 164 96 +SPORTMANÍA +0 11973000 2 27500000 2 164 96 +ATV +0 11992000 4 27500000 2 163 90 +Avante +0 11992000 4 27500000 2 162 88 +Discovery Cze +0 11992000 4 27500000 2 170 112 +Eurosport +0 11992000 4 27500000 2 160 80 +ExtremeSports +0 11992000 4 27500000 2 165 98 +Hallmark Cze +0 11992000 4 27500000 2 702 703 +M2 +0 11992000 4 27500000 2 164 96 +MTV Europe +0 11992000 4 27500000 2 168 108 +Private Gold +0 11992000 4 27500000 2 167 106 +SpektrumInt. +0 11992000 4 27500000 2 169 110 +TV3 +0 11992000 4 27500000 2 166 104 +CANAL EVENEMENT +0 12012000 2 27500000 2 162 88 +ESPN CLASSIC +0 12012000 2 27500000 2 169 116 +FRANCE 2 +0 12012000 2 27500000 2 160 80 +FRANCE 3 +0 12012000 2 27500000 2 161 84 +MCM AFRICA +0 12012000 2 27500000 2 166 104 +TELE MELODY +0 12012000 2 27500000 2 167 108 +[18] +0 12012000 2 27500000 2 2047 0 +DISCOVERY CHANNEL +0 12031000 4 27500000 2 1791 1792 +KRIMI &CO +0 12031000 4 27500000 2 1535 1536 +PREMIERE DIREKT 1 +0 12031000 4 27500000 2 511 512 +PREMIERE DIREKT 2 +0 12031000 4 27500000 2 255 256 +PREMIERE DIREKT 4 +0 12031000 4 27500000 2 2815 2816 +PREMIERE EROTIK +0 12031000 4 27500000 2 1279 1280 +PREMIERE NOSTALGIE +0 12031000 4 27500000 2 2559 2560 +PREMIERE SERIE +0 12031000 4 27500000 2 1023 1024 +PREMIERE SPORT 2 +0 12031000 4 27500000 2 3839 3840 +BL-KONFERENZ +0 12070000 4 27500000 2 255 256 +BL-SPIEL 7 +0 12070000 4 27500000 2 3071 3072 +BL-SPIEL 8 +0 12070000 4 27500000 2 3071 3072 +BL-SPIEL 9 +0 12070000 4 27500000 2 3071 3072 +DISNEY CHANNEL +0 12090000 2 27500000 2 767 768 +PLANET +0 12090000 2 27500000 2 1279 1280 +STUDIO UNIVERSAL +0 12090000 2 27500000 2 255 256 +K1 +0 12129000 2 27500000 2 160 80 +K10 +0 12129000 2 27500000 2 169 116 +K11 +0 12129000 2 27500000 2 166 104 +K12 +0 12129000 2 27500000 2 167 108 +K2 +0 12129000 2 27500000 2 161 84 +K3 +0 12129000 2 27500000 2 162 88 +K4 +0 12129000 2 27500000 2 163 92 +K5 +0 12129000 2 27500000 2 164 96 +K6 +0 12129000 2 27500000 2 165 100 +K7 +0 12129000 2 27500000 2 166 104 +K8 +0 12129000 2 27500000 2 167 108 +K9 +0 12129000 2 27500000 2 168 112 +BD 1 +0 12148000 4 27500000 2 1791 1792 +BD 3/PARTNER TV +0 12148000 4 27500000 2 511 512 +BD 4 +0 12148000 4 27500000 2 2047 2048 +BD_DVB +0 12148000 4 27500000 2 1023 1024 +BetaBC +0 12148000 4 27500000 2 1535 1536 +Bloomberg +0 12168000 2 27500000 2 167 112 +TCM +0 12168000 2 27500000 2 169 64 +TCM. +0 12168000 2 27500000 2 164 96 +TVBS +0 12168000 2 27500000 2 162 88 +CANALPRO TV +0 12207000 2 27500000 2 170 120 +EURONEWS +0 12207000 2 27500000 2 164 96 +PLANETE 2 +0 12207000 2 27500000 2 166 104 +TV BREIZH +0 12207000 2 27500000 2 161 84 +ESTILO +0 12246000 2 27500000 2 165 100 +EUROSPORT +0 12246000 2 27500000 2 164 96 +NICK-PARAMOUNT +0 12246000 2 27500000 2 167 108 +SEASONS +0 12246000 2 27500000 2 170 120 +TAQUILLA 11 +0 12246000 2 27500000 2 169 116 +TAQUILLA 6 +0 12246000 2 27500000 2 161 84 +TAQUILLA 7 +0 12246000 2 27500000 2 162 88 +TAQUILLA 8 +0 12246000 2 27500000 2 163 92 +TAQUILLA 9 +0 12246000 2 27500000 2 171 124 +VIAJAR +0 12246000 2 27500000 2 166 104 +AB 1 +0 12266000 4 27500000 2 161 84 +ACTION +0 12266000 4 27500000 2 170 120 +ANIMAUX +0 12266000 4 27500000 2 162 88 +ENCYCLOPEDIA +0 12266000 4 27500000 2 163 92 +ESCALES +0 12266000 4 27500000 2 165 100 +FIT/CHAINE HISTOIRE +0 12266000 4 27500000 2 166 104 +MANGA +0 12266000 4 27500000 2 171 124 +RFM-TV +0 12266000 4 27500000 2 168 112 +CNBC-NBC +0 12287000 2 27500000 2 162 88 +DISNEY CH. +1 +0 12287000 2 27500000 2 171 124 +DOCUMANÍA +0 12287000 2 27500000 2 160 80 +FOX KIDS +0 12287000 2 27500000 2 161 84 +Playhouse Disney +0 12287000 2 27500000 2 172 128 +TAQUILLA 1 +0 12287000 2 27500000 2 166 104 +TAQUILLA 14 +0 12287000 2 27500000 2 176 144 +TAQUILLA 2 +0 12287000 2 27500000 2 167 108 +TAQUILLA X +0 12287000 2 27500000 2 170 120 +TOON DISNEY +0 12287000 2 27500000 2 173 132 +Animal Planet +0 12304000 4 27500000 2 702 703 +Animal Planet Cze +0 12304000 4 27500000 2 706 707 +Duna TV +0 12304000 4 27500000 2 168 108 +Eurosport News +0 12304000 4 27500000 2 167 106 +FoxKids +0 12304000 4 27500000 2 163 90 +Hallmark +0 12304000 4 27500000 2 161 84 +HBO Cze +0 12304000 4 27500000 2 164 96 +MTV Classic +0 12304000 4 27500000 2 165 98 +MTV Polska +0 12304000 4 27500000 2 166 104 +Sport 1 Hun +0 12304000 4 27500000 2 169 110 +TCM Cartoon +0 12304000 4 27500000 2 162 88 +Viasat 3 +0 12304000 4 27500000 2 160 80 +CANAL CLUB +0 12324000 2 27500000 2 160 80 +Animal Planet +0 12344000 4 27500000 2 164 96 +Discovery +0 12344000 4 27500000 2 162 88 +NGC +0 12344000 4 27500000 2 161 84 +RTL4 +0 12344000 4 27500000 2 160 80 +RTL5 +0 12344000 4 27500000 2 163 92 +Club +0 12382000 4 27500000 2 162 88 +Discovery +0 12382000 4 27500000 2 163 90 +FilmmÂuzeum +0 12382000 4 27500000 2 165 98 +Fox Kids CE +0 12382000 4 27500000 2 166 104 +HBO Hun +0 12382000 4 27500000 2 161 82 +National Geographic +0 12382000 4 27500000 2 164 96 +TA3 +0 12382000 4 27500000 2 167 106 +TCM Cartoon CE +0 12382000 4 27500000 2 170 114 +13EME RUE +0 12402000 2 27500000 2 162 88 +CINECLASSICS +0 12402000 2 27500000 2 168 112 +COMEDIE ! +0 12402000 2 27500000 2 161 84 +CSAT +0 12402000 2 27500000 2 169 116 +DEMAIN ! +0 12402000 2 27500000 2 160 80 +FOX KIDS +0 12402000 2 27500000 2 164 96 +GAME ONE +0 12402000 2 27500000 2 167 108 +KIOSQUE +0 12402000 2 27500000 2 163 92 +L'EQUIPE TV +0 12402000 2 27500000 2 165 100 +PLANETE FUTURE +0 12402000 2 27500000 2 166 104 +RFO SAT +0 12402000 2 27500000 2 164 96 +C+ Blauw +0 12515000 4 22000000 2 161 84 +C+ Rood +0 12515000 4 22000000 2 160 80 +C+16/9 +0 12515000 4 22000000 2 166 104 +NED1 +0 12515000 4 22000000 2 162 88 +NED2 +0 12515000 4 22000000 2 163 92 +NED3 +0 12515000 4 22000000 2 164 96 +The Studio +0 12515000 4 22000000 2 167 108 +X-ZONE +0 12515000 4 22000000 2 165 87 +AXN +0 12522000 2 22000000 2 166 104 +CINEMANÍA +0 12522000 2 22000000 2 160 80 +CINEMANÍA AZUL +0 12522000 2 22000000 2 161 84 +FOX +0 12522000 2 22000000 2 167 108 +TAQUILLA 3 +0 12522000 2 22000000 2 162 88 +TAQUILLA 4 +0 12522000 2 22000000 2 163 92 +TAQUILLA 5 +0 12522000 2 22000000 2 164 96 +Kindernet/Veronica +0 12574000 4 22000000 2 166 104 +NET5 +0 12574000 4 22000000 2 165 100 +SBS6 +0 12574000 4 22000000 2 160 80 +TMF +0 12574000 4 22000000 2 162 88 +V8/Fox Kids +0 12574000 4 22000000 2 163 92 +Yorin +0 12574000 4 22000000 2 161 84 +CINEMANÍA ROJO +0 12581000 2 22000000 2 165 100 +TAQUILLA 12 +0 12581000 2 22000000 2 168 112 +TAQUILLA 12 +0 12581000 2 22000000 2 172 128 +TAQUILLA X +0 12581000 2 22000000 2 163 92 +TAQUILLA XX +0 12581000 2 22000000 2 161 84 +TAQUILLA XY +0 12581000 2 22000000 2 162 88 +ORF 1 +0 12692000 4 22000000 2 160 161 +ORF 2 +0 12692000 4 22000000 2 500 501 +ORF 2 B +0 12692000 4 22000000 2 500 501 +ORF 2 K +0 12692000 4 22000000 2 500 501 +ORF 2 N +0 12692000 4 22000000 2 500 501 +ORF 2 O +0 12692000 4 22000000 2 500 501 +ORF 2 S +0 12692000 4 22000000 2 500 501 +ORF 2 St +0 12692000 4 22000000 2 500 501 +ORF 2 T +0 12692000 4 22000000 2 500 501 +ORF 2 V +0 12692000 4 22000000 2 500 501 +ORF 2 W +0 12692000 4 22000000 2 500 501 +MTV 2 +0 12699000 2 22000000 2 3091 3092 +MTV 2. +0 12699000 2 22000000 2 3091 3092 +MTV Base +0 12699000 2 22000000 2 3051 3052 +MTV Base. +0 12699000 2 22000000 2 3051 3052 +MTV ESP +0 12699000 2 22000000 2 3011 3012 +MTV F +0 12699000 2 22000000 2 3021 3022 +MTV HITS +0 12699000 2 22000000 2 3041 3042 +MTV HITS. +0 12699000 2 22000000 2 3041 3042 +MTV2 Pop Channel +0 12699000 2 22000000 2 3081 3082 +VH1 +0 12699000 2 22000000 2 3061 3062 +VH1 Classic +0 12699000 2 22000000 2 3071 3072 +10.722 H +2 10734000 4 29900000 2 1005 1205 +Cinenova +2 10734000 4 29900000 2 1003 1203 +Cinenova 2 +2 10734000 4 29900000 2 1002 1202 +Deepam TV +2 10734000 4 29900000 2 1006 1206 +EWTN +2 10734000 4 29900000 2 1001 1201 +MTA INTL +2 10734000 4 29900000 2 1004 1204 +BOULH +2 10949000 2 27500000 2 7488 7489 +HSE Italia +2 10983000 2 27500000 2 522 750 +s.verde +2 10983000 2 27500000 2 2689 2690 +CNN +2 11054000 4 27500000 2 540 542 +RTL A +2 11054000 4 27500000 2 580 584 +VOX CH +2 11054000 4 27500000 2 500 501 +ZDF +2 11054000 4 27500000 2 570 571 +Kurdsat +2 11095000 4 27500000 2 38 41 +New Live Channel CNL +2 11095000 4 27500000 2 51 52 +NOELLO SAT +2 11095000 4 27500000 2 4194 4195 +professional TV +2 11095000 4 27500000 2 32 47 +Sailing Channel +2 11095000 4 27500000 2 37 34 +Spice Platinum +2 11095000 4 27500000 2 2901 2911 +TVN +2 11178000 4 22000000 2 512 650 +DW-tv +2 11196000 2 9100000 2 101 102 +Testcard +2 11205000 4 4000000 2 4130 4131 +Techniczny 2 +2 11406000 2 27500000 2 515 680 +TVN +2 11406000 2 27500000 2 512 650 +TVN 24 +2 11406000 2 27500000 2 513 660 +TVN 7 +2 11406000 2 27500000 2 514 670 +RAI INTERNATIONAL +2 11464000 2 4400000 2 512 650 +ARD "Das Erste" +2 11604000 4 27500000 2 172 173 +DeeJay TV +2 11604000 4 27500000 2 160 161 +DW-TV +2 11604000 4 27500000 2 1000 1001 +K-TV +2 11604000 4 27500000 2 711 712 +RTL 2 CH +2 11604000 4 27500000 2 175 176 +Super RTL A +2 11604000 4 27500000 2 180 181 +VIVA polska +2 11604000 4 27500000 2 190 191 +102.5 HIT Ch +2 11623000 2 27500000 2 224 244 +123SAT/69XTV +2 11623000 2 27500000 2 230 250 +Cartoon Network +2 11623000 2 27500000 2 3401 3411 +Channel SUN +2 11623000 2 27500000 2 229 249 +KHALIFA TV +2 11623000 2 27500000 2 228 248 +PRO SAT +2 11623000 2 27500000 2 226 246 +TLC SAT +2 11623000 2 27500000 2 225 245 +TV ROMANIA +2 11623000 2 27500000 2 227 247 +Ultra Blue TV +2 11623000 2 27500000 2 223 243 +Bloomberg European T +2 11647000 4 27500000 2 1360 1320 +Bloomberg French TV +2 11647000 4 27500000 2 1160 1120 +Bloomberg German TV +2 11647000 4 27500000 2 1460 1420 +Bloomberg Italian TV +2 11647000 4 27500000 2 1260 1220 +Tel Sell Homeshoppin +2 11647000 4 27500000 2 1760 1720 +Test +2 11647000 4 27500000 2 1660 1620 +EDTV 1 +2 11747000 4 27500000 2 4130 4131 +EDTV BUSINESS +2 11747000 4 27500000 2 4642 4643 +EDTV DRAMA +2 11747000 4 27500000 2 4898 4899 +EDTV SPORT +2 11747000 4 27500000 2 4386 4387 +TEST +2 11747000 4 27500000 2 7970 7971 +Canale Lavoro +2 11766000 2 27500000 2 516 654 +RAI1 +2 11766000 2 27500000 2 160 80 +RAI2 +2 11766000 2 27500000 2 161 84 +RAI3 +2 11766000 2 27500000 2 162 88 +RAILAB +2 11766000 2 27500000 2 517 655 +RaiMed +2 11766000 2 27500000 2 515 653 +RAIMOSAICO +2 11766000 2 27500000 2 164 96 +SENATO ITALIANO +2 11766000 2 27500000 2 163 92 +CANAL 24 HORAS +2 11789000 4 27500000 2 3569 3570 +CANAL CLASICO +2 11789000 4 27500000 2 3529 3530 +HISPAVISION +2 11789000 4 27500000 2 3545 3546 +LIBRE - CARTA +2 11789000 4 27500000 2 3577 3578 +NOSTALGIA +2 11789000 4 27500000 2 3561 3562 +TELEDEPORTE +2 11789000 4 27500000 2 3537 3538 +TVE ASIA-AFRICA +2 11789000 4 27500000 2 3553 3554 +TVE INTERNACIONAL +2 11789000 4 27500000 2 3521 3522 +CAMERA DEPUTATI +2 11804000 2 27500000 2 517 655 +RAIeducational +2 11804000 2 27500000 2 514 652 +RAINettunoSAT1 +2 11804000 2 27500000 2 519 657 +RAINettunoSAT2 +2 11804000 2 27500000 2 513 651 +RAINews24 +2 11804000 2 27500000 2 516 654 +RAISPORTSAT +2 11804000 2 27500000 2 512 650 +SAT2000 +2 11804000 2 27500000 2 518 656 +TELEPACE +2 11804000 2 27500000 2 515 653 +Stream1 +2 11843000 2 27500000 2 512 650 +snai +2 11881000 2 27500000 2 2561 2562 +stream news +2 11881000 2 27500000 2 2305 2306 +C5 +2 11919000 2 27500000 2 513 660 +I1 +2 11919000 2 27500000 2 512 650 +R4 +2 11919000 2 27500000 2 514 670 +IQRA +2 12015000 4 27500000 2 520 730 +LBC EUROPE +2 12015000 4 27500000 2 517 700 +MA3 +2 12015000 4 27500000 2 522 750 +C. Milagro +2 12092000 4 27500000 2 4368 4369 +Fiesta +2 12092000 4 27500000 2 4432 4433 +Italiasat +2 12092000 4 27500000 2 4520 4521 +LiveSex +2 12092000 4 27500000 2 4660 4661 +Maharaji +2 12092000 4 27500000 2 4416 4417 +Sex-View +2 12092000 4 27500000 2 4630 4631 +Telesierra +2 12092000 4 27500000 2 4160 4161 +Tizianasat +2 12092000 4 27500000 2 4600 4601 +UBN +2 12092000 4 27500000 2 3260 3220 +AL JAZEERA +2 12111000 2 27500000 2 270 271 +Alice +2 12111000 2 27500000 2 351 352 +ARM 1 +2 12111000 2 27500000 2 240 241 +Coming Soon TV +2 12111000 2 27500000 2 310 311 +HB CHANNEL +2 12111000 2 27500000 2 200 201 +Leonardo +2 12111000 2 27500000 2 355 356 +Nuvolari +2 12111000 2 27500000 2 358 359 +TV MODA +2 12111000 2 27500000 2 220 221 +AH-EDP1 +2 12149000 2 27500000 2 96 900 +Alice +2 12149000 2 27500000 2 160 161 +GAY.TV +2 12149000 2 27500000 2 36 37 +Leonardo +2 12149000 2 27500000 2 128 130 +Nuvolari +2 12149000 2 27500000 2 176 177 +TV7 Tunis +2 12149000 2 27500000 2 112 113 +AUGUST +2 12188000 2 27500000 2 3713 3714 +BALKANIA TV +2 12188000 2 27500000 2 3969 3970 +ERT SAT +2 12188000 2 27500000 2 514 652 +EXTRA +2 12188000 2 27500000 2 516 654 +OTE PROMO +2 12188000 2 27500000 2 517 655 +RTS SAT +2 12188000 2 27500000 2 519 657 +TRIAL +2 12188000 2 27500000 2 513 651 +TV MAGIC +2 12188000 2 27500000 2 3584 3585 +Acasa TV +2 12197000 4 12128000 2 1260 1220 +PRO TV +2 12197000 4 12128000 2 1160 1120 +PRO TV +2 12197000 4 12128000 2 1160 1120 +ProTv Intl ENG +2 12197000 4 12128000 2 1360 1322 +ARIRANG TV +2 12220000 4 6161000 2 33 34 +BK TV +2 12220000 4 6161000 2 3105 3106 +Ch-3 Arabic IBA TV +2 12220000 4 6161000 2 1057 1058 +DCTV-german +2 12235000 2 13400000 2 1160 1123 +DCTV-german +2 12235000 2 13400000 2 1160 1123 +AJARA TV +2 12245000 4 27500000 2 127 137 +CFI PECO PRO +2 12245000 4 27500000 2 121 131 +FASHION +2 12245000 4 27500000 2 123 133 +XXP +2 12265000 2 27500000 2 1660 1620 +BVN-TV +2 12303000 2 27500000 2 209 210 +COUNTDOWN +2 12303000 2 27500000 2 235 236 +KURDISTAN TV +2 12303000 2 27500000 2 225 226 +MAGIC +2 12303000 2 27500000 2 245 246 +NAPOLI INT. +2 12303000 2 27500000 2 240 241 +RTB INTERNATIONAL +2 12303000 2 27500000 2 198 199 +SLO-TV1 +2 12303000 2 27500000 2 200 201 +TBNE +2 12303000 2 27500000 2 230 231 +TELSELL +2 12303000 2 27500000 2 205 206 +Abu Dhabi TV +2 12380000 2 27500000 2 3024 3034 +Bangla TV +2 12380000 2 27500000 2 3301 3311 +EQUIDIA PRO +2 12380000 2 27500000 2 3321 3331 +EQUIDIA PRO P1 +2 12380000 2 27500000 2 321 0 +EQUIDIA PRO P2 +2 12380000 2 27500000 2 322 0 +RTV MONTENEGRO +2 12380000 2 27500000 2 3026 3036 +SAT 7 +2 12380000 2 27500000 2 3001 3011 +SERTE TEST 2 +2 12380000 2 27500000 2 3025 3035 +SYRIAN TV +2 12380000 2 27500000 2 3022 3032 +SRG SSR SAT Access +2 12399000 4 27500000 2 165 98 +AL-ALAM +2 12437000 4 27500000 2 165 90 +IRIB1 ENG +2 12437000 4 27500000 2 160 81 +IRIB1 PER +2 12437000 4 27500000 2 160 80 +IRIB2 ENG +2 12437000 4 27500000 2 161 83 +IRIB2 PER +2 12437000 4 27500000 2 161 82 +IRINN +2 12437000 4 27500000 2 164 88 +SAHAR1 +2 12437000 4 27500000 2 162 84 +SAHAR2 +2 12437000 4 27500000 2 163 86 +2M Maroc +2 12476000 4 27500000 2 601 602 +ARY DIGITAL +2 12476000 4 27500000 2 650 651 +B4U Movies +2 12476000 4 27500000 2 656 657 +EbS +2 12476000 4 27500000 2 101 201 +LibertyTV.com +2 12476000 4 27500000 2 941 942 +MOU.2 +2 12476000 4 27500000 2 42 43 +PINK PLUS +2 12476000 4 27500000 2 308 256 +Zee Cinema +2 12476000 4 27500000 2 915 916 +Zee TV +2 12476000 4 27500000 2 910 911 +CALABRIASAT +2 12520000 2 27500000 2 52 53 +HRT-TV1 +2 12520000 2 27500000 2 100 101 +LIGURIA SAT +2 12520000 2 27500000 2 407 408 +NILE TV +2 12520000 2 27500000 2 56 57 +SARDEGNA UNO +2 12520000 2 27500000 2 503 504 +SET +2 12520000 2 27500000 2 501 502 +TELESPAZIO TEST +2 12520000 2 27500000 2 98 99 +VIDEOLINA +2 12520000 2 27500000 2 515 516 +Bulgaria TV +2 12540000 4 27500000 2 4612 4613 +MEDIOLANUM +2 12540000 4 27500000 2 1131 1132 +sisal +2 12540000 4 27500000 2 4356 4357 +24ore.tv +2 12558000 2 27500000 2 6916 6917 +CNES-Toulouse +2 12558000 2 27500000 2 6143 6142 +ESP Dutch +2 12558000 2 27500000 2 2577 2564 +ESP News Eng +2 12558000 2 27500000 2 2825 2823 +Q-CHANNEL +2 12558000 2 27500000 2 1037 1039 +ANN +2 12597000 2 27500000 2 161 84 +BBC World +2 12597000 2 27500000 2 163 92 +CNNI +2 12597000 2 27500000 2 168 112 +EuroNews +2 12597000 2 27500000 2 2221 2233 +JSTV 1 +2 12597000 2 27500000 2 2000 2001 +JSTV 2 +2 12597000 2 27500000 2 2011 2012 +MBC +2 12597000 2 27500000 2 160 80 +Al manar +2 12654000 4 27500000 2 1060 1020 +ESC +2 12654000 4 27500000 2 1860 1820 +Kuwait +2 12654000 4 27500000 2 1460 1420 +Libya +2 12654000 4 27500000 2 1560 1520 +Oman +2 12654000 4 27500000 2 1760 1720 +Qatar +2 12654000 4 27500000 2 1260 1220 +Saudi 1 +2 12654000 4 27500000 2 1360 1320 +Sharjah +2 12654000 4 27500000 2 1160 1120 +Sudan +2 12654000 4 27500000 2 1660 1620 +3ABN +2 12673000 2 27500000 2 210 211 +GAME NETWORK +2 12673000 2 27500000 2 291 292 +Jordan Tv +2 12673000 2 27500000 2 310 311 +Studio Europa +2 12673000 2 27500000 2 230 231 +Telemarket +2 12673000 2 27500000 2 350 351 +TEST +2 12673000 2 27500000 2 360 361 +Thai TV5 +2 12673000 2 27500000 2 200 201 +Video Italia +2 12673000 2 27500000 2 340 341 +ABsat PROMO +2 12692000 4 27500000 2 169 116 +ONYX +2 12692000 4 27500000 2 161 84 +PASSIONS +2 12692000 4 27500000 2 160 80 +DISCOVERY +2 10719000 2 27500000 2 161 84 +PLANETE +2 10719000 2 27500000 2 165 100 +RTL7 +2 10719000 2 27500000 2 162 88 +SEASONS +2 10719000 2 27500000 2 166 104 +TVN +2 10719000 2 27500000 2 160 80 +VIVA Polska +2 10719000 2 27500000 2 167 108 +Cinéstar 1 +2 10757000 2 27500000 2 120 130 +Cinéstar 2 +2 10757000 2 27500000 2 220 230 +Cinétoile +2 10757000 2 27500000 2 320 330 +Club Téléachat +2 10757000 2 27500000 2 920 930 +FUN TV +2 10757000 2 27500000 2 620 630 +Shopping Avenue +2 10757000 2 27500000 2 420 430 +Série Club +2 10757000 2 27500000 2 520 530 +Teva +2 10757000 2 27500000 2 720 730 +Festival +2 10796000 2 27500000 2 420 430 +Histoire +2 10796000 2 27500000 2 520 530 +Infosport +2 10796000 2 27500000 2 120 130 +Loft Story +2 10796000 2 27500000 2 320 330 +Odyssée +2 10796000 2 27500000 2 720 730 +Régions +2 10796000 2 27500000 2 220 230 +TFJ +2 10796000 2 27500000 2 1020 1030 +TV5 +2 10796000 2 27500000 2 920 930 +Télétoon +2 10796000 2 27500000 2 620 630 +CREDIT AGRICOLE +2 10834000 2 27500000 2 5321 5333 +EUROSPORT +2 10834000 2 27500000 2 220 230 +FRANCE 2 +2 10834000 2 27500000 2 320 330 +FRANCE 3 +2 10834000 2 27500000 2 520 530 +I TELEVISION +2 10834000 2 27500000 2 820 830 +LCI +2 10834000 2 27500000 2 120 130 +TPS star +2 10834000 2 27500000 2 420 430 +ALLO CINE INFO +2 10873000 2 27500000 2 520 530 +BBC PRIME +2 10873000 2 27500000 2 620 630 +EQUIDIA +2 10873000 2 27500000 2 320 330 +ESPN CLASSIC SPORT +2 10873000 2 27500000 2 420 430 +LA CHAINE PARLEMENTA +2 10873000 2 27500000 2 1020 1030 +RTM +2 10873000 2 27500000 2 120 130 +SIC +2 10873000 2 27500000 2 220 230 +TV BREIZH +2 10873000 2 27500000 2 720 730 +ALE KINO! +2 10892000 4 27500000 2 164 96 +AVANTE +2 10892000 4 27500000 2 169 114 +CANAL+ +2 10892000 4 27500000 2 160 80 +CANAL+ NIEBIESKI +2 10892000 4 27500000 2 168 112 +CANAL+ ZOLTY +2 10892000 4 27500000 2 161 85 +FOX KIDS +2 10892000 4 27500000 2 162 88 +MINIMAX +2 10892000 4 27500000 2 165 100 +TMT +2 10892000 4 27500000 2 163 92 +TVP 1 +2 10892000 4 27500000 2 166 104 +TVP 2 +2 10892000 4 27500000 2 167 108 +Cinéfaz +2 10911000 2 27500000 2 220 230 +Multivision +2 10911000 2 27500000 2 320 330 +TF6 +2 10911000 2 27500000 2 720 730 +TPS star +2 10911000 2 27500000 2 120 130 +AnimalPlanet +2 10930000 4 27500000 2 517 700 +Appl. Ch +2 10930000 4 27500000 2 516 690 +Big Bro +2 10930000 4 27500000 2 512 650 +Big Bro +2 10930000 4 27500000 2 515 680 +CNBC +2 10930000 4 27500000 2 513 660 +FILM SAT +2 10930000 4 27500000 2 518 710 +Nat. Geo +2 10930000 4 27500000 2 513 660 +NOVA CINE +2 10930000 4 27500000 2 514 670 +SS Extra +2 10930000 4 27500000 2 516 690 +Test +2 10930000 4 27500000 2 516 690 +Test +2 10930000 4 27500000 2 516 690 +ALPHA TV +2 10949000 2 27500000 2 7456 7457 +ALPHA CINEMA 1 +2 10949000 2 27500000 2 7476 7477 +ALPHA KIDS +2 10949000 2 27500000 2 7464 7465 +ALPHA PROMO +2 10949000 2 27500000 2 7452 7453 +ALPHA SPORTS 1 +2 10949000 2 27500000 2 7468 7469 +ALPHA SPORTS 2 +2 10949000 2 27500000 2 7472 7473 +ALPHA TEST 1 +2 10949000 2 27500000 2 7460 7461 +ÂÏÕËÇ +2 10949000 2 27500000 2 7496 7497 +ÐÏËÉÓ TV +2 10949000 2 27500000 2 7492 7493 +mtch +2 10983000 2 27500000 2 2817 2818 +ALGERIAN TV +2 11034000 2 27500000 2 1020 1030 +ARTE +2 11034000 2 27500000 2 420 430 +FRANCE 5 +2 11034000 2 27500000 2 120 130 +M6 +2 11034000 2 27500000 2 520 530 +PARIS PREMIERE +2 11034000 2 27500000 2 820 830 +RFO SAT +2 11034000 2 27500000 2 320 330 +TF1 +2 11034000 2 27500000 2 220 230 +TF1 +2 11034000 2 27500000 2 620 630 +Bloomberg +2 11241000 2 27500000 2 162 88 +MTV 1 +2 11241000 2 27500000 2 165 100 +MTV 5 +2 11241000 2 27500000 2 169 116 +MTV F +2 11241000 2 27500000 2 168 112 +MTV H +2 11241000 2 27500000 2 164 96 +MTV Nordic +2 11241000 2 27500000 2 163 92 +MTV2 Pop Channel +2 11241000 2 27500000 2 160 80 +NL Test +2 11241000 2 27500000 2 161 84 +Program 8 / SF +2 11241000 2 27500000 2 167 108 +VH1 +2 11241000 2 27500000 2 166 104 +DISNEY CHANNEL +2 11262000 4 27500000 2 1030 1034 +PLANET +2 11262000 4 27500000 2 1100 1104 +SEASONS +2 11262000 4 27500000 2 1040 1044 +STUDIO UNIVERSAL +2 11262000 4 27500000 2 1050 1054 +CYFRA+ INFO +2 11283000 2 27500000 2 163 92 +EUROSPORT +2 11283000 2 27500000 2 162 88 +FORMULA 1 +2 11283000 2 27500000 2 168 116 +HALLMARK +2 11283000 2 27500000 2 161 84 +HBO +2 11283000 2 27500000 2 160 80 +HBO +2 11283000 2 27500000 2 160 80 +MTV CLASSIC +2 11283000 2 27500000 2 165 100 +NATIONAL GEO +2 11283000 2 27500000 2 166 104 +REALITY TV +2 11283000 2 27500000 2 167 108 +TVN 24 +2 11283000 2 27500000 2 164 96 +ADVENTURE 1 +2 11311000 4 30000000 2 859 860 +AVANTE +2 11311000 4 30000000 2 855 856 +CARTOON / TCM +2 11311000 4 30000000 2 875 876 +CLUB +2 11311000 4 30000000 2 871 872 +CNBC Europe +2 11311000 4 30000000 2 895 896 +EXTREME SPORTS +2 11311000 4 30000000 2 879 880 +NATIONAL GEOGRAPHIC +2 11311000 4 30000000 2 863 864 +PAOK Channel +2 11311000 4 30000000 2 891 892 +PLAYBOY / SPICE +2 11311000 4 30000000 2 887 888 +PRIVATE BLUE / GOLD +2 11311000 4 30000000 2 883 884 +REALITY +2 11311000 4 30000000 2 867 868 +Multivision 1 +2 11661000 2 27500000 2 120 130 +Multivision 2 +2 11661000 2 27500000 2 220 230 +Multivision 3 +2 11661000 2 27500000 2 320 330 +Multivision 4 +2 11661000 2 27500000 2 420 430 +Multivision 5 +2 11661000 2 27500000 2 520 530 +Multivision 6 +2 11661000 2 27500000 2 620 630 +Multivision 7 +2 11661000 2 27500000 2 720 730 +AB 1 +2 11681000 4 27500000 2 160 80 +AB MOTEURS +2 11681000 4 27500000 2 161 84 +ACTION +2 11681000 4 27500000 2 169 116 +ANIMAUX +2 11681000 4 27500000 2 162 88 +CHASSE & PECHE +2 11681000 4 27500000 2 163 92 +ENCYCLOPEDIA +2 11681000 4 27500000 2 171 124 +ESCALES +2 11681000 4 27500000 2 166 104 +FIT/CHAINE HISTOIRE +2 11681000 4 27500000 2 167 108 +MANGAS +2 11681000 4 27500000 2 170 120 +MUSIQUE CLASSIQUE +2 11681000 4 27500000 2 165 100 +RFM-TV +2 11681000 4 27500000 2 168 112 +RTL9 +2 11681000 4 27500000 2 172 128 +XXL +2 11681000 4 27500000 2 164 96 +cart +2 11843000 2 27500000 2 2433 2434 +cult +2 11843000 2 27500000 2 2307 2308 +disc +2 11843000 2 27500000 2 2436 2437 +ersp +2 11843000 2 27500000 2 2317 2309 +tvl +2 11843000 2 27500000 2 2439 2440 +univ +2 11843000 2 27500000 2 2305 2306 +MOSAICO +2 11862000 4 27500000 2 160 0 +P8 +2 11862000 4 27500000 2 163 96 +P9 +2 11862000 4 27500000 2 162 88 +P9 OFDM +2 11862000 4 27500000 2 162 88 +cnn +2 11881000 2 27500000 2 2433 2434 +euro +2 11881000 2 27500000 2 2311 2312 +info +2 11881000 2 27500000 2 517 700 +MPPV_PFShow +2 11881000 2 27500000 2 2563 2564 +viag +2 11881000 2 27500000 2 2308 2309 +CANAL D+ +2 11900000 4 27500000 2 165 100 +INTER CH. +2 11900000 4 27500000 2 163 92 +MILAN CH. +2 11900000 4 27500000 2 162 88 +MOSAICO +2 11900000 4 27500000 2 160 0 +TST3 +2 11900000 4 27500000 2 164 96 +Test +2 11919000 2 27500000 2 515 680 +E5500 Test +2 11938000 4 27500000 2 34 33 +E5710 Test +2 11938000 4 27500000 2 308 256 +NTV Int.-Detsky Mir +2 11938000 4 27500000 2 162 84 +NTV Int.-HTB +2 11938000 4 27500000 2 160 80 +NTV Int.-Nashe Kino +2 11938000 4 27500000 2 161 82 +RTV +2 11938000 4 27500000 2 101 89 +DISCOVERY +2 11958000 2 27500000 2 161 84 +DISNEY CHANNEL +2 11958000 2 27500000 2 160 80 +EUROSPORT +2 11958000 2 27500000 2 162 88 +HAPPY CHANNEL +2 11958000 2 27500000 2 163 92 +MATCH MUSIC +2 11958000 2 27500000 2 164 96 +MTV +2 11958000 2 27500000 2 165 100 +RaiSat CINEMA +2 11958000 2 27500000 2 166 104 +RaiSat SHOW +2 11958000 2 27500000 2 167 108 +cine movie +2 11976000 4 27500000 2 2691 2692 +cine stream +2 11976000 4 27500000 2 2689 2690 +s.verde +2 11976000 4 27500000 2 2561 2562 +Stream2 +2 11976000 4 27500000 2 2433 2434 +mtch +2 11977000 4 27500000 2 2435 2436 +s.verde +2 11977000 4 27500000 2 2561 2562 +CLASSICA +2 11996000 2 27500000 2 160 80 +HALLMARK +2 11996000 2 27500000 2 163 92 +La 7 +2 11996000 2 27500000 2 166 104 +RaiSat ALBUM +2 11996000 2 27500000 2 162 88 +RaiSat ART +2 11996000 2 27500000 2 164 96 +RaiSat FICTION +2 11996000 2 27500000 2 165 100 +RaiSat GAMBERO +2 11996000 2 27500000 2 161 84 +TMC2 +2 11996000 2 27500000 2 167 108 +ALGERIAN TV +2 12015000 4 27500000 2 521 740 +ART CHILDREN/TARAB +2 12015000 4 27500000 2 513 660 +ART MOVIES +2 12015000 4 27500000 2 514 670 +ART MUSIC +2 12015000 4 27500000 2 515 680 +ART SPORT +2 12015000 4 27500000 2 519 720 +LBC EUROPE +2 12015000 4 27500000 2 165 100 +NILE DRAMA +2 12015000 4 27500000 2 516 690 +NILE VARIETY +2 12015000 4 27500000 2 518 710 +VARIETY EUROPE +2 12015000 4 27500000 2 512 650 +CARTOON Network +2 12034000 2 27500000 2 167 108 +RaiSat RAGAZZI +2 12034000 2 27500000 2 166 104 +T+ 16:9 +2 12034000 2 27500000 2 164 96 +T+ BIANCO +2 12034000 2 27500000 2 160 80 +T+ GRIGIO +2 12034000 2 27500000 2 162 88 +T+ NERO +2 12034000 2 27500000 2 161 84 +VETRINA +2 12034000 2 27500000 2 165 100 +BBC +2 12053000 4 27500000 2 161 84 +BBC WORLD +2 12053000 4 27500000 2 161 84 +BLOOMBERG +2 12053000 4 27500000 2 162 88 +CNBC +2 12053000 4 27500000 2 163 92 +CNBC +2 12053000 4 27500000 2 163 92 +CNN +2 12053000 4 27500000 2 160 80 +CNN +2 12053000 4 27500000 2 160 80 +ROCK TV +2 12053000 4 27500000 2 165 100 +SKYNews +2 12053000 4 27500000 2 164 96 +TV5 +2 12053000 4 27500000 2 166 104 +TV5 +2 12053000 4 27500000 2 166 104 +P2 +2 12072000 2 27500000 2 163 92 +P3 +2 12072000 2 27500000 2 164 96 +P4 +2 12072000 2 27500000 2 165 100 +P5 +2 12072000 2 27500000 2 166 104 +P6 +2 12072000 2 27500000 2 167 108 +PALCO 16:9 +2 12072000 2 27500000 2 162 88 +Satisfaction +2 12092000 4 27500000 2 4192 4193 +BBC World +2 12169000 4 27500000 2 514 670 +Cartoon +2 12169000 4 27500000 2 515 680 +CCTV +2 12169000 4 27500000 2 516 690 +Discovery +2 12169000 4 27500000 2 512 650 +ET-1 +2 12169000 4 27500000 2 519 720 +MAD T.V +2 12169000 4 27500000 2 518 710 +NET +2 12169000 4 27500000 2 520 730 +SS Extra +2 12169000 4 27500000 2 513 660 +TCM +2 12169000 4 27500000 2 515 680 +ÂïõëÞ +2 12169000 4 27500000 2 517 700 +GOURMET TV +2 12245000 4 27500000 2 126 136 +MCM Europe +2 12245000 4 27500000 2 122 132 +MEZZO +2 12245000 4 27500000 2 125 135 +TTN +2 12245000 4 27500000 2 124 134 +SLO-TV1 +2 12303000 2 27500000 2 200 201 +SLO-TV2 +2 12303000 2 27500000 2 203 204 +P10 +2 12341000 2 27500000 2 160 80 +P11 +2 12341000 2 27500000 2 161 84 +P12 +2 12341000 2 27500000 2 162 88 +P13 +2 12341000 2 27500000 2 163 92 +P14 +2 12341000 2 27500000 2 164 96 +P15 +2 12341000 2 27500000 2 165 100 +P16 +2 12341000 2 27500000 2 166 104 +PREMIUM +2 12341000 2 27500000 2 167 108 +GAME ONE +2 12380000 2 27500000 2 3027 3037 +Paris Première +2 12380000 2 27500000 2 3021 3031 +SF1 +2 12399000 4 27500000 2 160 80 +SF2 +2 12399000 4 27500000 2 163 92 +SFi +2 12399000 4 27500000 2 167 102 +TSI1 +2 12399000 4 27500000 2 162 88 +TSI2 +2 12399000 4 27500000 2 166 100 +TSR1 +2 12399000 4 27500000 2 161 84 +TSR2 +2 12399000 4 27500000 2 164 96 +CANAL JIMMY +2 12418000 2 27500000 2 162 88 +CINECINEMA1 +2 12418000 2 27500000 2 164 96 +CINECINEMA2 +2 12418000 2 27500000 2 165 100 +CINECLASSICS +2 12418000 2 27500000 2 166 104 +INN +2 12418000 2 27500000 2 163 92 +MARCOPOLO +2 12418000 2 27500000 2 160 80 +MARCOPOLO +2 12418000 2 27500000 2 160 80 +PLANETE +2 12418000 2 27500000 2 161 84 +SEASONS +2 12418000 2 27500000 2 167 108 +SEASONS POL +2 12418000 2 27500000 2 167 109 +WISHLINE +2 12418000 2 27500000 2 168 85 +HRT-TV1 +2 12520000 2 27500000 2 100 101 +HRT-TV2 +2 12520000 2 27500000 2 103 104 +HRT-TV3 +2 12520000 2 27500000 2 105 106 +MMOV_PF1 +2 12616000 4 27500000 2 2823 2822 +MMOV_PF2 +2 12616000 4 27500000 2 2825 2824 +MMOV_PF3 +2 12616000 4 27500000 2 2827 2826 +MMOV_PF4 +2 12616000 4 27500000 2 2829 2828 +MMOV_PF5 +2 12616000 4 27500000 2 2831 2830 +MMOV_PF6 +2 12616000 4 27500000 2 2833 2832 +sc 1 +2 12616000 4 27500000 2 2561 2562 +sc 2 +2 12616000 4 27500000 2 2564 2565 +sc 3 +2 12616000 4 27500000 2 2567 2568 +calcio ch. +2 12635000 2 27500000 2 2697 2694 +MMOV_PF10 +2 12635000 2 27500000 2 2565 2564 +MMOV_PF7 +2 12635000 2 27500000 2 2947 2946 +MMOV_PF8 +2 12635000 2 27500000 2 2949 2948 +MMOV_PF9 +2 12635000 2 27500000 2 2563 2562 +sc 4 +2 12635000 2 27500000 2 2689 2690 +sc 5 +2 12635000 2 27500000 2 2696 2692 +CINE PALACE +2 12692000 4 27500000 2 165 100 +ENCYCLOPEDIA +2 12692000 4 27500000 2 163 92 +MANGAS +2 12692000 4 27500000 2 162 88 +MEDYA TV +2 12692000 4 27500000 2 168 112 +POLAR +2 12692000 4 27500000 2 164 96 +RIRE +2 12692000 4 27500000 2 167 108 +ROMANCE +2 12692000 4 27500000 2 166 104 +MMOV_PF11 +2 12713000 2 27500000 2 2818 2819 +MMOV_PF12 +2 12713000 2 27500000 2 2820 2821 +MMOV_PF13 +2 12713000 2 27500000 2 2693 2692 +MMOV_PF14 +2 12713000 2 27500000 2 2691 2690 +MMOV_PF15 +2 12713000 2 27500000 2 2691 2690 +MMOV_PF16 +2 12713000 2 27500000 2 2691 2690 +cfn +2 12731000 4 27500000 2 523 760 +comedy +2 12731000 4 27500000 2 2308 2309 +duel +2 12731000 4 27500000 2 2689 2690 +fox kids +2 12731000 4 27500000 2 2691 2692 +nat geo +2 12731000 4 27500000 2 2693 2694 +roma ch +2 12731000 4 27500000 2 2310 2311 +RTL9 +0 12012000 2 27500000 2 164 96 +CNNI +2 10930000 4 27500000 2 515 680 +FOX NEWS +0 12441000 2 27500000 2 167 108 +FOX NEWS +0 11686000 2 22000000 3 167 108 +BBC WORLD +0 12266000 4 27500000 3 167 108 +Cartoon Network +0 12246000 2 27500000 2 160 80 +Cartoon Network +0 12168000 2 27500000 2 161 84 +MTV 2 +0 11608000 2 22000000 3 3091 3092 +MTV Base +0 11608000 2 22000000 2 3051 3052 +MTV ESP +0 11608000 2 22000000 2 3011 3012 +MTV Hits +0 11608000 2 22000000 2 3041 3042 +VH1 +0 11608000 2 22000000 2 3061 3062 +VH1 Classic +0 11608000 2 22000000 2 3071 3072 +KiKa +0 11954000 4 27500000 3 310 320 +EUROSPORTNEWS +2 11996000 2 27500000 2 168 112 +M6 Music +2 10757000 2 27500000 2 820 830 diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index e4ef198ef..9cc331830 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_ts.c,v 1.71 2002/12/21 12:56:46 miguelfreitas Exp $ + * $Id: demux_ts.c,v 1.72 2002/12/27 00:53:49 guenter Exp $ * * Demultiplexer for MPEG2 Transport Streams. * @@ -139,8 +139,7 @@ #include "xine_internal.h" #include "xineutils.h" #include "demux.h" - -#define VALID_MRLS "fifo,stdin,dvb,tcp" +#include "events.h" /* #define TS_LOG @@ -285,6 +284,9 @@ typedef struct { demux_ts_spu_lang spu_langs[MAX_NO_SPU_LANGS]; int no_spu_langs; int current_spu_channel; + + /* dvb */ + xine_event_queue_t *event_queue; } demux_ts_t; typedef struct { @@ -1597,6 +1599,33 @@ static void demux_ts_parse_packet (demux_ts_t*this) { } } +/* + * check for pids change events + */ + +static void demux_ts_event_handler (demux_ts_t *this) { + + xine_event_t *event; + + while ((event = xine_event_get (this->event_queue))) { + + + switch (event->type) { + + case XINE_EVENT_PIDS_CHANGE: + + this->videoPid = INVALID_PID; + this->audioPid = INVALID_PID; + this->media_num = 0; + this->send_newpts = 1; + + break; + + } + + xine_event_free (event); + } +} /* * send a piece of data down the fifos @@ -1606,14 +1635,15 @@ static int demux_ts_send_chunk (demux_plugin_t *this_gen) { demux_ts_t*this = (demux_ts_t*)this_gen; + demux_ts_event_handler (this); + demux_ts_parse_packet(this); /* DVBSUB: check if channel has changed. Dunno if I should, or * even could, lock the xine object. */ - if (this->stream->spu_channel != this->current_spu_channel) - { - demux_ts_update_spu_channel(this); - } + if (this->stream->spu_channel != this->current_spu_channel) { + demux_ts_update_spu_channel(this); + } return this->status; } @@ -1629,6 +1659,9 @@ static void demux_ts_dispose (demux_plugin_t *this_gen) { if (this->media[i].buf != NULL) this->media[i].buf->free_buffer(this->media[i].buf); } + + xine_event_dispose_queue (this->event_queue); + free(this_gen); } @@ -1953,6 +1986,9 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, this->spu_pid = INVALID_PID; this->no_spu_langs = 0; this->current_spu_channel = this->stream->spu_channel; + + /* dvb */ + this->event_queue = xine_event_new_queue (this->stream); return &this->demux_plugin; } diff --git a/src/input/Makefile.am b/src/input/Makefile.am index d19cf63e5..1304163ab 100644 --- a/src/input/Makefile.am +++ b/src/input/Makefile.am @@ -3,9 +3,9 @@ ## if HAVE_DVDNAV -SUBDIRS = libreal librtsp libdvdread +SUBDIRS = ost libreal librtsp libdvdread else -SUBDIRS = libreal librtsp libdvdread libdvdnav +SUBDIRS = ost libreal librtsp libdvdread libdvdnav endif LIBTOOL = $(SHELL) $(top_builddir)/libtool-nofpic @@ -48,6 +48,7 @@ lib_LTLIBRARIES = \ $(in_vcd) \ xineplug_inp_mms.la \ xineplug_inp_stdin_fifo.la \ + xineplug_inp_dvb.la \ xineplug_inp_pnm.la \ xineplug_inp_rtsp.la \ xineplug_inp_net.la @@ -104,6 +105,10 @@ xineplug_inp_pnm_la_SOURCES = input_pnm.c net_buf_ctrl.c pnm.c xineplug_inp_pnm_la_LIBADD = $(XINE_LIB) xineplug_inp_pnm_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@ +xineplug_inp_dvb_la_SOURCES = input_dvb.c net_buf_ctrl.c +xineplug_inp_dvb_la_LIBADD = $(XINE_LIB) +xineplug_inp_dvb_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@ + xineplug_inp_rtsp_la_SOURCES = input_rtsp.c net_buf_ctrl.c xineplug_inp_rtsp_la_LIBADD = $(XINE_LIB) libreal/libreal.la librtsp/librtsp.la xineplug_inp_rtsp_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@ diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c new file mode 100644 index 000000000..12ad6dd09 --- /dev/null +++ b/src/input/input_dvb.c @@ -0,0 +1,865 @@ +/* + * Copyright (C) 2000-2002 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * + * input plugin for Digital TV (Digital Video Broadcast - DVB) devices + * e.g. Hauppauge WinTV Nova supported by DVB drivers from Convergence + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <sys/socket.h> +#include <errno.h> +#include <sys/time.h> +#include <sys/ioctl.h> +#include <sys/poll.h> + +#include "ost/dmx.h" +#include "ost/sec.h" +#include "ost/frontend.h" + +#include "xine_internal.h" +#include "xineutils.h" +#include "events.h" +#include "input_plugin.h" +#include "net_buf_ctrl.h" + +/* +#define LOG +*/ + +extern int errno; + +#define FRONTEND_DEVICE "/dev/ost/frontend" +#define SEC_DEVICE "/dev/ost/sec" +#define DEMUX_DEVICE "/dev/ost/demux" +#define DVR_DEVICE "/dev/ost/dvr" + +#define BUFSIZE 4096 + +#define NOPID 0xffff + +typedef struct { + int fd_frontend; + int fd_sec; + int fd_demuxa, fd_demuxv, fd_demuxtt; + + FrontendInfo feinfo; + FrontendParameters front_param; + + struct secCommand scmd; + struct secCmdSequence scmds; + struct dmxPesFilterParams pesFilterParamsV; + struct dmxPesFilterParams pesFilterParamsA; + struct dmxPesFilterParams pesFilterParamsTT; + +} tuner_t; + +typedef struct { + + char *name; + int freq; /* freq - lof */ + int tone; /* SEC_TONE_ON/OFF */ + int volt; /* SC_VOLTAGE_13/18 */ + int diseqcnr; + int srate; + int fec; + int vpid; + int apid; + +} channel_t; + +typedef struct { + + input_class_t input_class; + + xine_t *xine; + + char *mrls[2]; + +} dvb_input_class_t; + +typedef struct { + input_plugin_t input_plugin; + + dvb_input_class_t *cls; + + xine_stream_t *stream; + + char *mrl; + + off_t curpos; + + nbc_t *nbc; + + tuner_t *tuner; + channel_t *channels; + int fd; + int num_channels; + int channel; + pthread_mutex_t mutex; + + osd_object_t *osd; + + xine_event_queue_t *event_queue; + + /* scratch buffer for forward seeking */ + char seek_buf[BUFSIZE]; + + int out_fd; /* recording function */ + +} dvb_input_plugin_t; + + +static tuner_t *tuner_init () { + + tuner_t *this; + + this = malloc (sizeof (tuner_t)); + + if ((this->fd_frontend = open(FRONTEND_DEVICE, O_RDWR)) < 0){ + perror("FRONTEND DEVICE: "); + free (this); + return NULL; + } + + ioctl (this->fd_frontend, FE_GET_INFO, &this->feinfo); + if (this->feinfo.type==FE_QPSK) { + + if ((this->fd_sec = open (SEC_DEVICE, O_RDWR)) < 0) { + perror ("SEC DEVICE: "); + free (this); + return NULL; + } + } + + this->fd_demuxtt = open (DEMUX_DEVICE, O_RDWR); + if (this->fd_demuxtt < 0) { + perror ("DEMUX DEVICE tt: "); + free (this); + return NULL; + } + + this->fd_demuxa = open (DEMUX_DEVICE, O_RDWR); + if (this->fd_demuxa < 0) { + perror ("DEMUX DEVICE audio: "); + free (this); + return NULL; + } + + this->fd_demuxv=open (DEMUX_DEVICE, O_RDWR); + if (this->fd_demuxv < 0) { + perror ("DEMUX DEVICE video: "); + free (this); + return NULL; + } + + return this; +} + +static void tuner_dispose (tuner_t *this) { + + close (this->fd_frontend); + close (this->fd_sec); + close (this->fd_demuxa); + close (this->fd_demuxv); + close (this->fd_demuxtt); + + free (this); +} + +static void tuner_set_vpid (tuner_t *this, ushort vpid) { + + if (vpid==0 || vpid==NOPID || vpid==0x1fff) { + ioctl (this->fd_demuxv, DMX_STOP, 0); + return; + } + + this->pesFilterParamsV.pid = vpid; + this->pesFilterParamsV.input = DMX_IN_FRONTEND; + this->pesFilterParamsV.output = DMX_OUT_TS_TAP; + this->pesFilterParamsV.pesType = DMX_PES_VIDEO; + this->pesFilterParamsV.flags = DMX_IMMEDIATE_START; + if (ioctl(this->fd_demuxv, DMX_SET_PES_FILTER, + &this->pesFilterParamsV) < 0) + perror("set_vpid"); +} + +static void tuner_set_apid (tuner_t *this, ushort apid) { + if (apid==0 || apid==NOPID || apid==0x1fff) { + ioctl (this->fd_demuxa, DMX_STOP, apid); + return; + } + + this->pesFilterParamsA.pid = apid; + this->pesFilterParamsA.input = DMX_IN_FRONTEND; + this->pesFilterParamsA.output = DMX_OUT_TS_TAP; + this->pesFilterParamsA.pesType = DMX_PES_AUDIO; + this->pesFilterParamsA.flags = DMX_IMMEDIATE_START; + if (ioctl (this->fd_demuxa, DMX_SET_PES_FILTER, + &this->pesFilterParamsA) < 0) + perror("set_apid"); +} + +static void tuner_set_ttpid (tuner_t *this, ushort ttpid) { + + if (ttpid==0 || ttpid== NOPID || ttpid==0x1fff) { + ioctl (this->fd_demuxtt, DMX_STOP, 0); + return; + } + this->pesFilterParamsTT.pid = ttpid; + this->pesFilterParamsTT.input = DMX_IN_FRONTEND; + this->pesFilterParamsTT.output = DMX_OUT_DECODER; + this->pesFilterParamsTT.pesType = DMX_PES_TELETEXT; + this->pesFilterParamsTT.flags = DMX_IMMEDIATE_START; + if (ioctl(this->fd_demuxtt, DMX_SET_PES_FILTER, + &this->pesFilterParamsTT) < 0) { + /* printf("PID=%04x\n", ttpid); */ + perror("set_ttpid"); + } +} + +static void tuner_get_front (tuner_t *this) { + tuner_set_vpid (this, 0); + tuner_set_apid (this, 0); + tuner_set_ttpid(this, 0); + this->scmds.voltage = SEC_VOLTAGE_13; + this->scmds.miniCommand = SEC_MINI_NONE; + this->scmds.continuousTone = SEC_TONE_OFF; + this->scmds.numCommands = 1; + this->scmds.commands = &this->scmd; +} + +static void tuner_set_diseqc_nr (tuner_t *this, int nr) { + + this->scmd.type=0; + this->scmd.u.diseqc.addr = 0x10; + this->scmd.u.diseqc.cmd = 0x38; + this->scmd.u.diseqc.numParams = 1; + this->scmd.u.diseqc.params[0] = 0xF0 | ((nr * 4) & 0x0F) | + (this->scmds.continuousTone == SEC_TONE_ON ? 1 : 0) | + (this->scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0); +} + +static void tuner_set_tp (tuner_t *this, int freq, int tone, + int volt, int diseqcnr, + int srate, int fec) { + + static const uint8_t rfectab[9] = {1,2,3,0,4,0,5,0,0}; + + this->front_param.Frequency = freq; + this->scmds.continuousTone = tone; + this->scmds.voltage = volt; + tuner_set_diseqc_nr (this, diseqcnr); + this->front_param.u.qpsk.SymbolRate = srate; + this->front_param.u.qpsk.FEC_inner = (CodeRate)rfectab[fec]; + this->front_param.Inversion = INVERSION_AUTO; +} + +static int tuner_tune_it (tuner_t *this, FrontendParameters *front_param) { + FrontendEvent event; + struct pollfd pfd[1]; + + if (ioctl(this->fd_frontend, FE_SET_FRONTEND, front_param) <0) + perror("setfront front"); + + pfd[0].fd=this->fd_frontend; + pfd[0].events=POLLIN; + if (poll(pfd,1,2000)) { + if (pfd[0].revents & POLLIN){ + if (ioctl(this->fd_frontend, FE_GET_EVENT, &event) + == -EBUFFEROVERFLOW){ + perror("fe get event"); + return 0; + } + switch(event.type){ + case FE_UNEXPECTED_EV: + perror("unexpected event\n"); + return 0; + case FE_FAILURE_EV: + perror("failure event\n"); + return 0; + + case FE_COMPLETION_EV: + fprintf(stderr, "completion event\n"); + return 1; + } + } + } + return 0; +} + + +static int tuner_set_front (tuner_t *this) { + this->scmds.miniCommand = SEC_MINI_NONE; + this->scmds.numCommands=1; + this->scmds.commands=&this->scmd; + + tuner_set_vpid (this, 0); + tuner_set_apid (this, 0); + tuner_set_ttpid(this,0); + + if (this->feinfo.type==FE_QPSK) { + if (ioctl(this->fd_sec, SEC_SEND_SEQUENCE, &this->scmds) < 0) + perror("setfront sec"); + usleep(70000); + } + return tuner_tune_it(this, &this->front_param); +} + +static void print_channel (channel_t *channel) { + + printf ("input_dvb: channel '%s' diseqc %d freq %d volt %d srate %d fec %d vpid %d apid %d\n", + channel->name, + channel->diseqcnr, + channel->freq, + channel->volt, + channel->srate, + channel->fec, + channel->vpid, + channel->apid); + +} + + +static int tuner_set_channel (tuner_t *this, + channel_t *c) { + + print_channel (c); + + tuner_get_front (this); + tuner_set_tp (this, c->freq, c->tone, c->volt, c->diseqcnr, c->srate, c->fec); + if (!tuner_set_front (this)) + return 0; + + tuner_set_vpid (this, c->vpid); + tuner_set_apid (this, c->apid); + tuner_set_ttpid (this, 0); + + return 1; /* fixme: error handling */ +} + +static void osd_show_channel (dvb_input_plugin_t *this) { + + printf ("input_dvb: channel=%d\n", this->channel); + +#if 0 /* FIXME */ + int i, channel ; + + if (!this->osd) { + this->osd = this->stream->osd_renderer->new_object (this->stream->osd_renderer, + 410, 410); + this->stream->osd_renderer->set_position (this->osd, 20, 20); + this->stream->osd_renderer->set_font (this->osd, "cetus", 32); + this->stream->osd_renderer->set_text_palette (this->osd, + TEXTPALETTE_WHITE_NONE_TRANSLUCID, + OSD_TEXT3); + } + + this->stream->osd_renderer->filled_rect (this->osd, 0, 0, 395, 400, 2); + + channel = this->channel - 5; + + for (i=0; i<11; i++) { + + if ( (channel >= 0) && (channel < this->num_channels) ) + this->stream->osd_renderer->render_text (this->osd, 10, 10+i*35, + this->channels[channel].name, + OSD_TEXT3); + channel ++; + } + + this->stream->osd_renderer->line (this->osd, 5, 183, 390, 183, 10); + this->stream->osd_renderer->line (this->osd, 5, 183, 5, 219, 10); + this->stream->osd_renderer->line (this->osd, 5, 219, 390, 219, 10); + this->stream->osd_renderer->line (this->osd, 390, 183, 390, 219, 10); + + this->stream->osd_renderer->show (this->osd, 0); +#endif + +} + +static void switch_channel (dvb_input_plugin_t *this) { + + xine_event_t event; + xine_pids_data_t data; + + pthread_mutex_lock (&this->mutex); + + close (this->fd); + + if (!tuner_set_channel (this->tuner, &this->channels[this->channel])) { + printf ("input_dvb: tuner_set_channel failed\n"); + pthread_mutex_unlock (&this->mutex); + return; + } + + event.type = XINE_EVENT_PIDS_CHANGE; + data.vpid = this->channels[this->channel].vpid; + data.apid = this->channels[this->channel].apid; + event.data = &data; + event.data_length = sizeof (xine_pids_data_t); + + printf ("input_dvb: sending event\n"); + + xine_event_send (this->stream, &event); + + this->fd = open (DVR_DEVICE, O_RDONLY); + + pthread_mutex_unlock (&this->mutex); + +#if 0 /* FIXME */ + this->stream->osd_renderer->hide (this->osd, 0); +#endif +} + +static void dvb_event_handler (dvb_input_plugin_t *this) { + + xine_event_t *event; + + while ((event = xine_event_get (this->event_queue))) { + + if (this->fd<0) { + xine_event_free (event); + return; + } + + switch (event->type) { + + case XINE_EVENT_INPUT_NEXT: + if (this->channel < (this->num_channels-1)) + this->channel++; + osd_show_channel (this); + break; + + case XINE_EVENT_INPUT_PREVIOUS: + if (this->channel>0) + this->channel--; + osd_show_channel (this); + break; + + case XINE_EVENT_INPUT_DOWN: + if (this->channel < (this->num_channels-1)) { + this->channel++; + switch_channel (this); + } + break; + + case XINE_EVENT_INPUT_UP: + if (this->channel>0) { + this->channel--; + switch_channel (this); + } + break; + + case XINE_EVENT_INPUT_SELECT: + switch_channel (this); + break; + + case XINE_EVENT_INPUT_MENU3: + this->stream->osd_renderer->hide (this->osd, 0); + break; + +#if 0 + default: + printf ("input_dvb: got an event, type 0x%08x\n", event->type); +#endif + } + + xine_event_free (event); + } +} + +static off_t dvb_plugin_read (input_plugin_t *this_gen, + char *buf, off_t len) { + dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; + off_t n, total; + + dvb_event_handler (this); + +#ifdef LOG + printf ("input_dvb: reading %lld bytes...\n", len); +#endif + + nbc_check_buffers (this->nbc); + + pthread_mutex_lock( &this->mutex ); /* protect agains channel changes */ + total=0; + while (total<len){ + n = read (this->fd, &buf[total], len-total); + +#ifdef LOG + printf ("input_dvb: got %lld bytes (%lld/%lld bytes read)\n", + n,total,len); +#endif + + if (n > 0){ + this->curpos += n; + total += n; + } else if (n<0 && errno!=EAGAIN) { + pthread_mutex_unlock( &this->mutex ); + return total; + } + } + + if (this->out_fd>0) + write (this->out_fd, buf, total); + + pthread_mutex_unlock( &this->mutex ); + return total; +} + +static buf_element_t *dvb_plugin_read_block (input_plugin_t *this_gen, + fifo_buffer_t *fifo, off_t todo) { + /* dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; */ + buf_element_t *buf = fifo->buffer_pool_alloc (fifo); + int total_bytes; + + +#if 0 + if (this->report_pids) { + + printf ("input_dvb: reporting pids %d (video), %d (audio)\n", + this->channels[this->channel].vpid, + this->channels[this->channel].apid); + + this->report_pids = 0; + + } +#endif + + buf->content = buf->mem; + buf->type = BUF_DEMUX_BLOCK; + + total_bytes = dvb_plugin_read (this_gen, buf->content, todo); + + if (total_bytes != todo) { + buf->free_buffer (buf); + return NULL; + } + + buf->size = total_bytes; + + return buf; +} + +static off_t dvb_plugin_seek (input_plugin_t *this_gen, off_t offset, + int origin) { + + dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; + +#ifdef LOG + printf ("input_dvb: seek %lld bytes, origin %d\n", + offset, origin); +#endif + + /* only relative forward-seeking is implemented */ + + if ((origin == SEEK_CUR) && (offset >= 0)) { + + for (;((int)offset) - BUFSIZE > 0; offset -= BUFSIZE) { + this->curpos += dvb_plugin_read (this_gen, this->seek_buf, BUFSIZE); + } + + this->curpos += dvb_plugin_read (this_gen, this->seek_buf, offset); + } + + return this->curpos; +} + +static off_t dvb_plugin_get_length (input_plugin_t *this_gen) { + return 0; +} + +static uint32_t dvb_plugin_get_capabilities (input_plugin_t *this_gen) { + return 0; /* where did INPUT_CAP_AUTOPLAY go ?!? */ +} + +static uint32_t dvb_plugin_get_blocksize (input_plugin_t *this_gen) { + return 0; +} + +static off_t dvb_plugin_get_current_pos (input_plugin_t *this_gen){ + dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; + + return this->curpos; +} + +static void dvb_plugin_dispose (input_plugin_t *this_gen) { + dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; + + close(this->fd); + this->fd = -1; + + if (this->nbc) { + nbc_close (this->nbc); + this->nbc = NULL; + } + + if (this->out_fd>0) + close (this->out_fd); + + xine_event_dispose_queue (this->event_queue); + + free (this->mrl); + free (this); +} + +static char* dvb_plugin_get_mrl (input_plugin_t *this_gen) { + dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; + + return this->mrl; +} + +static int dvb_plugin_get_optional_data (input_plugin_t *this_gen, + void *data, int data_type) { + + return INPUT_OPTIONAL_UNSUPPORTED; +} + +static channel_t *load_channels (int *num_ch) { + + FILE *f; + unsigned char str[BUFSIZE]; + unsigned char filename[BUFSIZE]; + channel_t *channels; + int num_channels; + + snprintf (filename, BUFSIZE, "%s/.xine/dvb_channels", xine_get_homedir()); + + f = fopen (filename, "rb"); + if (!f) { + printf ("input_dvb: failed to open dvb channel file '%s'\n", filename); + return NULL; + } + + /* + * count and alloc channels + */ + num_channels = 0; + while ( fgets (str, BUFSIZE, f)) { + fgets (str, BUFSIZE, f); + num_channels++; + } + fclose (f); + printf ("input_dvb: %d channels found.\n", num_channels); + + channels = malloc (sizeof (channel_t) * num_channels); + + /* + * load channel list + */ + + f = fopen (filename, "rb"); + num_channels = 0; + while ( fgets (str, BUFSIZE, f)) { + + int freq; + + channels[num_channels].name = strdup (str); + + fgets (str, BUFSIZE, f); + + sscanf (str, "%d %d %d %d %d %d %d\n", + &channels[num_channels].diseqcnr, + &freq, + &channels[num_channels].volt, + &channels[num_channels].srate, + &channels[num_channels].fec, + &channels[num_channels].vpid, + &channels[num_channels].apid); + + if (freq > 11700000) { + channels[num_channels].freq = freq - 10600000; + channels[num_channels].tone = SEC_TONE_ON; + } else { + channels[num_channels].freq = freq - 9750000; + channels[num_channels].tone = SEC_TONE_OFF; + } + +#ifdef LOG + printf ("input: dvb channel %s loaded\n", channels[num_channels].name); +#endif + + num_channels++; + } + + *num_ch = num_channels; + return channels; +} + +static input_plugin_t *open_plugin (input_class_t *cls_gen, + xine_stream_t *stream, + const char *data) { + + dvb_input_class_t *cls = (dvb_input_class_t *) cls_gen; + dvb_input_plugin_t *this; + tuner_t *tuner; + channel_t *channels; + int num_channels; + char *mrl = (char *) data; + + if (strncasecmp (mrl, "dvb:/",5)) + return NULL; + + if ( !(tuner = tuner_init()) ) { + printf ("input_dvb: cannot open dvb device\n"); + return NULL; + } + + if ( !(channels = load_channels(&num_channels)) ) { + tuner_dispose (tuner); + return NULL; + } + + this = (dvb_input_plugin_t *) xine_xmalloc (sizeof(dvb_input_plugin_t)); + + this->tuner = tuner; + this->channels = channels; + + if ( sscanf (mrl, "dvb://%d", &this->channel) != 1) + this->channel = 0; + + if (!tuner_set_channel (this->tuner, &this->channels[this->channel])) { + printf ("input_dvb: tuner_set_channel failed\n"); + free (this); + return NULL; + } + + if ((this->fd = open (DVR_DEVICE, O_RDONLY)) < 0){ + printf ("input_dvb: cannot open dvr device '%s'\n", DVR_DEVICE); + free (this); + return NULL; + } + + this->mrl = strdup(mrl); + + this->curpos = 0; + this->nbc = nbc_init (stream); + this->stream = stream; + this->tuner = tuner; + this->channels = channels; + this->num_channels = num_channels; + this->osd = NULL; + + this->input_plugin.get_capabilities = dvb_plugin_get_capabilities; + this->input_plugin.read = dvb_plugin_read; + this->input_plugin.read_block = dvb_plugin_read_block; + this->input_plugin.seek = dvb_plugin_seek; + this->input_plugin.get_current_pos = dvb_plugin_get_current_pos; + this->input_plugin.get_length = dvb_plugin_get_length; + this->input_plugin.get_blocksize = dvb_plugin_get_blocksize; + this->input_plugin.get_mrl = dvb_plugin_get_mrl; + this->input_plugin.get_optional_data = dvb_plugin_get_optional_data; + this->input_plugin.dispose = dvb_plugin_dispose; + this->input_plugin.input_class = cls_gen; + this->cls = cls; + + /* + xine_register_event_listener (this->stream, dvb_event_listener, this); + */ + + pthread_mutex_init (&this->mutex, NULL); + +#if 0 + this->out_fd = open ("foo.ts", O_CREAT | O_WRONLY | O_TRUNC, 0644); +#else + this->out_fd = 0; +#endif + + this->event_queue = xine_event_new_queue (this->stream); + + return (input_plugin_t *) this; +} + +/* + * dvb input plugin class stuff + */ + +static char *dvb_class_get_description (input_class_t *this_gen) { + return _("DVB (Digital TV) input plugin"); +} + +static char *dvb_class_get_identifier (input_class_t *this_gen) { + return "dvb"; +} + +static void dvb_class_dispose (input_class_t *this_gen) { + + dvb_input_class_t *cls = (dvb_input_class_t *) this_gen; + + free (cls->mrls[0]); + + free (cls); +} + +static int dvb_class_eject_media (input_class_t *this_gen) { + return 1; +} + +static char ** dvb_class_get_autoplay_list (input_class_t *this_gen, + int *num_files) { + dvb_input_class_t *cls = (dvb_input_class_t *) this_gen; + + *num_files = 1; + return cls->mrls; +} + +static void *init_class (xine_t *xine, void *data) { + + dvb_input_class_t *this; + + this = (dvb_input_class_t *) xine_xmalloc (sizeof (dvb_input_class_t)); + + this->xine = xine; + + this->input_class.open_plugin = open_plugin; + this->input_class.get_identifier = dvb_class_get_identifier; + this->input_class.get_description = dvb_class_get_description; + this->input_class.get_dir = NULL; + this->input_class.get_autoplay_list = dvb_class_get_autoplay_list; + this->input_class.dispose = dvb_class_dispose; + this->input_class.eject_media = dvb_class_eject_media; + + this->mrls[0] = "dvb://"; + this->mrls[1] = 0; + + printf ("input_dvb: init class succeeded\n"); + + return this; +} + + +/* + * exported plugin catalog entry + */ + +plugin_info_t xine_plugin_info[] = { + /* type, API, "name", version, special_info, init_function */ + { PLUGIN_INPUT, 11, "DVB", XINE_VERSION_CODE, NULL, init_class }, + { PLUGIN_NONE, 0, "", 0, NULL, NULL } +}; diff --git a/src/input/ost/Makefile.am b/src/input/ost/Makefile.am new file mode 100644 index 000000000..7c179a4af --- /dev/null +++ b/src/input/ost/Makefile.am @@ -0,0 +1,22 @@ +noinst_HEADERS = \ + demux.h \ + dmx.h \ + frontend.h \ + sec.h + +debug: + @list='$(SUBDIRS)'; for subdir in $$list; do \ + (cd $$subdir && $(MAKE) $@) || exit;\ + done; + @$(MAKE) CFLAGS="$(DEBUG_CFLAGS)" + +install-debug: debug + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +mostlyclean-generic: + -rm -f *~ \#* .*~ .\#* + +maintainer-clean-generic: + -@echo "This command is intended for maintainers to use;" + -@echo "it deletes files that may require special tools to rebuild." + -rm -f Makefile.in diff --git a/src/input/ost/README b/src/input/ost/README new file mode 100644 index 000000000..5fc680215 --- /dev/null +++ b/src/input/ost/README @@ -0,0 +1,9 @@ +This directories contains header files for the Linux DVB drivers +from convergence integrated media GmbH + + Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> + & Marcus Metzler <marcus@convergence.de> + for convergence integrated media GmbH + +released under the LGPL license. For details see the individual +header files. diff --git a/src/input/ost/ca.h b/src/input/ost/ca.h new file mode 100644 index 000000000..226ef5c09 --- /dev/null +++ b/src/input/ost/ca.h @@ -0,0 +1,84 @@ +/* + * ca.h + * + * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> + * & Marcus Metzler <marcus@convergence.de> + for convergence integrated media GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Lesser 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. + * + */ + +#ifndef _OST_CA_H_ +#define _OST_CA_H_ + +/* slot interface types and info */ + +typedef struct ca_slot_info_s { + int num; /* slot number */ + + int type; /* CA interface this slot supports */ +#define CA_CI 1 /* CI high level interface */ +#define CA_CI_LINK 2 /* CI link layer level interface */ +#define CA_CI_PHYS 4 /* CI physical layer level interface */ +#define CA_SC 128 /* simple smart card interface */ + + unsigned int flags; +#define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */ +#define CA_CI_MODULE_READY 2 +} ca_slot_info_t; + + +/* descrambler types and info */ + +typedef struct ca_descr_info_s { + unsigned int num; /* number of available descramblers (keys) */ + unsigned int type; /* type of supported scrambling system */ +#define CA_ECD 1 +#define CA_NDS 2 +#define CA_DSS 4 +} ca_descr_info_t; + +typedef struct ca_cap_s { + unsigned int slot_num; /* total number of CA card and module slots */ + unsigned int slot_type; /* OR of all supported types */ + unsigned int descr_num; /* total number of descrambler slots (keys) */ + unsigned int descr_type; /* OR of all supported types */ +} ca_cap_t; + +/* a message to/from a CI-CAM */ +typedef struct ca_msg_s { + unsigned int index; + unsigned int type; + unsigned int length; + unsigned char msg[256]; +} ca_msg_t; + +typedef struct ca_descr_s { + unsigned int index; + unsigned int parity; + unsigned char cw[8]; +} ca_descr_t; + +#define CA_RESET _IOW('o', 128, int) +#define CA_GET_CAP _IOR('o', 129, ca_cap_t *) +#define CA_GET_SLOT_INFO _IOR('o', 130, ca_slot_info_t *) +#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t *) +#define CA_GET_MSG _IOR('o', 132, ca_msg_t *) +#define CA_SEND_MSG _IOW('o', 133, ca_msg_t *) +#define CA_SET_DESCR _IOW('o', 134, ca_descr_t *) + +#endif + diff --git a/src/input/ost/demux.h b/src/input/ost/demux.h new file mode 100644 index 000000000..758e921b6 --- /dev/null +++ b/src/input/ost/demux.h @@ -0,0 +1,346 @@ +/* * demux.h * * Copyright (c) 2000 Nokia Research Center + * Tampere, FINLAND + * + * Project: + * Universal Broadcast Access + * + * Contains: + * Type definitions of a Linux kernel-level API for filtering MPEG-2 TS + * packets and MPEG-2 sections. Support for PES packet filtering will be + * added later. + * + * History: + * 12.01.2000/JPL File created - Initial version. + * 18.02.2000/JPL Minor corrections. + * 21.02.2000/JPL DMX_NAME_SIZE and dmx_in_use() removed, typos fixed, + * some names changed. + * 23.02.2000/JPL Added a parameter indicating the callback source in + * the callback functions. + * 10.03.2000/JPL Added the macros DMX_DIR_ENTRY() and DMX_FE_ENTRY(). + * 15.03.2000/JPL Added the capabilities field to dmx_demux_t. + * 22.03.2000/JPL Corrected the callback parameter in the + * allocate_x_feed() functions. + * 03.04.2000/JPL Added support for optional resource conflict resolution + * and scarce resource handling. + * 05.04.2000/JPL Changed the dmx_resolve_conflict() to use resource + * type as a parameter. + * 12.04.2000/JPL Added a second buffer parameter for dmx_x_callback() + * functions to better handle buffer wrapping. + * 26.04.2000/JPL Added functions for section-level descrambling. + * 03.09.2000/JPL Removed support for conflict resolution and scarce + * resource handling. Otherwise only minor changes to + * data structures and function prototypes. + * + * + * Author: + * Juha-Pekka Luoma (JPL) + * Nokia Research Center + * + * Notes: + * + * 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. + * + */ +/* $Id: demux.h,v 1.1 2002/12/27 00:53:50 guenter Exp $ */ + +#ifndef __DEMUX_H +#define __DEMUX_H + +#ifndef __KERNEL__ +#define __KERNEL__ +#endif + +#include <linux/types.h> /* __u8, __u16, ... */ +#include <linux/list.h> /* list_entry(), struct list_head */ +#include <linux/time.h> /* struct timespec */ +#include <linux/errno.h> /* Function return values */ + +/*--------------------------------------------------------------------------*/ +/* Common definitions */ +/*--------------------------------------------------------------------------*/ + +/* + * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter. + */ + +#ifndef DMX_MAX_FILTER_SIZE +#define DMX_MAX_FILTER_SIZE 18 +#endif +/* + * dmx_success_t: Success codes for the Demux Callback API. + */ + +typedef enum { + DMX_OK = 0, /* Received Ok */ + DMX_LENGTH_ERROR, /* Incorrect length */ + DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */ + DMX_CRC_ERROR, /* Incorrect CRC */ + DMX_FRAME_ERROR, /* Frame alignment error */ + DMX_FIFO_ERROR, /* Receiver FIFO overrun */ + DMX_MISSED_ERROR /* Receiver missed packet */ +} dmx_success_t; + +/*--------------------------------------------------------------------------*/ +/* TS packet reception */ +/*--------------------------------------------------------------------------*/ + +/* TS filter type for set_type() */ + +#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */ +#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS + payload (<=184 bytes per packet) to callback */ +#define TS_DECODER 4 /* send stream to built-in decoder (if present) */ + +/* PES type for filters which write to built-in decoder */ +/* these should be kept identical to the types in dmx.h */ + +typedef enum +{ + DMX_TS_PES_AUDIO, /* also send packets to audio decoder (if it exists) */ + DMX_TS_PES_VIDEO, /* ... */ + DMX_TS_PES_TELETEXT, + DMX_TS_PES_SUBTITLE, + DMX_TS_PES_PCR, + DMX_TS_PES_OTHER, +} dmx_ts_pes_t; + + +struct dmx_ts_feed_s { + int is_filtering; /* Set to non-zero when filtering in progress */ + struct dmx_demux_s* parent; /* Back-pointer */ + void* priv; /* Pointer to private data of the API client */ + int (*set) (struct dmx_ts_feed_s* feed, + __u16 pid, + size_t callback_length, + size_t circular_buffer_size, + int descramble, + struct timespec timeout); + int (*start_filtering) (struct dmx_ts_feed_s* feed); + int (*stop_filtering) (struct dmx_ts_feed_s* feed); + int (*set_type) (struct dmx_ts_feed_s* feed, + int type, + dmx_ts_pes_t pes_type); +}; + +typedef struct dmx_ts_feed_s dmx_ts_feed_t; + +/*--------------------------------------------------------------------------*/ +/* PES packet reception (not supported yet) */ +/*--------------------------------------------------------------------------*/ + +typedef struct dmx_pes_filter_s { + struct dmx_pes_s* parent; /* Back-pointer */ + void* priv; /* Pointer to private data of the API client */ +} dmx_pes_filter_t; + +typedef struct dmx_pes_feed_s { + int is_filtering; /* Set to non-zero when filtering in progress */ + struct dmx_demux_s* parent; /* Back-pointer */ + void* priv; /* Pointer to private data of the API client */ + int (*set) (struct dmx_pes_feed_s* feed, + __u16 pid, + size_t circular_buffer_size, + int descramble, + struct timespec timeout); + int (*start_filtering) (struct dmx_pes_feed_s* feed); + int (*stop_filtering) (struct dmx_pes_feed_s* feed); + int (*allocate_filter) (struct dmx_pes_feed_s* feed, + dmx_pes_filter_t** filter); + int (*release_filter) (struct dmx_pes_feed_s* feed, + dmx_pes_filter_t* filter); +} dmx_pes_feed_t; + +/*--------------------------------------------------------------------------*/ +/* Section reception */ +/*--------------------------------------------------------------------------*/ + +typedef struct { + __u8 filter_value [DMX_MAX_FILTER_SIZE]; + __u8 filter_mask [DMX_MAX_FILTER_SIZE]; + struct dmx_section_feed_s* parent; /* Back-pointer */ + void* priv; /* Pointer to private data of the API client */ +} dmx_section_filter_t; + +struct dmx_section_feed_s { + int is_filtering; /* Set to non-zero when filtering in progress */ + struct dmx_demux_s* parent; /* Back-pointer */ + void* priv; /* Pointer to private data of the API client */ + int (*set) (struct dmx_section_feed_s* feed, + __u16 pid, + size_t circular_buffer_size, + int descramble, + int check_crc); + int (*allocate_filter) (struct dmx_section_feed_s* feed, + dmx_section_filter_t** filter); + int (*release_filter) (struct dmx_section_feed_s* feed, + dmx_section_filter_t* filter); + int (*start_filtering) (struct dmx_section_feed_s* feed); + int (*stop_filtering) (struct dmx_section_feed_s* feed); +}; +typedef struct dmx_section_feed_s dmx_section_feed_t; + +/*--------------------------------------------------------------------------*/ +/* Callback functions */ +/*--------------------------------------------------------------------------*/ + +typedef int (*dmx_ts_cb) ( __u8 * buffer1, + size_t buffer1_length, + __u8 * buffer2, + size_t buffer2_length, + dmx_ts_feed_t* source, + dmx_success_t success); + +typedef int (*dmx_section_cb) ( __u8 * buffer1, + size_t buffer1_len, + __u8 * buffer2, + size_t buffer2_len, + dmx_section_filter_t * source, + dmx_success_t success); + +typedef int (*dmx_pes_cb) ( __u8 * buffer1, + size_t buffer1_len, + __u8 * buffer2, + size_t buffer2_len, + dmx_pes_filter_t* source, + dmx_success_t success); + +/*--------------------------------------------------------------------------*/ +/* DVB Front-End */ +/*--------------------------------------------------------------------------*/ + +typedef enum { + DMX_OTHER_FE = 0, + DMX_SATELLITE_FE, + DMX_CABLE_FE, + DMX_TERRESTRIAL_FE, + DMX_LVDS_FE, + DMX_ASI_FE, /* DVB-ASI interface */ + DMX_MEMORY_FE +} dmx_frontend_source_t; + +typedef struct { + /* The following char* fields point to NULL terminated strings */ + char* id; /* Unique front-end identifier */ + char* vendor; /* Name of the front-end vendor */ + char* model; /* Name of the front-end model */ + struct list_head connectivity_list; /* List of front-ends that can + be connected to a particular + demux */ + void* priv; /* Pointer to private data of the API client */ + dmx_frontend_source_t source; +} dmx_frontend_t; + +/*--------------------------------------------------------------------------*/ +/* MPEG-2 TS Demux */ +/*--------------------------------------------------------------------------*/ + +/* + * Flags OR'ed in the capabilites field of struct dmx_demux_s. + */ + +#define DMX_TS_FILTERING 1 +#define DMX_PES_FILTERING 2 +#define DMX_SECTION_FILTERING 4 +#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */ +#define DMX_CRC_CHECKING 16 +#define DMX_TS_DESCRAMBLING 32 +#define DMX_SECTION_PAYLOAD_DESCRAMBLING 64 +#define DMX_MAC_ADDRESS_DESCRAMBLING 128 + +/* + * Demux resource type identifier. +*/ + +/* + * DMX_FE_ENTRY(): Casts elements in the list of registered + * front-ends from the generic type struct list_head + * to the type * dmx_frontend_t + *. +*/ + +#define DMX_FE_ENTRY(list) list_entry(list, dmx_frontend_t, connectivity_list) + +struct dmx_demux_s { + /* The following char* fields point to NULL terminated strings */ + char* id; /* Unique demux identifier */ + char* vendor; /* Name of the demux vendor */ + char* model; /* Name of the demux model */ + __u32 capabilities; /* Bitfield of capability flags */ + dmx_frontend_t* frontend; /* Front-end connected to the demux */ + struct list_head reg_list; /* List of registered demuxes */ + void* priv; /* Pointer to private data of the API client */ + int users; /* Number of users */ + int (*open) (struct dmx_demux_s* demux); + int (*close) (struct dmx_demux_s* demux); + int (*write) (struct dmx_demux_s* demux, const char* buf, size_t count); + int (*allocate_ts_feed) (struct dmx_demux_s* demux, + dmx_ts_feed_t** feed, + dmx_ts_cb callback); + int (*release_ts_feed) (struct dmx_demux_s* demux, + dmx_ts_feed_t* feed); + int (*allocate_pes_feed) (struct dmx_demux_s* demux, + dmx_pes_feed_t** feed, + dmx_pes_cb callback); + int (*release_pes_feed) (struct dmx_demux_s* demux, + dmx_pes_feed_t* feed); + int (*allocate_section_feed) (struct dmx_demux_s* demux, + dmx_section_feed_t** feed, + dmx_section_cb callback); + int (*release_section_feed) (struct dmx_demux_s* demux, + dmx_section_feed_t* feed); + int (*descramble_mac_address) (struct dmx_demux_s* demux, + __u8* buffer1, + size_t buffer1_length, + __u8* buffer2, + size_t buffer2_length, + __u16 pid); + int (*descramble_section_payload) (struct dmx_demux_s* demux, + __u8* buffer1, + size_t buffer1_length, + __u8* buffer2, size_t buffer2_length, + __u16 pid); + int (*add_frontend) (struct dmx_demux_s* demux, + dmx_frontend_t* frontend); + int (*remove_frontend) (struct dmx_demux_s* demux, + dmx_frontend_t* frontend); + struct list_head* (*get_frontends) (struct dmx_demux_s* demux); + int (*connect_frontend) (struct dmx_demux_s* demux, + dmx_frontend_t* frontend); + int (*disconnect_frontend) (struct dmx_demux_s* demux); + + + /* added because js cannot keep track of these himself */ + int (*get_pes_pids) (struct dmx_demux_s* demux, __u16 *pids); +}; +typedef struct dmx_demux_s dmx_demux_t; + +/*--------------------------------------------------------------------------*/ +/* Demux directory */ +/*--------------------------------------------------------------------------*/ + +/* + * DMX_DIR_ENTRY(): Casts elements in the list of registered + * demuxes from the generic type struct list_head* to the type dmx_demux_t + *. + */ + +#define DMX_DIR_ENTRY(list) list_entry(list, dmx_demux_t, reg_list) + +int dmx_register_demux (dmx_demux_t* demux); +int dmx_unregister_demux (dmx_demux_t* demux); +struct list_head* dmx_get_demuxes (void); + +#endif /* #ifndef __DEMUX_H */ + diff --git a/src/input/ost/dmx.h b/src/input/ost/dmx.h new file mode 100644 index 000000000..9c4bb6b6d --- /dev/null +++ b/src/input/ost/dmx.h @@ -0,0 +1,141 @@ +/* + * dmx.h + * + * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> + * & Ralph Metzler <ralph@convergence.de> + for convergence integrated media 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. + * + */ + +#ifndef _OST_DMX_H_ +#define _OST_DMX_H_ + +#ifdef __KERNEL__ +#include <linux/types.h> +#else +#include <stdint.h> +#endif + +#ifndef EBUFFEROVERFLOW +#define EBUFFEROVERFLOW 769 +#endif + +/* pid_t conflicts with linux/include/linux/types.h !!!*/ + +typedef uint16_t dvb_pid_t; + +#define DMX_FILTER_SIZE 16 + +typedef enum +{ + DMX_OUT_DECODER, /* Streaming directly to decoder. */ + DMX_OUT_TAP, /* Output going to a memory buffer */ + /* (to be retrieved via the read command).*/ + DMX_OUT_TS_TAP /* Output multiplexed into a new TS */ + /* (to be retrieved by reading from the */ + /* logical DVR device). */ +} dmxOutput_t; + + +typedef enum +{ + DMX_IN_FRONTEND, /* Input from a front-end device. */ + DMX_IN_DVR /* Input from the logical DVR device. */ +} dmxInput_t; + + +typedef enum +{ + DMX_PES_AUDIO, + DMX_PES_VIDEO, + DMX_PES_TELETEXT, + DMX_PES_SUBTITLE, + DMX_PES_PCR, + DMX_PES_OTHER +} dmxPesType_t; + + +typedef enum +{ + DMX_SCRAMBLING_EV, + DMX_FRONTEND_EV +} dmxEvent_t; + + +typedef enum +{ + DMX_SCRAMBLING_OFF, + DMX_SCRAMBLING_ON +} dmxScramblingStatus_t; + + +typedef struct dmxFilter +{ + uint8_t filter[DMX_FILTER_SIZE]; + uint8_t mask[DMX_FILTER_SIZE]; +} dmxFilter_t; + + +struct dmxFrontEnd +{ + /*TBD tbd; */ +}; + + +struct dmxSctFilterParams +{ + dvb_pid_t pid; + dmxFilter_t filter; + uint32_t timeout; + uint32_t flags; +#define DMX_CHECK_CRC 1 +#define DMX_ONESHOT 2 +#define DMX_IMMEDIATE_START 4 +#define DMX_KERNEL_CLIENT 0x8000 +}; + + +struct dmxPesFilterParams +{ + dvb_pid_t pid; + dmxInput_t input; + dmxOutput_t output; + dmxPesType_t pesType; + uint32_t flags; +}; + + +struct dmxEvent +{ + dmxEvent_t event; + time_t timeStamp; + union + { + dmxScramblingStatus_t scrambling; + } u; +}; + + +#define DMX_START _IOW('o',41,int) +#define DMX_STOP _IOW('o',42,int) +#define DMX_SET_FILTER _IOW('o',43,struct dmxSctFilterParams *) +#define DMX_SET_PES_FILTER _IOW('o',44,struct dmxPesFilterParams *) +#define DMX_SET_BUFFER_SIZE _IOW('o',45,unsigned long) +#define DMX_GET_EVENT _IOR('o',46,struct dmxEvent *) +#define DMX_GET_PES_PIDS _IOR('o',47,dvb_pid_t *) + +#endif /*_OST_DMX_H_*/ diff --git a/src/input/ost/frontend.h b/src/input/ost/frontend.h new file mode 100644 index 000000000..57fb69e83 --- /dev/null +++ b/src/input/ost/frontend.h @@ -0,0 +1,208 @@ +/* + * frontend.h + * + * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> + * & Ralph Metzler <ralph@convergence.de> + * for convergence integrated media 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. + * + */ + +#ifndef _FRONTEND_H_ +#define _FRONTEND_H_ + +#include <asm/types.h> + + +#define ENOSIGNAL 768 +#ifndef EBUFFEROVERFLOW +#define EBUFFEROVERFLOW 769 +#endif + + +typedef __u32 FrontendStatus; + +/* bit definitions for FrontendStatus */ +#define FE_HAS_POWER 1 +#define FE_HAS_SIGNAL 2 +#define FE_SPECTRUM_INV 4 +#define FE_HAS_LOCK 8 +#define FE_HAS_CARRIER 16 +#define FE_HAS_VITERBI 32 +#define FE_HAS_SYNC 64 +#define FE_TUNER_HAS_LOCK 128 + + +/* possible values for spectral inversion */ +typedef enum { + INVERSION_OFF, + INVERSION_ON, + INVERSION_AUTO +} SpectralInversion; + +/* possible values for FEC_inner/FEC_outer */ +typedef enum { + FEC_AUTO, + FEC_1_2, + FEC_2_3, + FEC_3_4, + FEC_5_6, + FEC_7_8, + FEC_NONE +} CodeRate; + + +typedef enum { + QPSK, + QAM_16, + QAM_32, + QAM_64, + QAM_128, + QAM_256 +} Modulation; + + +typedef enum { + TRANSMISSION_MODE_2K, + TRANSMISSION_MODE_8K +} TransmitMode; + +typedef enum { + BANDWIDTH_8_MHZ, + BANDWIDTH_7_MHZ, + BANDWIDTH_6_MHZ +} BandWidth; + + +typedef enum { + GUARD_INTERVAL_1_32, + GUARD_INTERVAL_1_16, + GUARD_INTERVAL_1_8, + GUARD_INTERVAL_1_4 +} GuardInterval; + + +typedef enum { + HIERARCHY_NONE, + HIERARCHY_1, + HIERARCHY_2, + HIERARCHY_4 +} Hierarchy; + + +typedef struct { + __u32 SymbolRate; /* symbol rate in Symbols per second */ + CodeRate FEC_inner; /* forward error correction (see above) */ +} QPSKParameters; + + +typedef struct { + __u32 SymbolRate; /* symbol rate in Symbols per second */ + CodeRate FEC_inner; /* forward error correction (see above) */ + Modulation QAM; /* modulation type (see above) */ +} QAMParameters; + + +typedef struct { + BandWidth bandWidth; + CodeRate HP_CodeRate; /* high priority stream code rate */ + CodeRate LP_CodeRate; /* low priority stream code rate */ + Modulation Constellation; /* modulation type (see above) */ + TransmitMode TransmissionMode; + GuardInterval guardInterval; + Hierarchy HierarchyInformation; +} OFDMParameters; + + +typedef enum { + FE_QPSK, + FE_QAM, + FE_OFDM +} FrontendType; + + +typedef struct { + __u32 Frequency; /* (absolute) frequency in Hz for QAM/OFDM */ + /* intermediate frequency in kHz for QPSK */ + SpectralInversion Inversion; /* spectral inversion */ + union { + QPSKParameters qpsk; + QAMParameters qam; + OFDMParameters ofdm; + } u; +} FrontendParameters; + + +typedef enum { + FE_UNEXPECTED_EV, /* unexpected event (e.g. loss of lock) */ + FE_COMPLETION_EV, /* completion event, tuning succeeded */ + FE_FAILURE_EV /* failure event, we couldn't tune */ +} EventType; + + +typedef struct { + EventType type; /* type of event, FE_UNEXPECTED_EV, ... */ + + long timestamp; /* time in seconds since 1970-01-01 */ + + union { + struct { + FrontendStatus previousStatus; /* status before event */ + FrontendStatus currentStatus; /* status during event */ + } unexpectedEvent; + FrontendParameters completionEvent; /* parameters for which the + tuning succeeded */ + FrontendStatus failureEvent; /* status at failure (e.g. no lock) */ + } u; +} FrontendEvent; + +typedef struct { + FrontendType type; + __u32 minFrequency; + __u32 maxFrequency; + __u32 maxSymbolRate; + __u32 minSymbolRate; + __u32 hwType; + __u32 hwVersion; +} FrontendInfo; + + +typedef enum { + FE_POWER_ON, + FE_POWER_STANDBY, + FE_POWER_SUSPEND, + FE_POWER_OFF +} FrontendPowerState; + + +#define FE_SELFTEST _IO('o', 61) +#define FE_SET_POWER_STATE _IOW('o', 62, FrontendPowerState) +#define FE_GET_POWER_STATE _IOR('o', 63, FrontendPowerState*) +#define FE_READ_STATUS _IOR('o', 64, FrontendStatus*) +#define FE_READ_BER _IOW('o', 65, __u32*) +#define FE_READ_SIGNAL_STRENGTH _IOR('o', 66, __s32*) +#define FE_READ_SNR _IOR('o', 67, __s32*) +#define FE_READ_UNCORRECTED_BLOCKS _IOW('o', 68, __u32*) +#define FE_GET_NEXT_FREQUENCY _IOW('o', 69, __u32*) +#define FE_GET_NEXT_SYMBOL_RATE _IOW('o', 70, __u32*) + +#define FE_SET_FRONTEND _IOW('o', 71, FrontendParameters*) +#define FE_GET_FRONTEND _IOR('o', 72, FrontendParameters*) +#define FE_GET_INFO _IOR('o', 73, FrontendInfo*) +#define FE_GET_EVENT _IOR('o', 74, FrontendEvent*) + +#endif /*_FRONTEND_H_*/ + diff --git a/src/input/ost/sec.h b/src/input/ost/sec.h new file mode 100644 index 000000000..8863df268 --- /dev/null +++ b/src/input/ost/sec.h @@ -0,0 +1,118 @@ +/* + * sec.h + * + * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> + * & Marcus Metzler <marcus@convergence.de> + for convergence integrated media 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. + * + */ + +#ifndef _OST_SEC_H_ +#define _OST_SEC_H_ + +#define SEC_MAX_DISEQC_PARAMS 3 + +struct secDiseqcCmd { + uint8_t addr; + uint8_t cmd; + uint8_t numParams; + uint8_t params[SEC_MAX_DISEQC_PARAMS]; +}; + +typedef uint32_t secVoltage; + +enum { + SEC_VOLTAGE_OFF, + SEC_VOLTAGE_LT, + SEC_VOLTAGE_13, + SEC_VOLTAGE_13_5, + SEC_VOLTAGE_18, + SEC_VOLTAGE_18_5 +}; + +#define SEC_VOLTAGE_HORIZONTAL SEC_VOLTAGE_18 +#define SEC_VOLTAGE_VERTICAL SEC_VOLTAGE_13 + +typedef uint32_t secToneMode; + +typedef enum { + SEC_TONE_ON, + SEC_TONE_OFF +} secToneMode_t; + + +typedef uint32_t secMiniCmd; + +typedef enum { + SEC_MINI_NONE, + SEC_MINI_A, + SEC_MINI_B +} secMiniCmd_t; + +struct secStatus { + int32_t busMode; + secVoltage selVolt; + secToneMode contTone; +}; + +enum { + SEC_BUS_IDLE, + SEC_BUS_BUSY, + SEC_BUS_OFF, + SEC_BUS_OVERLOAD +}; + +struct secCommand { + int32_t type; + union { + struct secDiseqcCmd diseqc; + uint8_t vsec; + uint32_t pause; + } u; +}; + +struct secCmdSequence { + secVoltage voltage; + secMiniCmd miniCommand; + secToneMode continuousTone; + + uint32_t numCommands; + struct secCommand* commands; +}; + +enum { + SEC_CMDTYPE_DISEQC, + SEC_CMDTYPE_VSEC, + SEC_CMDTYPE_PAUSE +}; + + +#define SEC_GET_STATUS _IOR('o',91,struct secStatus *) +#define SEC_RESET_OVERLOAD _IOW('o',92,void) +#define SEC_SEND_SEQUENCE _IOW('o',93,struct secCmdSequence *) +#define SEC_SET_TONE _IOW('o',94,secToneMode) +#define SEC_SET_VOLTAGE _IOW('o',95,secVoltage) + +typedef enum { + SEC_DISEQC_SENT, + SEC_VSEC_SENT, + SEC_PAUSE_COMPLETE, + SEC_CALLBACK_ERROR +} secCallback_t; + + +#endif /*_OST_SEC_H_*/ diff --git a/src/xine-engine/audio_decoder.c b/src/xine-engine/audio_decoder.c index b5c8bf79c..104539871 100644 --- a/src/xine-engine/audio_decoder.c +++ b/src/xine-engine/audio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_decoder.c,v 1.95 2002/12/26 21:53:42 miguelfreitas Exp $ + * $Id: audio_decoder.c,v 1.96 2002/12/27 00:53:50 guenter Exp $ * * * functions that implement audio decoding @@ -195,7 +195,8 @@ void *audio_decoder_loop (void *stream_gen) { while ( (i<stream->audio_track_map_entries) && (stream->audio_track_map[i]<buf->type) ) i++; - if ( (i==stream->audio_track_map_entries) || (stream->audio_track_map[i] != buf->type) ) { + if ( (i==stream->audio_track_map_entries) + || (stream->audio_track_map[i] != buf->type) ) { j = stream->audio_track_map_entries; while (j>i) { @@ -208,12 +209,23 @@ void *audio_decoder_loop (void *stream_gen) { /* find out which audio type to decode */ +#ifdef LOG + printf ("audio_decoder: audio_channel_user = %d, map[0]=%08x\n", + stream->audio_channel_user, + stream->audio_track_map[0]); +#endif + if (stream->audio_channel_user > -2) { if (stream->audio_channel_user == -1) { /* auto */ +#ifdef LOG + printf ("audio_decoder: audio_channel_auto = %d\n", + stream->audio_channel_auto); +#endif + if (stream->audio_channel_auto>=0) { if ((buf->type & 0xFF) == stream->audio_channel_auto) { @@ -311,7 +323,7 @@ void audio_decoder_init (xine_stream_t *stream) { */ stream->audio_fifo = fifo_buffer_new (230, 8192); stream->audio_channel_user = -1; - stream->audio_channel_auto = 0; + stream->audio_channel_auto = -1; stream->audio_track_map_entries = 0; stream->audio_type = 0; diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index 1d1816eb4..063333178 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine.c,v 1.203 2002/12/26 21:53:42 miguelfreitas Exp $ + * $Id: xine.c,v 1.204 2002/12/27 00:53:50 guenter Exp $ * * top-level xine functions * @@ -309,7 +309,7 @@ xine_stream_t *xine_stream_new (xine_t *this, stream->spu_decoder_streamtype = -1; stream->audio_out = ao; stream->audio_channel_user = -1; - stream->audio_channel_auto = 0; + stream->audio_channel_auto = -1; stream->audio_decoder_plugin = NULL; stream->audio_decoder_streamtype = -1; stream->spu_channel_auto = -1; |