Mercurial > libavcodec.hg
annotate put_bits.h @ 11352:6e0af2cfdcfe libavcodec
Do MC and IDCT in coding (hilbert) order
This increases the slice size to 64 pixels, due to having to decode an
entire chroma superblock row per slice.
This can be up to 6% slower depending on clip and CPU, but is necessary
for future optimizations that gain significantly more than was lost.
author | conrad |
---|---|
date | Wed, 03 Mar 2010 23:27:40 +0000 |
parents | 0a2d577dd2d8 |
children | 7dd2a45249a9 |
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 |
10655
0a2d577dd2d8
Make sure that compilation fails if functions like ff_put_string are used in code
reimar
parents:
10615
diff
changeset
|
120 #if defined(ALT_BITSTREAM_WRITER) || defined(BITSTREAM_WRITER_LE) |
0a2d577dd2d8
Make sure that compilation fails if functions like ff_put_string are used in code
reimar
parents:
10615
diff
changeset
|
121 #define align_put_bits align_put_bits_unsupported_here |
0a2d577dd2d8
Make sure that compilation fails if functions like ff_put_string are used in code
reimar
parents:
10615
diff
changeset
|
122 #define ff_put_string ff_put_string_unsupported_here |
0a2d577dd2d8
Make sure that compilation fails if functions like ff_put_string are used in code
reimar
parents:
10615
diff
changeset
|
123 #define ff_copy_bits ff_copy_bits_unsupported_here |
0a2d577dd2d8
Make sure that compilation fails if functions like ff_put_string are used in code
reimar
parents:
10615
diff
changeset
|
124 #else |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
125 /** |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
126 * 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
|
127 */ |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
128 void align_put_bits(PutBitContext *s); |
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 /** |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10586
diff
changeset
|
131 * Puts the string string in the bitstream. |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
132 * |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
133 * @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
|
134 */ |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10586
diff
changeset
|
135 void ff_put_string(PutBitContext *pb, const char *string, int terminate_string); |
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 /** |
9822
2887f410011f
Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents:
9433
diff
changeset
|
138 * 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
|
139 * |
9822
2887f410011f
Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano
parents:
9433
diff
changeset
|
140 * @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
|
141 */ |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
142 void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length); |
10655
0a2d577dd2d8
Make sure that compilation fails if functions like ff_put_string are used in code
reimar
parents:
10615
diff
changeset
|
143 #endif |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
144 |
10344
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
145 /** |
10584 | 146 * Writes up to 31 bits into a bitstream. |
10344
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
147 * 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
|
148 */ |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
149 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
|
150 #ifndef ALT_BITSTREAM_WRITER |
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 unsigned int bit_buf; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
153 int 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("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
|
156 assert(n <= 31 && value < (1U << n)); |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
157 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
158 bit_buf = s->bit_buf; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
159 bit_left = s->bit_left; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
160 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
161 // 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
|
162 /* XXX: optimize */ |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
163 #ifdef BITSTREAM_WRITER_LE |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
164 bit_buf |= value << (32 - bit_left); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
165 if (n >= bit_left) { |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
166 #if !HAVE_FAST_UNALIGNED |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
167 if (3 & (intptr_t) s->buf_ptr) { |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
168 AV_WL32(s->buf_ptr, bit_buf); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
169 } else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
170 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
171 *(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
|
172 s->buf_ptr+=4; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
173 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
|
174 bit_left+=32; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
175 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
176 bit_left-=n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
177 #else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
178 if (n < bit_left) { |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
179 bit_buf = (bit_buf<<n) | value; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
180 bit_left-=n; |
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 bit_buf<<=bit_left; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
183 bit_buf |= value >> (n - bit_left); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
184 #if !HAVE_FAST_UNALIGNED |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
185 if (3 & (intptr_t) s->buf_ptr) { |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
186 AV_WB32(s->buf_ptr, bit_buf); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
187 } else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
188 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
189 *(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
|
190 //printf("bitbuf = %08x\n", bit_buf); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
191 s->buf_ptr+=4; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
192 bit_left+=32 - n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
193 bit_buf = value; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
194 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
195 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
196 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
197 s->bit_buf = bit_buf; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
198 s->bit_left = bit_left; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
199 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
200 #else /* ALT_BITSTREAM_WRITER defined */ |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
201 { |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
202 # ifdef ALIGNED_BITSTREAM_WRITER |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
203 # if ARCH_X86 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
204 __asm__ volatile( |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
205 "movl %0, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
206 "xorl %%eax, %%eax \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
207 "shrdl %%cl, %1, %%eax \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
208 "shrl %%cl, %1 \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
209 "movl %0, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
210 "shrl $3, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
211 "andl $0xFFFFFFFC, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
212 "bswapl %1 \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
213 "orl %1, (%2, %%ecx) \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
214 "bswapl %%eax \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
215 "addl %3, %0 \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
216 "movl %%eax, 4(%2, %%ecx) \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
217 : "=&r" (s->index), "=&r" (value) |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
218 : "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
|
219 : "%eax", "%ecx" |
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 # else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
222 int index= s->index; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
223 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
|
224 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
225 value<<= 32-n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
226 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
227 ptr[0] |= be2me_32(value>>(index&31)); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
228 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
|
229 //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
|
230 index+= n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
231 s->index= index; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
232 # endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
233 # else //ALIGNED_BITSTREAM_WRITER |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
234 # if ARCH_X86 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
235 __asm__ volatile( |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
236 "movl $7, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
237 "andl %0, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
238 "addl %3, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
239 "negl %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
240 "shll %%cl, %1 \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
241 "bswapl %1 \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
242 "movl %0, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
243 "shrl $3, %%ecx \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
244 "orl %1, (%%ecx, %2) \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
245 "addl %3, %0 \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
246 "movl $0, 4(%%ecx, %2) \n\t" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
247 : "=&r" (s->index), "=&r" (value) |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
248 : "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
|
249 : "%ecx" |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
250 ); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
251 # else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
252 int index= s->index; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
253 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
|
254 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
255 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
|
256 ptr[1] = 0; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
257 //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
|
258 index+= n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
259 s->index= index; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
260 # endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
261 # endif //!ALIGNED_BITSTREAM_WRITER |
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 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
264 |
10608
dab94852ac8b
Rename parameters of put_sbits() to make them consistent with those of
stefano
parents:
10599
diff
changeset
|
265 static inline void put_sbits(PutBitContext *pb, int n, int32_t value) |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
266 { |
10608
dab94852ac8b
Rename parameters of put_sbits() to make them consistent with those of
stefano
parents:
10599
diff
changeset
|
267 assert(n >= 0 && n <= 31); |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
268 |
10608
dab94852ac8b
Rename parameters of put_sbits() to make them consistent with those of
stefano
parents:
10599
diff
changeset
|
269 put_bits(pb, n, value & ((1<<n)-1)); |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
270 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
271 |
9412 | 272 /** |
10586 | 273 * Writes exactly 32 bits into a bitstream. |
10344
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
274 */ |
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
275 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
|
276 { |
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
277 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
|
278 int hi = value >> 16; |
10615
8a71d3ce52e2
fix typo, ALT_BITSTREAM_WRITER_LE does not exist
bcoudurier
parents:
10608
diff
changeset
|
279 #ifdef BITSTREAM_WRITER_LE |
10344
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
280 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
|
281 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
|
282 #else |
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
283 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
|
284 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
|
285 #endif |
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
286 } |
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
287 |
2b8a327189cd
put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents:
9822
diff
changeset
|
288 /** |
9412 | 289 * Returns the pointer to the byte where the bitstream writer will put |
290 * the next bit. | |
291 */ | |
9431 | 292 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
|
293 { |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
294 #ifdef ALT_BITSTREAM_WRITER |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
295 return s->buf + (s->index>>3); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
296 #else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
297 return s->buf_ptr; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
298 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
299 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
300 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
301 /** |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
302 * Skips the given number of bytes. |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
303 * 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
|
304 */ |
10585
7034c66f7e7d
Consistently put braces for function definitions.
stefano
parents:
10584
diff
changeset
|
305 static inline void skip_put_bytes(PutBitContext *s, int n) |
7034c66f7e7d
Consistently put braces for function definitions.
stefano
parents:
10584
diff
changeset
|
306 { |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
307 assert((put_bits_count(s)&7)==0); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
308 #ifdef ALT_BITSTREAM_WRITER |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
309 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
|
310 s->index += n<<3; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
311 #else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
312 assert(s->bit_left==32); |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
313 s->buf_ptr += n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
314 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
315 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
316 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
317 /** |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
318 * Skips the given number of bits. |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
319 * 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
|
320 * 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
|
321 */ |
10585
7034c66f7e7d
Consistently put braces for function definitions.
stefano
parents:
10584
diff
changeset
|
322 static inline void skip_put_bits(PutBitContext *s, int n) |
7034c66f7e7d
Consistently put braces for function definitions.
stefano
parents:
10584
diff
changeset
|
323 { |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
324 #ifdef ALT_BITSTREAM_WRITER |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
325 s->index += n; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
326 #else |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
327 s->bit_left -= n; |
9433 | 328 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
|
329 s->bit_left &= 31; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
330 #endif |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
331 } |
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 * Changes the end of the buffer. |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
335 * |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
336 * @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
|
337 */ |
10585
7034c66f7e7d
Consistently put braces for function definitions.
stefano
parents:
10584
diff
changeset
|
338 static inline void set_put_bits_buffer_size(PutBitContext *s, int size) |
7034c66f7e7d
Consistently put braces for function definitions.
stefano
parents:
10584
diff
changeset
|
339 { |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
340 s->buf_end= s->buf + size; |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
341 } |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
342 |
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
diff
changeset
|
343 #endif /* AVCODEC_PUT_BITS_H */ |