metadata: cleanup, fix the test, add comments

First do not build the plugin, if we have none of the backend, as it won't work
then. Fix the miniobject_unref error in the test. Sprinkle a first handful of
debug logs into the element code.
This commit is contained in:
Stefan Kost 2009-03-06 23:34:56 +02:00
parent 1528309456
commit 772f8f6a8a
5 changed files with 45 additions and 13 deletions

View file

@ -718,9 +718,9 @@ AG_GST_CHECK_FEATURE(METADATA, [METADATA muxer and demuxer], metadata, [
fi fi
if test x$HAVE_METADATA = xno; then if test x$HAVE_METADATA = xno; then
AC_MSG_WARN(no of metadata libraries (exif, iptc or xmp) found) AC_MSG_WARN(no of metadata libraries (exif, iptc or xmp) found)
else
HAVE_METADATA="yes"
fi fi
dnl metadata plugin will parse whole chunks anyway
HAVE_METADATA="yes"
AC_SUBST(METADATA_CFLAGS) AC_SUBST(METADATA_CFLAGS)
AC_SUBST(METADATA_LIBS) AC_SUBST(METADATA_LIBS)
]) ])

View file

@ -248,28 +248,34 @@ metadata_parse (MetaData * meta_data, const guint8 * buf,
switch (meta_data->img_type) { switch (meta_data->img_type) {
case IMG_JPEG: case IMG_JPEG:
if (G_LIKELY (meta_data->options & META_OPT_DEMUX)) if (G_LIKELY (meta_data->options & META_OPT_DEMUX)) {
GST_DEBUG ("parsing jpeg");
ret = ret =
metadataparse_jpeg_parse (&meta_data->format_data.jpeg_parse, metadataparse_jpeg_parse (&meta_data->format_data.jpeg_parse,
(guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start, (guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start,
next_size); next_size);
else } else {
GST_DEBUG ("formatting jpeg");
ret = ret =
metadatamux_jpeg_parse (&meta_data->format_data.jpeg_mux, metadatamux_jpeg_parse (&meta_data->format_data.jpeg_mux,
(guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start, (guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start,
next_size); next_size);
}
break; break;
case IMG_PNG: case IMG_PNG:
if (G_LIKELY (meta_data->options & META_OPT_DEMUX)) if (G_LIKELY (meta_data->options & META_OPT_DEMUX)) {
GST_DEBUG ("parsing png");
ret = ret =
metadataparse_png_parse (&meta_data->format_data.png_parse, metadataparse_png_parse (&meta_data->format_data.png_parse,
(guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start, (guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start,
next_size); next_size);
else } else {
GST_DEBUG ("formatting png");
ret = ret =
metadatamux_png_parse (&meta_data->format_data.png_mux, metadatamux_png_parse (&meta_data->format_data.png_mux,
(guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start, (guint8 *) buf, &buf_size, meta_data->offset_orig, &next_start,
next_size); next_size);
}
break; break;
default: default:
/* unexpected */ /* unexpected */
@ -286,6 +292,7 @@ done:
if (ret == META_PARSING_DONE) { if (ret == META_PARSING_DONE) {
meta_data->state = STATE_DONE; meta_data->state = STATE_DONE;
} }
GST_DEBUG ("parsing/formatting done : %d", ret);
return ret; return ret;
} }

View file

@ -211,6 +211,7 @@ metadatamux_jpeg_parse (JpegMuxData * jpeg_data, guint8 * buf,
if (jpeg_data->state == JPEG_MUX_NULL) { if (jpeg_data->state == JPEG_MUX_NULL) {
if (*bufsize < 2) { if (*bufsize < 2) {
GST_INFO ("need more data");
*next_size = (buf - *next_start) + 2; *next_size = (buf - *next_start) + 2;
ret = META_PARSING_NEED_MORE_DATA; ret = META_PARSING_NEED_MORE_DATA;
goto done; goto done;
@ -220,6 +221,7 @@ metadatamux_jpeg_parse (JpegMuxData * jpeg_data, guint8 * buf,
mark[1] = READ (buf, *bufsize); mark[1] = READ (buf, *bufsize);
if (mark[0] != 0xFF || mark[1] != 0xD8) { if (mark[0] != 0xFF || mark[1] != 0xD8) {
GST_INFO ("missing marker");
ret = META_PARSING_ERROR; ret = META_PARSING_ERROR;
goto done; goto done;
} }
@ -231,6 +233,7 @@ metadatamux_jpeg_parse (JpegMuxData * jpeg_data, guint8 * buf,
while (ret == META_PARSING_DONE) { while (ret == META_PARSING_DONE) {
switch (jpeg_data->state) { switch (jpeg_data->state) {
case JPEG_MUX_READING: case JPEG_MUX_READING:
GST_DEBUG ("start reading");
ret = ret =
metadatamux_jpeg_reading (jpeg_data, &buf, bufsize, metadatamux_jpeg_reading (jpeg_data, &buf, bufsize,
offset, step_buf, next_start, next_size); offset, step_buf, next_start, next_size);
@ -239,6 +242,7 @@ metadatamux_jpeg_parse (JpegMuxData * jpeg_data, guint8 * buf,
goto done; goto done;
break; break;
default: default:
GST_INFO ("invalid parser state");
ret = META_PARSING_ERROR; ret = META_PARSING_ERROR;
break; break;
} }
@ -379,6 +383,7 @@ metadatamux_jpeg_reading (JpegMuxData * jpeg_data, guint8 ** buf,
*next_start = *buf; *next_start = *buf;
if (*bufsize < 2) { if (*bufsize < 2) {
GST_INFO ("need more data");
*next_size = (*buf - *next_start) + 2; *next_size = (*buf - *next_start) + 2;
ret = META_PARSING_NEED_MORE_DATA; ret = META_PARSING_NEED_MORE_DATA;
goto done; goto done;
@ -396,6 +401,7 @@ metadatamux_jpeg_reading (JpegMuxData * jpeg_data, guint8 ** buf,
if (chunk_size >= 16) { if (chunk_size >= 16) {
if (*bufsize < 5) { if (*bufsize < 5) {
GST_INFO ("need more data");
*next_size = (*buf - *next_start) + 5; *next_size = (*buf - *next_start) + 5;
ret = META_PARSING_NEED_MORE_DATA; ret = META_PARSING_NEED_MORE_DATA;
goto done; goto done;
@ -406,11 +412,13 @@ metadatamux_jpeg_reading (JpegMuxData * jpeg_data, guint8 ** buf,
} }
} else { } else {
/* FIXME: should we check if the first chunk is EXIF? */ /* FIXME: should we check if the first chunk is EXIF? */
GST_INFO ("chunk size too small %u", chunk_size);
} }
} }
if (!jfif_found) { if (!jfif_found) {
GST_INFO ("no jfif found");
ret = META_PARSING_ERROR; ret = META_PARSING_ERROR;
goto done; goto done;
} }
@ -456,7 +464,7 @@ metadatamux_jpeg_reading (JpegMuxData * jpeg_data, guint8 ** buf,
ret = META_PARSING_DONE; ret = META_PARSING_DONE;
} else { } else {
/* invalid JPEG chunk */ GST_INFO ("invalid JPEG chunk");
ret = META_PARSING_ERROR; ret = META_PARSING_ERROR;
} }

View file

@ -245,6 +245,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
type to be sure it is a JPEG */ type to be sure it is a JPEG */
if (*bufsize < 2) { if (*bufsize < 2) {
GST_INFO ("need more data");
*next_size = (buf - *next_start) + 2; *next_size = (buf - *next_start) + 2;
ret = META_PARSING_NEED_MORE_DATA; ret = META_PARSING_NEED_MORE_DATA;
goto done; goto done;
@ -254,6 +255,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
mark[1] = READ (buf, *bufsize); mark[1] = READ (buf, *bufsize);
if (mark[0] != 0xFF || mark[1] != 0xD8) { if (mark[0] != 0xFF || mark[1] != 0xD8) {
GST_INFO ("missing marker");
ret = META_PARSING_ERROR; ret = META_PARSING_ERROR;
goto done; goto done;
} }
@ -265,21 +267,25 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
while (ret == META_PARSING_DONE) { while (ret == META_PARSING_DONE) {
switch (jpeg_data->state) { switch (jpeg_data->state) {
case JPEG_PARSE_READING: case JPEG_PARSE_READING:
GST_DEBUG ("start reading");
ret = ret =
metadataparse_jpeg_reading (jpeg_data, &buf, bufsize, metadataparse_jpeg_reading (jpeg_data, &buf, bufsize,
offset, step_buf, next_start, next_size); offset, step_buf, next_start, next_size);
break; break;
case JPEG_PARSE_JUMPING: case JPEG_PARSE_JUMPING:
GST_DEBUG ("jump");
ret = ret =
metadataparse_jpeg_jump (jpeg_data, &buf, bufsize, next_start, metadataparse_jpeg_jump (jpeg_data, &buf, bufsize, next_start,
next_size); next_size);
break; break;
case JPEG_PARSE_EXIF: case JPEG_PARSE_EXIF:
GST_DEBUG ("parse exif");
ret = ret =
metadataparse_jpeg_exif (jpeg_data, &buf, bufsize, next_start, metadataparse_jpeg_exif (jpeg_data, &buf, bufsize, next_start,
next_size); next_size);
break; break;
case JPEG_PARSE_IPTC: case JPEG_PARSE_IPTC:
GST_DEBUG ("parse iptc");
#ifdef HAVE_IPTC #ifdef HAVE_IPTC
ret = ret =
metadataparse_jpeg_iptc (jpeg_data, &buf, bufsize, next_start, metadataparse_jpeg_iptc (jpeg_data, &buf, bufsize, next_start,
@ -287,6 +293,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
#endif #endif
break; break;
case JPEG_PARSE_XMP: case JPEG_PARSE_XMP:
GST_DEBUG ("parse xmp");
ret = ret =
metadataparse_jpeg_xmp (jpeg_data, &buf, bufsize, next_start, metadataparse_jpeg_xmp (jpeg_data, &buf, bufsize, next_start,
next_size); next_size);
@ -295,6 +302,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
goto done; goto done;
break; break;
default: default:
GST_INFO ("invalid parser state");
ret = META_PARSING_ERROR; ret = META_PARSING_ERROR;
break; break;
} }

View file

@ -38,7 +38,6 @@ bus_handler (GstBus * bus, GstMessage * message, gpointer data)
gst_message_parse_error (message, &gerror, &debug); gst_message_parse_error (message, &gerror, &debug);
gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug); gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
gst_message_unref (message);
g_error_free (gerror); g_error_free (gerror);
g_free (debug); g_free (debug);
g_main_loop_quit (loop); g_main_loop_quit (loop);
@ -81,12 +80,18 @@ test_tags (const gchar * tag_str)
gint i, j, n_recv, n_sent; gint i, j, n_recv, n_sent;
const gchar *name_sent, *name_recv; const gchar *name_sent, *name_recv;
const GValue *value_sent, *value_recv; const GValue *value_sent, *value_recv;
gboolean found; gboolean found, ok;
gint comparison; gint comparison;
GstElement *videotestsrc, *jpegenc, *metadatamux, *metadatademux, *fakesink; GstElement *videotestsrc, *jpegenc, *metadatamux, *metadatademux, *fakesink;
GstTagSetter *setter; GstTagSetter *setter;
GST_DEBUG ("testing tags : %s", tag_str);
if (received_tags) {
gst_tag_list_free (received_tags);
received_tags = NULL;
}
pipeline = gst_pipeline_new ("pipeline"); pipeline = gst_pipeline_new ("pipeline");
fail_unless (pipeline != NULL); fail_unless (pipeline != NULL);
@ -94,7 +99,7 @@ test_tags (const gchar * tag_str)
fail_unless (videotestsrc != NULL); fail_unless (videotestsrc != NULL);
g_object_set (G_OBJECT (videotestsrc), "num-buffers", 1, NULL); g_object_set (G_OBJECT (videotestsrc), "num-buffers", 1, NULL);
jpegenc = gst_element_factory_make ("jpegenc", "enc"); jpegenc = gst_element_factory_make ("q", "enc");
if (jpegenc == NULL) { if (jpegenc == NULL) {
g_print ("Cannot test - jpegenc not available\n"); g_print ("Cannot test - jpegenc not available\n");
return; return;
@ -113,8 +118,9 @@ test_tags (const gchar * tag_str)
gst_bin_add_many (GST_BIN (pipeline), videotestsrc, jpegenc, metadatamux, gst_bin_add_many (GST_BIN (pipeline), videotestsrc, jpegenc, metadatamux,
metadatademux, fakesink, NULL); metadatademux, fakesink, NULL);
fail_unless (gst_element_link_many (videotestsrc, jpegenc, metadatamux, ok = gst_element_link_many (videotestsrc, jpegenc, metadatamux, metadatademux,
metadatademux, fakesink, NULL)); fakesink, NULL);
fail_unless (ok == TRUE);
loop = g_main_loop_new (NULL, TRUE); loop = g_main_loop_new (NULL, TRUE);
fail_unless (loop != NULL); fail_unless (loop != NULL);
@ -129,11 +135,14 @@ test_tags (const gchar * tag_str)
setter = GST_TAG_SETTER (metadatamux); setter = GST_TAG_SETTER (metadatamux);
fail_unless (setter != NULL); fail_unless (setter != NULL);
sent_tags = gst_structure_from_string (tag_str, NULL); sent_tags = gst_structure_from_string (tag_str, NULL);
fail_unless (sent_tags != NULL);
gst_tag_setter_merge_tags (setter, sent_tags, GST_TAG_MERGE_REPLACE); gst_tag_setter_merge_tags (setter, sent_tags, GST_TAG_MERGE_REPLACE);
gst_element_set_state (pipeline, GST_STATE_PLAYING); gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop); g_main_loop_run (loop);
GST_DEBUG ("mainloop done : %p", received_tags);
/* verify tags */ /* verify tags */
fail_unless (received_tags != NULL); fail_unless (received_tags != NULL);
n_recv = gst_structure_n_fields (received_tags); n_recv = gst_structure_n_fields (received_tags);