Browse code

bitstream: move put_sbits() from flacenc.c to bitstream.h and use it throughout libavcodec.

Originally committed as revision 14204 to svn://svn.ffmpeg.org/ffmpeg/trunk

Ramiro Polla authored on 2008/07/13 23:27:48
Showing 11 changed files
... ...
@@ -563,7 +563,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx,
563 563
         //Init the encoder state
564 564
         for(i=0; i<avctx->channels; i++){
565 565
             c->status[i].step_index = av_clip(c->status[i].step_index, 0, 63); // clip step so it fits 6 bits
566
-            put_bits(&pb, 16, samples[i] & 0xFFFF);
566
+            put_sbits(&pb, 16, samples[i]);
567 567
             put_bits(&pb, 6, c->status[i].step_index);
568 568
             c->status[i].prev_sample = (signed short)samples[i];
569 569
         }
... ...
@@ -166,7 +166,7 @@ static inline void asv1_put_level(PutBitContext *pb, int level){
166 166
     if(index <= 6) put_bits(pb, level_tab[index][1], level_tab[index][0]);
167 167
     else{
168 168
         put_bits(pb, level_tab[3][1], level_tab[3][0]);
169
-        put_bits(pb, 8, level&0xFF);
169
+        put_sbits(pb, 8, level);
170 170
     }
171 171
 }
172 172
 
... ...
@@ -315,6 +315,13 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value)
315 315
 }
316 316
 #endif
317 317
 
318
+static inline void put_sbits(PutBitContext *pb, int bits, int32_t val)
319
+{
320
+    assert(bits >= 0 && bits <= 31);
321
+
322
+    put_bits(pb, bits, val & ((1<<bits)-1));
323
+}
324
+
318 325
 
319 326
 static inline uint8_t* pbBufPtr(PutBitContext *s)
320 327
 {
... ...
@@ -1236,13 +1236,6 @@ static void channel_decorrelation(FlacEncodeContext *ctx)
1236 1236
     }
1237 1237
 }
1238 1238
 
1239
-static void put_sbits(PutBitContext *pb, int bits, int32_t val)
1240
-{
1241
-    assert(bits >= 0 && bits <= 31);
1242
-
1243
-    put_bits(pb, bits, val & ((1<<bits)-1));
1244
-}
1245
-
1246 1239
 static void write_utf8(PutBitContext *pb, uint32_t val)
