* Send a custom root description to enable the subtitle menu on some Samsung TV's.

This commit is contained in:
Justin Maggard 2011-08-31 18:21:30 +00:00
parent 757eacc236
commit 1e23a1e8e9
6 changed files with 41 additions and 5 deletions

4
NEWS
View File

@ -1,3 +1,7 @@
1.0.23 - Released 00-Month-0000
--------------------------------
- Enable the subtitle menu on some Samsung TV's.
1.0.22 - Released 24-Aug-2011 1.0.22 - Released 24-Aug-2011
-------------------------------- --------------------------------
- Add bookmark support for some Samsung TV's. - Add bookmark support for some Samsung TV's.

View File

@ -68,7 +68,7 @@ enum file_types {
enum client_types { enum client_types {
EXbox = 1, EXbox = 1,
EPS3, EPS3,
ESamsungTV, ESamsungSeriesC,
EDenonReceiver, EDenonReceiver,
EFreeBox, EFreeBox,
EPopcornHour, EPopcornHour,

View File

@ -675,18 +675,40 @@ genRootDesc(int * len)
{ {
char * str; char * str;
int tmplen; int tmplen;
tmplen = 2048; tmplen = 2560;
str = (char *)malloc(tmplen); str = (char *)malloc(tmplen);
if(str == NULL) if(str == NULL)
return NULL; return NULL;
* len = strlen(xmlver); * len = strlen(xmlver);
/*strcpy(str, xmlver); */
memcpy(str, xmlver, *len + 1); memcpy(str, xmlver, *len + 1);
str = genXML(str, len, &tmplen, rootDesc); str = genXML(str, len, &tmplen, rootDesc);
str[*len] = '\0'; str[*len] = '\0';
return str; return str;
} }
char *
genRootDescSamsung(int * len)
{
char * str;
int tmplen;
struct XMLElt samsungRootDesc[sizeof(rootDesc)/sizeof(struct XMLElt)];
tmplen = 2560;
str = (char *)malloc(tmplen);
if(str == NULL)
return NULL;
* len = strlen(xmlver);
memcpy(str, xmlver, *len + 1);
/* Replace the optional modelURL and manufacturerURL fields with Samsung foo */
memcpy(&samsungRootDesc, &rootDesc, sizeof(rootDesc));
samsungRootDesc[8+PNPX].eltname = "/sec:ProductCap";
samsungRootDesc[8+PNPX].data = "smi,DCM10,getMediaInfo.sec,getCaptionInfo.sec";
samsungRootDesc[12+PNPX].eltname = "/sec:X_ProductCap";
samsungRootDesc[12+PNPX].data = "smi,DCM10,getMediaInfo.sec,getCaptionInfo.sec";
str = genXML(str, len, &tmplen, samsungRootDesc);
str[*len] = '\0';
return str;
}
/* genServiceDesc() : /* genServiceDesc() :
* Generate service description with allowed methods and * Generate service description with allowed methods and
* related variables. */ * related variables. */

View File

@ -74,6 +74,9 @@ struct stateVar {
char * char *
genRootDesc(int * len); genRootDesc(int * len);
char *
genRootDescSamsung(int * len);
/* for the two following functions */ /* for the two following functions */
char * char *
genContentDirectory(int * len); genContentDirectory(int * len);

View File

@ -304,10 +304,12 @@ intervening space) by either an integer or the keyword "infinite". */
} }
else if(strstrc(p, "SEC_HHP_", '\r')) else if(strstrc(p, "SEC_HHP_", '\r'))
{ {
h->req_client = ESamsungTV; h->req_client = ESamsungSeriesC;
h->reqflags |= FLAG_SAMSUNG; h->reqflags |= FLAG_SAMSUNG;
h->reqflags |= FLAG_DLNA; h->reqflags |= FLAG_DLNA;
h->reqflags |= FLAG_NO_RESIZE; h->reqflags |= FLAG_NO_RESIZE;
if(strstrc(p, "SEC_HHP_TV", '\r'))
h->reqflags |= FLAG_SAMSUNG_TV;
} }
else if(strncmp(p, "SamsungWiselinkPro", 18)==0) else if(strncmp(p, "SamsungWiselinkPro", 18)==0)
{ {
@ -844,6 +846,10 @@ ProcessHttpQuery_upnphttp(struct upnphttp * h)
sendXMLdesc(h, genRootDesc); sendXMLdesc(h, genRootDesc);
friendly_name[i] = '\0'; friendly_name[i] = '\0';
} }
else if( h->reqflags & FLAG_SAMSUNG_TV )
{
sendXMLdesc(h, genRootDescSamsung);
}
else else
{ {
sendXMLdesc(h, genRootDesc); sendXMLdesc(h, genRootDesc);

View File

@ -113,7 +113,8 @@ struct upnphttp {
#define FLAG_NO_RESIZE 0x02000000 #define FLAG_NO_RESIZE 0x02000000
#define FLAG_MS_PFS 0x04000000 // Microsoft PlaysForSure client #define FLAG_MS_PFS 0x04000000 // Microsoft PlaysForSure client
#define FLAG_SAMSUNG 0x08000000 #define FLAG_SAMSUNG 0x08000000
#define FLAG_AUDIO_ONLY 0x10000000 #define FLAG_SAMSUNG_TV 0x10000000
#define FLAG_AUDIO_ONLY 0x20000000
#define FLAG_FREE_OBJECT_ID 0x00000001 #define FLAG_FREE_OBJECT_ID 0x00000001
#define FLAG_ROOT_CONTAINER 0x00000002 #define FLAG_ROOT_CONTAINER 0x00000002