~ubuntu-branches/debian/experimental/libav/experimental

« back to all changes in this revision

Viewing changes to libavcodec/lzw.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2014-01-18 15:46:55 UTC
  • mfrom: (1.1.24)
  • Revision ID: package-import@ubuntu.com-20140118154655-iz6u00yevkat1jqi
Tags: 6:10~alpha2-1
New Upstream release 10_alpha2. This upstream git snapshot has too many
changes to list here, cf. to the upstream Changelog:
http://git.libav.org/?p=libav.git;a=blob;f=Changelog;hb=refs/tags/v10_alpha2

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 */
29
29
 
30
30
#include "avcodec.h"
 
31
#include "bytestream.h"
31
32
#include "lzw.h"
32
33
#include "libavutil/mem.h"
33
34
 
43
44
};
44
45
 
45
46
struct LZWState {
46
 
    const uint8_t *buf_start, *pbuf, *ebuf;
 
47
    GetByteContext gb;
47
48
    int bbits;
48
49
    unsigned int bbuf;
49
50
 
73
74
    if(s->mode == FF_LZW_GIF) {
74
75
        while (s->bbits < s->cursize) {
75
76
            if (!s->bs) {
76
 
                s->bs = *s->pbuf++;
 
77
                s->bs = bytestream2_get_byte(&s->gb);
77
78
            }
78
 
            s->bbuf |= (*s->pbuf++) << s->bbits;
 
79
            s->bbuf |= bytestream2_get_byte(&s->gb) << s->bbits;
79
80
            s->bbits += 8;
80
81
            s->bs--;
81
82
        }
83
84
        s->bbuf >>= s->cursize;
84
85
    } else { // TIFF
85
86
        while (s->bbits < s->cursize) {
86
 
            s->bbuf = (s->bbuf << 8) | (*s->pbuf++);
 
87
            s->bbuf = (s->bbuf << 8) | bytestream2_get_byte(&s->gb);
87
88
            s->bbits += 8;
88
89
        }
89
90
        c = s->bbuf >> (s->bbits - s->cursize);
95
96
int ff_lzw_size_read(LZWState *p)
96
97
{
97
98
    struct LZWState *s = p;
98
 
    return s->pbuf - s->buf_start;
 
99
    return bytestream2_tell(&s->gb);
99
100
}
100
101
 
101
102
void ff_lzw_decode_tail(LZWState *p)
103
104
    struct LZWState *s = (struct LZWState *)p;
104
105
 
105
106
    if(s->mode == FF_LZW_GIF) {
106
 
        while (s->bs > 0) {
107
 
            if (s->bs >= s->ebuf - s->pbuf) {
108
 
                s->pbuf = s->ebuf;
109
 
                break;
110
 
            } else {
111
 
                s->pbuf += s->bs;
112
 
                s->bs = *s->pbuf++;
113
 
            }
 
107
        while (s->bs > 0 && bytestream2_get_bytes_left(&s->gb)) {
 
108
            bytestream2_skip(&s->gb, s->bs);
 
109
            s->bs = bytestream2_get_byte(&s->gb);
114
110
        }
115
111
    }else
116
 
        s->pbuf= s->ebuf;
 
112
        bytestream2_skip(&s->gb, bytestream2_get_bytes_left(&s->gb));
117
113
}
118
114
 
119
115
av_cold void ff_lzw_decode_open(LZWState **p)
141
137
    if(csize < 1 || csize >= LZW_MAXBITS)
142
138
        return -1;
143
139
    /* read buffer */
144
 
    s->pbuf = buf;
145
 
    s->ebuf = s->pbuf + buf_size;
 
140
    bytestream2_init(&s->gb, buf, buf_size);
146
141
    s->bbuf = 0;
147
142
    s->bbits = 0;
148
143
    s->bs = 0;