[FFmpeg-devel] skip_put_bits() bugged?

Stefano Sabatini stefano.sabatini-lala
Tue Mar 31 00:17:31 CEST 2009


Hi all,

check this test (you can put it in libavcodec/bitstream.c):

#ifdef TEST

#undef printf

#define SIZE 32

int main()
{
    uint8_t buf[SIZE];
    int i;
    PutBitContext pb;
    GetBitContext gb;

    memset(buf, 0, SIZE);

    init_put_bits(&pb, buf, SIZE*8);
    for (i = 0; i < SIZE*8; i++) {
        put_bits(&pb, 1, i%2);
        skip_put_bits(&pb, 0);
    }

    init_get_bits(&gb, buf, SIZE*8);
    for (i = 0; i < SIZE*8; i++)
        printf("%d: %d\n", i, get_bits(&gb, 1));

    return 0;
}

#endif  /* TEST */

Result is:
0: 0
1: 1
2: 0
3: 1
4: 0
5: 1
6: 0
7: 1
8: 0
9: 1
10: 0
11: 1
12: 0
13: 1
14: 0
15: 1
16: 0
17: 1
18: 0
19: 1
20: 0
21: 1
22: 0
23: 1
24: 0
25: 0
26: 0
27: 0
28: 0
29: 0
30: 0
31: 0
32: 0
33: 0
34: 0
35: 0
36: 0
37: 0
38: 0
39: 0
40: 0
41: 0
42: 0
43: 0
44: 0
45: 0
46: 0
47: 0
48: 0
49: 0
50: 0
51: 0
52: 0
53: 0
54: 0
55: 1
56: 0
57: 1
58: 0
59: 1
60: 0
61: 1
62: 0
63: 1
64: 0
65: 1
66: 0
67: 1
68: 0
69: 1
70: 0
71: 1
72: 0
73: 1
74: 0
75: 1
76: 0
77: 1
78: 0
79: 1
80: 0
81: 0
82: 0
83: 0
84: 0
85: 0
86: 0
87: 0
88: 0
89: 0
90: 0
91: 0
92: 0
93: 0
94: 0
95: 0
96: 0
97: 0
98: 0
99: 0
100: 0
101: 0
102: 0
103: 0
104: 0
105: 0
106: 0
107: 0
108: 0
109: 0
110: 0
111: 1
112: 0
113: 1
114: 0
115: 1
116: 0
117: 1
118: 0
119: 1
120: 0
121: 1
122: 0
123: 1
124: 0
125: 1
126: 0
127: 1
128: 0
129: 1
130: 0
131: 1
132: 0
133: 1
134: 0
135: 1
136: 0
137: 0
138: 0
139: 0
140: 0
141: 0
142: 0
143: 0
144: 0
145: 0
146: 0
147: 0
148: 0
149: 0
150: 0
151: 0
152: 0
153: 0
154: 0
155: 0
156: 0
157: 0
158: 0
159: 0
160: 0
161: 0
162: 0
163: 0
164: 0
165: 0
166: 0
167: 1
168: 0
169: 1
170: 0
171: 1
172: 0
173: 1
174: 0
175: 1
176: 0
177: 1
178: 0
179: 1
180: 0
181: 1
182: 0
183: 1
184: 0
185: 1
186: 0
187: 1
188: 0
189: 1
190: 0
191: 1
192: 0
193: 0
194: 0
195: 0
196: 0
197: 0
198: 0
199: 0
200: 0
201: 0
202: 0
203: 0
204: 0
205: 0
206: 0
207: 0
208: 0
209: 0
210: 0
211: 0
212: 0
213: 0
214: 0
215: 0
216: 0
217: 0
218: 0
219: 0
220: 0
221: 0
222: 0
223: 1
224: 0
225: 1
226: 0
227: 1
228: 0
229: 1
230: 0
231: 1
232: 0
233: 1
234: 0
235: 1
236: 0
237: 1
238: 0
239: 1
240: 0
241: 1
242: 0
243: 1
244: 0
245: 1
246: 0
247: 1
248: 0
249: 0
250: 0
251: 0
252: 0
253: 0
254: 0
255: 0

Which looks quite wrong.
Commenting in skip_put_bits(&pb, 0); it looks fine.

Am I missing something or is it indeed broken?

Regards.
-- 
FFmpeg = Fostering & Freak MultiPurpose Elitist Gospel



More information about the ffmpeg-devel mailing list