Hi,
Igor wrote:
there is several h264-channels in dvb-s modulation with standard definition.
For example, 20 Russian channels on 40E,
http://www.lyngsat.com/eam1.html
two channels on 16E
http://www.lyngsat.com/ew2.html
how is it possible to watch it by VDR ?
The next vdr-xine release will support it. You may want to try the
attached patch for VDR-1.5.x, which prepares cRemux for H.264 (most
likely one of the next VDR releases will contain this patch). After that
you should be able to record such channels. Be aware that channels.conf
may nolonger be compatible with non patched VDR versions.
The recordings should already be playable with xine-lib-1.1.7:
xine .../001.vdr#demux:mpeg_pes
Be aware that xine-lib's H.264 support is based on ffmpeg and there are
known issues with interlaced material. So it is likely that xine will crash.
In case you are able to create a recording, would you please be so kind
and provide me a sample for testing.
Bye.
--
Dipl.-Inform. (FH) Reinhard Nissl
mailto:[EMAIL PROTECTED]
diff -Nurp ../vdr-1.5.2-orig/channels.h ./channels.h
--- ../vdr-1.5.2-orig/channels.h 2007-01-05 11:37:35.0 +0100
+++ ./channels.h 2007-05-06 21:00:53.0 +0200
@@ -47,6 +47,16 @@
#define CA_ENCRYPTED_MIN 0x0100
#define CA_ENCRYPTED_MAX 0x
+// VPID can be in the range 0...8191. Offsets of 1 are used to indicate special video codings.
+#define VPID_OFFSET_BASE 1
+#define VPID_FROM_ANY(pid) ((pid) % VPID_OFFSET_BASE) // returns the plain VPID
+#define VPID_TO_XXX(pid, offset) (pid + offset)
+#define VPID_IS_XXX(pid, offset) ((pid - VPID_FROM_ANY(pid)) == offset)
+// 1. special video coding: H.264
+#define VPID_OFFSET_H264 (1 * VPID_OFFSET_BASE)
+#define VPID_TO_H264(pid)VPID_TO_XXX(pid, VPID_OFFSET_H264)
+#define VPID_IS_H264(pid)VPID_IS_XXX(pid, VPID_OFFSET_H264)
+
struct tChannelParameterMap {
int userValue;
int driverValue;
diff -Nurp ../vdr-1.5.2-orig/dvbplayer.c ./dvbplayer.c
--- ../vdr-1.5.2-orig/dvbplayer.c 2006-04-17 14:45:48.0 +0200
+++ ./dvbplayer.c 2007-05-06 21:00:53.0 +0200
@@ -712,7 +712,8 @@ void cDvbPlayer::Goto(int Index, bool St
b[r++] = 0x00;
b[r++] = 0x00;
b[r++] = 0x01;
- b[r++] = 0xB7;
+ b[r] = (cRemux::IsFrameH264(b, r) ? 10 : 0xB7);
+ r++;
}
DeviceStillPicture(b, r);
}
diff -Nurp ../vdr-1.5.2-orig/menu.c ./menu.c
--- ../vdr-1.5.2-orig/menu.c 2007-02-25 15:04:33.0 +0100
+++ ./menu.c 2007-05-06 21:01:18.0 +0200
@@ -218,6 +218,7 @@ class cMenuEditChannel : public cOsdMenu
private:
cChannel *channel;
cChannel data;
+ int vcodec;
char name[256];
void Setup(void);
public:
@@ -231,6 +232,9 @@ cMenuEditChannel::cMenuEditChannel(cChan
channel = Channel;
if (channel) {
data = *channel;
+ vcodec = data.vpid / VPID_OFFSET_BASE;
+ data.vpid = VPID_FROM_ANY(data.vpid);
+
if (New) {
channel = NULL;
data.nid = 0;
@@ -249,20 +253,26 @@ void cMenuEditChannel::Setup(void)
Clear();
+ static const char *VideoCodecValues[] = {
+tr(MPEG1/2),
+tr(H.264)
+};
+
// Parameters for all types of sources:
strn0cpy(name, data.name, sizeof(name));
Add(new cMenuEditStrItem( tr(Name), name, sizeof(name), tr(FileNameChars)));
Add(new cMenuEditSrcItem( tr(Source), data.source));
Add(new cMenuEditIntItem( tr(Frequency),data.frequency));
- Add(new cMenuEditIntItem( tr(Vpid), data.vpid, 0, 0x1FFF));
- Add(new cMenuEditIntItem( tr(Ppid), data.ppid, 0, 0x1FFF));
+ Add(new cMenuEditIntItem( tr(Vpid), data.vpid, 0, 0x1FFF));
+ Add(new cMenuEditStraItem( tr(Vcodec), vcodec, sizeof(VideoCodecValues) / sizeof(*VideoCodecValues), VideoCodecValues));
+ Add(new cMenuEditIntItem( tr(Ppid), data.ppid, 0, 0x1FFF));
Add(new cMenuEditIntItem( tr(Apid1),data.apids[0], 0, 0x1FFF));
Add(new cMenuEditIntItem( tr(Apid2),data.apids[1], 0, 0x1FFF));
Add(new cMenuEditIntItem( tr(Dpid1),data.dpids[0], 0, 0x1FFF));
Add(new cMenuEditIntItem( tr(Dpid2),data.dpids[1], 0, 0x1FFF));
- Add(new cMenuEditIntItem( tr(Tpid), data.tpid, 0, 0x1FFF));
+ Add(new cMenuEditIntItem( tr(Tpid), data.tpid, 0, 0x1FFF));
Add(new cMenuEditCaItem( tr(CA), data.caids[0]));
- Add(new cMenuEditIntItem( tr(Sid), data.sid, 1, 0x));
+ Add(new cMenuEditIntItem( tr(Sid), data.sid, 1, 0x));
/* XXX not yet used
Add(new cMenuEditIntItem( tr(Nid), data.nid, 0));
Add(new cMenuEditIntItem( tr(Tid), data.tid, 0));
@@ -294,12 +304,14 @@ eOSState cMenuEditChannel::ProcessKey(eK
if (Channels.HasUniqueChannelID(data, channel)) {
data.name = strcpyrealloc(data.name, name);
if (channel) {
+