annotate put_bits.h @ 10483:afad312b9989 libavcodec

Implement AMR gain function that is used by both AMR and SIPR. Based on AMR SoC code by Robert Swain and Colin McQuillan.
author vitor
date Sat, 31 Oct 2009 02:02:30 +0000
parents 2b8a327189cd
children 784409693f16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
1 /*
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
2 * copyright (c) 2004 Michael Niedermayer <michaelni@gmx.at>
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
3 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
4 * This file is part of FFmpeg.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
5 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
10 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
14 * Lesser General Public License for more details.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
15 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
19 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
20
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
21 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
22 * @file libavcodec/put_bits.h
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
23 * bitstream writer API
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
24 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
25
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
26 #ifndef AVCODEC_PUT_BITS_H
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
27 #define AVCODEC_PUT_BITS_H
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
28
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
29 #include <stdint.h>
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
30 #include <stdlib.h>
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
31 #include <assert.h>
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
32 #include "libavutil/bswap.h"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
33 #include "libavutil/common.h"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
34 #include "libavutil/intreadwrite.h"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
35 #include "libavutil/log.h"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
36 #include "mathops.h"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
37
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
38 //#define ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
39 //#define ALIGNED_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
40
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
41 /* buf and buf_end must be present and used by every alternative writer. */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
42 typedef struct PutBitContext {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
43 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
44 uint8_t *buf, *buf_end;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
45 int index;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
46 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
47 uint32_t bit_buf;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
48 int bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
49 uint8_t *buf, *buf_ptr, *buf_end;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
50 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
51 int size_in_bits;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
52 } PutBitContext;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
53
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
54 /**
9822
2887f410011f Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents: 9433
diff changeset
55 * Initializes the PutBitContext s.
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
56 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
57 * @param buffer the buffer where to put bits
9822
2887f410011f Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents: 9433
diff changeset
58 * @param buffer_size the size in bytes of buffer
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
59 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
60 static inline void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
61 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
62 if(buffer_size < 0) {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
63 buffer_size = 0;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
64 buffer = NULL;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
65 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
66
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
67 s->size_in_bits= 8*buffer_size;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
68 s->buf = buffer;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
69 s->buf_end = s->buf + buffer_size;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
70 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
71 s->index=0;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
72 ((uint32_t*)(s->buf))[0]=0;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
73 // memset(buffer, 0, buffer_size);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
74 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
75 s->buf_ptr = s->buf;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
76 s->bit_left=32;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
77 s->bit_buf=0;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
78 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
79 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
80
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
81 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
82 * Returns the total number of bits written to the bitstream.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
83 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
84 static inline int put_bits_count(PutBitContext *s)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
85 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
86 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
87 return s->index;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
88 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
89 return (s->buf_ptr - s->buf) * 8 + 32 - s->bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
90 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
91 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
92
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
93 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
94 * Pads the end of the output stream with zeros.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
95 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
96 static inline void flush_put_bits(PutBitContext *s)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
97 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
98 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
99 align_put_bits(s);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
100 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
101 #ifndef BITSTREAM_WRITER_LE
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
102 s->bit_buf<<= s->bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
103 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
104 while (s->bit_left < 32) {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
105 /* XXX: should test end of buffer */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
106 #ifdef BITSTREAM_WRITER_LE
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
107 *s->buf_ptr++=s->bit_buf;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
108 s->bit_buf>>=8;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
109 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
110 *s->buf_ptr++=s->bit_buf >> 24;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
111 s->bit_buf<<=8;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
112 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
113 s->bit_left+=8;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
114 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
115 s->bit_left=32;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
116 s->bit_buf=0;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
117 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
118 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
119
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
120 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
121 * Pads the bitstream with zeros up to the next byte boundary.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
122 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
123 void align_put_bits(PutBitContext *s);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
124
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
125 /**
9822
2887f410011f Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents: 9433
diff changeset
126 * Puts the string s in the bitstream.
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
127 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
128 * @param terminate_string 0-terminates the written string if value is 1
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
129 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
130 void ff_put_string(PutBitContext * pbc, const char *s, int terminate_string);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
131
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
132 /**
9822
2887f410011f Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents: 9433
diff changeset
133 * Copies the content of src to the bitstream.
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
134 *
9822
2887f410011f Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents: 9433
diff changeset
135 * @param length the number of bits of src to copy
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
136 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
137 void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
138
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
139 /**
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
140 * Write up to 31 bits into a bitstream.
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
141 * Use put_bits32 to write 32 bits.
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
142 */
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
143 static inline void put_bits(PutBitContext *s, int n, unsigned int value)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
144 #ifndef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
145 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
146 unsigned int bit_buf;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
147 int bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
148
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
149 // printf("put_bits=%d %x\n", n, value);
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
150 assert(n <= 31 && value < (1U << n));
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
151
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
152 bit_buf = s->bit_buf;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
153 bit_left = s->bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
154
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
155 // printf("n=%d value=%x cnt=%d buf=%x\n", n, value, bit_cnt, bit_buf);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
156 /* XXX: optimize */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
157 #ifdef BITSTREAM_WRITER_LE
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
158 bit_buf |= value << (32 - bit_left);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
159 if (n >= bit_left) {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
160 #if !HAVE_FAST_UNALIGNED
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
161 if (3 & (intptr_t) s->buf_ptr) {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
162 AV_WL32(s->buf_ptr, bit_buf);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
163 } else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
164 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
165 *(uint32_t *)s->buf_ptr = le2me_32(bit_buf);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
166 s->buf_ptr+=4;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
167 bit_buf = (bit_left==32)?0:value >> bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
168 bit_left+=32;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
169 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
170 bit_left-=n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
171 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
172 if (n < bit_left) {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
173 bit_buf = (bit_buf<<n) | value;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
174 bit_left-=n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
175 } else {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
176 bit_buf<<=bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
177 bit_buf |= value >> (n - bit_left);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
178 #if !HAVE_FAST_UNALIGNED
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
179 if (3 & (intptr_t) s->buf_ptr) {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
180 AV_WB32(s->buf_ptr, bit_buf);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
181 } else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
182 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
183 *(uint32_t *)s->buf_ptr = be2me_32(bit_buf);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
184 //printf("bitbuf = %08x\n", bit_buf);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
185 s->buf_ptr+=4;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
186 bit_left+=32 - n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
187 bit_buf = value;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
188 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
189 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
190
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
191 s->bit_buf = bit_buf;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
192 s->bit_left = bit_left;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
193 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
194 #else /* ALT_BITSTREAM_WRITER defined */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
195 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
196 # ifdef ALIGNED_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
197 # if ARCH_X86
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
198 __asm__ volatile(
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
199 "movl %0, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
200 "xorl %%eax, %%eax \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
201 "shrdl %%cl, %1, %%eax \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
202 "shrl %%cl, %1 \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
203 "movl %0, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
204 "shrl $3, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
205 "andl $0xFFFFFFFC, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
206 "bswapl %1 \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
207 "orl %1, (%2, %%ecx) \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
208 "bswapl %%eax \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
209 "addl %3, %0 \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
210 "movl %%eax, 4(%2, %%ecx) \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
211 : "=&r" (s->index), "=&r" (value)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
212 : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n))
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
213 : "%eax", "%ecx"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
214 );
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
215 # else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
216 int index= s->index;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
217 uint32_t *ptr= ((uint32_t *)s->buf)+(index>>5);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
218
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
219 value<<= 32-n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
220
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
221 ptr[0] |= be2me_32(value>>(index&31));
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
222 ptr[1] = be2me_32(value<<(32-(index&31)));
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
223 //if(n>24) printf("%d %d\n", n, value);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
224 index+= n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
225 s->index= index;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
226 # endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
227 # else //ALIGNED_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
228 # if ARCH_X86
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
229 __asm__ volatile(
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
230 "movl $7, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
231 "andl %0, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
232 "addl %3, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
233 "negl %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
234 "shll %%cl, %1 \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
235 "bswapl %1 \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
236 "movl %0, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
237 "shrl $3, %%ecx \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
238 "orl %1, (%%ecx, %2) \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
239 "addl %3, %0 \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
240 "movl $0, 4(%%ecx, %2) \n\t"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
241 : "=&r" (s->index), "=&r" (value)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
242 : "r" (s->buf), "r" (n), "0" (s->index), "1" (value)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
243 : "%ecx"
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
244 );
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
245 # else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
246 int index= s->index;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
247 uint32_t *ptr= (uint32_t*)(((uint8_t *)s->buf)+(index>>3));
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
248
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
249 ptr[0] |= be2me_32(value<<(32-n-(index&7) ));
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
250 ptr[1] = 0;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
251 //if(n>24) printf("%d %d\n", n, value);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
252 index+= n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
253 s->index= index;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
254 # endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
255 # endif //!ALIGNED_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
256 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
257 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
258
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
259 static inline void put_sbits(PutBitContext *pb, int bits, int32_t val)
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
260 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
261 assert(bits >= 0 && bits <= 31);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
262
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
263 put_bits(pb, bits, val & ((1<<bits)-1));
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
264 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
265
9412
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
266 /**
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
267 * Write exactly 32 bits into a bitstream
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
268 */
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
269 static void av_unused put_bits32(PutBitContext *s, uint32_t value)
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
270 {
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
271 int lo = value & 0xffff;
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
272 int hi = value >> 16;
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
273 #ifdef ALT_BITSTREAM_WRITER_LE
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
274 put_bits(s, 16, lo);
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
275 put_bits(s, 16, hi);
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
276 #else
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
277 put_bits(s, 16, hi);
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
278 put_bits(s, 16, lo);
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
279 #endif
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
280 }
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
281
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 9822
diff changeset
282 /**
9412
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
283 * Returns the pointer to the byte where the bitstream writer will put
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
284 * the next bit.
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
285 */
9431
932543edc1d2 Rename pbBufPtr() to put_bits_ptr().
stefano
parents: 9412
diff changeset
286 static inline uint8_t* put_bits_ptr(PutBitContext *s)
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
287 {
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
288 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
289 return s->buf + (s->index>>3);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
290 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
291 return s->buf_ptr;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
292 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
293 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
294
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
295 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
296 * Skips the given number of bytes.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
297 * PutBitContext must be flushed & aligned to a byte boundary before calling this.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
298 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
299 static inline void skip_put_bytes(PutBitContext *s, int n){
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
300 assert((put_bits_count(s)&7)==0);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
301 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
302 FIXME may need some cleaning of the buffer
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
303 s->index += n<<3;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
304 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
305 assert(s->bit_left==32);
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
306 s->buf_ptr += n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
307 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
308 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
309
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
310 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
311 * Skips the given number of bits.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
312 * Must only be used if the actual values in the bitstream do not matter.
9822
2887f410011f Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents: 9433
diff changeset
313 * If n is 0 the behavior is undefined.
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
314 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
315 static inline void skip_put_bits(PutBitContext *s, int n){
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
316 #ifdef ALT_BITSTREAM_WRITER
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
317 s->index += n;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
318 #else
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
319 s->bit_left -= n;
9433
70afd9081b3f Fix skip_put_bits() buf_ptr increment.
stefano
parents: 9431
diff changeset
320 s->buf_ptr-= 4*(s->bit_left>>5);
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
321 s->bit_left &= 31;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
322 #endif
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
323 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
324
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
325 /**
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
326 * Changes the end of the buffer.
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
327 *
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
328 * @param size the new size in bytes of the buffer where to put bits
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
329 */
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
330 static inline void set_put_bits_buffer_size(PutBitContext *s, int size){
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
331 s->buf_end= s->buf + size;
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
332 }
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
333
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff changeset
334 #endif /* AVCODEC_PUT_BITS_H */