* Make strict DLNA adherence optional. Many products appear to handle JPEGs >4096x4096 classified as JPEG_LRG, and it's better to not downscale if we don't have to.
This commit is contained in:
parent
b632bf1704
commit
4efa9d06ac
@ -483,7 +483,7 @@ no_exifdata:
|
|||||||
asprintf(&m.dlna_pn, "JPEG_SM;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
|
asprintf(&m.dlna_pn, "JPEG_SM;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
|
||||||
else if( width <= 1024 && height <= 768 )
|
else if( width <= 1024 && height <= 768 )
|
||||||
asprintf(&m.dlna_pn, "JPEG_MED;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
|
asprintf(&m.dlna_pn, "JPEG_MED;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
|
||||||
else if( width <= 4096 && height <= 4096 )
|
else if( (width <= 4096 && height <= 4096) || !(GETFLAG(DLNA_STRICT_MASK)) )
|
||||||
asprintf(&m.dlna_pn, "JPEG_LRG;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
|
asprintf(&m.dlna_pn, "JPEG_LRG;DLNA.ORG_OP=01;DLNA.ORG_CI=0");
|
||||||
asprintf(&m.resolution, "%dx%d", width, height);
|
asprintf(&m.resolution, "%dx%d", width, height);
|
||||||
|
|
||||||
|
14
minidlna.c
14
minidlna.c
@ -373,11 +373,15 @@ init(int argc, char * * argv)
|
|||||||
break;
|
break;
|
||||||
case UPNPINOTIFY:
|
case UPNPINOTIFY:
|
||||||
if( (strcmp(ary_options[i].value, "yes") != 0) && !atoi(ary_options[i].value) )
|
if( (strcmp(ary_options[i].value, "yes") != 0) && !atoi(ary_options[i].value) )
|
||||||
CLEARFLAG(INOTIFYMASK);
|
CLEARFLAG(INOTIFY_MASK);
|
||||||
break;
|
break;
|
||||||
case ENABLE_TIVO:
|
case ENABLE_TIVO:
|
||||||
if( (strcmp(ary_options[i].value, "yes") == 0) || atoi(ary_options[i].value) )
|
if( (strcmp(ary_options[i].value, "yes") == 0) || atoi(ary_options[i].value) )
|
||||||
SETFLAG(TIVOMASK);
|
SETFLAG(TIVO_MASK);
|
||||||
|
break;
|
||||||
|
case ENABLE_DLNA_STRICT:
|
||||||
|
if( (strcmp(ary_options[i].value, "yes") == 0) || atoi(ary_options[i].value) )
|
||||||
|
SETFLAG(DLNA_STRICT_MASK);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Unknown option in file %s\n",
|
fprintf(stderr, "Unknown option in file %s\n",
|
||||||
@ -741,7 +745,7 @@ main(int argc, char * * argv)
|
|||||||
sqlite3_free_table(result);
|
sqlite3_free_table(result);
|
||||||
}
|
}
|
||||||
if( sqlite3_threadsafe() && sqlite3_libversion_number() >= 3005001 &&
|
if( sqlite3_threadsafe() && sqlite3_libversion_number() >= 3005001 &&
|
||||||
GETFLAG(INOTIFYMASK) && pthread_create(&inotify_thread, NULL, start_inotify, NULL) )
|
GETFLAG(INOTIFY_MASK) && pthread_create(&inotify_thread, NULL, start_inotify, NULL) )
|
||||||
{
|
{
|
||||||
DPRINTF(E_FATAL, L_GENERAL, "ERROR: pthread_create() failed for start_inotify.\n");
|
DPRINTF(E_FATAL, L_GENERAL, "ERROR: pthread_create() failed for start_inotify.\n");
|
||||||
}
|
}
|
||||||
@ -768,7 +772,7 @@ main(int argc, char * * argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TIVO_SUPPORT
|
#ifdef TIVO_SUPPORT
|
||||||
if( GETFLAG(TIVOMASK) )
|
if( GETFLAG(TIVO_MASK) )
|
||||||
{
|
{
|
||||||
DPRINTF(E_WARN, L_GENERAL, "TiVo support is enabled.\n");
|
DPRINTF(E_WARN, L_GENERAL, "TiVo support is enabled.\n");
|
||||||
/* Add TiVo-specific randomize function to sqlite */
|
/* Add TiVo-specific randomize function to sqlite */
|
||||||
@ -834,7 +838,7 @@ main(int argc, char * * argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef TIVO_SUPPORT
|
#ifdef TIVO_SUPPORT
|
||||||
if( GETFLAG(TIVOMASK) )
|
if( GETFLAG(TIVO_MASK) )
|
||||||
{
|
{
|
||||||
if(timeofday.tv_sec >= (lastbeacontime.tv_sec + beacon_interval))
|
if(timeofday.tv_sec >= (lastbeacontime.tv_sec + beacon_interval))
|
||||||
{
|
{
|
||||||
|
@ -27,6 +27,11 @@ inotify=yes
|
|||||||
# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
|
# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
|
||||||
enable_tivo=no
|
enable_tivo=no
|
||||||
|
|
||||||
|
# set this to strictly adhere to DLNA standards.
|
||||||
|
# * This will allow server-side downscaling of very large JPEG images,
|
||||||
|
# which may hurt JPEG serving performance on (at least) Sony DLNA products.
|
||||||
|
strict_dlna=no
|
||||||
|
|
||||||
# default presentation url is http address on port 80
|
# default presentation url is http address on port 80
|
||||||
#presentation_url=http://www.mylan/index.php
|
#presentation_url=http://www.mylan/index.php
|
||||||
|
|
||||||
|
@ -33,7 +33,8 @@ static const struct {
|
|||||||
{ UPNPMEDIADIR, "media_dir"},
|
{ UPNPMEDIADIR, "media_dir"},
|
||||||
{ UPNPALBUMART_NAMES, "album_art_names"},
|
{ UPNPALBUMART_NAMES, "album_art_names"},
|
||||||
{ UPNPINOTIFY, "inotify" },
|
{ UPNPINOTIFY, "inotify" },
|
||||||
{ ENABLE_TIVO, "enable_tivo" }
|
{ ENABLE_TIVO, "enable_tivo" },
|
||||||
|
{ ENABLE_DLNA_STRICT, "strict_dlna" }
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -26,7 +26,8 @@ enum upnpconfigoptions {
|
|||||||
UPNPMEDIADIR, /* directory to search for UPnP-A/V content */
|
UPNPMEDIADIR, /* directory to search for UPnP-A/V content */
|
||||||
UPNPALBUMART_NAMES, /* list of '/'-delimited file names to check for album art */
|
UPNPALBUMART_NAMES, /* list of '/'-delimited file names to check for album art */
|
||||||
UPNPINOTIFY, /* enable inotify on the media directories */
|
UPNPINOTIFY, /* enable inotify on the media directories */
|
||||||
ENABLE_TIVO /* enable support for streaming images and music to TiVo */
|
ENABLE_TIVO, /* enable support for streaming images and music to TiVo */
|
||||||
|
ENABLE_DLNA_STRICT /* strictly adhere to DLNA specs */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* readoptionsfile()
|
/* readoptionsfile()
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
time_t startup_time = 0;
|
time_t startup_time = 0;
|
||||||
|
|
||||||
struct runtime_vars_s runtime_vars;
|
struct runtime_vars_s runtime_vars;
|
||||||
int runtime_flags = INOTIFYMASK;
|
int runtime_flags = INOTIFY_MASK;
|
||||||
|
|
||||||
const char * pidfilename = "/var/run/minidlna.pid";
|
const char * pidfilename = "/var/run/minidlna.pid";
|
||||||
|
|
||||||
|
@ -76,8 +76,9 @@ extern time_t startup_time;
|
|||||||
extern struct runtime_vars_s runtime_vars;
|
extern struct runtime_vars_s runtime_vars;
|
||||||
/* runtime boolean flags */
|
/* runtime boolean flags */
|
||||||
extern int runtime_flags;
|
extern int runtime_flags;
|
||||||
#define INOTIFYMASK 0x0001
|
#define INOTIFY_MASK 0x0001
|
||||||
#define TIVOMASK 0x0002
|
#define TIVO_MASK 0x0002
|
||||||
|
#define DLNA_STRICT_MASK 0x0004
|
||||||
|
|
||||||
#define SETFLAG(mask) runtime_flags |= mask
|
#define SETFLAG(mask) runtime_flags |= mask
|
||||||
#define GETFLAG(mask) runtime_flags & mask
|
#define GETFLAG(mask) runtime_flags & mask
|
||||||
|
@ -762,7 +762,7 @@ ProcessHttpQuery_upnphttp(struct upnphttp * h)
|
|||||||
#ifdef TIVO_SUPPORT
|
#ifdef TIVO_SUPPORT
|
||||||
else if(strncmp(HttpUrl, "/TiVoConnect", 12) == 0)
|
else if(strncmp(HttpUrl, "/TiVoConnect", 12) == 0)
|
||||||
{
|
{
|
||||||
if( GETFLAG(TIVOMASK) )
|
if( GETFLAG(TIVO_MASK) )
|
||||||
{
|
{
|
||||||
if( *(HttpUrl+12) == '?' )
|
if( *(HttpUrl+12) == '?' )
|
||||||
{
|
{
|
||||||
@ -1546,7 +1546,7 @@ SendResp_dlnafile(struct upnphttp * h, char * object)
|
|||||||
DPRINTF(E_WARN, L_HTTP, "Client tried to specify transferMode as Interactive without an image!\n");
|
DPRINTF(E_WARN, L_HTTP, "Client tried to specify transferMode as Interactive without an image!\n");
|
||||||
/* Samsung TVs (well, at least the A950) do this for some reason,
|
/* Samsung TVs (well, at least the A950) do this for some reason,
|
||||||
* and I don't see them fixing this bug any time soon. */
|
* and I don't see them fixing this bug any time soon. */
|
||||||
if( h->req_client != ESamsungTV )
|
if( h->req_client != ESamsungTV || GETFLAG(DLNA_STRICT_MASK) )
|
||||||
{
|
{
|
||||||
Send406(h);
|
Send406(h);
|
||||||
goto error;
|
goto error;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user