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:
authorCarl Fürstenberg <azatoth@gmail.com>2011-04-05 01:02:22 +0400
committerCarl Fürstenberg <azatoth@gmail.com>2011-04-05 01:13:31 +0400
commit0922cc147cf811c36e2a39e8f7dddd1043e0e784 (patch)
tree5aa21a637a77c6f2539f4e6d50f610ed5bad13d2
parentf72e3cbf6c1111abd470c64a8f280da0b7d1e85f (diff)
EToshibaTV
-rw-r--r--minidlnatypes.h1
-rw-r--r--upnphttp.c9
-rw-r--r--upnpsoap.c68
3 files changed, 75 insertions, 3 deletions
diff --git a/minidlnatypes.h b/minidlnatypes.h
index 3dbf6e1..a749f43 100644
--- a/minidlnatypes.h
+++ b/minidlnatypes.h
@@ -70,6 +70,7 @@ enum client_types {
EMediaRoom,
ESonyBDP,
ESonyBravia,
+ EToshibaTV,
EStandardDLNA150 = 100
};
diff --git a/upnphttp.c b/upnphttp.c
index 97cbeb6..2e5048f 100644
--- a/upnphttp.c
+++ b/upnphttp.c
@@ -319,6 +319,11 @@ intervening space) by either an integer or the keyword "infinite". */
h->req_client = EMediaRoom;
h->reqflags |= FLAG_MS_PFS;
}
+ else if(strstrc(p, "UPnP/1.0 DLNADOC/1.50 Intel_SDK_for_UPnP_devices/1.2", '\r'))
+ {
+ h->req_client = EToshibaTV;
+ h->reqflags |= FLAG_DLNA;
+ }
else if(strstrc(p, "DLNADOC/1.50", '\r'))
{
h->req_client = EStandardDLNA150;
@@ -496,7 +501,9 @@ next_header:
break;
}
}
- else if( (n < EStandardDLNA150) && (h->req_client == EStandardDLNA150) )
+ else if( (n < EStandardDLNA150) &&
+ ( (h->req_client == EStandardDLNA150) ||
+ (h->req_client == EToshibaTV) ) )
{
/* If we know the client and our new detection is generic, use our cached info */
h->reqflags |= clients[n].flags;
diff --git a/upnpsoap.c b/upnpsoap.c
index 778f594..55cea02 100644
--- a/upnpsoap.c
+++ b/upnpsoap.c
@@ -637,9 +637,19 @@ callback(void *args, int argc, char **argv, char **azColName)
}
passed_args->returned++;
- if( dlna_pn )
+ if( dlna_pn ) {
+#ifdef ENABLE_TRANSCODE
+ if( (passed_args->client != EToshibaTV ) || (creator == NULL) )
+ sprintf(dlna_buf, "DLNA.ORG_PN=%s", dlna_pn);
+ else if( (passed_args->client == EToshibaTV ) &&
+ !strcmp(mime, "video/mpeg") && !strcmp(creator, "MP3") )
+ strcpy(dlna_buf, "*");
+ else
+ sprintf(dlna_buf, "DLNA.ORG_PN=%s", dlna_pn);
+#else /* ENABLE_TRANSCODE */
sprintf(dlna_buf, "DLNA.ORG_PN=%s", dlna_pn);
- else if( passed_args->flags & FLAG_DLNA )
+#endif /* ENABLE_TRANSCODE */
+ } else if( passed_args->flags & FLAG_DLNA )
strcpy(dlna_buf, dlna_no_conv);
else
strcpy(dlna_buf, "*");
@@ -883,6 +893,60 @@ callback(void *args, int argc, char **argv, char **azColName)
passed_args->size += ret;
}
}
+ if( (*mime == 'v') && dlna_pn && ( passed_args->client == EToshibaTV ) ) {
+ if ((strcmp(dlna_pn, "MPEG_TS_HD_NA_ISO;DLNA.ORG_OP=01;DLNA.ORG_CI=0") == 0)
+ || (strcmp(dlna_pn, "MPEG_TS_SD_NA_ISO;DLNA.ORG_OP=01;DLNA.ORG_CI=0") == 0)
+ || (strcmp(dlna_pn, "AVC_TS_MP_HD_AC3_T;DLNA.ORG_OP=01;DLNA.ORG_CI=0") == 0)
+ ) {
+ sprintf(dlna_buf, "DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
+
+ ret = sprintf(str_buf, "&lt;res ");
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ if( size && (passed_args->filter & FILTER_RES_SIZE) ) {
+ ret = sprintf(str_buf, "size=\"%s\" ", size);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ if( duration && (passed_args->filter & FILTER_RES_DURATION) ) {
+ ret = sprintf(str_buf, "duration=\"%s\" ", duration);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ if( bitrate && (passed_args->filter & FILTER_RES_BITRATE) ) {
+ ret = sprintf(str_buf, "bitrate=\"%s\" ", bitrate);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ if( sampleFrequency && (passed_args->filter & FILTER_RES_SAMPLEFREQUENCY) ) {
+ ret = sprintf(str_buf, "sampleFrequency=\"%s\" ", sampleFrequency);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ if( nrAudioChannels && (passed_args->filter & FILTER_RES_NRAUDIOCHANNELS) ) {
+ ret = sprintf(str_buf, "nrAudioChannels=\"%s\" ", nrAudioChannels);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ if( resolution && (passed_args->filter & FILTER_RES_RESOLUTION) ) {
+ ret = sprintf(str_buf, "resolution=\"%s\" ", resolution);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ ret = sprintf(str_buf,
+ "protocolInfo=\"http-get:*:%s:%s\"&gt;"
+ "http://%s:%d/MediaItems/%s.%s"
+ "&lt;/res&gt;",
+ mime,
+ dlna_buf,
+ lan_addr[0].str,
+ runtime_vars.port,
+ detailID,
+ ext);
+ memcpy(passed_args->resp+passed_args->size, &str_buf, ret+1);
+ passed_args->size += ret;
+ }
+ }
#ifdef ENABLE_TRANSCODE
if( ( strncmp(mime, "video/", 6) == 0 ) && (transcode_video != TRANSCODE_VIDEO_DISABLE) ){
char *trans_res;