lightmediascanner: add fix for ogg metadata parsing 13/8713/1
authorMatt Ranostay <matt.ranostay@konsulko.com>
Fri, 10 Mar 2017 04:53:45 +0000 (06:53 +0200)
committerMatt Ranostay <matt.ranostay@konsulko.com>
Fri, 10 Mar 2017 21:34:31 +0000 (23:34 +0200)
Some ogg headers have large album art that goes past the
hardcoded 40960 byte header parsing limit, and this change
uses a dynamic check.

Change-Id: Iee565454633f43fc82ecfbf681ee634f8e47a033
Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
meta-agl/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch [new file with mode: 0644]
meta-agl/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend

diff --git a/meta-agl/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch b/meta-agl/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch
new file mode 100644 (file)
index 0000000..6a0b8ff
--- /dev/null
@@ -0,0 +1,53 @@
+From 3e66b97221440b17a184feb48692dce7e0561cac Mon Sep 17 00:00:00 2001
+From: Matt Ranostay <matt.ranostay@konsulko.com>
+Date: Wed, 8 Mar 2017 16:30:01 -0800
+Subject: [PATCH] plugin: ogg: fix chucksize issue
+
+There are some OGG files that have metadata chucks that go over the
+hardcoded 10 * 4096 size due to album art. This patchset just parses
+each chuck and continues till it runs out of valid chunks.
+
+Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
+---
+ src/plugins/ogg/ogg.c | 11 ++---------
+ 1 file changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/src/plugins/ogg/ogg.c b/src/plugins/ogg/ogg.c
+index 1c0818e..c94dc38 100644
+--- a/src/plugins/ogg/ogg.c
++++ b/src/plugins/ogg/ogg.c
+@@ -47,8 +47,6 @@
+ int CHUNKSIZE = 4096;
+ #endif
+-#define MAX_CHUNKS_PER_PAGE 10
+-
+ struct stream {
+     struct lms_stream base;
+     int serial;
+@@ -122,10 +120,8 @@ _set_lms_info(struct lms_string_size *info, const char *tag)
+ static bool _ogg_read_page(FILE *fp, ogg_sync_state *osync, ogg_page *page)
+ {
+-    int i;
+-
+-    for (i = 0; i < MAX_CHUNKS_PER_PAGE && ogg_sync_pageout(osync, page) != 1;
+-         i++) {
++    while(ogg_sync_pageout(osync, page) != 1)
++    {
+         lms_ogg_buffer_t buffer = lms_get_ogg_sync_buffer(osync, CHUNKSIZE);
+         int bytes = fread(buffer, 1, CHUNKSIZE, fp);
+@@ -136,9 +132,6 @@ static bool _ogg_read_page(FILE *fp, ogg_sync_state *osync, ogg_page *page)
+         ogg_sync_wrote(osync, bytes);
+     }
+-    if (i > MAX_CHUNKS_PER_PAGE)
+-        return false;
+-
+     return true;
+ }
+-- 
+2.7.4
+
index 521724f..231b3e6 100644 (file)
@@ -3,7 +3,9 @@ PACKAGECONFIG = "ogg flac wave m3u pls jpeg png"
 
 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
 
-SRC_URI += "file://lightmediascanner.service"
+SRC_URI += "file://lightmediascanner.service \
+            file://plugin-ogg-fix-chucksize-issue.patch \
+           "
 
 inherit systemd