mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 0.99pre1
- Fixed several channel definitions in 'channels.conf' (thanks to Thilo Wunderlich). - Added MPEG audio support for DVD (thanks to Andreas Schultz). - Implemented DVB-T support (thanks to Dave Chapman). This currently works only for UK channels. - Removed the range limits for the Frequency and Srate parameters of channel definitions. - Changed the maximum value for PIDs in channels.conf from 0xFFFE to 0x1FFF. - Fixed DVD audio sync problems (thanks to Andreas Schultz). - Fixed external AC3 replay for DVDs (thanks to Andreas Schultz).
This commit is contained in:
parent
6e1fd83555
commit
b420457467
@ -59,6 +59,7 @@ Deti Fliegl <deti@fliegl.de>
|
|||||||
Dave Chapman <dave@dchapman.com>
|
Dave Chapman <dave@dchapman.com>
|
||||||
for implementing support for the teletext PID
|
for implementing support for the teletext PID
|
||||||
for his great support in switching to the NAPI
|
for his great support in switching to the NAPI
|
||||||
|
for implementing DVB-T support
|
||||||
|
|
||||||
Hans-Peter Raschke <Hans-Peter.Raschke@Wintermann-DatenService.de>
|
Hans-Peter Raschke <Hans-Peter.Raschke@Wintermann-DatenService.de>
|
||||||
for his support in adapting VDR to DVB-C
|
for his support in adapting VDR to DVB-C
|
||||||
@ -162,3 +163,6 @@ Thomas Heiligenmann <thomas@heiligenmann.de>
|
|||||||
|
|
||||||
Norbert Schmidt <nschmidt-nrw@t-online.de>
|
Norbert Schmidt <nschmidt-nrw@t-online.de>
|
||||||
for filling in some missing teletext PIDs
|
for filling in some missing teletext PIDs
|
||||||
|
|
||||||
|
Thilo Wunderlich <tw@ubcom.net>
|
||||||
|
for his help in keeping 'channels.conf' up to date
|
||||||
|
10
FORMATS
10
FORMATS
@ -20,10 +20,10 @@ Video Disk Recorder File Formats
|
|||||||
|
|
||||||
- Name: the channel's name (if the name originally contains a ':' character
|
- Name: the channel's name (if the name originally contains a ':' character
|
||||||
it has to be replaced by '|')
|
it has to be replaced by '|')
|
||||||
- Frequency in MHz (as an integer)
|
- Frequency in MHz for DVB-S and DVB-C, kHz for DVB-T (as an integer)
|
||||||
- Polarization (one of 'h', 'H', 'v', 'V') **
|
- Polarization (one of 'h', 'H', 'v', 'V') **
|
||||||
- Diseqc number **
|
- Diseqc number **
|
||||||
- Symbol rate
|
- Symbol rate ***
|
||||||
- Video PID
|
- Video PID
|
||||||
- Audio PID (either one number, or two, separated by a comma)
|
- Audio PID (either one number, or two, separated by a comma)
|
||||||
If this channel also carries Dolby Digital sound, the Dolby PIDs follow
|
If this channel also carries Dolby Digital sound, the Dolby PIDs follow
|
||||||
@ -33,8 +33,10 @@ Video Disk Recorder File Formats
|
|||||||
DVB card, 2 = can be decrypted by the second DVB card)
|
DVB card, 2 = can be decrypted by the second DVB card)
|
||||||
- Program Number
|
- Program Number
|
||||||
|
|
||||||
Fields marked with ** are only meaningful for DVB-S (satellite) receivers.
|
Fields marked with ** are only meaningful for DVB-S receivers.
|
||||||
DVB-C receivers simply ignore these.
|
DVB-C and DVB-T receivers simply ignore these.
|
||||||
|
Fields marked with *** are only meaningful for DVB-S and DVB-C receivers.
|
||||||
|
DVB-T receivers simply ignore these.
|
||||||
|
|
||||||
* timers.conf
|
* timers.conf
|
||||||
|
|
||||||
|
13
HISTORY
13
HISTORY
@ -865,3 +865,16 @@ Video Disk Recorder Revision History
|
|||||||
will now need to use kvdr 0.4 or later.
|
will now need to use kvdr 0.4 or later.
|
||||||
- The device /dev/video is now opened only if necessary (to GRAB an image),
|
- The device /dev/video is now opened only if necessary (to GRAB an image),
|
||||||
allowing other programs (like 'kvdr', for instance) to use that device.
|
allowing other programs (like 'kvdr', for instance) to use that device.
|
||||||
|
|
||||||
|
2001-11-25: Version 0.99
|
||||||
|
|
||||||
|
- Fixed several channel definitions in 'channels.conf' (thanks to Thilo
|
||||||
|
Wunderlich).
|
||||||
|
- Added MPEG audio support for DVD (thanks to Andreas Schultz).
|
||||||
|
- Implemented DVB-T support (thanks to Dave Chapman).
|
||||||
|
This currently works only for UK channels.
|
||||||
|
- Removed the range limits for the Frequency and Srate parameters of channel
|
||||||
|
definitions.
|
||||||
|
- Changed the maximum value for PIDs in channels.conf from 0xFFFE to 0x1FFF.
|
||||||
|
- Fixed DVD audio sync problems (thanks to Andreas Schultz).
|
||||||
|
- Fixed external AC3 replay for DVDs (thanks to Andreas Schultz).
|
||||||
|
25
INSTALL
25
INSTALL
@ -334,16 +334,23 @@ accessed using DiSEqC, you have to go to the "Setup" menu and set the "DiSEqC"
|
|||||||
parameter to "on". Also check the "DiSEqC" parameters for the various channels
|
parameter to "on". Also check the "DiSEqC" parameters for the various channels
|
||||||
and set them to the necessary values.
|
and set them to the necessary values.
|
||||||
|
|
||||||
Running VDR with DVB-C (cable):
|
Running VDR with DVB-C (cable) or DVB-T (terrestrial):
|
||||||
-------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
VDR automatically recognizes if the DVB card in use is a cable card.
|
VDR automatically recognizes if the DVB card in use is a cable or a
|
||||||
The only things that needs to be different when using digital cable
|
terrestrial card. The only thing that needs to be different when using digital
|
||||||
is the 'channels.conf' file. The distribution archive contains a default
|
cable or terrestrial reception is the 'channels.conf' file. The distribution
|
||||||
'channels.conf.cable', which cable users can rename or copy to 'channels.conf'
|
archive contains a default 'channels.conf.cable' and 'channels.conf.terr',
|
||||||
in order to receive cable channels. The format of this file is exactly the
|
respectively, which users of such cards can rename or copy to 'channels.conf'
|
||||||
same as for satellite channels (the fields containing "Polarization" and
|
in order to receive digital cable or terrestrial channels. The format of these
|
||||||
"Diseqc" data are ignored in case of DVB-C).
|
files is exactly the same as for satellite channels (the fields containing
|
||||||
|
"Polarization" and "Diseqc" data are ignored in case of DVB-C and DVB-T, and
|
||||||
|
the "Frequency" is in kHz in case of DVB-T).
|
||||||
|
|
||||||
|
You can even use a mixture of DVB-S, DVB-C and DVB-T cards in the same system.
|
||||||
|
All you need to do is to put all the channel definitions into one big
|
||||||
|
'channel.conf' file and set the 'Ca' parameter of each channel to the number
|
||||||
|
of the card that can receive it.
|
||||||
|
|
||||||
Learning the remote control keys:
|
Learning the remote control keys:
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
@ -19,7 +19,11 @@
|
|||||||
* along with GNU Make; see the file COPYING. If not, write to
|
* along with GNU Make; see the file COPYING. If not, write to
|
||||||
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*
|
*
|
||||||
|
*------------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
* 24 Nov 2001
|
||||||
|
* Andreas Schultz <aschultz@cs.uni-magdeburg.de>
|
||||||
|
* Added ac3_buffersize()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define AC3_BUFFER_SIZE (6*1024*16)
|
#define AC3_BUFFER_SIZE (6*1024*16)
|
||||||
@ -55,4 +59,6 @@ size_t ac3dec_decode_data (plugin_output_audio_t *output, uint8_t *data_start, u
|
|||||||
size_t ac3dec_decode_data (uint8_t *data_start ,uint8_t *data_end, int ac3reset, int *input_pointer, int *output_pointer, char *ac3_data);
|
size_t ac3dec_decode_data (uint8_t *data_start ,uint8_t *data_end, int ac3reset, int *input_pointer, int *output_pointer, char *ac3_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
uint32_t ac3_buffersize();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
* Matjaz Thaler <matjaz.thaler@rd.iskraemeco.si>
|
* Matjaz Thaler <matjaz.thaler@rd.iskraemeco.si>
|
||||||
* Added support for DVB-s PCI card
|
* Added support for DVB-s PCI card
|
||||||
*
|
*
|
||||||
|
* 24 Nov 2001
|
||||||
|
* Andreas Schultz <aschultz@cs.uni-magdeburg.de>
|
||||||
|
* Added ac3_buffersize()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
@ -96,6 +99,11 @@ static uint32_t buffer_size = 0;;
|
|||||||
// for error handling
|
// for error handling
|
||||||
jmp_buf error_jmp_mark;
|
jmp_buf error_jmp_mark;
|
||||||
|
|
||||||
|
uint32_t ac3_buffersize()
|
||||||
|
{
|
||||||
|
return buffer_size;
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t decode_buffer_syncframe (syncinfo_t *syncinfo, uint8_t **start, uint8_t *end)
|
static uint32_t decode_buffer_syncframe (syncinfo_t *syncinfo, uint8_t **start, uint8_t *end)
|
||||||
{
|
{
|
||||||
uint8_t *cur = *start;
|
uint8_t *cur = *start;
|
||||||
|
@ -28,10 +28,10 @@ Neun Live:12480:v:0:27500:767:768:0:0:897
|
|||||||
DSF:12480:v:0:27500:1023:1024:0:0:900
|
DSF:12480:v:0:27500:1023:1024:0:0:900
|
||||||
HOT:12480:v:0:27500:1279:1280:0:0:40
|
HOT:12480:v:0:27500:1279:1280:0:0:40
|
||||||
Bloomberg TV Germany:12551:v:0:22000:162:99:0:0:12160
|
Bloomberg TV Germany:12551:v:0:22000:162:99:0:0:12160
|
||||||
BLOOMBERG TV:11817:v:0:27500:163:92:0:0:8004
|
Bloomberg TV France:11817:v:0:27500:163:92:0:0:8004
|
||||||
Bloomberg:12168:v:0:27500:167:112:0:0:12721
|
Bloomberg TV Spain:12168:v:0:27500:167:112:0:0:12721
|
||||||
Sky News:12552:v:0:22000:305:306:0:0:3995
|
Sky News:12552:v:0:22000:305:306:0:0:3995
|
||||||
KinderNet:12574:h:0:22000:163:92:0:0:5020
|
Fox Kids Netherlands:12574:h:0:22000:163:92:0:0:5020
|
||||||
Alice:12610:v:0:22000:162:96:0:0:12200
|
Alice:12610:v:0:22000:162:96:0:0:12200
|
||||||
n-tv:12669:v:0:22000:162:96:55:0:12730
|
n-tv:12669:v:0:22000:162:96:55:0:12730
|
||||||
Grand Tourisme:12670:v:0:22000:289:290:0:0:17300
|
Grand Tourisme:12670:v:0:22000:289:290:0:0:17300
|
||||||
@ -97,7 +97,7 @@ Cinedom 5B:11720:h:0:27500:1791:1792:0:3:177
|
|||||||
Cinedom 5C:12070:h:0:27500:1023:1024:0:3:186
|
Cinedom 5C:12070:h:0:27500:1023:1024:0:3:186
|
||||||
:Beta Digital
|
:Beta Digital
|
||||||
N24:11914:H:0:27500:255:256:8191:3:52
|
N24:11914:H:0:27500:255:256:8191:3:52
|
||||||
CNBC:12148:h:0:27500:255:256:0:3:35
|
CNBC:11954:h:0:27500:510:520:0:0:28010
|
||||||
Liberty TV.com:12610:V:0:22000:941:943,942:0:0:12199
|
Liberty TV.com:12610:V:0:22000:941:943,942:0:0:12199
|
||||||
:PW Erotic
|
:PW Erotic
|
||||||
Beate-Uhse.TV:11758:h:0:27500:3839:3840:0:3:21
|
Beate-Uhse.TV:11758:h:0:27500:3839:3840:0:3:21
|
||||||
@ -105,9 +105,9 @@ Blue Movie 1:11758:h:0:27500:1791:1792:0:3:513
|
|||||||
Blue Movie 2:11758:h:0:27500:2047:2048:0:3:514
|
Blue Movie 2:11758:h:0:27500:2047:2048:0:3:514
|
||||||
Blue Movie 3:11758:h:0:27500:2303:2304:0:3:515
|
Blue Movie 3:11758:h:0:27500:2303:2304:0:3:515
|
||||||
:Sportsworld
|
:Sportsworld
|
||||||
Premiere Sport 1:11719:h:0:27500:255:256:0:3:17
|
Premiere Sport 1:11720:h:0:27500:255:256,257:0:3:17
|
||||||
Premiere Sport 2:11719:h:0:27500:3327:3328:0:3:27
|
Premiere Sport 2:12070:h:0:27500:3839:3840:0:3:27
|
||||||
Premiere Sport 3:11758:h:0:27500:2815:2816:0:3:18
|
Premiere Sport 3:12070:h:0:27500:255:256:0:3:26
|
||||||
:Formel 1
|
:Formel 1
|
||||||
Infokanal:11720:h:0:27500:3071:3072:0:3:244
|
Infokanal:11720:h:0:27500:3071:3072:0:3:244
|
||||||
Multikanal:11720:h:0:27500:2815:2816:0:3:243
|
Multikanal:11720:h:0:27500:2815:2816:0:3:243
|
||||||
@ -118,12 +118,12 @@ Boxengasse:11720:h:0:27500:2047:2048:0:3:240
|
|||||||
:Premiere World Bundesliga
|
:Premiere World Bundesliga
|
||||||
Superdom:11758:h:0:27500:2815:8192:0:3:18
|
Superdom:11758:h:0:27500:2815:8192:0:3:18
|
||||||
BuLi-Konferenz:11758:h:0:27500:3327:3328,3329:0:3:215
|
BuLi-Konferenz:11758:h:0:27500:3327:3328,3329:0:3:215
|
||||||
BuLi-Spiel 1:11719:h:0:27500:255:256,257:0:3:17
|
BuLi-Spiel 1:11720:h:0:27500:255:256,257:0:3:17
|
||||||
BuLi-Spiel 2:11719:h:0:27500:2047:2048,2049:0:3:240
|
BuLi-Spiel 2:11720:h:0:27500:2047:2048,2049:0:3:240
|
||||||
BuLi-Spiel 3:11719:h:0:27500:2303:2304,2305:0:3:241
|
BuLi-Spiel 3:11720:h:0:27500:2303:2304,2305:0:3:241
|
||||||
BuLi-Spiel 4:11719:h:0:27500:2559:2560,2561:0:3:242
|
BuLi-Spiel 4:11720:h:0:27500:2559:2560,2561:0:3:242
|
||||||
BuLi-Spiel 5:11719:h:0:27500:2815:2816,2817:0:3:243
|
BuLi-Spiel 5:11720:h:0:27500:2815:2816,2817:0:3:243
|
||||||
BuLi-Spiel 6:11719:h:0:27500:3071:3072,3073:0:3:244
|
BuLi-Spiel 6:11720:h:0:27500:3071:3072,3073:0:3:244
|
||||||
BuLi-Spiel 7:11758:h:0:27500:3071:3072,3073:0:3:214
|
BuLi-Spiel 7:11758:h:0:27500:3071:3072,3073:0:3:214
|
||||||
:
|
:
|
||||||
TV Niepokalanow:11876:h:0:27500:305:321:0:0:20601
|
TV Niepokalanow:11876:h:0:27500:305:321:0:0:20601
|
||||||
@ -132,12 +132,12 @@ Andalucia TV:11934:v:0:27500:166:104:0:0:29011
|
|||||||
TVC Internacional:11934:v:0:27500:167:108:0:0:0
|
TVC Internacional:11934:v:0:27500:167:108:0:0:0
|
||||||
Nasza TV:11992:h:0:27500:165:98:0:0:0
|
Nasza TV:11992:h:0:27500:165:98:0:0:0
|
||||||
WishLine test:12012:v:0:27500:163:90:0:0:0
|
WishLine test:12012:v:0:27500:163:90:0:0:0
|
||||||
Pro 7 Austria:12051:v:0:27500:161:84:0:0:0
|
Pro 7 Austria:12051:v:0:27500:161:84:0:0:20002
|
||||||
Kabel 1 Schweiz:12051:v:0:27500:162:163:0:0:0
|
Kabel 1 Schweiz:12051:v:0:27500:162:163:0:0:20003
|
||||||
Kabel 1 Austria:12051:v:0:27500:166:167:0:0:0
|
Kabel 1 Austria:12051:v:0:27500:166:167:0:0:20004
|
||||||
Pro 7 Schweiz:12051:v:0:27500:289:290:0:0:0
|
Pro 7 Schweiz:12051:v:0:27500:289:290:0:0:20001
|
||||||
Kiosque:12129:v:0:27500:160:80:0:0:0
|
Kiosque:12129:v:0:27500:160:80:0:0:0
|
||||||
KTO:12129:v:0:27500:170:120:0:0:0
|
KTO:11739:v:0:27500:163:90:0:0:8304
|
||||||
TCM:12168:v:0:27500:160:80:0:0:0
|
TCM:12168:v:0:27500:160:80:0:0:0
|
||||||
Cartoon Network France & Spain:12168:v:0:27500:161:84:0:0:0
|
Cartoon Network France & Spain:12168:v:0:27500:161:84:0:0:0
|
||||||
TVBS Europe:12168:v:0:27500:162:88:0:0:0
|
TVBS Europe:12168:v:0:27500:162:88:0:0:0
|
||||||
@ -147,14 +147,14 @@ TCM Espania:12168:v:0:27500:164:96:0:0:0
|
|||||||
MTV Spain:12168:v:0:27500:167:112:0:0:0
|
MTV Spain:12168:v:0:27500:167:112:0:0:0
|
||||||
TCM France:12168:v:0:27500:169:64:0:0:0
|
TCM France:12168:v:0:27500:169:64:0:0:0
|
||||||
RTL2 CH:12188:h:0:27500:164:112:0:0:0
|
RTL2 CH:12188:h:0:27500:164:112:0:0:0
|
||||||
La Cinquieme:12207:v:0:27500:160:80:0:0:0
|
La Cinquieme:12207:v:0:27500:160:80:0:0:8501
|
||||||
ARTE:12207:v:0:27500:165:100:0:0:0
|
LCP:12207:v:0:27500:165:100:0:0:8506
|
||||||
Post Filial TV:12226:h:0:27500:255:256:0:0:0
|
Post Filial TV:12226:h:0:27500:255:256:0:0:0
|
||||||
Canal Canaris:12246:v:0:27500:160:80:0:0:0
|
Canal Canaris:12246:v:0:27500:160:80:0:0:0
|
||||||
Canal Canaris:12246:v:0:27500:160:81:0:0:0
|
Canal Canaris:12246:v:0:27500:160:81:0:0:0
|
||||||
Canal Canaris:12246:v:0:27500:160:82:0:0:0
|
Canal Canaris:12246:v:0:27500:160:82:0:0:0
|
||||||
Canal Canaris:12246:v:0:27500:160:83:0:0:0
|
Canal Canaris:12246:v:0:27500:160:83:0:0:0
|
||||||
AB Sat Passion promo:12266:h:0:27500:160:80:0:0:0
|
AB Moteurs:12266:h:0:27500:160:80:0:0:17000
|
||||||
AB Channel 1:12266:h:0:27500:161:84:0:0:0
|
AB Channel 1:12266:h:0:27500:161:84:0:0:0
|
||||||
Taquilla 0:12285:v:0:27500:165:100:0:0:0
|
Taquilla 0:12285:v:0:27500:165:100:0:0:0
|
||||||
CSAT:12324:v:0:27500:160:80:0:0:0
|
CSAT:12324:v:0:27500:160:80:0:0:0
|
||||||
@ -174,7 +174,7 @@ Fashion TV:12402:v:0:27500:163:92:0:0:0
|
|||||||
VideoService:12422:h:0:27500:255:256:0:0:0
|
VideoService:12422:h:0:27500:255:256:0:0:0
|
||||||
Beta Research promo:12422:h:0:27500:1023:1024:0:0:0
|
Beta Research promo:12422:h:0:27500:1023:1024:0:0:0
|
||||||
Canal Canarias:12441:v:0:27500:160:80:0:0:0
|
Canal Canarias:12441:v:0:27500:160:80:0:0:0
|
||||||
TVC International:12441:v:0:27500:512:660:0:0:0
|
TVC International:12441:v:0:27500:512:660:0:0:29701
|
||||||
Fitur:12441:v:0:27500:514:662:0:0:0
|
Fitur:12441:v:0:27500:514:662:0:0:0
|
||||||
Astra Info 1:12552:v:0:22000:164:112:0:0:0
|
Astra Info 1:12552:v:0:22000:164:112:0:0:0
|
||||||
Astra Info 2:12552:v:0:22000:165:120:0:0:0
|
Astra Info 2:12552:v:0:22000:165:120:0:0:0
|
||||||
@ -185,17 +185,18 @@ Astra Vision 1:12552:v:0:22000:168:147:0:0:0
|
|||||||
Astra Vision 1:12552:v:0:22000:168:148:0:0:0
|
Astra Vision 1:12552:v:0:22000:168:148:0:0:0
|
||||||
Astra Vision 1:12552:v:0:22000:168:149:0:0:0
|
Astra Vision 1:12552:v:0:22000:168:149:0:0:0
|
||||||
Astra Vision 1:12552:v:0:22000:168:150:0:0:0
|
Astra Vision 1:12552:v:0:22000:168:150:0:0:0
|
||||||
RTL Tele Letzebuerg:12552:v:0:22000:168:144:0:0:0
|
RTL Tele Letzebuerg:12552:v:0:22000:168:144,146:0:0:3994
|
||||||
Astra Mosaic:12552:v:0:22000:175:176:0:0:0
|
Astra Mosaic:12552:v:0:22000:175:176:0:0:0
|
||||||
MHP test:12604:h:0:22000:5632:0:0:0:0
|
MHP test:12604:h:0:22000:5632:0:0:0:0
|
||||||
VERONICA:12574:h:0:22000:161:84:0:0:5010
|
VERONICA:12574:h:0:22000:161:84:0:0:5010
|
||||||
VH1 Classic:12699:v:0:22000:3071:3072:0:0:28647
|
VH1 Classic:12699:v:0:22000:3071:3072:0:0:28647
|
||||||
VH-1 Germany:12699:v:0:22000:3081:3082:0:0:28648
|
MTV 2 Pop:12699:v:0:22000:3081:3082:0:0:28648
|
||||||
Via 1 - Schöner Reisen:12148:h:0:27500:511:512:0:0:44
|
Via 1 - Schöner Reisen:12148:h:0:27500:511:512:0:0:44
|
||||||
Video Italia:12610:v:0:22000:121:122:0:0:12220
|
Video Italia:12610:v:0:22000:121:122:0:0:12220
|
||||||
AC 3 promo:12670:v:0:22000:308:256:0:0:0
|
AC 3 promo:12670:v:0:22000:308:256:0:0:0
|
||||||
ORF/ZDF:12699:h:0:22000:506:507:0:0:13012
|
ORF/ZDF:12699:h:0:22000:506:507:0:0:13012
|
||||||
VIVA:12670:v:0:22000:309:310:0:0:12732
|
VIVA:12670:v:0:22000:309:310:0:0:12732
|
||||||
VIVA2:12552:v:0:22000:171:172:0:0:12120
|
VIVA2:12552:v:0:22000:171:172:0:0:12120
|
||||||
MTV Central Europe:12699:v:0:22000:3031:3032:0:0:28643
|
MTV German:12699:v:0:22000:3031:3032:0:0:28643
|
||||||
IFA-TV:10832:h:0:22000:132:133:32:0:7251
|
IFA-TV:10832:h:0:22000:132:133:32:0:7251
|
||||||
|
QVC Germany:12552:v:0:22000:165:166:0:0:12100
|
||||||
|
11
channels.conf.terr
Normal file
11
channels.conf.terr
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
: UK channels
|
||||||
|
BBC ONE:505833:0:0:0:600:601:0:0:4164
|
||||||
|
BBC TWO:505833:0:0:0:610:611:0:0:4228
|
||||||
|
ITV 1:481833:0:0:0:512:650:0:0:8261
|
||||||
|
Channel 4:481833:0:0:0:2827:2828:0:0:8384
|
||||||
|
Channel 5:561833:0:0:0:6017:6018:0:0:12866
|
||||||
|
ITV 2:481833:0:0:0:2818:2819:0:0:8325
|
||||||
|
BBC CHOICE:505833:0:0:0:620:621:0:0:4351
|
||||||
|
BBC NEWS 24:505833:0:0:0:640:641:0:0:4415
|
||||||
|
BBC Knowledge:505833:0:0:0:630:631:0:0:4607
|
||||||
|
Shop!:561833:0:0:0:6049:6050:0:0:13120
|
4
config.h
4
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 1.85 2001/10/27 09:56:04 kls Exp $
|
* $Id: config.h 1.86 2001/11/25 15:57:08 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -18,7 +18,7 @@
|
|||||||
#include "eit.h"
|
#include "eit.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
#define VDRVERSION "0.98"
|
#define VDRVERSION "0.99"
|
||||||
|
|
||||||
#define MAXPRIORITY 99
|
#define MAXPRIORITY 99
|
||||||
#define MAXLIFETIME 99
|
#define MAXLIFETIME 99
|
||||||
|
141
dvbapi.c
141
dvbapi.c
@ -7,7 +7,7 @@
|
|||||||
* DVD support initially written by Andreas Schultz <aschultz@warp10.net>
|
* DVD support initially written by Andreas Schultz <aschultz@warp10.net>
|
||||||
* based on dvdplayer-0.5 by Matjaz Thaler <matjaz.thaler@guest.arnes.si>
|
* based on dvdplayer-0.5 by Matjaz Thaler <matjaz.thaler@guest.arnes.si>
|
||||||
*
|
*
|
||||||
* $Id: dvbapi.c 1.137 2001/11/04 12:05:36 kls Exp $
|
* $Id: dvbapi.c 1.141 2001/11/25 16:38:09 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define DVDDEBUG 1
|
//#define DVDDEBUG 1
|
||||||
@ -710,6 +710,7 @@ protected:
|
|||||||
int readIndex, writeIndex;
|
int readIndex, writeIndex;
|
||||||
bool canDoTrickMode;
|
bool canDoTrickMode;
|
||||||
bool canToggleAudioTrack;
|
bool canToggleAudioTrack;
|
||||||
|
bool skipAC3bytes;
|
||||||
uchar audioTrack;
|
uchar audioTrack;
|
||||||
void TrickSpeed(int Increment);
|
void TrickSpeed(int Increment);
|
||||||
virtual void Empty(bool Block = false);
|
virtual void Empty(bool Block = false);
|
||||||
@ -752,6 +753,7 @@ cPlayBuffer::cPlayBuffer(cDvbApi *DvbApi, int VideoDev, int AudioDev)
|
|||||||
readIndex = writeIndex = -1;
|
readIndex = writeIndex = -1;
|
||||||
canDoTrickMode = false;
|
canDoTrickMode = false;
|
||||||
canToggleAudioTrack = false;
|
canToggleAudioTrack = false;
|
||||||
|
skipAC3bytes = false;
|
||||||
audioTrack = 0xC0;
|
audioTrack = 0xC0;
|
||||||
if (cDvbApi::AudioCommand()) {
|
if (cDvbApi::AudioCommand()) {
|
||||||
if (!dolbyDev.Open(cDvbApi::AudioCommand(), "w"))
|
if (!dolbyDev.Open(cDvbApi::AudioCommand(), "w"))
|
||||||
@ -769,7 +771,7 @@ void cPlayBuffer::PlayExternalDolby(const uchar *b, int MaxLength)
|
|||||||
if (b[0] == 0x00 && b[1] == 0x00 && b[2] == 0x01) {
|
if (b[0] == 0x00 && b[1] == 0x00 && b[2] == 0x01) {
|
||||||
if (b[3] == 0xBD) { // dolby
|
if (b[3] == 0xBD) { // dolby
|
||||||
int l = b[4] * 256 + b[5] + 6;
|
int l = b[4] * 256 + b[5] + 6;
|
||||||
int written = b[8] + 9; // skips the PES header
|
int written = b[8] + (skipAC3bytes ? 13 : 9); // skips the PES header
|
||||||
int n = min(l - written, MaxLength);
|
int n = min(l - written, MaxLength);
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
int w = fwrite(&b[written], 1, n, dolbyDev);
|
int w = fwrite(&b[written], 1, n, dolbyDev);
|
||||||
@ -1348,9 +1350,6 @@ bool cReplayBuffer::NextFile(uchar FileNumber, int FileOffset)
|
|||||||
#define cOUTPACK 5
|
#define cOUTPACK 5
|
||||||
#define cOUTFRAMES 6
|
#define cOUTFRAMES 6
|
||||||
|
|
||||||
#define aAC3 0x80
|
|
||||||
#define aLPCM 0xA0
|
|
||||||
|
|
||||||
// --- cAC3toPCM -------------------------------------------------------------
|
// --- cAC3toPCM -------------------------------------------------------------
|
||||||
|
|
||||||
class cAC3toPCM {
|
class cAC3toPCM {
|
||||||
@ -1406,22 +1405,16 @@ cFrame *cAC3toPCM::Get(int size, uchar PTSflags, uchar *PTSdata)
|
|||||||
int p_size = (size > MAXSIZE) ? MAXSIZE : size;
|
int p_size = (size > MAXSIZE) ? MAXSIZE : size;
|
||||||
int length = 10; // default header bytes
|
int length = 10; // default header bytes
|
||||||
int header = 0;
|
int header = 0;
|
||||||
int stuffb = 0;
|
|
||||||
|
|
||||||
switch (PTSflags) {
|
switch (PTSflags) {
|
||||||
case 2: header = 5; // additional header bytes
|
case 2: header = 5; // additional header bytes
|
||||||
stuffb = 1;
|
|
||||||
break;
|
break;
|
||||||
case 3: header = 10;
|
case 3: header = 10;
|
||||||
break;
|
break;
|
||||||
default: header = 0;
|
default: header = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// header = 0; //XXX ???
|
|
||||||
stuffb = 0; //XXX ???
|
|
||||||
|
|
||||||
length += header;
|
length += header;
|
||||||
length += stuffb;
|
|
||||||
|
|
||||||
buffer[0] = 0x00;
|
buffer[0] = 0x00;
|
||||||
buffer[1] = 0x00;
|
buffer[1] = 0x00;
|
||||||
@ -1430,19 +1423,13 @@ cFrame *cAC3toPCM::Get(int size, uchar PTSflags, uchar *PTSdata)
|
|||||||
|
|
||||||
buffer[6] = 0x80;
|
buffer[6] = 0x80;
|
||||||
buffer[7] = PTSflags << 6;
|
buffer[7] = PTSflags << 6;
|
||||||
buffer[8] = header + stuffb;
|
buffer[8] = header;
|
||||||
|
|
||||||
if (header)
|
if (header)
|
||||||
memcpy(&buffer[9], (void *)PTSdata, header);
|
memcpy(&buffer[9], (void *)PTSdata, header);
|
||||||
|
|
||||||
// add stuffing
|
|
||||||
data = buffer + 9 + header;
|
|
||||||
for (int cnt = 0; cnt < stuffb; cnt++)
|
|
||||||
data[cnt] = 0xff;
|
|
||||||
length += stuffb;
|
|
||||||
|
|
||||||
// add data
|
// add data
|
||||||
data = buffer + 9 + header + stuffb + 7;
|
data = buffer + 9 + header + 7;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
while (p_size) {
|
while (p_size) {
|
||||||
if (ac3outp != ac3inp) { // data in the buffer
|
if (ac3outp != ac3inp) { // data in the buffer
|
||||||
@ -1456,7 +1443,7 @@ cFrame *cAC3toPCM::Get(int size, uchar PTSflags, uchar *PTSdata)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = buffer + 9 + header + stuffb;
|
data = buffer + 9 + header;
|
||||||
data[0] = aLPCM; // substream ID
|
data[0] = aLPCM; // substream ID
|
||||||
data[1] = 0x00; // other stuff (see DVB specs), ignored by driver
|
data[1] = 0x00; // other stuff (see DVB specs), ignored by driver
|
||||||
data[2] = 0x00;
|
data[2] = 0x00;
|
||||||
@ -1560,6 +1547,7 @@ cDVDplayBuffer::cDVDplayBuffer(cDvbApi *DvbApi, int VideoDev, int AudioDev, cDVD
|
|||||||
canToggleAudioTrack = true;//XXX determine from cDVD!
|
canToggleAudioTrack = true;//XXX determine from cDVD!
|
||||||
data = new uchar[1024 * DVD_VIDEO_LB_LEN];
|
data = new uchar[1024 * DVD_VIDEO_LB_LEN];
|
||||||
canDoTrickMode = true;
|
canDoTrickMode = true;
|
||||||
|
skipAC3bytes = true;
|
||||||
dvbApi->SetModeReplay();
|
dvbApi->SetModeReplay();
|
||||||
Start();
|
Start();
|
||||||
}
|
}
|
||||||
@ -1574,28 +1562,12 @@ cDVDplayBuffer::~cDVDplayBuffer()
|
|||||||
|
|
||||||
unsigned int cDVDplayBuffer::getAudioStream(unsigned int StreamId)
|
unsigned int cDVDplayBuffer::getAudioStream(unsigned int StreamId)
|
||||||
{
|
{
|
||||||
unsigned int trackID;
|
if (cyclestate < cOPENCHAPTER || StreamId > 7)
|
||||||
|
|
||||||
if ((cyclestate < cOPENCHAPTER) || (StreamId > 7))
|
|
||||||
return 0;
|
return 0;
|
||||||
if (!(cur_pgc->audio_control[StreamId] & 0x8000))
|
if (!(cur_pgc->audio_control[StreamId] & 0x8000))
|
||||||
return 0;
|
return 0;
|
||||||
int track = (cur_pgc->audio_control[StreamId] >> 8) & 0x07;
|
int track = (cur_pgc->audio_control[StreamId] >> 8) & 0x07;
|
||||||
switch (vts_file->vtsi_mat->vts_audio_attr[track].audio_format) {
|
return dvd->getAudioTrack(track) | track;
|
||||||
case 0: // ac3
|
|
||||||
trackID = aAC3;
|
|
||||||
break;
|
|
||||||
case 2: // mpeg1
|
|
||||||
case 3: // mpeg2ext
|
|
||||||
case 4: // lpcm
|
|
||||||
case 6: // dts
|
|
||||||
trackID = aLPCM;
|
|
||||||
break;
|
|
||||||
default: esyslog(LOG_ERR, "ERROR: unknown Audio stream info");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
trackID |= track;
|
|
||||||
return trackID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cDVDplayBuffer::ToggleAudioTrack(void)
|
void cDVDplayBuffer::ToggleAudioTrack(void)
|
||||||
@ -2033,8 +2005,10 @@ void cDVDplayBuffer::handleAC3(unsigned char *sector, int length, uchar PTSflags
|
|||||||
#define PCM_FRAME_SIZE 1536
|
#define PCM_FRAME_SIZE 1536
|
||||||
AC3toPCM.Put(sector, length);
|
AC3toPCM.Put(sector, length);
|
||||||
cFrame *frame;
|
cFrame *frame;
|
||||||
if ((frame = AC3toPCM.Get(PCM_FRAME_SIZE, PTSflags, PTSdata)) != NULL)
|
if (ac3_buffersize() <= 100) {
|
||||||
putFrame(frame);
|
if ((frame = AC3toPCM.Get(PCM_FRAME_SIZE, PTSflags, PTSdata)) != NULL)
|
||||||
|
putFrame(frame);
|
||||||
|
}
|
||||||
while ((frame = AC3toPCM.Get(PCM_FRAME_SIZE)) != NULL)
|
while ((frame = AC3toPCM.Get(PCM_FRAME_SIZE)) != NULL)
|
||||||
putFrame(frame);
|
putFrame(frame);
|
||||||
}
|
}
|
||||||
@ -3087,7 +3061,7 @@ bool cDvbApi::SetPids(bool ForRecording)
|
|||||||
SetDpid2(ForRecording ? dPid2 : 0, DMX_OUT_TS_TAP);
|
SetDpid2(ForRecording ? dPid2 : 0, DMX_OUT_TS_TAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid, int Ca, int Pnr)
|
eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int Frequency, char Polarization, int Diseqc, int Srate, int Vpid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid, int Ca, int Pnr)
|
||||||
{
|
{
|
||||||
// Make sure the siProcessor won't access the device while switching
|
// Make sure the siProcessor won't access the device while switching
|
||||||
cThreadLock ThreadLock(siProcessor);
|
cThreadLock ThreadLock(siProcessor);
|
||||||
@ -3129,14 +3103,14 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char
|
|||||||
SetDpid2(0x1FFF, DMX_OUT_DECODER);
|
SetDpid2(0x1FFF, DMX_OUT_DECODER);
|
||||||
SetTpid( 0x1FFF, DMX_OUT_DECODER);
|
SetTpid( 0x1FFF, DMX_OUT_DECODER);
|
||||||
|
|
||||||
bool ChannelSynced = false;
|
FrontendParameters Frontend;
|
||||||
|
|
||||||
switch (frontendType) {
|
switch (frontendType) {
|
||||||
case FE_QPSK: { // DVB-S
|
case FE_QPSK: { // DVB-S
|
||||||
|
|
||||||
// Frequency offsets:
|
// Frequency offsets:
|
||||||
|
|
||||||
unsigned int freq = FrequencyMHz;
|
unsigned int freq = Frequency;
|
||||||
int tone = SEC_TONE_OFF;
|
int tone = SEC_TONE_OFF;
|
||||||
|
|
||||||
if (freq < (unsigned int)Setup.LnbSLOF) {
|
if (freq < (unsigned int)Setup.LnbSLOF) {
|
||||||
@ -3148,7 +3122,6 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char
|
|||||||
tone = SEC_TONE_ON;
|
tone = SEC_TONE_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
FrontendParameters Frontend;
|
|
||||||
Frontend.Frequency = freq * 1000UL;
|
Frontend.Frequency = freq * 1000UL;
|
||||||
Frontend.Inversion = INVERSION_AUTO;
|
Frontend.Inversion = INVERSION_AUTO;
|
||||||
Frontend.u.qpsk.SymbolRate = Srate * 1000UL;
|
Frontend.u.qpsk.SymbolRate = Srate * 1000UL;
|
||||||
@ -3173,58 +3146,32 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char
|
|||||||
scmds.commands = &scmd;
|
scmds.commands = &scmd;
|
||||||
|
|
||||||
CHECK(ioctl(fd_sec, SEC_SEND_SEQUENCE, &scmds));
|
CHECK(ioctl(fd_sec, SEC_SEND_SEQUENCE, &scmds));
|
||||||
|
|
||||||
// Tuning:
|
|
||||||
|
|
||||||
CHECK(ioctl(fd_frontend, FE_SET_FRONTEND, &Frontend));
|
|
||||||
|
|
||||||
// Wait for channel sync:
|
|
||||||
|
|
||||||
if (cFile::FileReady(fd_frontend, 5000)) {
|
|
||||||
FrontendEvent event;
|
|
||||||
int res = ioctl(fd_frontend, FE_GET_EVENT, &event);
|
|
||||||
if (res >= 0)
|
|
||||||
ChannelSynced = event.type == FE_COMPLETION_EV;
|
|
||||||
else
|
|
||||||
esyslog(LOG_ERR, "ERROR %d in frontend get event", res);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
esyslog(LOG_ERR, "ERROR: timeout while tuning");
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FE_QAM: { // DVB-C
|
case FE_QAM: { // DVB-C
|
||||||
|
|
||||||
// Frequency and symbol rate:
|
// Frequency and symbol rate:
|
||||||
|
|
||||||
FrontendParameters Frontend;
|
Frontend.Frequency = Frequency * 1000000UL;
|
||||||
Frontend.Frequency = FrequencyMHz * 1000000UL;
|
|
||||||
Frontend.Inversion = INVERSION_AUTO;
|
Frontend.Inversion = INVERSION_AUTO;
|
||||||
Frontend.u.qam.SymbolRate = Srate * 1000UL;
|
Frontend.u.qam.SymbolRate = Srate * 1000UL;
|
||||||
Frontend.u.qam.FEC_inner = FEC_AUTO;
|
Frontend.u.qam.FEC_inner = FEC_AUTO;
|
||||||
Frontend.u.qam.QAM = QAM_64;
|
Frontend.u.qam.QAM = QAM_64;
|
||||||
|
|
||||||
// Tuning:
|
|
||||||
|
|
||||||
CHECK(ioctl(fd_frontend, FE_SET_FRONTEND, &Frontend));
|
|
||||||
|
|
||||||
// Wait for channel sync:
|
|
||||||
|
|
||||||
if (cFile::FileReady(fd_frontend, 5000)) {
|
|
||||||
FrontendEvent event;
|
|
||||||
int res = ioctl(fd_frontend, FE_GET_EVENT, &event);
|
|
||||||
if (res >= 0)
|
|
||||||
ChannelSynced = event.type == FE_COMPLETION_EV;
|
|
||||||
else
|
|
||||||
esyslog(LOG_ERR, "ERROR %d in frontend get event", res);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
esyslog(LOG_ERR, "ERROR: timeout while tuning");
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FE_OFDM: { // DVB-T
|
case FE_OFDM: { // DVB-T
|
||||||
//XXX TODO: implement DVB-T tuning (anybody with a DVB-T card out there?)
|
|
||||||
esyslog(LOG_ERR, "ERROR: DVB-T tuning support not yet implemented");
|
// Frequency and OFDM paramaters:
|
||||||
return scrFailed;
|
|
||||||
|
Frontend.Frequency = Frequency * 1000UL;
|
||||||
|
Frontend.Inversion = INVERSION_AUTO;
|
||||||
|
Frontend.u.ofdm.bandWidth=BANDWIDTH_8_MHZ;
|
||||||
|
Frontend.u.ofdm.HP_CodeRate=FEC_2_3;
|
||||||
|
Frontend.u.ofdm.LP_CodeRate=FEC_1_2;
|
||||||
|
Frontend.u.ofdm.Constellation=QAM_64;
|
||||||
|
Frontend.u.ofdm.TransmissionMode=TRANSMISSION_MODE_2K;
|
||||||
|
Frontend.u.ofdm.guardInterval=GUARD_INTERVAL_1_32;
|
||||||
|
Frontend.u.ofdm.HierarchyInformation=HIERARCHY_NONE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -3232,12 +3179,28 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char
|
|||||||
return scrFailed;
|
return scrFailed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ChannelSynced) {
|
// Tuning:
|
||||||
esyslog(LOG_ERR, "ERROR: channel %d not sync'ed on DVB card %d!", ChannelNumber, CardIndex() + 1);
|
|
||||||
if (this == PrimaryDvbApi)
|
CHECK(ioctl(fd_frontend, FE_SET_FRONTEND, &Frontend));
|
||||||
cThread::RaisePanic();
|
|
||||||
return scrFailed;
|
// Wait for channel sync:
|
||||||
|
|
||||||
|
if (cFile::FileReady(fd_frontend, 5000)) {
|
||||||
|
FrontendEvent event;
|
||||||
|
int res = ioctl(fd_frontend, FE_GET_EVENT, &event);
|
||||||
|
if (res >= 0) {
|
||||||
|
if (event.type != FE_COMPLETION_EV) {
|
||||||
|
esyslog(LOG_ERR, "ERROR: channel %d not sync'ed on DVB card %d!", ChannelNumber, CardIndex() + 1);
|
||||||
|
if (this == PrimaryDvbApi)
|
||||||
|
cThread::RaisePanic();
|
||||||
|
return scrFailed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog(LOG_ERR, "ERROR %d in frontend get event", res);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
esyslog(LOG_ERR, "ERROR: timeout while tuning");
|
||||||
|
|
||||||
// PID settings:
|
// PID settings:
|
||||||
|
|
||||||
@ -3261,7 +3224,7 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char
|
|||||||
if (NeedsTransferMode) {
|
if (NeedsTransferMode) {
|
||||||
cDvbApi *CaDvbApi = GetDvbApi(Ca, 0);
|
cDvbApi *CaDvbApi = GetDvbApi(Ca, 0);
|
||||||
if (CaDvbApi && !CaDvbApi->Recording()) {
|
if (CaDvbApi && !CaDvbApi->Recording()) {
|
||||||
if ((Result = CaDvbApi->SetChannel(ChannelNumber, FrequencyMHz, Polarization, Diseqc, Srate, Vpid, Apid1, Apid2, Dpid1, Dpid2, Tpid, Ca, Pnr)) == scrOk) {
|
if ((Result = CaDvbApi->SetChannel(ChannelNumber, Frequency, Polarization, Diseqc, Srate, Vpid, Apid1, Apid2, Dpid1, Dpid2, Tpid, Ca, Pnr)) == scrOk) {
|
||||||
SetModeReplay();
|
SetModeReplay();
|
||||||
transferringFromDvbApi = CaDvbApi->StartTransfer(fd_video);
|
transferringFromDvbApi = CaDvbApi->StartTransfer(fd_video);
|
||||||
}
|
}
|
||||||
|
4
dvbapi.h
4
dvbapi.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbapi.h 1.58 2001/11/04 11:39:42 kls Exp $
|
* $Id: dvbapi.h 1.59 2001/11/24 11:03:16 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBAPI_H
|
#ifndef __DVBAPI_H
|
||||||
@ -187,7 +187,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
int currentChannel;
|
int currentChannel;
|
||||||
public:
|
public:
|
||||||
eSetChannelResult SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid, int Ca, int Pnr);
|
eSetChannelResult SetChannel(int ChannelNumber, int Frequency, char Polarization, int Diseqc, int Srate, int Vpid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid, int Ca, int Pnr);
|
||||||
static int CurrentChannel(void) { return PrimaryDvbApi ? PrimaryDvbApi->currentChannel : 0; }
|
static int CurrentChannel(void) { return PrimaryDvbApi ? PrimaryDvbApi->currentChannel : 0; }
|
||||||
int Channel(void) { return currentChannel; }
|
int Channel(void) { return currentChannel; }
|
||||||
|
|
||||||
|
23
dvd.c
23
dvd.c
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Initially written by Andreas Schultz <aschultz@warp10.net>
|
* Initially written by Andreas Schultz <aschultz@warp10.net>
|
||||||
*
|
*
|
||||||
* $Id: dvd.c 1.3 2001/08/06 16:07:44 kls Exp $
|
* $Id: dvd.c 1.4 2001/11/10 13:38:50 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef DVDSUPPORT
|
#ifdef DVDSUPPORT
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "dvd.h"
|
#include "dvd.h"
|
||||||
|
#include "tools.h"
|
||||||
|
|
||||||
// --- cDVD ----------------------------------------------------------------------------
|
// --- cDVD ----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -145,4 +146,24 @@ dvd_file_t *cDVD::openTitle(int Title, dvd_read_domain_t domain)
|
|||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cDVD::getAudioTrack(int stream)
|
||||||
|
{
|
||||||
|
if (getVTS()) {
|
||||||
|
switch (getVTS()->vtsi_mat->vts_audio_attr[stream].audio_format) {
|
||||||
|
case 0: // ac3
|
||||||
|
return aAC3;
|
||||||
|
case 2: // mpeg1
|
||||||
|
case 3: // mpeg2ext
|
||||||
|
return aMPEG;
|
||||||
|
case 4: // lpcm
|
||||||
|
return aLPCM;
|
||||||
|
case 6: // dts
|
||||||
|
return aDTS;
|
||||||
|
default:
|
||||||
|
esyslog(LOG_ERR, "ERROR: unknown Audio stream info");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif //DVDSUPPORT
|
#endif //DVDSUPPORT
|
||||||
|
11
dvd.h
11
dvd.h
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Initially written by Andreas Schultz <aschultz@warp10.net>
|
* Initially written by Andreas Schultz <aschultz@warp10.net>
|
||||||
*
|
*
|
||||||
* $Id: dvd.h 1.3 2001/08/05 16:00:57 kls Exp $
|
* $Id: dvd.h 1.4 2001/11/10 13:38:25 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVD_H
|
#ifndef __DVD_H
|
||||||
@ -21,6 +21,11 @@
|
|||||||
#include <dvdread/nav_read.h>
|
#include <dvdread/nav_read.h>
|
||||||
#include <dvdread/nav_print.h>
|
#include <dvdread/nav_print.h>
|
||||||
|
|
||||||
|
#define aAC3 0x80
|
||||||
|
#define aDTS 0x88
|
||||||
|
#define aLPCM 0xA0
|
||||||
|
#define aMPEG 0xC0
|
||||||
|
|
||||||
class cDVD {
|
class cDVD {
|
||||||
private:
|
private:
|
||||||
static cDVD *dvdInstance;
|
static cDVD *dvdInstance;
|
||||||
@ -44,8 +49,12 @@ public:
|
|||||||
bool isValid(void) { return (dvd != NULL); }
|
bool isValid(void) { return (dvd != NULL); }
|
||||||
ifo_handle_t *openVMG(void);
|
ifo_handle_t *openVMG(void);
|
||||||
ifo_handle_t *openVTS(int TitleSet);
|
ifo_handle_t *openVTS(int TitleSet);
|
||||||
|
ifo_handle_t *getVTS() { return vts_file; }
|
||||||
dvd_file_t *openTitle(int Title, dvd_read_domain_t domain);
|
dvd_file_t *openTitle(int Title, dvd_read_domain_t domain);
|
||||||
static cDVD *getDVD(void);
|
static cDVD *getDVD(void);
|
||||||
|
int getAudioNrOfTracks() { return getVTS() ? getVTS()->vtsi_mat->nr_of_vts_audio_streams : 0; }
|
||||||
|
int getAudioLanguage(int stream) { return getVTS() ? getVTS()->vtsi_mat->vts_audio_attr[stream].lang_code : 0; }
|
||||||
|
int getAudioTrack(int stream);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //DVDSUPPORT
|
#endif //DVDSUPPORT
|
||||||
|
18
menu.c
18
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.139 2001/11/04 10:37:18 kls Exp $
|
* $Id: menu.c 1.141 2001/11/24 13:20:37 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -546,16 +546,16 @@ cMenuEditChannel::cMenuEditChannel(int Index)
|
|||||||
if (channel) {
|
if (channel) {
|
||||||
data = *channel;
|
data = *channel;
|
||||||
Add(new cMenuEditStrItem( tr("Name"), data.name, sizeof(data.name), FileNameChars));
|
Add(new cMenuEditStrItem( tr("Name"), data.name, sizeof(data.name), FileNameChars));
|
||||||
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency, 10000, 13000)); //TODO exact limits???
|
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency));
|
||||||
Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hv"));
|
Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hv"));
|
||||||
Add(new cMenuEditIntItem( tr("DiSEqC"), &data.diseqc, 0, 10)); //TODO exact limits???
|
Add(new cMenuEditIntItem( tr("DiSEqC"), &data.diseqc, 0, 10)); //TODO exact limits???
|
||||||
Add(new cMenuEditIntItem( tr("Srate"), &data.srate, 22000, 30000)); //TODO exact limits - toggle???
|
Add(new cMenuEditIntItem( tr("Srate"), &data.srate));
|
||||||
Add(new cMenuEditIntItem( tr("Vpid"), &data.vpid, 0, 0xFFFE));
|
Add(new cMenuEditIntItem( tr("Vpid"), &data.vpid, 0, 0x1FFF));
|
||||||
Add(new cMenuEditIntItem( tr("Apid1"), &data.apid1, 0, 0xFFFE));
|
Add(new cMenuEditIntItem( tr("Apid1"), &data.apid1, 0, 0x1FFF));
|
||||||
Add(new cMenuEditIntItem( tr("Apid2"), &data.apid2, 0, 0xFFFE));
|
Add(new cMenuEditIntItem( tr("Apid2"), &data.apid2, 0, 0x1FFF));
|
||||||
Add(new cMenuEditIntItem( tr("Dpid1"), &data.dpid1, 0, 0xFFFE));
|
Add(new cMenuEditIntItem( tr("Dpid1"), &data.dpid1, 0, 0x1FFF));
|
||||||
Add(new cMenuEditIntItem( tr("Dpid2"), &data.dpid2, 0, 0xFFFE));
|
Add(new cMenuEditIntItem( tr("Dpid2"), &data.dpid2, 0, 0x1FFF));
|
||||||
Add(new cMenuEditIntItem( tr("Tpid"), &data.tpid, 0, 0xFFFE));
|
Add(new cMenuEditIntItem( tr("Tpid"), &data.tpid, 0, 0x1FFF));
|
||||||
Add(new cMenuEditIntItem( tr("CA"), &data.ca, 0, cDvbApi::NumDvbApis));
|
Add(new cMenuEditIntItem( tr("CA"), &data.ca, 0, cDvbApi::NumDvbApis));
|
||||||
Add(new cMenuEditIntItem( tr("Pnr"), &data.pnr, 0));
|
Add(new cMenuEditIntItem( tr("Pnr"), &data.pnr, 0));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user