commit d982f0398f5fc1722016668677e2b1b8f5a9297e
parent 8883500e79493eff8604b34ce723853727b8bca3
Author: Christian Grothoff <christian@grothoff.org>
Date: Thu, 27 Dec 2007 04:26:07 +0000
fixes
Diffstat:
2 files changed, 54 insertions(+), 29 deletions(-)
diff --git a/src/plugins/flacextractor.c b/src/plugins/flacextractor.c
@@ -68,7 +68,7 @@ flac_read (const FLAC__StreamDecoder *decoder,
memcpy(buffer,
&ctx->data[ctx->pos],
*bytes);
- ctx->pos += *bytes;
+ ctx->pos += *bytes;
return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
}
@@ -113,7 +113,7 @@ flac_eof(const FLAC__StreamDecoder *decoder, void *client_data)
static FLAC__StreamDecoderWriteStatus
flac_write(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 *const buffer[], void *client_data)
{
- return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
+ return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
}
typedef struct
@@ -173,6 +173,8 @@ flac_metadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *me
{
struct Context * ctx = client_data;
+ fprintf(stderr,
+ "Meta!\n");
switch (metadata->type)
{
case FLAC__METADATA_TYPE_STREAMINFO:
@@ -249,9 +251,11 @@ flac_metadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *me
static void
flac_error(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
{
+ fprintf(stderr,
+ "Got error: %u\n", status);
}
-/* mimetype = application/flac */
+/* mimetype = audio/flac */
struct EXTRACTOR_Keywords *
libextractor_flac_extract (const char *filename,
const char *data,
@@ -269,38 +273,58 @@ libextractor_flac_extract (const char *filename,
decoder = FLAC__stream_decoder_new();
if (NULL == decoder)
return prev;
- FLAC__stream_decoder_set_metadata_respond_all(decoder);
+ FLAC__stream_decoder_set_md5_checking(decoder, false);
+ FLAC__stream_decoder_set_metadata_ignore_all(decoder);
+ if (false == FLAC__stream_decoder_set_metadata_respond_all(decoder))
+ {
+ FLAC__stream_decoder_delete(decoder);
+ return le_cls.prev;
+ }
+ le_cls.prev = prev;
le_cls.prev = prev;
le_cls.size = size;
le_cls.data = data;
le_cls.pos = 0;
- FLAC__stream_decoder_init_ogg_stream(decoder,
- &flac_read,
- &flac_seek,
- &flac_tell,
- &flac_length,
- &flac_eof,
- &flac_write,
- &flac_metadata,
- &flac_error,
- &le_cls);
- FLAC__stream_decoder_process_until_end_of_metadata(decoder);
- switch (FLAC__stream_decoder_get_state(decoder))
+ if (FLAC__STREAM_DECODER_INIT_STATUS_OK !=
+ FLAC__stream_decoder_init_ogg_stream(decoder,
+ &flac_read,
+ &flac_seek,
+ &flac_tell,
+ &flac_length,
+ &flac_eof,
+ &flac_write,
+ &flac_metadata,
+ &flac_error,
+ &le_cls))
{
- case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
- case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
- case FLAC__STREAM_DECODER_READ_METADATA:
- case FLAC__STREAM_DECODER_END_OF_STREAM:
- case FLAC__STREAM_DECODER_READ_FRAME:
- le_cls.prev = addKeyword(EXTRACTOR_MIMETYPE,
- strdup("audio/flac"),
- le_cls.prev);
- break;
- default:
- /* not so sure... */
- break;
+ FLAC__stream_decoder_delete(decoder);
+ return le_cls.prev;
}
-
+ if (FLAC__stream_decoder_get_state(decoder) != FLAC__STREAM_DECODER_SEARCH_FOR_METADATA)
+ {
+ FLAC__stream_decoder_delete(decoder);
+ return le_cls.prev;
+ }
+ if (! FLAC__stream_decoder_process_until_end_of_metadata(decoder))
+ {
+ FLAC__stream_decoder_delete(decoder);
+ return le_cls.prev;
+ }
+ switch (FLAC__stream_decoder_get_state(decoder))
+ {
+ case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
+ case FLAC__STREAM_DECODER_READ_METADATA:
+ case FLAC__STREAM_DECODER_END_OF_STREAM:
+ case FLAC__STREAM_DECODER_READ_FRAME:
+ le_cls.prev = addKeyword(EXTRACTOR_MIMETYPE,
+ strdup("audio/flac"),
+ le_cls.prev);
+ break;
+ default:
+ /* not so sure... */
+ break;
+ }
+ FLAC__stream_decoder_finish (decoder);
FLAC__stream_decoder_delete(decoder);
return le_cls.prev;
}
diff --git a/src/plugins/mimeextractor.c b/src/plugins/mimeextractor.c
@@ -213,6 +213,7 @@ static Pattern patterns[] = {
{"P6", 2, "image/x-portable-pixmap", DEFAULT},
{"P7", 2, "image/x-portable-anymap", DEFAULT},
{"BM", 2, "image/x-bmp", DEFAULT},
+ {"fLaC", 4, "audio/flac", DEFAULT},
{"\x89PNG", 4, "image/x-png", DEFAULT},
{"id=ImageMagick", 14, "application/x-imagemagick-image", DEFAULT},
{"hsi1", 4, "image/x-jpeg-proprietary", DEFAULT},