~siretart/libav/merge.raring.libav-0.8.6

« back to all changes in this revision

Viewing changes to libavutil/adler32.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-01-12 22:30:00 UTC
  • mfrom: (1.4.1)
  • mto: (1.3.11 sid) (26.1.1 quantal-security)
  • mto: This revision was merged to the branch mainline in revision 15.
  • Revision ID: package-import@ubuntu.com-20120112223000-s1reiy1e28hnix42
Tags: upstream-0.8~beta2
ImportĀ upstreamĀ versionĀ 0.8~beta2

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
 
27
27
#define BASE 65521L /* largest prime smaller than 65536 */
28
28
 
29
 
#define DO1(buf)  {s1 += *buf++; s2 += s1;}
 
29
#define DO1(buf)  { s1 += *buf++; s2 += s1; }
30
30
#define DO4(buf)  DO1(buf); DO1(buf); DO1(buf); DO1(buf);
31
31
#define DO16(buf) DO4(buf); DO4(buf); DO4(buf); DO4(buf);
32
32
 
33
 
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, unsigned int len)
 
33
unsigned long av_adler32_update(unsigned long adler, const uint8_t * buf,
 
34
                                unsigned int len)
34
35
{
35
36
    unsigned long s1 = adler & 0xffff;
36
37
    unsigned long s2 = adler >> 16;
37
38
 
38
 
    while (len>0) {
 
39
    while (len > 0) {
39
40
#if CONFIG_SMALL
40
 
        while(len>4 && s2 < (1U<<31)){
41
 
            DO4(buf); len-=4;
 
41
        while (len > 4  && s2 < (1U << 31)) {
 
42
            DO4(buf);
 
43
            len -= 4;
 
44
        }
42
45
#else
43
 
        while(len>16 && s2 < (1U<<31)){
44
 
            DO16(buf); len-=16;
 
46
        while (len > 16 && s2 < (1U << 31)) {
 
47
            DO16(buf);
 
48
            len -= 16;
 
49
        }
45
50
#endif
46
 
        }
47
51
        DO1(buf); len--;
48
52
        s1 %= BASE;
49
53
        s2 %= BASE;
52
56
}
53
57
 
54
58
#ifdef TEST
 
59
#include <string.h>
55
60
#include "log.h"
56
61
#include "timer.h"
57
62
#define LEN 7001
58
 
volatile int checksum;
59
 
int main(void){
 
63
 
 
64
static volatile int checksum;
 
65
 
 
66
int main(int argc, char **argv)
 
67
{
60
68
    int i;
61
69
    char data[LEN];
 
70
 
62
71
    av_log_set_level(AV_LOG_DEBUG);
63
 
    for(i=0; i<LEN; i++)
64
 
        data[i]= ((i*i)>>3) + 123*i;
65
 
    for(i=0; i<1000; i++){
66
 
        START_TIMER
67
 
        checksum= av_adler32_update(1, data, LEN);
68
 
        STOP_TIMER("adler")
 
72
 
 
73
    for (i = 0; i < LEN; i++)
 
74
        data[i] = ((i * i) >> 3) + 123 * i;
 
75
 
 
76
    if (argc > 1 && !strcmp(argv[1], "-t")) {
 
77
        for (i = 0; i < 1000; i++) {
 
78
            START_TIMER;
 
79
            checksum = av_adler32_update(1, data, LEN);
 
80
            STOP_TIMER("adler");
 
81
        }
 
82
    } else {
 
83
        checksum = av_adler32_update(1, data, LEN);
69
84
    }
70
 
    av_log(NULL, AV_LOG_DEBUG, "%X == 50E6E508\n", checksum);
71
 
    return 0;
 
85
 
 
86
    av_log(NULL, AV_LOG_DEBUG, "%X (expected 50E6E508)\n", checksum);
 
87
    return checksum == 0x50e6e508 ? 0 : 1;
72
88
}
73
89
#endif