From 6d48778edf53b53b13f7a1ae95d50e71887f67c7 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 9 Aug 2012 21:07:33 +0000 Subject: -porting it extractor to new api --- src/plugins/Makefile.am | 6 +++ src/plugins/it_extractor.c | 105 ++++++++++++++++++++++++++------------------- src/plugins/xm_extractor.c | 8 ++-- 3 files changed, 71 insertions(+), 48 deletions(-) diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index 16752af..4f3fb8c 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -67,6 +67,7 @@ endif plugin_LTLIBRARIES = \ + libextractor_it.la \ libextractor_xm.la \ libextractor_wav.la \ $(PLUGIN_OGG) \ @@ -112,6 +113,11 @@ libextractor_xm_la_SOURCES = \ libextractor_xm_la_LDFLAGS = \ $(PLUGINFLAGS) +libextractor_it_la_SOURCES = \ + it_extractor.c +libextractor_it_la_LDFLAGS = \ + $(PLUGINFLAGS) + libextractor_wav_la_SOURCES = \ wav_extractor.c diff --git a/src/plugins/it_extractor.c b/src/plugins/it_extractor.c index bde8d1c..852e50b 100644 --- a/src/plugins/it_extractor.c +++ b/src/plugins/it_extractor.c @@ -18,13 +18,27 @@ * Boston, MA 02111-1307, USA. * */ - +/** + * @file plugins/xm_extractor.c + * @brief plugin to support Impulse Tracker (IT) files + * @author Toni Ruottu + * @author Christian Grothoff + */ #include "platform.h" #include "extractor.h" + +/** + * Number of bytes in the full IT header and thus + * the minimum size we're going to accept for an IT file. + */ #define HEADER_SIZE 0xD0 -struct header + +/** + * Header of an IT file. + */ +struct Header { char magicid[4]; char title[26]; @@ -39,65 +53,68 @@ struct header char special[2]; }; -/* "extract" keyword from an Impulse Tracker module + +/** + * extract meta data from an Impulse Tracker module * - * ITTECH.TXT as taken from IT 2.14p5 was used, - * while this piece of software was originally - * written. + * ITTECH.TXT as taken from IT 2.14p5 was used, while this piece of + * software was originally written. * + * @param ec extraction context */ -int -EXTRACTOR_it_extract (const char *data, - size_t size, - EXTRACTOR_MetaDataProcessor proc, - void *proc_cls, - const char *options) +void +EXTRACTOR_it_extract_method (struct EXTRACTOR_ExtractContext *ec) { + void *data; char title[27]; char itversion[8]; - struct header *head; + const struct Header *head; - /* Check header size */ - if (size < HEADER_SIZE) - return 0; - head = (struct header *) data; + if (HEADER_SIZE > + ec->read (ec->cls, + &data, + HEADER_SIZE)) + return; + head = (struct Header *) data; /* Check "magic" id bytes */ if (memcmp (head->magicid, "IMPM", 4)) - return 0; + return; /* Mime-type */ - if (0 != proc (proc_cls, - "it", - EXTRACTOR_METATYPE_MIMETYPE, - EXTRACTOR_METAFORMAT_UTF8, - "text/plain", - "audio/x-it", - strlen("audio/x-it")+1)) - return 1; + if (0 != ec->proc (ec->cls, + "it", + EXTRACTOR_METATYPE_MIMETYPE, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", + "audio/x-it", + strlen ("audio/x-it") + 1)) + return; /* Version of Tracker */ snprintf (itversion, sizeof (itversion), "%d.%d", - (head->version[0]& 0x01),head->version[1]); - if (0 != proc (proc_cls, - "it", - EXTRACTOR_METATYPE_FORMAT_VERSION, - EXTRACTOR_METAFORMAT_C_STRING, - "text/plain", - itversion, - strlen(itversion)+1)) - return 1; + (head->version[0] & 0x01), + head->version[1]); + if (0 != ec->proc (ec->cls, + "it", + EXTRACTOR_METATYPE_FORMAT_VERSION, + EXTRACTOR_METAFORMAT_C_STRING, + "text/plain", + itversion, + strlen (itversion) + 1)) + return; /* Song title */ memcpy (&title, head->title, 26); title[26] = '\0'; - if (0 != proc (proc_cls, - "it", - EXTRACTOR_METATYPE_TITLE, - EXTRACTOR_METAFORMAT_C_STRING, - "text/plain", - title, - strlen(title)+1)) - return 1; - return 0; + if (0 != ec->proc (ec->cls, + "it", + EXTRACTOR_METATYPE_TITLE, + EXTRACTOR_METAFORMAT_C_STRING, + "text/plain", + title, + strlen (title) + 1)) + return; } + +/* end of it_extractor.c */ diff --git a/src/plugins/xm_extractor.c b/src/plugins/xm_extractor.c index 7ac94f4..13050b6 100644 --- a/src/plugins/xm_extractor.c +++ b/src/plugins/xm_extractor.c @@ -31,7 +31,7 @@ /** * Header of an XM file. */ -struct header +struct Header { char magicid[17]; char title[20]; @@ -64,15 +64,15 @@ void EXTRACTOR_xm_extract_method (struct EXTRACTOR_ExtractContext *ec) { void *data; - const struct header *head; + const struct Header *head; char title[21]; char tracker[21]; char xmversion[8]; - if (sizeof (struct header) > + if (sizeof (struct Header) > ec->read (ec->cls, &data, - sizeof (struct header))) + sizeof (struct Header))) return; head = data; /* Check "magic" id bytes */ -- cgit v1.2.3