[ANNOUNCE] VDR developer version 1.7.11
Commit Message
Am Mittwoch, den 06.01.2010, 13:34 +0100 schrieb Klaus Schmidinger:
> VDR developer version 1.7.11 is now available at
...
> The changes since version 1.7.10:
>
...
> - Implemented handling the "Content Descriptor" (based on a patch from Rolf
> Ahrenberg). The 'classic', 'sttng' and 'curses' skins display the textual
> representation of the content descriptors as "genre". The epg.data file stores
> the genre using the tag character 'G'.
Believe it or not, I was working on this patch this afternoon. I should
have checked my emails earlier. But how about changing all these
#defines in enumeration in epg.h? I also changed the names the way, that
they fit better to the rest of vdr's source code (patch attached).
ARD also sends some kind of user defined Content Descriptor, but
unfortunately it's nowhere documented.
Regards,
Joachim
Comments
On 06.01.2010 20:31, JW wrote:
> Am Mittwoch, den 06.01.2010, 13:34 +0100 schrieb Klaus Schmidinger:
>> VDR developer version 1.7.11 is now available at
>
> ...
>
>> The changes since version 1.7.10:
>>
> ...
>> - Implemented handling the "Content Descriptor" (based on a patch from Rolf
>> Ahrenberg). The 'classic', 'sttng' and 'curses' skins display the textual
>> representation of the content descriptors as "genre". The epg.data file stores
>> the genre using the tag character 'G'.
>
> Believe it or not, I was working on this patch this afternoon. I should
> have checked my emails earlier. But how about changing all these
> #defines in enumeration in epg.h? I also changed the names the way, that
> they fit better to the rest of vdr's source code (patch attached).
Adopted for version 1.7.12.
I also changed "mask" to "group", because these values are not
really mask values.
Please provide your real name if you care to be mentioned in VDR/CONTRIBUTORS.
> ARD also sends some kind of user defined Content Descriptor, but
> unfortunately it's nowhere documented.
The DVB standard should never have allowed any "user defined" stuff... :-(
Klaus
2010/1/8 Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>:
Hi Klaus, any plans on including vdr-1.7.9-pluginparam.patch for
pvrinput plugin? http://drseltsam.device.name/vdr/pvr/src/pvrinput
This seems to create an input device of Plugin Type. I guess the
vdr-iptv plugin also creates something similar.
Theunis
On Mon, 11 Jan 2010, Theunis Potgieter wrote:
> Hi Klaus, any plans on including vdr-1.7.9-pluginparam.patch for
> pvrinput plugin? http://drseltsam.device.name/vdr/pvr/src/pvrinput
>
> This seems to create an input device of Plugin Type. I guess the
> vdr-iptv plugin also creates something similar.
Both are using the same patch. I'd like to see also this patch (or
similar feature) merged into official vdr sources.
BR,
--
rofa
On 01/11/10 15:33, Rolf Ahrenberg wrote:
> On Mon, 11 Jan 2010, Theunis Potgieter wrote:
>
>> Hi Klaus, any plans on including vdr-1.7.9-pluginparam.patch for
>> pvrinput plugin? http://drseltsam.device.name/vdr/pvr/src/pvrinput
>>
>> This seems to create an input device of Plugin Type. I guess the
>> vdr-iptv plugin also creates something similar.
>
> Both are using the same patch. I'd like to see also this patch (or
> similar feature) merged into official vdr sources.
This is very high on my TODO list ;-)
Klaus
2010/1/11 Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>:
> On 01/11/10 15:33, Rolf Ahrenberg wrote:
>> On Mon, 11 Jan 2010, Theunis Potgieter wrote:
>>
>>> Hi Klaus, any plans on including vdr-1.7.9-pluginparam.patch for
>>> pvrinput plugin? http://drseltsam.device.name/vdr/pvr/src/pvrinput
>>>
>>> This seems to create an input device of Plugin Type. I guess the
>>> vdr-iptv plugin also creates something similar.
>>
>> Both are using the same patch. I'd like to see also this patch (or
>> similar feature) merged into official vdr sources.
>
> This is very high on my TODO list ;-)
>
> Klaus
Great News! :)
>
> _______________________________________________
> vdr mailing list
> vdr@linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>
On Mon, Jan 11, 2010 at 11:41 PM, Theunis Potgieter
<theunis.potgieter@gmail.com> wrote:
> 2010/1/11 Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>:
>> On 01/11/10 15:33, Rolf Ahrenberg wrote:
>>> On Mon, 11 Jan 2010, Theunis Potgieter wrote:
>>>
>>>> Hi Klaus, any plans on including vdr-1.7.9-pluginparam.patch for
>>>> pvrinput plugin? http://drseltsam.device.name/vdr/pvr/src/pvrinput
>>>>
>>>> This seems to create an input device of Plugin Type. I guess the
>>>> vdr-iptv plugin also creates something similar.
>>>
>>> Both are using the same patch. I'd like to see also this patch (or
>>> similar feature) merged into official vdr sources.
>>
>> This is very high on my TODO list ;-)
>>
>> Klaus
>
> Great News! :)
Hopefully the truecolor osd upgrade is high on the list as well. ;)
On 01/12/2010 10:11 PM, VDR User wrote:
> On Mon, Jan 11, 2010 at 11:41 PM, Theunis Potgieter
> <theunis.potgieter@gmail.com> wrote:
>> 2010/1/11 Klaus Schmidinger<Klaus.Schmidinger@tvdr.de>:
>>> On 01/11/10 15:33, Rolf Ahrenberg wrote:
>>>> On Mon, 11 Jan 2010, Theunis Potgieter wrote:
>>>>
>>>>> Hi Klaus, any plans on including vdr-1.7.9-pluginparam.patch for
>>>>> pvrinput plugin? http://drseltsam.device.name/vdr/pvr/src/pvrinput
>>>>>
>>>>> This seems to create an input device of Plugin Type. I guess the
>>>>> vdr-iptv plugin also creates something similar.
>>>>
>>>> Both are using the same patch. I'd like to see also this patch (or
>>>> similar feature) merged into official vdr sources.
>>>
>>> This is very high on my TODO list ;-)
>>>
>>> Klaus
>>
>> Great News! :)
>
> Hopefully the truecolor osd upgrade is high on the list as well. ;)
>
As well as checking the frontend capabilities ;)
-Petri
@@ -157,9 +157,9 @@
SI::ContentDescriptor *cd = (SI::ContentDescriptor *)d;
SI::ContentDescriptor::Nibble Nibble;
int NumContents = 0;
- uchar Contents[MAXEVCONTENTS] = { 0 };
+ uchar Contents[MaxEventContents] = { 0 };
for (SI::Loop::Iterator it3; cd->nibbleLoop.getNext(Nibble, it3); ) {
- if (NumContents < MAXEVCONTENTS) {
+ if (NumContents < MaxEventContents) {
Contents[NumContents] = ((Nibble.getContentNibbleLevel1() & 0xF) << 4) | (Nibble.getContentNibbleLevel2() & 0xF);
NumContents++;
}
@@ -190,7 +190,7 @@
void cEvent::SetContents(uchar *Contents)
{
- for (int i = 0; i < MAXEVCONTENTS; i++)
+ for (int i = 0; i < MaxEventContents; i++)
contents[i] = Contents[i];
}
@@ -250,7 +250,7 @@
const char *cEvent::ContentToString(uchar Content)
{
switch (Content & 0xF0) {
- case EVCONTENTMASK_MOVIEDRAMA:
+ case ecmMovieDrama:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Movie/Drama");
@@ -264,7 +264,7 @@
case 0x08: return tr("Content$Adult Movie/Drama");
}
break;
- case EVCONTENTMASK_NEWSCURRENTAFFAIRS:
+ case ecmNewsCurrentAffairs:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$News/Current Affairs");
@@ -274,7 +274,7 @@
case 0x04: return tr("Content$Discussion/Inverview/Debate");
}
break;
- case EVCONTENTMASK_SHOW:
+ case ecmShow:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Show/Game Show");
@@ -283,7 +283,7 @@
case 0x03: return tr("Content$Talk Show");
}
break;
- case EVCONTENTMASK_SPORTS:
+ case ecmSports:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Sports");
@@ -300,7 +300,7 @@
case 0x0B: return tr("Content$Martial Sports");
}
break;
- case EVCONTENTMASK_CHILDRENYOUTH:
+ case ecmChildrenYouth:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Children's/Youth Programme");
@@ -311,7 +311,7 @@
case 0x05: return tr("Content$Cartoons/Puppets");
}
break;
- case EVCONTENTMASK_MUSICBALLETDANCE:
+ case ecmMusicBalletDance:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Music/Ballet/Dance");
@@ -323,7 +323,7 @@
case 0x06: return tr("Content$Ballet");
}
break;
- case EVCONTENTMASK_ARTSCULTURE:
+ case ecmArtsCulture:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Arts/Culture");
@@ -340,7 +340,7 @@
case 0x0B: return tr("Content$Fashion");
}
break;
- case EVCONTENTMASK_SOCIALPOLITICALECONOMICS:
+ case ecmSocialPoliticalEconomics:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Social/Political/Economics");
@@ -349,7 +349,7 @@
case 0x03: return tr("Content$Remarkable People");
}
break;
- case EVCONTENTMASK_EDUCATIONALSCIENCE:
+ case ecmEducationalScience:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Education/Science/Factual");
@@ -362,7 +362,7 @@
case 0x07: return tr("Content$Languages");
}
break;
- case EVCONTENTMASK_LEISUREHOBBIES:
+ case ecmLeisureHobbies:
switch (Content & 0x0F) {
default:
case 0x00: return tr("Content$Leisure/Hobbies");
@@ -375,7 +375,7 @@
case 0x07: return tr("Content$Gardening");
}
break;
- case EVCONTENTMASK_SPECIAL:
+ case ecmSpecial:
switch (Content & 0x0F) {
case 0x00: return tr("Content$Original Language");
case 0x01: return tr("Content$Black & White");
@@ -468,7 +468,7 @@
break;
case 'G': {
memset(contents, 0, sizeof(contents));
- for (int i = 0; i < MAXEVCONTENTS; i++) {
+ for (int i = 0; i < MaxEventContents; i++) {
char *tail = NULL;
int c = strtol(t, &tail, 16);
if (0x00 < c && c <= 0xFF) {
@@ -19,19 +19,22 @@
#define MAXEPGBUGFIXLEVEL 3
-#define MAXEVCONTENTS 4
-#define EVCONTENTMASK_MOVIEDRAMA 0x10
-#define EVCONTENTMASK_NEWSCURRENTAFFAIRS 0x20
-#define EVCONTENTMASK_SHOW 0x30
-#define EVCONTENTMASK_SPORTS 0x40
-#define EVCONTENTMASK_CHILDRENYOUTH 0x50
-#define EVCONTENTMASK_MUSICBALLETDANCE 0x60
-#define EVCONTENTMASK_ARTSCULTURE 0x70
-#define EVCONTENTMASK_SOCIALPOLITICALECONOMICS 0x80
-#define EVCONTENTMASK_EDUCATIONALSCIENCE 0x90
-#define EVCONTENTMASK_LEISUREHOBBIES 0xA0
-#define EVCONTENTMASK_SPECIAL 0xB0
-#define EVCONTENTMASK_USERDEFINED 0xF0
+enum {MaxEventContents=4};
+
+enum eEventContentMask {
+ ecmMovieDrama = 0x10,
+ ecmNewsCurrentAffairs = 0x20,
+ ecmShow = 0x30,
+ ecmSports = 0x40,
+ ecmChildrenYouth = 0x50,
+ ecmMusicBalletDance = 0x60,
+ ecmArtsCulture = 0x70,
+ ecmSocialPoliticalEconomics= 0x80,
+ ecmEducationalScience = 0x90,
+ ecmLeisureHobbies = 0xA0,
+ ecmSpecial = 0xB0,
+ ecmUserDefined = 0xF0
+};
enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime };
@@ -78,7 +81,7 @@
char *shortText; // Short description of this event (typically the episode name in case of a series)
char *description; // Description of this event
cComponents *components; // The stream components of this event
- uchar contents[MAXEVCONTENTS]; // Contents of this event
+ uchar contents[MaxEventContents]; // Contents of this event
time_t startTime; // Start time of this event
int duration; // Duration of this event in seconds
time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
@@ -97,7 +100,7 @@
const char *ShortText(void) const { return shortText; }
const char *Description(void) const { return description; }
const cComponents *Components(void) const { return components; }
- uchar Contents(int i = 0) const { return (0 <= i && i < MAXEVCONTENTS) ? contents[i] : 0; }
+ uchar Contents(int i = 0) const { return (0 <= i && i < MaxEventContents) ? contents[i] : 0; }
int ParentalRating(void) const { return parentalRating; }
time_t StartTime(void) const { return startTime; }
time_t EndTime(void) const { return startTime + duration; }