Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/azatoth/minidlna.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Maggard <jmaggard@users.sourceforce.net>2011-11-24 02:41:42 +0400
committerJustin Maggard <jmaggard@users.sourceforce.net>2011-11-24 02:41:42 +0400
commit593566e39838a1cb54c17ef7a3f2a21f8b275222 (patch)
treef65ff96232abd38b43edac654beeb6eb3bd8e84a
parente67e419bee1aa215214f5eb184d12eff231ea796 (diff)
* Fix SRT caption support with the latest Samsung Series D firmware.
-rw-r--r--upnphttp.c5
-rw-r--r--upnpsoap.c22
2 files changed, 21 insertions, 6 deletions
diff --git a/upnphttp.c b/upnphttp.c
index aee1333..ba7f5b5 100644
--- a/upnphttp.c
+++ b/upnphttp.c
@@ -286,6 +286,7 @@ intervening space) by either an integer or the keyword "infinite". */
}
else if(strncasecmp(line, "User-Agent", 10)==0)
{
+ char *s;
/* Skip client detection if we already detected it. */
if( h->req_client )
goto next_header;
@@ -304,13 +305,13 @@ intervening space) by either an integer or the keyword "infinite". */
h->reqflags |= FLAG_DLNA;
h->reqflags |= FLAG_MIME_AVI_DIVX;
}
- else if(strstrc(p, "SEC_HHP_", '\r'))
+ else if((s=strstrc(p, "SEC_HHP_", '\r')))
{
h->req_client = ESamsungSeriesC;
h->reqflags |= FLAG_SAMSUNG;
h->reqflags |= FLAG_DLNA;
h->reqflags |= FLAG_NO_RESIZE;
- if(strstrc(p, "SEC_HHP_TV", '\r'))
+ if(strstrc(s+8, "TV", '\r'))
h->reqflags |= FLAG_SAMSUNG_TV;
}
else if(strncmp(p, "SamsungWiselinkPro", 18)==0)
diff --git a/upnpsoap.c b/upnpsoap.c
index 1daefc9..687f752 100644
--- a/upnpsoap.c
+++ b/upnpsoap.c
@@ -488,7 +488,7 @@ set_filter_flags(char * filter, struct upnphttp *h)
}
char *
-parse_sort_criteria(char * sortCriteria, int * error)
+parse_sort_criteria(char *sortCriteria, int *error)
{
char *order = NULL;
char *item, *saveptr;
@@ -929,6 +929,15 @@ callback(void *args, int argc, char **argv, char **azColName)
lan_addr[passed_args->iface].str, runtime_vars.port, detailID);
}
break;
+ case ESamsungSeriesC:
+ if( sql_get_int_field(db, "SELECT ID from CAPTIONS where ID = '%s'", detailID) > 0 )
+ {
+ ret = strcatf(str, "&lt;sec:CaptionInfoEx sec:type=\"srt\"&gt;"
+ "http://%s:%d/Captions/%s.srt"
+ "&lt;/sec:CaptionInfoEx&gt;",
+ lan_addr[passed_args->iface].str, runtime_vars.port, detailID);
+ }
+ break;
default:
break;
}
@@ -1119,16 +1128,21 @@ BrowseContentDirectory(struct upnphttp * h, const char * action)
if( strncmp(ObjectID, MUSIC_PLIST_ID, strlen(MUSIC_PLIST_ID)) == 0 )
{
if( strcmp(ObjectID, MUSIC_PLIST_ID) == 0 )
- asprintf(&orderBy, "order by d.TITLE");
+ ret = asprintf(&orderBy, "order by d.TITLE");
else
- asprintf(&orderBy, "order by length(OBJECT_ID), OBJECT_ID");
+ ret = asprintf(&orderBy, "order by length(OBJECT_ID), OBJECT_ID");
}
else if( args.client == ERokuSoundBridge )
{
#ifdef __sparc__
if( totalMatches < 10000 )
#endif
- asprintf(&orderBy, "order by o.CLASS, d.DISC, d.TRACK, d.TITLE");
+ ret = asprintf(&orderBy, "order by o.CLASS, d.DISC, d.TRACK, d.TITLE");
+ }
+ if( ret == -1 )
+ {
+ orderBy = NULL;
+ ret = 0;
}
}
/* If it's a DLNA client, return an error for bad sort criteria */