[FFmpeg-devel] [PATCH] force dnxhd encoder to be independent of qsort internals

Michael Niedermayer michaelni
Sun Sep 20 23:29:38 CEST 2009


On Sun, Sep 20, 2009 at 02:13:03PM +0200, Reimar D?ffinger wrote:
[...]
> +static void radix_count(const RCCMPEntry *data, int size, int *buckets, int shift)
> +{
> +    int i;
> +    int offset;
> +    memset(buckets, 0, sizeof(*buckets) * NBUCKETS);

> +    for (i = 0; i < size; i++)
> +        buckets[get_bucket(data[i].value, shift)]++;
> +    offset = size;

maybe the following is faster

for (i = 0; i < size; i++){
    unsigned int v= data[i].value;
    buckets[0][v&255]++; v>>=8;
    buckets[1][v&255]++; v>>=8;
    buckets[2][v&255]++; v>>=8;
    buckets[3][v    ]++;
}

also if buckets[3][0] == size the one pass can be skiped, similarly
the others



> +    for (i = NBUCKETS - 1; i >= 0; i--)
> +        buckets[i] = offset -= buckets[i];
> +    assert(!buckets[0]);
> +}
> +
> +static void radix_sort_pass(RCCMPEntry *dst, const RCCMPEntry *data, int size, int pass)
> +{
> +    int i;

> +    int shift = pass * av_log2(NBUCKETS);

is this as fast as a compiletime constant?

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

it is not once nor twice but times without number that the same ideas make
their appearance in the world. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090920/c2e0aca3/attachment.pgp>



More information about the ffmpeg-devel mailing list