annotate put_bits.h @ 11225:5811a86f55f1 libavcodec

Use memset to set the runs partially coded superblocks Much faster for long runs (e.g. nearly uncoded frames), slightly faster for the general case.
author conrad
date Sun, 21 Feb 2010 00:10:47 +0000
parents 0a2d577dd2d8
children 7dd2a45249a9
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
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
784409693f16 Fix typo, "Write" -> "Writes".
stefano
parents: 10344
diff changeset
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
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
272 /**
10586
d7ae0897b236 Fix put_bits32() doxy.
stefano
parents: 10585
diff changeset
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
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
289 * Returns the pointer to the byte where the bitstream writer will put
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
290 * the next bit.
a61f0c7f40a8 Document pbBufPtr().
stefano
parents: 9411
diff changeset
291 */
9431
932543edc1d2 Rename pbBufPtr() to put_bits_ptr().
stefano
parents: 9412
diff changeset
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
70afd9081b3f Fix skip_put_bits() buf_ptr increment.
stefano
parents: 9431
diff changeset
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 */