return ret;
}
-/** A macro defining the atoms we care about. It gets expanded twice. */
+/** \cond atom_items */
+/* A macro defining the atoms we care about. It gets expanded twice. */
#define ATOM_ITEMS \
ATOM_ITEM(MOOV, 'm', 'o', 'o', 'v') /* movie (top-level container) */ \
ATOM_ITEM(TRAK, 't', 'r', 'a', 'k') /* container for a single track */ \
ATOM_ITEM(META, 'm', 'e', 't', 'a') /* iTunes Metadata box */ \
ATOM_ITEM(DATA, 'd', 'a', 't', 'a') /* iTunes Metadata data box */ \
+/** \endcond atom_items */
+
/** For the C enumeration we concatenate ATOM_ with the first argument. */
#define ATOM_ITEM(_name, a, b, c, d) ATOM_ ## _name,
/** The enumeration of interesting atoms. */
* function also returns NULL. Otherwise a copy of the tag value is returned
* and the caller should free this memory when it is no longer needed.
*/
-char *mp4_get_tag_value(const struct mp4 *f, const char *item)
+__malloc char *mp4_get_tag_value(const struct mp4 *f, const char *item)
{
for (unsigned n = 0; n < f->meta.count; n++)
if (!strcasecmp(f->meta.tags[n].item, item))