1247 1240
 {
1248 1241
     uint8_t tmp;
... ...
@@ -469,7 +469,7 @@ static inline void set_ur_golomb_jpegls(PutBitContext *pb, int i, int k, int lim
469 469
         }
470 470
         put_bits(pb, e, 1);
471 471
         if(k)
472
-            put_bits(pb, k, i&((1<<k)-1));
472
+            put_sbits(pb, k, i);
473 473
     }else{
474 474
         while(limit > 31) {
475 475
             put_bits(pb, 31, 0);
... ...
@@ -61,7 +61,7 @@ void ff_h261_encode_picture_header(MpegEncContext * s, int picture_number){
61 61
 
62 62
     temp_ref= s->picture_number * (int64_t)30000 * s->avctx->time_base.num /
63 63
                          (1001 * (int64_t)s->avctx->time_base.den); //FIXME maybe this should use a timestamp
64
-    put_bits(&s->pb, 5, temp_ref & 0x1f); /* TemporalReference */
64
+    put_sbits(&s->pb, 5, temp_ref); /* TemporalReference */
65 65
 
66 66
     put_bits(&s->pb, 1, 0); /* split screen off */
67 67
     put_bits(&s->pb, 1, 0); /* camera  off */
... ...
@@ -309,7 +309,7 @@ static void h261_encode_block(H261Context * h, DCTELEM * block, int n){
309 309
                 put_bits(&s->pb, 6, run);
310 310
                 assert(slevel != 0);
311 311
                 assert(level <= 127);
312
-                put_bits(&s->pb, 8, slevel & 0xff);
312
+                put_sbits(&s->pb, 8, slevel);
313 313
             } else {
314 314
                 put_bits(&s->pb, 1, sign);
315 315
             }
... ...
@@ -249,7 +249,7 @@ void h263_encode_picture_header(MpegEncContext * s, int picture_number)
249 249
     put_bits(&s->pb, 22, 0x20); /* PSC */
250 250
     temp_ref= s->picture_number * (int64_t)coded_frame_rate * s->avctx->time_base.num / //FIXME use timestamp
251 251
                          (coded_frame_rate_base * (int64_t)s->avctx->time_base.den);
252
-    put_bits(&s->pb, 8, temp_ref & 0xff); /* TemporalReference */
252
+    put_sbits(&s->pb, 8, temp_ref); /* TemporalReference */
253 253
 
254 254
     put_bits(&s->pb, 1, 1);     /* marker */
255 255
     put_bits(&s->pb, 1, 0);     /* h263 id */
... ...
@@ -326,7 +326,7 @@ void h263_encode_picture_header(MpegEncContext * s, int picture_number)
326 326
                 put_bits(&s->pb, 1, best_clock_code);
327 327
                 put_bits(&s->pb, 7, best_divisor);
328 328
             }
329
-            put_bits(&s->pb, 2, (temp_ref>>8)&3);
329
+            put_sbits(&s->pb, 2, temp_ref>>8);
330 330
         }
331 331
 
332 332
         /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
... ...
@@ -2224,11 +2224,11 @@ static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
2224 2224
                 assert(slevel != 0);
2225 2225
 
2226 2226
                 if(level < 128)
2227
-                    put_bits(&s->pb, 8, slevel & 0xff);
2227
+                    put_sbits(&s->pb, 8, slevel);
2228 2228
                 else{
2229 2229
                     put_bits(&s->pb, 8, 128);
2230
-                    put_bits(&s->pb, 5, slevel & 0x1f);
2231
-                    put_bits(&s->pb, 6, (slevel>>5)&0x3f);
2230
+                    put_sbits(&s->pb, 5, slevel);
2231
+                    put_sbits(&s->pb, 6, slevel>>5);
2232 2232
                 }
2233 2233
               }else{
2234 2234
                 if(level < 64) { // 7-bit level
... ...
@@ -2236,14 +2236,14 @@ static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
2236 2236
                         put_bits(&s->pb, 1, last);
2237 2237
                         put_bits(&s->pb, 6, run);
2238 2238
 
2239
-                        put_bits(&s->pb, 7, slevel & 0x7f);
2239
+                        put_sbits(&s->pb, 7, slevel);
2240 2240
                     } else {
2241 2241
                         /* 11-bit level */
2242 2242
                         put_bits(&s->pb, 1, 1);
2243 2243
                         put_bits(&s->pb, 1, last);
2244 2244
                         put_bits(&s->pb, 6, run);
2245 2245
 
2246
-                        put_bits(&s->pb, 11, slevel & 0x7ff);
2246
+                        put_sbits(&s->pb, 11, slevel);
2247 2247
                     }
2248 2248
               }
2249 2249
             } else {
... ...
@@ -2804,7 +2804,7 @@ static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n
2804 2804
                         put_bits(ac_pb, 1, last);
2805 2805
                         put_bits(ac_pb, 6, run);
2806 2806
                         put_bits(ac_pb, 1, 1);
2807
-                        put_bits(ac_pb, 12, slevel & 0xfff);
2807
+                        put_sbits(ac_pb, 12, slevel);
2808 2808
                         put_bits(ac_pb, 1, 1);
2809 2809
                     } else {
2810 2810
                         /* second escape */
... ...
@@ -369,7 +369,7 @@ void ff_mjpeg_encode_dc(MpegEncContext *s, int val,
369 369
 
370 370
         put_bits(&s->pb, huff_size[nbits], huff_code[nbits]);
371 371
 
372
-        put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1));
372
+        put_sbits(&s->pb, nbits, mant);
373 373
     }
374 374
 }
375 375
 
... ...
@@ -421,7 +421,7 @@ static void encode_block(MpegEncContext *s, DCTELEM *block, int n)
421 421
 
422 422
             put_bits(&s->pb, huff_size_ac[code], huff_code_ac[code]);
423 423
 
424
-            put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1));
424
+            put_sbits(&s->pb, nbits, mant);
425 425
             run = 0;
426 426
         }
427 427
     }
... ...
@@ -184,7 +184,7 @@ static void put_header(MpegEncContext *s, int header)
184 184
 {
185 185
     align_put_bits(&s->pb);
186 186
     put_bits(&s->pb, 16, header>>16);
187
-    put_bits(&s->pb, 16, header&0xFFFF);
187
+    put_sbits(&s->pb, 16, header);
188 188
 }
189 189
 
190 190
 /* put sequence header if needed */
... ...
@@ -206,8 +206,8 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
206 206
             /* mpeg1 header repeated every gop */
207 207
             put_header(s, SEQ_START_CODE);
208 208
 
