* Add support for Sony's av:mediaClass tag, so certain Sony devices can filter menu items by media type.

This commit is contained in:
Justin Maggard 2011-12-15 01:56:17 +00:00
parent e1c03bf689
commit 311e36736e

View File

@ -347,10 +347,11 @@ mime_to_ext(const char * mime, char * buf)
#define FILTER_UPNP_ORIGINALTRACKNUMBER 0x00080000 #define FILTER_UPNP_ORIGINALTRACKNUMBER 0x00080000
#define FILTER_UPNP_SEARCHCLASS 0x00100000 #define FILTER_UPNP_SEARCHCLASS 0x00100000
/* Vendor-specific filter flags */ /* Vendor-specific filter flags */
#define FILTER_SEC_CAPTION_INFO_EX 0x10000000 #define FILTER_SEC_CAPTION_INFO_EX 0x01000000
#define FILTER_SEC_DCM_INFO 0x20000000 #define FILTER_SEC_DCM_INFO 0x02000000
#define FILTER_PV_SUBTITLE_FILE_TYPE 0x40000000 #define FILTER_PV_SUBTITLE_FILE_TYPE 0x04000000
#define FILTER_PV_SUBTITLE_FILE_URI 0x80000000 #define FILTER_PV_SUBTITLE_FILE_URI 0x08000000
#define FILTER_AV_MEDIA_CLASS 0x10000000
static u_int32_t static u_int32_t
set_filter_flags(char * filter, struct upnphttp *h) set_filter_flags(char * filter, struct upnphttp *h)
@ -360,7 +361,7 @@ set_filter_flags(char * filter, struct upnphttp *h)
if( !filter || (strlen(filter) <= 1) ) if( !filter || (strlen(filter) <= 1) )
/* Not the full 32 bits. Skip vendor-specific stuff by default. */ /* Not the full 32 bits. Skip vendor-specific stuff by default. */
return 0xFFFFFFF; return 0xFFFFFF;
if( h->reqflags & FLAG_SAMSUNG ) if( h->reqflags & FLAG_SAMSUNG )
flags |= FILTER_DLNA_NAMESPACE; flags |= FILTER_DLNA_NAMESPACE;
item = strtok_r(filter, ",", &saveptr); item = strtok_r(filter, ",", &saveptr);
@ -491,6 +492,10 @@ set_filter_flags(char * filter, struct upnphttp *h)
{ {
flags |= FILTER_PV_SUBTITLE_FILE_URI; flags |= FILTER_PV_SUBTITLE_FILE_URI;
} }
else if( strcmp(item, "av:mediaClass") == 0 )
{
flags |= FILTER_AV_MEDIA_CLASS;
}
item = strtok_r(NULL, ",", &saveptr); item = strtok_r(NULL, ",", &saveptr);
} }
@ -1010,6 +1015,20 @@ callback(void *args, int argc, char **argv, char **azColName)
ret = strcatf(str, "&gt;http://%s:%d/AlbumArt/%s-%s.jpg&lt;/upnp:albumArtURI&gt;", ret = strcatf(str, "&gt;http://%s:%d/AlbumArt/%s-%s.jpg&lt;/upnp:albumArtURI&gt;",
lan_addr[passed_args->iface].str, runtime_vars.port, album_art, detailID); lan_addr[passed_args->iface].str, runtime_vars.port, album_art, detailID);
} }
if( passed_args->filter & FILTER_AV_MEDIA_CLASS ) {
char class;
if( strncmp(id, MUSIC_ID, sizeof(MUSIC_ID)) == 0 )
class = 'M';
else if( strncmp(id, VIDEO_ID, sizeof(VIDEO_ID)) == 0 )
class = 'V';
else if( strncmp(id, IMAGE_ID, sizeof(IMAGE_ID)) == 0 )
class = 'P';
else
class = 0;
if( class )
ret = strcatf(str, "&lt;av:mediaClass xmlns:av=\"urn:schemas-sony-com:av\"&gt;"
"%c&lt;/av:mediaClass&gt;", class);
}
ret = strcatf(str, "&lt;/container&gt;"); ret = strcatf(str, "&lt;/container&gt;");
} }