| 47 | } |
| 48 | |
| 49 | void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length) |
| 50 | { |
| 51 | int words = length >> 4; |
| 52 | int bits = length & 15; |
| 53 | int i; |
| 54 | |
| 55 | if (length == 0) |
| 56 | return; |
| 57 | |
| 58 | av_assert0(length <= put_bits_left(pb)); |
| 59 | |
| 60 | if (CONFIG_SMALL || words < 16 || put_bits_count(pb) & 7) { |
| 61 | for (i = 0; i < words; i++) |
| 62 | put_bits(pb, 16, AV_RB16(src + 2 * i)); |
| 63 | } else { |
| 64 | for (i = 0; put_bits_count(pb) & 31; i++) |
| 65 | put_bits(pb, 8, src[i]); |
| 66 | flush_put_bits(pb); |
| 67 | memcpy(put_bits_ptr(pb), src + i, 2 * words - i); |
| 68 | skip_put_bytes(pb, 2 * words - i); |
| 69 | } |
| 70 | |
| 71 | put_bits(pb, bits, AV_RB16(src + 2 * words) >> (16 - bits)); |
| 72 | } |
no test coverage detected