Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b88d8e50 authored by Greg Hackmann's avatar Greg Hackmann Committed by Android Git Automerger
Browse files

am 0e292002: Merge "libadf: filter overlay engines by a list of acceptable formats"

* commit '0e292002':
  libadf: filter overlay engines by a list of acceptable formats
parents b11ab0f4 0e292002
Loading
Loading
Loading
Loading
+21 −10
Original line number Diff line number Diff line
@@ -494,8 +494,8 @@ done:

static ssize_t adf_overlay_engines_filter(struct adf_device *dev,
        adf_id_t *in, size_t n_in, adf_id_t **out,
        bool (*filter)(struct adf_overlay_engine_data *data, __u32 match),
        __u32 match)
        bool (*filter)(struct adf_overlay_engine_data *data, void *cookie),
        void *cookie)
{
    size_t n = 0;
    ssize_t ret;
@@ -515,7 +515,7 @@ static ssize_t adf_overlay_engines_filter(struct adf_device *dev,
        if (ret < 0)
            goto done;

        if (!filter(&data, match))
        if (!filter(&data, cookie))
            continue;

        adf_id_t *new_ids = realloc(ids_ret, (n + 1) * sizeof(ids_ret[0]));
@@ -539,21 +539,32 @@ done:
    return ret;
}

static bool adf_overlay_engine_format_filter(struct adf_overlay_engine_data *data,
        __u32 format)
struct format_filter_cookie {
    const __u32 *formats;
    size_t n_formats;
};

static bool adf_overlay_engine_format_filter(
        struct adf_overlay_engine_data *data, void *cookie)
{
    struct format_filter_cookie *c = cookie;
    size_t i;
    for (i = 0; i < data->n_supported_formats; i++)
        if (data->supported_formats[i] == format)
    for (i = 0; i < data->n_supported_formats; i++) {
        size_t j;
        for (j = 0; j < c->n_formats; j++)
            if (data->supported_formats[i] == c->formats[j])
                return true;
    }
    return false;
}

ssize_t adf_overlay_engines_filter_by_format(struct adf_device *dev,
        __u32 format, adf_id_t *in, size_t n_in, adf_id_t **out)
        const __u32 *formats, size_t n_formats, adf_id_t *in, size_t n_in,
        adf_id_t **out)
{
    struct format_filter_cookie cookie = { formats, n_formats };
    return adf_overlay_engines_filter(dev, in, n_in, out,
            adf_overlay_engine_format_filter, format);
            adf_overlay_engine_format_filter, &cookie);
}

int adf_overlay_engine_open(struct adf_device *dev, adf_id_t id, int flags)
+4 −2
Original line number Diff line number Diff line
@@ -182,10 +182,12 @@ ssize_t adf_overlay_engines_for_interface(struct adf_device *dev,
/**
 * Filters a list of overlay engines by supported buffer format.
 *
 * The caller must free() the returned list of overlay engine IDs.
 * Returns the overlay engines which support at least one of the specified
 * formats.  The caller must free() the returned list of overlay engine IDs.
 */
ssize_t adf_overlay_engines_filter_by_format(struct adf_device *dev,
        __u32 format, adf_id_t *in, size_t n_in, adf_id_t **out);
        const __u32 *formats, size_t n_formats, adf_id_t *in, size_t n_in,
        adf_id_t **out);

/**
 * Opens an ADF overlay engine.