diff options
author | Carl Fürstenberg <azatoth@gmail.com> | 2011-04-05 01:02:22 +0400 |
---|---|---|
committer | Carl Fürstenberg <azatoth@gmail.com> | 2011-04-05 01:13:31 +0400 |
commit | 0922cc147cf811c36e2a39e8f7dddd1043e0e784 (patch) | |
tree | 5aa21a637a77c6f2539f4e6d50f610ed5bad13d2 | |
parent | f72e3cbf6c1111abd470c64a8f280da0b7d1e85f (diff) |
EToshibaTV
-rw-r--r-- | minidlnatypes.h | 1 | ||||
-rw-r--r-- | upnphttp.c | 9 | ||||
-rw-r--r-- | upnpsoap.c | 68 |
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 }; @@ -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; @@ -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, "<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\">" + "http://%s:%d/MediaItems/%s.%s" + "</res>", + 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; |