--- Begin Message ---
Package: gmediaserver
Version: 0.13.0-6
Severity: normal
Tags: patch
Hi!
Attached is a patch with few cherry-picked fixes from upstream CVS,
to enable gmediaserver to work correctly with a PS3.
The relevant patch is debian/patches/00_cvs_fixes.diff, but it
conflicted with debian/patches/06_fix_noxon_sort.diff, so I've rebased
that one, and just included a patch against the debian packaging.
thanks,
guillem
diff -Nru gmediaserver-0.13.0/debian/patches/00_cvs_fixes.diff gmediaserver-0.13.0/debian/patches/00_cvs_fixes.diff
--- gmediaserver-0.13.0/debian/patches/00_cvs_fixes.diff 1970-01-01 01:00:00.000000000 +0100
+++ gmediaserver-0.13.0/debian/patches/00_cvs_fixes.diff 2011-01-22 06:50:26.000000000 +0100
@@ -0,0 +1,184 @@
+Description: Fix several things from upstream CVS
+Origin: upstream
+
+diff -Naur -x CVS gmediaserver-orig/src/connectmgr.c gmediaserver/src/connectmgr.c
+--- gmediaserver-orig/src/connectmgr.c 2007-10-18 18:30:04.000000000 +0200
++++ gmediaserver/src/connectmgr.c 2008-05-06 20:39:30.000000000 +0200
+@@ -32,8 +32,8 @@
+ * this: "http-get:*:audio/mpeg:*,http-get:*:audio/m3u:*,..") we use
+ * this generic string which is accepted according to the standard.
+ */
+- upnp_add_response(event, "SOURCE", "http-get:*:*:*");
+- upnp_add_response(event, "SINK", "");
++ upnp_add_response(event, "Source", "http-get:*:*:*");
++ upnp_add_response(event, "Sink", "");
+ return event->status;
+ }
+
+diff -Naur -x CVS gmediaserver-orig/src/contentdir.c gmediaserver/src/contentdir.c
+--- gmediaserver-orig/src/contentdir.c 2007-10-20 09:59:38.000000000 +0200
++++ gmediaserver/src/contentdir.c 2007-11-29 21:06:53.000000000 +0100
+@@ -141,22 +141,21 @@
+ sort_criteria_comparision(const void *k1, const void *k2, void *data)
+ {
+ SortCriteria *criteria = data;
+- SortCriteriaEntry *sort_entry;
++ SortCriteriaEntry *se;
+ const Entry *e1 = k1;
+ const Entry *e2 = k2;
+
+- sort_entry = criteria->first;
+- while (sort_entry != NULL) {
+- char *p1 = get_entry_property(e1, sort_entry->property);
+- char *p2 = get_entry_property(e2, sort_entry->property);
++ for (se = criteria->first; se != NULL; se = se->next) {
++ char *p1 = get_entry_property(e1, se->property);
++ char *p2 = get_entry_property(e2, se->property);
+
+ if (p1 == NULL && p2 != NULL) {
+ free(p2);
+- return (sort_entry->ascending ? -1 : 1);
++ return (se->ascending ? -1 : 1);
+ }
+ if (p1 != NULL && p2 == NULL) {
+ free(p1);
+- return (sort_entry->ascending ? 1 : -1);
++ return (se->ascending ? 1 : -1);
+ }
+ if (p1 != NULL && p2 != NULL) {
+ int compare;
+@@ -165,11 +164,11 @@
+ free(p1);
+ free(p2);
+ if (compare != 0)
+- return (sort_entry->ascending ? compare : -compare);
++ return (se->ascending ? compare : -compare);
+ }
+ }
+
+- return e1-e2;
++ return e1-e2; /* Just some arbitrary sort criteria? */
+ }
+
+ void
+diff -Naur -x CVS gmediaserver-orig/src/metadata.c gmediaserver/src/metadata.c
+--- gmediaserver-orig/src/metadata.c 2007-10-20 11:41:32.000000000 +0200
++++ gmediaserver/src/metadata.c 2010-02-14 20:23:36.000000000 +0100
+@@ -66,7 +66,7 @@
+ #define MAX_INVALID_EXTM3U_FILES 16
+ #define MAX_INVALID_PLS_FILES 16
+ #define MAX_INVALID_PLS_LINES 16
+-#define EXT_INFO_DEFAULT "DLNA.ORG_PS=1;DLNA.ORG_CI=0;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00000000000000000000000000000000"
++#define EXT_INFO_DEFAULT "DLNA.ORG_PS=1;DLNA.ORG_CI=0;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=00000000000000000000000000000000"
+ #define EXT_INFO_PN ";DLNA.ORG_PN="
+
+ typedef enum {
+@@ -109,7 +109,7 @@
+ [FILE_MP3] = "MP3",
+ [FILE_MP3_ID3] = "MP3",
+ [FILE_WMA] = "WMAFULL",
+- [FILE_RIFF_WAVE] = NULL,
++ [FILE_RIFF_WAVE] = "LPCM",
+ [FILE_M4A] = NULL,
+ [FILE_OGG] = NULL,
+ [FILE_MPG] = NULL,
+@@ -129,11 +129,11 @@
+ [FILE_MP3] = "audio/mpeg",
+ [FILE_MP3_ID3] = "audio/mpeg",
+ [FILE_WMA] = "audio/x-ms-wma",
+- [FILE_RIFF_WAVE] = "audio/x-wav",
++ [FILE_RIFF_WAVE] = "audio/x-wav", /* DMS: was x-wav */
+ [FILE_M4A] = "audio/mp4",
+- [FILE_OGG] = "audio/vorbis",
++ [FILE_OGG] = "application/ogg",
+ [FILE_MPG] = "video/mpeg",
+- [FILE_MP4] = "video/mp4",
++ [FILE_MP4] = "video/divx", /* DMS: was mp4*/
+ [FILE_PLS] = "audio/x-scpls",
+ [FILE_M3U] = "audio/m3u",
+ [FILE_EXTM3U] = "audio/m3u",
+@@ -153,7 +153,7 @@
+ [FILE_M4A] = "m4a",
+ [FILE_OGG] = "ogg",
+ [FILE_MPG] = "mpg",
+- [FILE_MP4] = "mp4",
++ [FILE_MP4] = "divx", /*DMS: was mp4*/
+ [FILE_PLS] = "pls",
+ [FILE_M3U] = "m3u",
+ [FILE_EXTM3U] = "m3u", /* possibly extm3u in the future */
+@@ -314,17 +314,26 @@
+ static FileType
+ check_file_content_type(const char *fullpath)
+ {
+- const char *magic;
++ const char *magic_full;
++ char *magic;
+ int fd;
+ uint8_t buf[11];
+ int c;
+
+- magic = magic_file(magic_cookie, fullpath);
+- if (magic == NULL) {
++ magic_full = magic_file(magic_cookie, fullpath);
++ if (magic_full == NULL) {
+ warn(_("%s: cannot identify file type: %s\n"), quotearg(conv_filename(fullpath)), magic_error(magic_cookie));
+ return FILE_UNKNOWN;
+ }
+
++ magic = strpbrk(magic_full, "; ");
++ if (magic != NULL) {
++ magic = xstrndup(magic_full, magic - magic_full);
++ } else {
++ magic = xstrdup(magic_full);
++ }
++ say(4, _("Got magic for %s '%s'\n"), quote(conv_filename(fullpath)), magic);
++
+ if (strcmp(magic, "application/octet-stream") != 0
+ && strncmp(magic, "text/plain", 10) != 0) {
+ struct {
+@@ -341,6 +350,7 @@
+ { FILE_MPG, "video/mp2p" },
+ { FILE_MPG, "video/mp2t" },
+ { FILE_MP4, "video/mp4" },
++ { FILE_MP4, "video/x-msvideo" }, /* DMS: avi */
+ { FILE_MP4, "video/mp4v-es" },
+ { FILE_MP4, "video/h264" },
+ { FILE_MP4, "video/3gpp" },
+@@ -352,10 +362,13 @@
+ { 0, },
+ };
+ for (c = 0; mime_map[c].mime != NULL; c++) {
+- if (strcmp(magic, mime_map[c].mime) == 0)
++ if (strcmp(magic, mime_map[c].mime) == 0) {
++ free(magic);
+ return mime_map[c].id;
++ }
+ }
+ }
++ free(magic);
+
+ fd = open(fullpath, O_RDONLY);
+ if (fd < 0) {
+@@ -862,18 +875,21 @@
+ } else {
+ say(4, _("%s Matched type %s - %s\n"), indent, file_type_descs[type], file_type_mime_types[type]);
+ }
++
++#ifdef RESTRICT_FILE_TYPES
+ if (!string_in_csv(file_types, ',', file_type_names[type])) {
+ say(4, _("%s Skipping (file type excluded)\n"), indent);
+ free(indent);
+ return NULL;
+ }
++#endif
+
+ if (type == FILE_PLS || type == FILE_M3U || type == FILE_EXTM3U) {
+ free(indent);
+ return scan_playlist_file(fullpath, name, parent, type, indent_size+1, inl, sb.st_ino);
+ }
+
+- /*say(4, _("%s Adding as %s\n"), indent, quote(name));*/
++ say(4, _("%s Adding %s as '%s'\n"), indent, quote(name), file_type_mime_types[type]);
+ entry = make_entry(name, parent, false);
+
+ detail = add_entry_detail(entry, DETAIL_FILE);
diff -Nru gmediaserver-0.13.0/debian/patches/06_fix_noxon_sort.diff gmediaserver-0.13.0/debian/patches/06_fix_noxon_sort.diff
--- gmediaserver-0.13.0/debian/patches/06_fix_noxon_sort.diff 2009-10-20 14:37:14.000000000 +0200
+++ gmediaserver-0.13.0/debian/patches/06_fix_noxon_sort.diff 2011-01-20 22:36:46.000000000 +0100
@@ -1,49 +1,43 @@
-Index: gmediaserver-0.13.0/src/contentdir.c
-===================================================================
---- gmediaserver-0.13.0.orig/src/contentdir.c 2009-10-20 14:36:41.000000000 +0200
-+++ gmediaserver-0.13.0/src/contentdir.c 2009-10-20 14:37:07.000000000 +0200
-@@ -145,8 +145,15 @@
+---
+ src/contentdir.c | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+--- a/src/contentdir.c
++++ b/src/contentdir.c
+@@ -145,6 +145,12 @@ sort_criteria_comparision(const void *k1
const Entry *e1 = k1;
const Entry *e2 = k2;
-+ if ( criteria->first == NULL ) {
++ if (criteria->first == NULL) {
+ /* default sorting */
+ return strcasecmp(e1->name, e2->name);
+ }
+
- sort_entry = criteria->first;
-- while (sort_entry != NULL) {
-+
+ /* FIXME: sorting by multiple criterias will never work */
-+ while (sort_entry != NULL) { /* FIXME: sort_entry is never updated! */
- char *p1 = get_entry_property(e1, sort_entry->property);
- char *p2 = get_entry_property(e2, sort_entry->property);
-
-@@ -154,11 +161,11 @@
+ for (se = criteria->first; se != NULL; se = se->next) {
+ char *p1 = get_entry_property(e1, se->property);
+ char *p2 = get_entry_property(e2, se->property);
+@@ -153,11 +159,11 @@ sort_criteria_comparision(const void *k1
free(p2);
- return (sort_entry->ascending ? -1 : 1);
+ return (se->ascending ? -1 : 1);
}
- if (p1 != NULL && p2 == NULL) {
+ else if (p1 != NULL && p2 == NULL) {
free(p1);
- return (sort_entry->ascending ? 1 : -1);
+ return (se->ascending ? 1 : -1);
}
- if (p1 != NULL && p2 != NULL) {
+ else if (p1 != NULL && p2 != NULL) {
int compare;
compare = strcmp(p1, p2);
-@@ -167,9 +174,12 @@
+@@ -166,6 +172,9 @@ sort_criteria_comparision(const void *k1
if (compare != 0)
- return (sort_entry->ascending ? compare : -compare);
+ return (se->ascending ? compare : -compare);
}
+ else { /* both are null - bail out!!! */
-+ return strcasecmp(e1->name, e2->name);
-+ }
++ return strcasecmp(e1->name, e2->name);
++ }
}
-- return e1-e2;
-+ return e1-e2; /* FIXME: sorting by pointer compare? */
- }
-
- void
+ return e1-e2; /* Just some arbitrary sort criteria? */
diff -Nru gmediaserver-0.13.0/debian/patches/series gmediaserver-0.13.0/debian/patches/series
--- gmediaserver-0.13.0/debian/patches/series 2009-11-10 13:33:16.000000000 +0100
+++ gmediaserver-0.13.0/debian/patches/series 2011-01-22 06:53:43.000000000 +0100
@@ -1,3 +1,4 @@
+00_cvs_fixes.diff
03_fix_info_file.diff
04_dont_blog_signals_if_not_processing_them.diff
05_fix_multiple_dirs.diff
--- End Message ---