* Add support for Sony's av:mediaClass tag, so certain Sony devices can filter menu items by media type.
This commit is contained in:
parent
e1c03bf689
commit
311e36736e
29
upnpsoap.c
29
upnpsoap.c
@ -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, ">http://%s:%d/AlbumArt/%s-%s.jpg</upnp:albumArtURI>",
|
ret = strcatf(str, ">http://%s:%d/AlbumArt/%s-%s.jpg</upnp:albumArtURI>",
|
||||||
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, "<av:mediaClass xmlns:av=\"urn:schemas-sony-com:av\">"
|
||||||
|
"%c</av:mediaClass>", class);
|
||||||
|
}
|
||||||
ret = strcatf(str, "</container>");
|
ret = strcatf(str, "</container>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user