Get metadata fields from a media item
#include <mm/md.h>
int mmmd_get(mmmd_hdl_t *hdl, const char *item, const char *types, const char *source, uint32_t count, char **md)
md_title::name,artist,album\nmd_video::width,height
This function extracts the specified metadata fields from an item on a mediastore. The types string must state the requested fields as group-attributes listings.
The metadata memory, which is stored at the address written into md, should be deallocated using free() when the metadata are no longer needed. The libmd library writes a valid, non-null value only when the return value is greater than 0, meaning metadata were found.
Because different MDPs support different fields, libmd uses as many MDPs as necessary to extract metadata for all fields listed in types. The order in which the MDPs are invoked depends on the file type indicated in the item's URL or path. Each file type is given a specific plugin perference order, which is stated in the configuration file.
For the lists of fields supported by different MDPs, see Included MDPs.
>0 The number of responses, when metadata were successfully retrieved.
0 No metadata were retrieved but no errors occurred.
-1 An error occurred (call mmmd_error_info() for details).
Setting count to a value greater than 0 allows you to retrieve multiple matches (responses) for metadata fields. Your client code can then choose the set of responses that provides the user with the most accurate and complete metadata possible. The number of responses returned is less than count if the number of MDPs supporting any of the requested fields is also less than count. A nonzero value for this argument simply limits the number of responses that can be returned.
md_src_name::mmf\nmd_src_rating::0\nmd_title_artist::some_artist\n md_src_name::mediafs\nmd_src_rating::1\nmd_title_artist::some_artist\n md_src_name::exif\nmd_src_rating::2\nmd_title_orientation::landscape\0
The name and rating of the MDP that produced the metadata are placed in front of every metadata field. Ratings are offsets in the zero-based list of preferred MDPs, so 0 indicates the first plugin listed, 1 indicates the second listed, and so on. The metadata is represented as a name-value pair and placed after the MDP name and rating.
Setting count to 0 makes libmd collate the responses from many MDPs into one result set to produce the highest-rated response, which is the set of metadata field values obtained from the MDPs listed earliest in the plugin preference order.
md_title_width::response_from_MMF\nmd_title_height::response_from_MMF\n md_title_orientation::response_from_Exif
Because MMF is rated ahead of MediaFS, this first MDP's values for md_title_width and md_title_height are returned. Neither MMF nor MediaFS supports md_title_orientation, so the value from Exif for this last field is returned. Note that the MDP names and ratings aren't shown for individual fields in this case because the responses come from potentially many MDPs.