209
-            put_bits(&s->pb, 12, s->width  & 0xFFF);
210
-            put_bits(&s->pb, 12, s->height & 0xFFF);
209
+            put_sbits(&s->pb, 12, s->width );
210
+            put_sbits(&s->pb, 12, s->height);
211 211
 
212 212
             for(i=1; i<15; i++){
213 213
                 float error= aspect_ratio;
... ...
@@ -242,9 +242,9 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
242 242
                 vbv_buffer_size = (( 20 * s->bit_rate) / (1151929 / 2)) * 8 * 1024;
243 243
             vbv_buffer_size= (vbv_buffer_size + 16383) / 16384;
244 244
 
245
-            put_bits(&s->pb, 18, v & 0x3FFFF);
245
+            put_sbits(&s->pb, 18, v);
246 246
             put_bits(&s->pb, 1, 1); /* marker */
247
-            put_bits(&s->pb, 10, vbv_buffer_size & 0x3FF);
247
+            put_sbits(&s->pb, 10, vbv_buffer_size);
248 248
 
249 249
             constraint_parameter_flag=
250 250
                 s->width <= 768 && s->height <= 576 &&
... ...
@@ -557,7 +557,7 @@ static av_always_inline void mpeg1_encode_mb_internal(MpegEncContext *s,
557 557
                     put_bits(&s->pb, ff_mpeg12_mbPatTable[cbp][1], ff_mpeg12_mbPatTable[cbp][0]);
558 558
                 } else {
559 559
                     put_bits(&s->pb, ff_mpeg12_mbPatTable[cbp>>2][1], ff_mpeg12_mbPatTable[cbp>>2][0]);
560
-                    put_bits(&s->pb, 2, cbp & 3);
560
+                    put_sbits(&s->pb, 2, cbp);
561 561
                 }
562 562
             }
563 563
             s->f_count++;
... ...
@@ -640,7 +640,7 @@ static av_always_inline void mpeg1_encode_mb_internal(MpegEncContext *s,
640 640
                     put_bits(&s->pb, ff_mpeg12_mbPatTable[cbp][1], ff_mpeg12_mbPatTable[cbp][0]);
641 641
                 } else {
642 642
                     put_bits(&s->pb, ff_mpeg12_mbPatTable[cbp>>2][1], ff_mpeg12_mbPatTable[cbp>>2][0]);
643
-                    put_bits(&s->pb, 2, cbp & 3);
643
+                    put_sbits(&s->pb, 2, cbp);
644 644
                 }
645 645
             }
646 646
         }
... ...
@@ -908,16 +908,16 @@ static void mpeg1_encode_block(MpegEncContext *s,
908 908
                 put_bits(&s->pb, 6, run);
909 909
                 if(s->codec_id == CODEC_ID_MPEG1VIDEO){
910 910
                     if (alevel < 128) {
911
-                        put_bits(&s->pb, 8, level & 0xff);
911
+                        put_sbits(&s->pb, 8, level);
912 912
                     } else {
913 913
                         if (level < 0) {
914 914
                             put_bits(&s->pb, 16, 0x8001 + level + 255);
915 915
                         } else {
916
-                            put_bits(&s->pb, 16, level & 0xffff);
916
+                            put_sbits(&s->pb, 16, level);
917 917
                         }
918 918
                     }
919 919
                 }else{
920
-                    put_bits(&s->pb, 12, level & 0xfff);
920
+                    put_sbits(&s->pb, 12, level);
921 921
                 }
922 922
             }
923 923
             last_non_zero = i;
... ...
@@ -957,7 +957,7 @@ else
957 957
                             put_bits(&s->pb, s->esc3_level_length, level);
958 958
                         }else{
959 959
                             put_bits(&s->pb, 6, run);
960
-                            put_bits(&s->pb, 8, slevel & 0xff);
960
+                            put_sbits(&s->pb, 8, slevel);
961 961
                         }
962 962
                     } else {
963 963
                         /* second escape */
... ...
@@ -265,7 +265,7 @@ void rv20_encode_picture_header(MpegEncContext *s, int picture_number){
265 265
     put_bits(&s->pb, 1, 0);     /* unknown bit */
266 266
     put_bits(&s->pb, 5, s->qscale);
267 267
 
268
-    put_bits(&s->pb, 8, picture_number&0xFF); //FIXME wrong, but correct is not known
268
+    put_sbits(&s->pb, 8, picture_number); //FIXME wrong, but correct is not known
269 269
     s->mb_x= s->mb_y= 0;
270 270
     ff_h263_encode_mba(s);
271 271