annotate bytestream.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 5690a6211e8c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4054
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
1 /*
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
2 * Bytestream functions
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
3 * copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr>
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
4 *
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
5 * This file is part of FFmpeg.
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
6 *
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
11 *
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
15 * Lesser General Public License for more details.
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
16 *
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
20 */
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
21
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 6763
diff changeset
22 #ifndef AVCODEC_BYTESTREAM_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 6763
diff changeset
23 #define AVCODEC_BYTESTREAM_H
4054
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
24
8667
5690a6211e8c Directly #include some required headers.
diego
parents: 8573
diff changeset
25 #include <string.h>
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6218
diff changeset
26 #include "libavutil/common.h"
8573
2acf0ae7b041 Fix build: Add intreadwrite.h and bswap.h #includes where necessary.
diego
parents: 7760
diff changeset
27 #include "libavutil/intreadwrite.h"
5162
4394344397d8 include all prerequisites in header files
mru
parents: 5144
diff changeset
28
5245
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
29 #define DEF_T(type, name, bytes, read, write) \
6218
michael
parents: 5246
diff changeset
30 static av_always_inline type bytestream_get_ ## name(const uint8_t **b){\
4488
601865b7fc26 simplify and remove useless index in AV_W*
michael
parents: 4364
diff changeset
31 (*b) += bytes;\
601865b7fc26 simplify and remove useless index in AV_W*
michael
parents: 4364
diff changeset
32 return read(*b - bytes);\
601865b7fc26 simplify and remove useless index in AV_W*
michael
parents: 4364
diff changeset
33 }\
5245
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
34 static av_always_inline void bytestream_put_ ##name(uint8_t **b, const type value){\
4488
601865b7fc26 simplify and remove useless index in AV_W*
michael
parents: 4364
diff changeset
35 write(*b, value);\
601865b7fc26 simplify and remove useless index in AV_W*
michael
parents: 4364
diff changeset
36 (*b) += bytes;\
5144
e92146cec4a8 Remove unneeded semicolon.
takis
parents: 4626
diff changeset
37 }
4054
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
38
5245
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
39 #define DEF(name, bytes, read, write) \
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
40 DEF_T(unsigned int, name, bytes, read, write)
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
41 #define DEF64(name, bytes, read, write) \
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
42 DEF_T(uint64_t, name, bytes, read, write)
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
43
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
44 DEF64(le64, 8, AV_RL64, AV_WL64)
5246
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
45 DEF (le32, 4, AV_RL32, AV_WL32)
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
46 DEF (le24, 3, AV_RL24, AV_WL24)
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
47 DEF (le16, 2, AV_RL16, AV_WL16)
5245
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
48 DEF64(be64, 8, AV_RB64, AV_WB64)
5246
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
49 DEF (be32, 4, AV_RB32, AV_WB32)
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
50 DEF (be24, 3, AV_RB24, AV_WB24)
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
51 DEF (be16, 2, AV_RB16, AV_WB16)
9975783f1cb2 whitespace cosmetics
mru
parents: 5245
diff changeset
52 DEF (byte, 1, AV_RB8 , AV_WB8 )
4054
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
53
4488
601865b7fc26 simplify and remove useless index in AV_W*
michael
parents: 4364
diff changeset
54 #undef DEF
5245
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
55 #undef DEF64
3d64f44fd2a3 add 64-bit bytestream read/write functions
mru
parents: 5162
diff changeset
56 #undef DEF_T
4054
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
57
6218
michael
parents: 5246
diff changeset
58 static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, uint8_t *dst, unsigned int size)
4054
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
59 {
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
60 memcpy(dst, *b, size);
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
61 (*b) += size;
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
62 return size;
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
63 }
f20c7bb12103 change gif demuxer to gif decoder
bcoudurier
parents:
diff changeset
64
4283
d6f83e2f8804 rename always_inline to av_always_inline and move to common.h
mru
parents: 4251
diff changeset
65 static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size)
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents: 4054
diff changeset
66 {
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents: 4054
diff changeset
67 memcpy(*b, src, size);
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents: 4054
diff changeset
68 (*b) += size;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents: 4054
diff changeset
69 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents: 4054
diff changeset
70
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 6763
diff changeset
71 #endif /* AVCODEC_BYTESTREAM_H */