## GUPnPDLNAMetadataExtractor GUPnPDLNAMetadataExtractor — Base class for extracting metadata for given media. |

## Functions

gboolean | gupnp_dlna_metadata_extractor_extract_async ()
GUPnPDLNAInformation * | gupnp_dlna_metadata_extractor_extract_sync ()
void | gupnp_dlna_metadata_extractor_emit_done ()

## Types and Values

struct | GUPnPDLNAMetadataExtractorClass

## Description

GUPnPDLNAMetadataExtractor is used by GUPnPDLNAProfileGuesser to get needed metadata for profile matching. This class itself does not implement any metadata extraction features. For that it is expected to provide a plugin which:

- Provides a GUPnPDLNAMetadataExtractor subclass implementation.

- Exports a `gupnp_dlna_get_default_extractor`() which takes no parameters and returns a GUPnPDLNAMetadataExtractor.

GModule is used for loading the plugin, so GModule's features can be used also (like exporting `g_module_check_init`() to initialize the multimedia framework used for extracting metadata).

Default plugin directory and default plugin file is set during configuration stage, but it can be overriden during runtime by setting respectively `GUPNP_DLNA_METADATA_BACKEND` and `GUPNP_DLNA_METADATA_BACKEND_DIR` environment variables before the plugin is loaded (i.e. before GUPnPDLNAProfileGuesser is used for guessing profile).

The `GUPNP_DLNA_METADATA_BACKEND` environment variable should hold a name like `"gstreamer"`, so `libgstreamer.so` will be loaded. For determining a plugin filename `g_module_build_path()` is used.

If subclassing GUPnPDLNAMetadataExtractor then also GUPnPDLNAInformation, GUPnPDLNAAudioInformation, GUPnPDLNAContainerInformation, GUPnPDLNAImageInformation and GUPnPDLNAVideoInformation have to be subclassed as well.

## Functions

### gupnp_dlna_metadata_extractor_extract_async ()

    gboolean
    gupnp_dlna_metadata_extractor_extract_async
                                   (GUPnPDLNAMetadataExtractor *extractor,
                                    const gchar *uri,
                                    guint timeout_in_ms,
                                    GError **error);

Queues `uri` for metadata discovery. When discovery is completed, the ::done signal is emitted on `extractor` .

#### Parameters

extractor | GUPnPDLNAMetadataExtractor object to use for discovery |
uri | URI to gather metadata for |
timeout_in_ms | Timeout in miliseconds. |
error | A GError. |

#### Returns

`TRUE` if `uri` was successfully queued, `FALSE` otherwise.

### gupnp_dlna_metadata_extractor_extract_sync ()

    GUPnPDLNAInformation *
    gupnp_dlna_metadata_extractor_extract_sync
                                   (GUPnPDLNAMetadataExtractor *extractor,
                                    const gchar *uri,
                                    guint timeout_in_ms,
                                    GError **error);

Discovers synchronously metadata of given `uri` .

#### Parameters

extractor | GUPnPDLNAMetadataExtractor object to use for discovery |
uri | URI to gather metadata for |
timeout_in_ms | Timeout in miliseconds. |
error | A GError. |

#### Returns

(transfer full) : A GUPnPDLNAInformation object if discovery succeeded, otherwise `NULL`.

### gupnp_dlna_metadata_extractor_emit_done ()

    void
    gupnp_dlna_metadata_extractor_emit_done
                                   (GUPnPDLNAMetadataExtractor *extractor,
                                    GUPnPDLNAInformation *info,
                                    GError *error);

Emits ::done signal. This function is intended to be used by subclasses of GUPnPDLNAMetadataExtractor. It is required to always pass a meaningful `info` , even in case of error. That way a receiver of this signal can know which URI discovery failed by using `gupnp_dlna_information_get_uri()`.

#### Parameters

extractor | A GUPnPDLNAMetadataExtractor object. |
info | A GUPnPDLNAInformation about discovered URI. | [transfer none]
error | A GError. | [allow-none][transfer none]

## Types and Values

### struct GUPnPDLNAMetadataExtractorClass

    struct GUPnPDLNAMetadataExtractorClass {
            GObjectClass parent_class;

            /* virtuals */
            gboolean
            (* extract_async) (GUPnPDLNAMetadataExtractor  *extractor,
                               const gchar                 *uri,
                               guint                        timeout_in_ms,
                               GError                     **error);

            GUPnPDLNAInformation *
            (* extract_sync) (GUPnPDLNAMetadataExtractor  *extractor,
                              const gchar                 *uri,
                              guint                        timeout_in_ms,
                              GError                     **error);

            gpointer _reserved[12];
    };

#### Members

`extract_async` () | This is called by GUPnPDLNAProfileGuesser to get a information about media file asynchronously. |
`extract_sync` () | This is called by GUPnPDLNAProfileGuesser to get a information about media file synchronously. |
gpointer `_reserved`[12]; | Padding. Ignore it. |