plugin: implement parser sorting
authorLeandro Dorileo <leandro.maciel.dorileo@intel.com>
Thu, 19 Dec 2013 16:52:39 +0000 (14:52 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Fri, 27 Dec 2013 13:23:14 +0000 (11:23 -0200)
Sort the parsers based on its defined order field. The smaller "ordered"
plugin will atempt to parse first.

16 files changed:
src/lib/lightmediascanner.c
src/lib/lightmediascanner_plugin.h
src/plugins/asf/asf.c
src/plugins/audio-dummy/audio-dummy.c
src/plugins/dummy/dummy.c
src/plugins/flac/flac.c
src/plugins/id3/id3.c
src/plugins/jpeg/jpeg.c
src/plugins/m3u/m3u.c
src/plugins/mp4/mp4.c
src/plugins/ogg/ogg.c
src/plugins/pls/pls.c
src/plugins/png/png.c
src/plugins/rm/rm.c
src/plugins/video-dummy/video-dummy.c
src/plugins/wave/wave.c

index 0a7b8fc..037d74d 100644 (file)
@@ -205,6 +205,12 @@ lms_set_progress_callback(lms_t *lms, lms_progress_callback_t cb, const void *da
     lms->progress.free_data = free_data;
 }
 
+static int
+_plugin_sort(const struct parser *a, const struct parser *b)
+{
+    return (a->plugin->order - b->plugin->order);
+}
+
 /**
  * Add parser plugin given it's shared object path.
  *
@@ -244,6 +250,8 @@ lms_parser_add(lms_t *lms, const char *so_path)
     }
 
     lms->n_parsers++;
+    qsort(lms->parsers, lms->n_parsers, sizeof(struct parser),
+          (comparison_fn_t)_plugin_sort);
     return parser->plugin;
 }
 
index 477f132..4eece6a 100644 (file)
@@ -173,6 +173,7 @@ extern "C" {
         lms_plugin_setup_fn_t setup; /**< setup (1st phase init) */
         lms_plugin_start_fn_t start; /**< start (2nd phase init) */
         lms_plugin_finish_fn_t finish; /**< finish plugin */
+        int order;
     };
 
     struct lms_plugin_info {
index 0c2c793..065b5c8 100644 (file)
@@ -904,6 +904,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index b06a0b4..165af27 100644 (file)
@@ -127,6 +127,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 02a830f..fc07966 100644 (file)
@@ -97,6 +97,7 @@ lms_plugin_open(void)
     plugin->setup = _setup;
     plugin->start = _start;
     plugin->finish = _finish;
+    plugin->order = 0;
 
     return plugin;
 }
index 1339193..08b5e1b 100644 (file)
@@ -196,6 +196,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index de56dfc..beb0122 100644 (file)
@@ -1383,6 +1383,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 23c7aaf..9686320 100644 (file)
@@ -748,6 +748,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 6888488..9f727ad 100644 (file)
@@ -193,6 +193,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 09e2c40..286bcab 100644 (file)
@@ -2652,6 +2652,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 5eef05a..80ca298 100644 (file)
@@ -601,6 +601,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 69cc462..9f628fb 100644 (file)
@@ -375,6 +375,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index fedd67f..681facf 100644 (file)
@@ -241,6 +241,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 6277f93..60a15a7 100644 (file)
@@ -547,6 +547,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index df6e9c1..2bce1bc 100644 (file)
@@ -134,6 +134,7 @@ lms_plugin_open(void)
     plugin->plugin.setup = (lms_plugin_setup_fn_t)_setup;
     plugin->plugin.start = (lms_plugin_start_fn_t)_start;
     plugin->plugin.finish = (lms_plugin_finish_fn_t)_finish;
+    plugin->plugin.order = 0;
 
     return (struct lms_plugin *)plugin;
 }
index 71008bb..9144545 100644 (file)
@@ -322,6 +322,7 @@ lms_plugin_open(void)
     plugin->setup = (lms_plugin_setup_fn_t) _setup;
     plugin->start = (lms_plugin_start_fn_t) _start;
     plugin->finish = (lms_plugin_finish_fn_t) _finish;
+    plugin->order = 0;
 
     return plugin;
 }