annotate rv10.c @ 2497:69adfbbdcdeb libavcodec

- samples from mplayer ftp in the "adv" profile seem to have profile=2, which isn't the advanced one; and indeed, using adv. profile parser fails. Using normal parser works, and that's what is done - attempt at taking care of stride for NORM2 bitplane decoding - duplication of much code from msmpeg4.c; this code isn't yet used, but goes down as far as the block layer (mainly Transform Type stuff, the remains are wild editing without checking). Unusable yet, and lacks the AC decoding (but a step further in bitstream parsing) patch by anonymous
author michael
date Fri, 04 Feb 2005 02:20:38 +0000
parents f67b63ed036d
children e25782262d7d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * RV10 codec
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
3 * Copyright (c) 2000,2001 Fabrice Bellard.
1739
07a484280a82 copyright year update of the files i touched and remembered, things look annoyingly unmaintained otherwise
michael
parents: 1706
diff changeset
4 * Copyright (c) 2002-2004 Michael Niedermayer
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
5 *
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
6 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
8 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
9 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
10 *
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
11 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
14 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
15 *
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
17 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
19 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1070
diff changeset
20
1e39f273ecd6 per file doxy
michaelni
parents: 1070
diff changeset
21 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1070
diff changeset
22 * @file rv10.c
1e39f273ecd6 per file doxy
michaelni
parents: 1070
diff changeset
23 * RV10 codec.
1e39f273ecd6 per file doxy
michaelni
parents: 1070
diff changeset
24 */
1e39f273ecd6 per file doxy
michaelni
parents: 1070
diff changeset
25
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 350
diff changeset
26 #include "avcodec.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
27 #include "dsputil.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
28 #include "mpegvideo.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
29
986e461dc072 Initial revision
glantau
parents:
diff changeset
30 //#define DEBUG
986e461dc072 Initial revision
glantau
parents:
diff changeset
31
622
a1e54c24f221 working around undefined behavior of get-vlc if the vlc s invalid
michaelni
parents: 621
diff changeset
32 #define DC_VLC_BITS 14 //FIXME find a better solution
547
31be0f0b0792 get_vlc -> get_vlc2
michaelni
parents: 450
diff changeset
33
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
34 static const uint16_t rv_lum_code[256] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
35 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
36 0x3e7f, 0x0f00, 0x0f01, 0x0f02, 0x0f03, 0x0f04, 0x0f05, 0x0f06,
986e461dc072 Initial revision
glantau
parents:
diff changeset
37 0x0f07, 0x0f08, 0x0f09, 0x0f0a, 0x0f0b, 0x0f0c, 0x0f0d, 0x0f0e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
38 0x0f0f, 0x0f10, 0x0f11, 0x0f12, 0x0f13, 0x0f14, 0x0f15, 0x0f16,
986e461dc072 Initial revision
glantau
parents:
diff changeset
39 0x0f17, 0x0f18, 0x0f19, 0x0f1a, 0x0f1b, 0x0f1c, 0x0f1d, 0x0f1e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
40 0x0f1f, 0x0f20, 0x0f21, 0x0f22, 0x0f23, 0x0f24, 0x0f25, 0x0f26,
986e461dc072 Initial revision
glantau
parents:
diff changeset
41 0x0f27, 0x0f28, 0x0f29, 0x0f2a, 0x0f2b, 0x0f2c, 0x0f2d, 0x0f2e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
42 0x0f2f, 0x0f30, 0x0f31, 0x0f32, 0x0f33, 0x0f34, 0x0f35, 0x0f36,
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 0x0f37, 0x0f38, 0x0f39, 0x0f3a, 0x0f3b, 0x0f3c, 0x0f3d, 0x0f3e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
44 0x0f3f, 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x0386,
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 0x0387, 0x0388, 0x0389, 0x038a, 0x038b, 0x038c, 0x038d, 0x038e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
46 0x038f, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 0x039f, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6,
986e461dc072 Initial revision
glantau
parents:
diff changeset
49 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce,
986e461dc072 Initial revision
glantau
parents:
diff changeset
50 0x00cf, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056,
986e461dc072 Initial revision
glantau
parents:
diff changeset
51 0x0057, 0x0020, 0x0021, 0x0022, 0x0023, 0x000c, 0x000d, 0x0004,
986e461dc072 Initial revision
glantau
parents:
diff changeset
52 0x0000, 0x0005, 0x000e, 0x000f, 0x0024, 0x0025, 0x0026, 0x0027,
986e461dc072 Initial revision
glantau
parents:
diff changeset
53 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
54 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
55 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
986e461dc072 Initial revision
glantau
parents:
diff changeset
56 0x03a0, 0x03a1, 0x03a2, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
57 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
986e461dc072 Initial revision
glantau
parents:
diff changeset
58 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
59 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 0x0f40, 0x0f41, 0x0f42, 0x0f43, 0x0f44, 0x0f45, 0x0f46, 0x0f47,
986e461dc072 Initial revision
glantau
parents:
diff changeset
61 0x0f48, 0x0f49, 0x0f4a, 0x0f4b, 0x0f4c, 0x0f4d, 0x0f4e, 0x0f4f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
62 0x0f50, 0x0f51, 0x0f52, 0x0f53, 0x0f54, 0x0f55, 0x0f56, 0x0f57,
986e461dc072 Initial revision
glantau
parents:
diff changeset
63 0x0f58, 0x0f59, 0x0f5a, 0x0f5b, 0x0f5c, 0x0f5d, 0x0f5e, 0x0f5f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
64 0x0f60, 0x0f61, 0x0f62, 0x0f63, 0x0f64, 0x0f65, 0x0f66, 0x0f67,
986e461dc072 Initial revision
glantau
parents:
diff changeset
65 0x0f68, 0x0f69, 0x0f6a, 0x0f6b, 0x0f6c, 0x0f6d, 0x0f6e, 0x0f6f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
66 0x0f70, 0x0f71, 0x0f72, 0x0f73, 0x0f74, 0x0f75, 0x0f76, 0x0f77,
986e461dc072 Initial revision
glantau
parents:
diff changeset
67 0x0f78, 0x0f79, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f7e, 0x0f7f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
68 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
69
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
70 static const uint8_t rv_lum_bits[256] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
71 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
72 14, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
73 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
74 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
75 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
76 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
77 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
78 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
79 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
80 12, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
81 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
82 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
83 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
84 10, 8, 8, 8, 8, 8, 8, 8,
986e461dc072 Initial revision
glantau
parents:
diff changeset
85 8, 8, 8, 8, 8, 8, 8, 8,
986e461dc072 Initial revision
glantau
parents:
diff changeset
86 8, 7, 7, 7, 7, 7, 7, 7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
87 7, 6, 6, 6, 6, 5, 5, 4,
986e461dc072 Initial revision
glantau
parents:
diff changeset
88 2, 4, 5, 5, 6, 6, 6, 6,
986e461dc072 Initial revision
glantau
parents:
diff changeset
89 7, 7, 7, 7, 7, 7, 7, 7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 8, 8, 8, 8, 8, 8, 8, 8,
986e461dc072 Initial revision
glantau
parents:
diff changeset
91 8, 8, 8, 8, 8, 8, 8, 8,
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
93 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
94 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
95 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
98 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
99 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
100 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
101 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
102 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
103 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
105
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
106 static const uint16_t rv_chrom_code[256] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
108 0xfe7f, 0x3f00, 0x3f01, 0x3f02, 0x3f03, 0x3f04, 0x3f05, 0x3f06,
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 0x3f07, 0x3f08, 0x3f09, 0x3f0a, 0x3f0b, 0x3f0c, 0x3f0d, 0x3f0e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
110 0x3f0f, 0x3f10, 0x3f11, 0x3f12, 0x3f13, 0x3f14, 0x3f15, 0x3f16,
986e461dc072 Initial revision
glantau
parents:
diff changeset
111 0x3f17, 0x3f18, 0x3f19, 0x3f1a, 0x3f1b, 0x3f1c, 0x3f1d, 0x3f1e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 0x3f1f, 0x3f20, 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26,
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
114 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36,
986e461dc072 Initial revision
glantau
parents:
diff changeset
115 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, 0x3f3e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 0x3f3f, 0x0f80, 0x0f81, 0x0f82, 0x0f83, 0x0f84, 0x0f85, 0x0f86,
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 0x0f87, 0x0f88, 0x0f89, 0x0f8a, 0x0f8b, 0x0f8c, 0x0f8d, 0x0f8e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
118 0x0f8f, 0x0f90, 0x0f91, 0x0f92, 0x0f93, 0x0f94, 0x0f95, 0x0f96,
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 0x0f97, 0x0f98, 0x0f99, 0x0f9a, 0x0f9b, 0x0f9c, 0x0f9d, 0x0f9e,
986e461dc072 Initial revision
glantau
parents:
diff changeset
120 0x0f9f, 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6,
986e461dc072 Initial revision
glantau
parents:
diff changeset
121 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce,
986e461dc072 Initial revision
glantau
parents:
diff changeset
122 0x03cf, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6,
986e461dc072 Initial revision
glantau
parents:
diff changeset
123 0x00e7, 0x0030, 0x0031, 0x0032, 0x0033, 0x0008, 0x0009, 0x0002,
986e461dc072 Initial revision
glantau
parents:
diff changeset
124 0x0000, 0x0003, 0x000a, 0x000b, 0x0034, 0x0035, 0x0036, 0x0037,
986e461dc072 Initial revision
glantau
parents:
diff changeset
125 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
986e461dc072 Initial revision
glantau
parents:
diff changeset
126 0x03d0, 0x03d1, 0x03d2, 0x03d3, 0x03d4, 0x03d5, 0x03d6, 0x03d7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
127 0x03d8, 0x03d9, 0x03da, 0x03db, 0x03dc, 0x03dd, 0x03de, 0x03df,
986e461dc072 Initial revision
glantau
parents:
diff changeset
128 0x0fa0, 0x0fa1, 0x0fa2, 0x0fa3, 0x0fa4, 0x0fa5, 0x0fa6, 0x0fa7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
129 0x0fa8, 0x0fa9, 0x0faa, 0x0fab, 0x0fac, 0x0fad, 0x0fae, 0x0faf,
986e461dc072 Initial revision
glantau
parents:
diff changeset
130 0x0fb0, 0x0fb1, 0x0fb2, 0x0fb3, 0x0fb4, 0x0fb5, 0x0fb6, 0x0fb7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
131 0x0fb8, 0x0fb9, 0x0fba, 0x0fbb, 0x0fbc, 0x0fbd, 0x0fbe, 0x0fbf,
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, 0x3f46, 0x3f47,
986e461dc072 Initial revision
glantau
parents:
diff changeset
133 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, 0x3f4e, 0x3f4f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
134 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54, 0x3f55, 0x3f56, 0x3f57,
986e461dc072 Initial revision
glantau
parents:
diff changeset
135 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
136 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f67,
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
138 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77,
986e461dc072 Initial revision
glantau
parents:
diff changeset
139 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x3f7f,
986e461dc072 Initial revision
glantau
parents:
diff changeset
140 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
141
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
142 static const uint8_t rv_chrom_bits[256] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
144 16, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
145 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
146 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
147 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
148 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
149 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
150 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
151 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
152 14, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
153 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
154 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
155 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
156 12, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
157 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
158 10, 8, 8, 8, 8, 8, 8, 8,
986e461dc072 Initial revision
glantau
parents:
diff changeset
159 8, 6, 6, 6, 6, 4, 4, 3,
986e461dc072 Initial revision
glantau
parents:
diff changeset
160 2, 3, 4, 4, 6, 6, 6, 6,
986e461dc072 Initial revision
glantau
parents:
diff changeset
161 8, 8, 8, 8, 8, 8, 8, 8,
986e461dc072 Initial revision
glantau
parents:
diff changeset
162 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
163 10, 10, 10, 10, 10, 10, 10, 10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
164 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
165 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
166 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
167 12, 12, 12, 12, 12, 12, 12, 12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
168 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
169 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
170 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
171 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
172 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
173 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
174 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
175 14, 14, 14, 14, 14, 14, 14, 14,
986e461dc072 Initial revision
glantau
parents:
diff changeset
176 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
177
986e461dc072 Initial revision
glantau
parents:
diff changeset
178 static VLC rv_dc_lum, rv_dc_chrom;
986e461dc072 Initial revision
glantau
parents:
diff changeset
179
986e461dc072 Initial revision
glantau
parents:
diff changeset
180 int rv_decode_dc(MpegEncContext *s, int n)
986e461dc072 Initial revision
glantau
parents:
diff changeset
181 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
182 int code;
986e461dc072 Initial revision
glantau
parents:
diff changeset
183
986e461dc072 Initial revision
glantau
parents:
diff changeset
184 if (n < 4) {
547
31be0f0b0792 get_vlc -> get_vlc2
michaelni
parents: 450
diff changeset
185 code = get_vlc2(&s->gb, rv_dc_lum.table, DC_VLC_BITS, 2);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
186 if (code < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
187 /* XXX: I don't understand why they use LONGER codes than
986e461dc072 Initial revision
glantau
parents:
diff changeset
188 necessary. The following code would be completely useless
986e461dc072 Initial revision
glantau
parents:
diff changeset
189 if they had thought about it !!! */
986e461dc072 Initial revision
glantau
parents:
diff changeset
190 code = get_bits(&s->gb, 7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
191 if (code == 0x7c) {
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
192 code = (int8_t)(get_bits(&s->gb, 7) + 1);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
193 } else if (code == 0x7d) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
194 code = -128 + get_bits(&s->gb, 7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
195 } else if (code == 0x7e) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
196 if (get_bits(&s->gb, 1) == 0)
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
197 code = (int8_t)(get_bits(&s->gb, 8) + 1);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
198 else
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
199 code = (int8_t)(get_bits(&s->gb, 8));
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
200 } else if (code == 0x7f) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
201 get_bits(&s->gb, 11);
986e461dc072 Initial revision
glantau
parents:
diff changeset
202 code = 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
203 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
204 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
205 code -= 128;
986e461dc072 Initial revision
glantau
parents:
diff changeset
206 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
207 } else {
547
31be0f0b0792 get_vlc -> get_vlc2
michaelni
parents: 450
diff changeset
208 code = get_vlc2(&s->gb, rv_dc_chrom.table, DC_VLC_BITS, 2);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
209 /* same remark */
986e461dc072 Initial revision
glantau
parents:
diff changeset
210 if (code < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
211 code = get_bits(&s->gb, 9);
986e461dc072 Initial revision
glantau
parents:
diff changeset
212 if (code == 0x1fc) {
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
213 code = (int8_t)(get_bits(&s->gb, 7) + 1);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
214 } else if (code == 0x1fd) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
215 code = -128 + get_bits(&s->gb, 7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
216 } else if (code == 0x1fe) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
217 get_bits(&s->gb, 9);
986e461dc072 Initial revision
glantau
parents:
diff changeset
218 code = 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
219 } else {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
220 av_log(s->avctx, AV_LOG_ERROR, "chroma dc error\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
221 return 0xffff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
222 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
223 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
224 code -= 128;
986e461dc072 Initial revision
glantau
parents:
diff changeset
225 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
226 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
227 return -code;
986e461dc072 Initial revision
glantau
parents:
diff changeset
228 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
229
1070
6da5ae9ee199 more #ifdef CONFIG_ENCODERS patch by (Wolfgang Hesseler <qv at multimediaware dot com>) with modifications by me (s/WOLFGANG/CONFIG_ENCODERS/ and some other fixes)
michaelni
parents: 1064
diff changeset
230 #ifdef CONFIG_ENCODERS
6da5ae9ee199 more #ifdef CONFIG_ENCODERS patch by (Wolfgang Hesseler <qv at multimediaware dot com>) with modifications by me (s/WOLFGANG/CONFIG_ENCODERS/ and some other fixes)
michaelni
parents: 1064
diff changeset
231
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
232 /* write RV 1.0 compatible frame header */
986e461dc072 Initial revision
glantau
parents:
diff changeset
233 void rv10_encode_picture_header(MpegEncContext *s, int picture_number)
986e461dc072 Initial revision
glantau
parents:
diff changeset
234 {
712
e55b91623e09 fixing rv10, this isnt the cleanest solution (parsing the packet header in the codec & creating it in the muxer) but it was that way before things broke, and its the simplest solution
michaelni
parents: 646
diff changeset
235 int full_frame= 0;
646
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
236
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
237 align_put_bits(&s->pb);
646
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
238
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
239 put_bits(&s->pb, 1, 1); /* marker */
986e461dc072 Initial revision
glantau
parents:
diff changeset
240
986e461dc072 Initial revision
glantau
parents:
diff changeset
241 put_bits(&s->pb, 1, (s->pict_type == P_TYPE));
986e461dc072 Initial revision
glantau
parents:
diff changeset
242
986e461dc072 Initial revision
glantau
parents:
diff changeset
243 put_bits(&s->pb, 1, 0); /* not PB frame */
986e461dc072 Initial revision
glantau
parents:
diff changeset
244
986e461dc072 Initial revision
glantau
parents:
diff changeset
245 put_bits(&s->pb, 5, s->qscale);
986e461dc072 Initial revision
glantau
parents:
diff changeset
246
986e461dc072 Initial revision
glantau
parents:
diff changeset
247 if (s->pict_type == I_TYPE) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
248 /* specific MPEG like DC coding not used */
986e461dc072 Initial revision
glantau
parents:
diff changeset
249 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
250 /* if multiple packets per frame are sent, the position at which
986e461dc072 Initial revision
glantau
parents:
diff changeset
251 to display the macro blocks is coded here */
646
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
252 if(!full_frame){
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
253 put_bits(&s->pb, 6, 0); /* mb_x */
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
254 put_bits(&s->pb, 6, 0); /* mb_y */
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
255 put_bits(&s->pb, 12, s->mb_width * s->mb_height);
f87dc45d921d fixing rv10 encoding (ffmpeg can at least decode its own rv10 files now)
michaelni
parents: 643
diff changeset
256 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
257
986e461dc072 Initial revision
glantau
parents:
diff changeset
258 put_bits(&s->pb, 3, 0); /* ignored */
986e461dc072 Initial revision
glantau
parents:
diff changeset
259 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
260
2380
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
261 void rv20_encode_picture_header(MpegEncContext *s, int picture_number){
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
262 put_bits(&s->pb, 2, s->pict_type); //I 0 vs. 1 ?
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
263 put_bits(&s->pb, 1, 0); /* unknown bit */
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
264 put_bits(&s->pb, 5, s->qscale);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
265
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
266 put_bits(&s->pb, 8, picture_number&0xFF); //FIXME wrong, but correct is not known
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
267 s->mb_x= s->mb_y= 0;
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
268 ff_h263_encode_mba(s);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
269
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
270 put_bits(&s->pb, 1, s->no_rounding);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
271
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
272 assert(s->f_code == 1);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
273 assert(s->unrestricted_mv == 1);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
274 // assert(s->h263_aic== (s->pict_type == I_TYPE));
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
275 assert(s->alt_inter_vlc == 0);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
276 assert(s->umvplus == 0);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
277 assert(s->modified_quant==1);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
278 assert(s->loop_filter==1);
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
279
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
280 s->h263_aic= s->pict_type == I_TYPE;
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
281 if(s->h263_aic){
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
282 s->y_dc_scale_table=
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
283 s->c_dc_scale_table= ff_aic_dc_scale_table;
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
284 }else{
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
285 s->y_dc_scale_table=
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
286 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
287 }
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
288 }
3daf36fd1999 rv20 encoding
michael
parents: 2379
diff changeset
289
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
290 static int get_num(GetBitContext *gb)
986e461dc072 Initial revision
glantau
parents:
diff changeset
291 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
292 int n, n1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
293
986e461dc072 Initial revision
glantau
parents:
diff changeset
294 n = get_bits(gb, 16);
986e461dc072 Initial revision
glantau
parents:
diff changeset
295 if (n >= 0x4000) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
296 return n - 0x4000;
986e461dc072 Initial revision
glantau
parents:
diff changeset
297 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
298 n1 = get_bits(gb, 16);
986e461dc072 Initial revision
glantau
parents:
diff changeset
299 return (n << 16) | n1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
300 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
301 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
302
1070
6da5ae9ee199 more #ifdef CONFIG_ENCODERS patch by (Wolfgang Hesseler <qv at multimediaware dot com>) with modifications by me (s/WOLFGANG/CONFIG_ENCODERS/ and some other fixes)
michaelni
parents: 1064
diff changeset
303 #endif //CONFIG_ENCODERS
6da5ae9ee199 more #ifdef CONFIG_ENCODERS patch by (Wolfgang Hesseler <qv at multimediaware dot com>) with modifications by me (s/WOLFGANG/CONFIG_ENCODERS/ and some other fixes)
michaelni
parents: 1064
diff changeset
304
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
305 /* read RV 1.0 compatible frame header */
986e461dc072 Initial revision
glantau
parents:
diff changeset
306 static int rv10_decode_picture_header(MpegEncContext *s)
986e461dc072 Initial revision
glantau
parents:
diff changeset
307 {
2378
1f56314b3770 rv10 thread safety fix / rv10 ffplay fix
michael
parents: 2376
diff changeset
308 int mb_count, pb_frame, marker, unk, mb_xy;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
309
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
310 //printf("ff:%d\n", full_frame);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
311 marker = get_bits(&s->gb, 1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
312
986e461dc072 Initial revision
glantau
parents:
diff changeset
313 if (get_bits(&s->gb, 1))
986e461dc072 Initial revision
glantau
parents:
diff changeset
314 s->pict_type = P_TYPE;
986e461dc072 Initial revision
glantau
parents:
diff changeset
315 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
316 s->pict_type = I_TYPE;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
317 //printf("h:%X ver:%d\n",h,s->rv10_version);
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
318 if(!marker) av_log(s->avctx, AV_LOG_ERROR, "marker missing\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
319 pb_frame = get_bits(&s->gb, 1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
320
986e461dc072 Initial revision
glantau
parents:
diff changeset
321 #ifdef DEBUG
986e461dc072 Initial revision
glantau
parents:
diff changeset
322 printf("pict_type=%d pb_frame=%d\n", s->pict_type, pb_frame);
986e461dc072 Initial revision
glantau
parents:
diff changeset
323 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
324
622
a1e54c24f221 working around undefined behavior of get-vlc if the vlc s invalid
michaelni
parents: 621
diff changeset
325 if (pb_frame){
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
326 av_log(s->avctx, AV_LOG_ERROR, "pb frame not supported\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
327 return -1;
622
a1e54c24f221 working around undefined behavior of get-vlc if the vlc s invalid
michaelni
parents: 621
diff changeset
328 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
329
986e461dc072 Initial revision
glantau
parents:
diff changeset
330 s->qscale = get_bits(&s->gb, 5);
621
980b661a494a fixes rv10 decoding crash
michaelni
parents: 559
diff changeset
331 if(s->qscale==0){
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
332 av_log(s->avctx, AV_LOG_ERROR, "error, qscale:0\n");
621
980b661a494a fixes rv10 decoding crash
michaelni
parents: 559
diff changeset
333 return -1;
980b661a494a fixes rv10 decoding crash
michaelni
parents: 559
diff changeset
334 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
335
986e461dc072 Initial revision
glantau
parents:
diff changeset
336 if (s->pict_type == I_TYPE) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
337 if (s->rv10_version == 3) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
338 /* specific MPEG like DC coding not used */
986e461dc072 Initial revision
glantau
parents:
diff changeset
339 s->last_dc[0] = get_bits(&s->gb, 8);
986e461dc072 Initial revision
glantau
parents:
diff changeset
340 s->last_dc[1] = get_bits(&s->gb, 8);
986e461dc072 Initial revision
glantau
parents:
diff changeset
341 s->last_dc[2] = get_bits(&s->gb, 8);
986e461dc072 Initial revision
glantau
parents:
diff changeset
342 #ifdef DEBUG
986e461dc072 Initial revision
glantau
parents:
diff changeset
343 printf("DC:%d %d %d\n",
986e461dc072 Initial revision
glantau
parents:
diff changeset
344 s->last_dc[0],
986e461dc072 Initial revision
glantau
parents:
diff changeset
345 s->last_dc[1],
986e461dc072 Initial revision
glantau
parents:
diff changeset
346 s->last_dc[2]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
347 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
348 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
349 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
350 /* if multiple packets per frame are sent, the position at which
986e461dc072 Initial revision
glantau
parents:
diff changeset
351 to display the macro blocks is coded here */
2378
1f56314b3770 rv10 thread safety fix / rv10 ffplay fix
michael
parents: 2376
diff changeset
352
1f56314b3770 rv10 thread safety fix / rv10 ffplay fix
michael
parents: 2376
diff changeset
353 mb_xy= s->mb_x + s->mb_y*s->mb_width;
1f56314b3770 rv10 thread safety fix / rv10 ffplay fix
michael
parents: 2376
diff changeset
354 if(show_bits(&s->gb, 12)==0 || (mb_xy && mb_xy < s->mb_num)){
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
355 s->mb_x = get_bits(&s->gb, 6); /* mb_x */
986e461dc072 Initial revision
glantau
parents:
diff changeset
356 s->mb_y = get_bits(&s->gb, 6); /* mb_y */
986e461dc072 Initial revision
glantau
parents:
diff changeset
357 mb_count = get_bits(&s->gb, 12);
986e461dc072 Initial revision
glantau
parents:
diff changeset
358 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
359 s->mb_x = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
360 s->mb_y = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
361 mb_count = s->mb_width * s->mb_height;
986e461dc072 Initial revision
glantau
parents:
diff changeset
362 }
622
a1e54c24f221 working around undefined behavior of get-vlc if the vlc s invalid
michaelni
parents: 621
diff changeset
363 unk= get_bits(&s->gb, 3); /* ignored */
a1e54c24f221 working around undefined behavior of get-vlc if the vlc s invalid
michaelni
parents: 621
diff changeset
364 //printf("%d\n", unk);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
365 s->f_code = 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
366 s->unrestricted_mv = 1;
624
35353e4520d8 use extradata for h263_long_vector mode detection
michaelni
parents: 622
diff changeset
367
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
368 return mb_count;
986e461dc072 Initial revision
glantau
parents:
diff changeset
369 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
370
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
371 static int rv20_decode_picture_header(MpegEncContext *s)
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
372 {
1642
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
373 int seq, mb_pos, i;
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
374
2358
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
375 #if 0
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
376 GetBitContext gb= s->gb;
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
377 for(i=0; i<64; i++){
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
378 av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&gb));
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
379 if(i%4==3) av_log(s->avctx, AV_LOG_DEBUG, " ");
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
380 }
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
381 av_log(s->avctx, AV_LOG_DEBUG, "\n");
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
382 #endif
2376
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
383 #if 0
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
384 for(i=0; i<s->avctx->extradata_size; i++){
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
385 av_log(s->avctx, AV_LOG_DEBUG, "%2X ", ((uint8_t*)s->avctx->extradata)[i]);
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
386 if(i%4==3) av_log(s->avctx, AV_LOG_DEBUG, " ");
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
387 }
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
388 av_log(s->avctx, AV_LOG_DEBUG, "\n");
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
389 #endif
2358
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
390
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
391 if(s->avctx->sub_id == 0x30202002 || s->avctx->sub_id == 0x30203002){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
392 if (get_bits(&s->gb, 3)){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
393 av_log(s->avctx, AV_LOG_ERROR, "unknown triplet set\n");
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
394 return -1;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
395 }
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
396 }
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
397
1642
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
398 i= get_bits(&s->gb, 2);
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
399 switch(i){
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
400 case 0: s->pict_type= I_TYPE; break;
1643
9bb07bd315d9 4th frame type ...
michael
parents: 1642
diff changeset
401 case 1: s->pict_type= I_TYPE; break; //hmm ...
1642
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
402 case 2: s->pict_type= P_TYPE; break;
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
403 case 3: s->pict_type= B_TYPE; break;
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
404 default:
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
405 av_log(s->avctx, AV_LOG_ERROR, "unknown frame type\n");
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
406 return -1;
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
407 }
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
408
1844
2de13087f46e skip b frames before first i frame
michael
parents: 1823
diff changeset
409 if(s->last_picture_ptr==NULL && s->pict_type==B_TYPE){
2de13087f46e skip b frames before first i frame
michael
parents: 1823
diff changeset
410 av_log(s->avctx, AV_LOG_ERROR, "early B pix\n");
2de13087f46e skip b frames before first i frame
michael
parents: 1823
diff changeset
411 return -1;
2de13087f46e skip b frames before first i frame
michael
parents: 1823
diff changeset
412 }
2de13087f46e skip b frames before first i frame
michael
parents: 1823
diff changeset
413
1642
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
414 if (get_bits(&s->gb, 1)){
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
415 av_log(s->avctx, AV_LOG_ERROR, "unknown bit set\n");
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
416 return -1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
417 }
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
418
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
419 s->qscale = get_bits(&s->gb, 5);
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
420 if(s->qscale==0){
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
421 av_log(s->avctx, AV_LOG_ERROR, "error, qscale:0\n");
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
422 return -1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
423 }
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
424 if(s->avctx->sub_id == 0x30203002){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
425 if (get_bits(&s->gb, 1)){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
426 av_log(s->avctx, AV_LOG_ERROR, "unknown bit2 set\n");
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
427 return -1;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
428 }
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
429 }
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
430
1657
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
431 if(s->avctx->has_b_frames){
2387
f45248df9796 another try at fixing rv20 ...
michael
parents: 2380
diff changeset
432 int f=9;
f45248df9796 another try at fixing rv20 ...
michael
parents: 2380
diff changeset
433 int v= s->avctx->extradata_size >= 4 ? ((uint8_t*)s->avctx->extradata)[1] : 0;
2379
a9aae760463e seeking in rm
michael
parents: 2378
diff changeset
434
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
435 if (get_bits(&s->gb, 1)){
2379
a9aae760463e seeking in rm
michael
parents: 2378
diff changeset
436 av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n");
1700
651b422d51d8 fix crash
michael
parents: 1675
diff changeset
437 // return -1;
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
438 }
2376
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
439 seq= get_bits(&s->gb, 14)<<1;
2387
f45248df9796 another try at fixing rv20 ...
michael
parents: 2380
diff changeset
440
2412
436a5f740f29 fixing decoding of http://mplayerhq.hu/~atmos4/ffrv20-crashing-atmos.rm
michael
parents: 2387
diff changeset
441 if(v>1 || (s->avctx->sub_id < 0x20201002 && v>0)){
2387
f45248df9796 another try at fixing rv20 ...
michael
parents: 2380
diff changeset
442 f= get_bits(&s->gb, av_log2(v-1)+1);
2379
a9aae760463e seeking in rm
michael
parents: 2378
diff changeset
443 }
a9aae760463e seeking in rm
michael
parents: 2378
diff changeset
444
a9aae760463e seeking in rm
michael
parents: 2378
diff changeset
445 if(s->avctx->debug & FF_DEBUG_PICT_INFO){
2412
436a5f740f29 fixing decoding of http://mplayerhq.hu/~atmos4/ffrv20-crashing-atmos.rm
michael
parents: 2387
diff changeset
446 av_log(s->avctx, AV_LOG_DEBUG, "F %d/%d\n", f, v);
2359
a3c029107a88 fixing rv20201002
michael
parents: 2358
diff changeset
447 }
2376
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
448
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
449 mb_pos= get_bits(&s->gb, av_log2(s->mb_num-1)+1);
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
450 s->mb_x= mb_pos % s->mb_width;
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
451 s->mb_y= mb_pos / s->mb_width;
1701
95b7ac3344df rv20 / h263 b frame fix
michael
parents: 1700
diff changeset
452 }else{
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
453 seq= get_bits(&s->gb, 8)*128;
1701
95b7ac3344df rv20 / h263 b frame fix
michael
parents: 1700
diff changeset
454 mb_pos= ff_h263_decode_mba(s);
95b7ac3344df rv20 / h263 b frame fix
michael
parents: 1700
diff changeset
455 }
1917
1c382d137275 rv20 (0x20201002) support
michael
parents: 1892
diff changeset
456 //av_log(s->avctx, AV_LOG_DEBUG, "%d\n", seq);
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
457 seq |= s->time &~0x7FFF;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
458 if(seq - s->time > 0x4000) seq -= 0x8000;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
459 if(seq - s->time < -0x4000) seq += 0x8000;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
460 if(seq != s->time){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
461 if(s->pict_type!=B_TYPE){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
462 s->time= seq;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
463 s->pp_time= s->time - s->last_non_b_time;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
464 s->last_non_b_time= s->time;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
465 }else{
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
466 s->time= seq;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
467 s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
468 if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
1823
a660ef952580 (f)printf() is disallowed in libavcodec, compilation will fail now if its used, except that codecs which where added after the printf->av_log change which did ignore av_log() and used prinf are now silent and wont print anything, they should be changed to use av_log, i could do that, but its better if the orginal developer decides which AV_LOG level each message should get
michael
parents: 1796
diff changeset
469 av_log(s->avctx, AV_LOG_DEBUG, "messed up order, seeking?, skiping current b frame\n");
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
470 return FRAME_SKIPED;
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
471 }
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
472 }
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
473 }
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
474 // printf("%d %d %d %d %d\n", seq, (int)s->time, (int)s->last_non_b_time, s->pp_time, s->pb_time);
1917
1c382d137275 rv20 (0x20201002) support
michael
parents: 1892
diff changeset
475 /*for(i=0; i<32; i++){
1c382d137275 rv20 (0x20201002) support
michael
parents: 1892
diff changeset
476 av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
1c382d137275 rv20 (0x20201002) support
michael
parents: 1892
diff changeset
477 }
1c382d137275 rv20 (0x20201002) support
michael
parents: 1892
diff changeset
478 av_log(s->avctx, AV_LOG_DEBUG, "\n");*/
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
479 s->no_rounding= get_bits1(&s->gb);
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
480
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
481 s->f_code = 1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
482 s->unrestricted_mv = 1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
483 s->h263_aic= s->pict_type == I_TYPE;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
484 // s->alt_inter_vlc=1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
485 // s->obmc=1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
486 // s->umvplus=1;
1644
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
487 s->modified_quant=1;
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
488 s->loop_filter=1;
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
489
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
490 if(s->avctx->debug & FF_DEBUG_PICT_INFO){
1642
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
491 av_log(s->avctx, AV_LOG_INFO, "num:%5d x:%2d y:%2d type:%d qscale:%2d rnd:%d\n",
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
492 seq, s->mb_x, s->mb_y, s->pict_type, s->qscale, s->no_rounding);
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
493 }
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
494
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
495 assert(s->pict_type != B_TYPE || !s->low_delay);
1642
e83980313d3f rv20 sub_id == 0x20200002 support
michael
parents: 1641
diff changeset
496
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
497 return s->mb_width*s->mb_height - mb_pos;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
498 }
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
499
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
500 static int rv10_decode_init(AVCodecContext *avctx)
986e461dc072 Initial revision
glantau
parents:
diff changeset
501 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
502 MpegEncContext *s = avctx->priv_data;
1070
6da5ae9ee199 more #ifdef CONFIG_ENCODERS patch by (Wolfgang Hesseler <qv at multimediaware dot com>) with modifications by me (s/WOLFGANG/CONFIG_ENCODERS/ and some other fixes)
michaelni
parents: 1064
diff changeset
503 static int done=0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
504
1892
5ac49e7a1b8f init cleanup
michael
parents: 1844
diff changeset
505 MPV_decode_defaults(s);
5ac49e7a1b8f init cleanup
michael
parents: 1844
diff changeset
506
643
3db611caee55 fixing segfault
michaelni
parents: 624
diff changeset
507 s->avctx= avctx;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
508 s->out_format = FMT_H263;
1640
3bc71266e644 rv10 fix
michael
parents: 1639
diff changeset
509 s->codec_id= avctx->codec_id;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
510
986e461dc072 Initial revision
glantau
parents:
diff changeset
511 s->width = avctx->width;
986e461dc072 Initial revision
glantau
parents:
diff changeset
512 s->height = avctx->height;
986e461dc072 Initial revision
glantau
parents:
diff changeset
513
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
514 switch(avctx->sub_id){
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
515 case 0x10000000:
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
516 s->rv10_version= 0;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
517 s->h263_long_vectors=0;
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
518 s->low_delay=1;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
519 break;
1796
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
520 case 0x10002000:
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
521 s->rv10_version= 3;
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
522 s->h263_long_vectors=1;
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
523 s->low_delay=1;
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
524 s->obmc=1;
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
525 break;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
526 case 0x10003000:
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
527 s->rv10_version= 3;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
528 s->h263_long_vectors=1;
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
529 s->low_delay=1;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
530 break;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
531 case 0x10003001:
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
532 s->rv10_version= 3;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
533 s->h263_long_vectors=0;
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
534 s->low_delay=1;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
535 break;
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
536 case 0x20001000:
1657
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
537 case 0x20100001:
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
538 case 0x20101001:
2358
622a0b0f2d56 rv20103001 support
michael
parents: 2158
diff changeset
539 case 0x20103001:
1657
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
540 s->low_delay=1;
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
541 break;
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
542 case 0x20200002:
1917
1c382d137275 rv20 (0x20201002) support
michael
parents: 1892
diff changeset
543 case 0x20201002:
1657
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
544 case 0x30202002:
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
545 case 0x30203002:
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
546 s->low_delay=0;
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
547 s->avctx->has_b_frames=1;
aaaa1767acc2 set has_b_frames correctly, fixes rv20 dr1 with mplayer
michael
parents: 1655
diff changeset
548 break;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
549 default:
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
550 av_log(s->avctx, AV_LOG_ERROR, "unknown header %X\n", avctx->sub_id);
624
35353e4520d8 use extradata for h263_long_vector mode detection
michaelni
parents: 622
diff changeset
551 }
2376
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
552
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
553 if(avctx->debug & FF_DEBUG_PICT_INFO){
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
554 av_log(avctx, AV_LOG_DEBUG, "ver:%X ver0:%X\n", avctx->sub_id, avctx->extradata_size >= 4 ? ((uint32_t*)avctx->extradata)[0] : -1);
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
555 }
ed9bb4a45afa next try at fixing rv20 decoding
michael
parents: 2370
diff changeset
556
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
557 if (MPV_common_init(s) < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
558 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
559
986e461dc072 Initial revision
glantau
parents:
diff changeset
560 h263_decode_init_vlc(s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
561
986e461dc072 Initial revision
glantau
parents:
diff changeset
562 /* init rv vlc */
986e461dc072 Initial revision
glantau
parents:
diff changeset
563 if (!done) {
547
31be0f0b0792 get_vlc -> get_vlc2
michaelni
parents: 450
diff changeset
564 init_vlc(&rv_dc_lum, DC_VLC_BITS, 256,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
565 rv_lum_bits, 1, 1,
2370
26560d4fdb1f Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents: 2359
diff changeset
566 rv_lum_code, 2, 2, 1);
547
31be0f0b0792 get_vlc -> get_vlc2
michaelni
parents: 450
diff changeset
567 init_vlc(&rv_dc_chrom, DC_VLC_BITS, 256,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
568 rv_chrom_bits, 1, 1,
2370
26560d4fdb1f Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents: 2359
diff changeset
569 rv_chrom_code, 2, 2, 1);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
570 done = 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
571 }
1284
119c814aa9de set pix_fmt in rv10 patch by (James Stembridge <jstembridge at users dot sourceforge dot net>)
michaelni
parents: 1106
diff changeset
572
119c814aa9de set pix_fmt in rv10 patch by (James Stembridge <jstembridge at users dot sourceforge dot net>)
michaelni
parents: 1106
diff changeset
573 avctx->pix_fmt = PIX_FMT_YUV420P;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
574
986e461dc072 Initial revision
glantau
parents:
diff changeset
575 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
576 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
577
986e461dc072 Initial revision
glantau
parents:
diff changeset
578 static int rv10_decode_end(AVCodecContext *avctx)
986e461dc072 Initial revision
glantau
parents:
diff changeset
579 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
580 MpegEncContext *s = avctx->priv_data;
986e461dc072 Initial revision
glantau
parents:
diff changeset
581
986e461dc072 Initial revision
glantau
parents:
diff changeset
582 MPV_common_end(s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
583 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
584 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
585
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
586 static int rv10_decode_packet(AVCodecContext *avctx,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
587 uint8_t *buf, int buf_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
588 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
589 MpegEncContext *s = avctx->priv_data;
2031
4225c131a2eb warning fixes by (Michael Roitzsch <mroi at users dot sourceforge dot net>)
michael
parents: 2028
diff changeset
590 int mb_count, mb_pos, left;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
591
1025
1f9afd8b9131 GetBitContext.size is allways multiplied by 8 -> use size_in_bits to avoid useless *8 in a few inner loops
michaelni
parents: 925
diff changeset
592 init_get_bits(&s->gb, buf, buf_size*8);
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
593 if(s->codec_id ==CODEC_ID_RV10)
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
594 mb_count = rv10_decode_picture_header(s);
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
595 else
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
596 mb_count = rv20_decode_picture_header(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
597 if (mb_count < 0) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
598 av_log(s->avctx, AV_LOG_ERROR, "HEADER ERROR\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
599 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
600 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
601
986e461dc072 Initial revision
glantau
parents:
diff changeset
602 if (s->mb_x >= s->mb_width ||
986e461dc072 Initial revision
glantau
parents:
diff changeset
603 s->mb_y >= s->mb_height) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
604 av_log(s->avctx, AV_LOG_ERROR, "POS ERROR %d %d\n", s->mb_x, s->mb_y);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
605 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
606 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
607 mb_pos = s->mb_y * s->mb_width + s->mb_x;
986e461dc072 Initial revision
glantau
parents:
diff changeset
608 left = s->mb_width * s->mb_height - mb_pos;
986e461dc072 Initial revision
glantau
parents:
diff changeset
609 if (mb_count > left) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
610 av_log(s->avctx, AV_LOG_ERROR, "COUNT ERROR\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
611 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
612 }
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
613 //if(s->pict_type == P_TYPE) return 0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
614
1700
651b422d51d8 fix crash
michael
parents: 1675
diff changeset
615 if ((s->mb_x == 0 && s->mb_y == 0) || s->current_picture_ptr==NULL) {
771
d4cc92144266 handle direct rendering buffer allocation failure
michaelni
parents: 745
diff changeset
616 if(MPV_frame_start(s, avctx) < 0)
d4cc92144266 handle direct rendering buffer allocation failure
michaelni
parents: 745
diff changeset
617 return -1;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
618 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
619
986e461dc072 Initial revision
glantau
parents:
diff changeset
620 #ifdef DEBUG
986e461dc072 Initial revision
glantau
parents:
diff changeset
621 printf("qscale=%d\n", s->qscale);
986e461dc072 Initial revision
glantau
parents:
diff changeset
622 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
623
986e461dc072 Initial revision
glantau
parents:
diff changeset
624 /* default quantization values */
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
625 if(s->codec_id== CODEC_ID_RV10){
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
626 if(s->mb_y==0) s->first_slice_line=1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
627 }else{
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
628 s->first_slice_line=1;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
629 s->resync_mb_x= s->mb_x;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
630 s->resync_mb_y= s->mb_y;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
631 }
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
632 if(s->h263_aic){
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
633 s->y_dc_scale_table=
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
634 s->c_dc_scale_table= ff_aic_dc_scale_table;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
635 }else{
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
636 s->y_dc_scale_table=
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
637 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
638 }
1644
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
639
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
640 if(s->modified_quant)
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
641 s->chroma_qscale_table= ff_h263_chroma_qscale_table;
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
642
1652
834922115010 cleanup
michael
parents: 1644
diff changeset
643 ff_set_qscale(s, s->qscale);
1644
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
644
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
645 s->rv10_first_dc_coded[0] = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
646 s->rv10_first_dc_coded[1] = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
647 s->rv10_first_dc_coded[2] = 0;
1748
8336c5e14765 rv20 mv prediction in b frames fix
michael
parents: 1739
diff changeset
648 //printf("%d %X %X\n", s->pict_type, s->current_picture.motion_val[0], s->current_picture.motion_val[1]);
450
michaelni
parents: 429
diff changeset
649 s->block_wrap[0]=
michaelni
parents: 429
diff changeset
650 s->block_wrap[1]=
michaelni
parents: 429
diff changeset
651 s->block_wrap[2]=
1938
e2501e6e7ff7 unify table indexing (motion_val,dc_val,ac_val,coded_block changed)
michael
parents: 1917
diff changeset
652 s->block_wrap[3]= s->b8_stride;
450
michaelni
parents: 429
diff changeset
653 s->block_wrap[4]=
1938
e2501e6e7ff7 unify table indexing (motion_val,dc_val,ac_val,coded_block changed)
michael
parents: 1917
diff changeset
654 s->block_wrap[5]= s->mb_stride;
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 713
diff changeset
655 ff_init_block_index(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
656 /* decode each macroblock */
1796
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
657
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
658 for(s->mb_num_left= mb_count; s->mb_num_left>0; s->mb_num_left--) {
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
659 int ret;
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 713
diff changeset
660 ff_update_block_index(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
661 #ifdef DEBUG
986e461dc072 Initial revision
glantau
parents:
diff changeset
662 printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
986e461dc072 Initial revision
glantau
parents:
diff changeset
663 #endif
1796
7186712b391e rv10/obmc fixes
michael
parents: 1754
diff changeset
664
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 771
diff changeset
665 s->dsp.clear_blocks(s->block[0]);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
666 s->mv_dir = MV_DIR_FORWARD;
986e461dc072 Initial revision
glantau
parents:
diff changeset
667 s->mv_type = MV_TYPE_16X16;
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
668 ret=ff_h263_decode_mb(s, s->block);
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
669
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
670 if (ret == SLICE_ERROR) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1389
diff changeset
671 av_log(s->avctx, AV_LOG_ERROR, "ERROR at MB %d %d\n", s->mb_x, s->mb_y);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
672 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
673 }
1748
8336c5e14765 rv20 mv prediction in b frames fix
michael
parents: 1739
diff changeset
674 if(s->pict_type != B_TYPE)
8336c5e14765 rv20 mv prediction in b frames fix
michael
parents: 1739
diff changeset
675 ff_h263_update_motion_val(s);
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 713
diff changeset
676 MPV_decode_mb(s, s->block);
1644
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
677 if(s->loop_filter)
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
678 ff_h263_loop_filter(s);
835cf346975e h263 loop filter
michael
parents: 1643
diff changeset
679
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
680 if (++s->mb_x == s->mb_width) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
681 s->mb_x = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
682 s->mb_y++;
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 713
diff changeset
683 ff_init_block_index(s);
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
684 }
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
685 if(s->mb_x == s->resync_mb_x)
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 713
diff changeset
686 s->first_slice_line=0;
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
687 if(ret == SLICE_END) break;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
688 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
689
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
690 return buf_size;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
691 }
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
692
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
693 static int rv10_decode_frame(AVCodecContext *avctx,
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
694 void *data, int *data_size,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1025
diff changeset
695 uint8_t *buf, int buf_size)
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
696 {
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
697 MpegEncContext *s = avctx->priv_data;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
698 int i;
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 903
diff changeset
699 AVFrame *pict = data;
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
700
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
701 #ifdef DEBUG
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
702 printf("*****frame %d size=%d\n", avctx->frame_number, buf_size);
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
703 #endif
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
704
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
705 /* no supplementary picture */
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
706 if (buf_size == 0) {
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
707 return 0;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
708 }
1748
8336c5e14765 rv20 mv prediction in b frames fix
michael
parents: 1739
diff changeset
709
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
710 if(avctx->slice_count){
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
711 for(i=0; i<avctx->slice_count; i++){
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
712 int offset= avctx->slice_offset[i];
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
713 int size;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
714
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
715 if(i+1 == avctx->slice_count)
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
716 size= buf_size - offset;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
717 else
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
718 size= avctx->slice_offset[i+1] - offset;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
719
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
720 if( rv10_decode_packet(avctx, buf+offset, size) < 0 )
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
721 return -1;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
722 }
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
723 }else{
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
724 if( rv10_decode_packet(avctx, buf, buf_size) < 0 )
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
725 return -1;
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
726 }
1701
95b7ac3344df rv20 / h263 b frame fix
michael
parents: 1700
diff changeset
727
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
728 if(s->mb_y>=s->mb_height){
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
729 MPV_frame_end(s);
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
730
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
731 if(s->pict_type==B_TYPE || s->low_delay){
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
732 *pict= *(AVFrame*)&s->current_picture;
1706
3ba5c493db6f motion vector vissualization improvements patch by (Wolfgang Hesseler <qv at multimediaware dot com>)
michael
parents: 1701
diff changeset
733 ff_print_debug_info(s, pict);
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
734 } else {
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
735 *pict= *(AVFrame*)&s->last_picture;
1706
3ba5c493db6f motion vector vissualization improvements patch by (Wolfgang Hesseler <qv at multimediaware dot com>)
michael
parents: 1701
diff changeset
736 ff_print_debug_info(s, pict);
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
737 }
2359
a3c029107a88 fixing rv20201002
michael
parents: 2358
diff changeset
738 if(s->last_picture_ptr || s->low_delay)
a3c029107a88 fixing rv20201002
michael
parents: 2358
diff changeset
739 *data_size = sizeof(AVFrame);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
740 }
713
e74a563eb643 rv10 cleanup (de)muxer still needs to be cleaned up (still searching volunteer for that ;) )
michaelni
parents: 712
diff changeset
741
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
742 return buf_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
743 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
744
986e461dc072 Initial revision
glantau
parents:
diff changeset
745 AVCodec rv10_decoder = {
986e461dc072 Initial revision
glantau
parents:
diff changeset
746 "rv10",
986e461dc072 Initial revision
glantau
parents:
diff changeset
747 CODEC_TYPE_VIDEO,
986e461dc072 Initial revision
glantau
parents:
diff changeset
748 CODEC_ID_RV10,
986e461dc072 Initial revision
glantau
parents:
diff changeset
749 sizeof(MpegEncContext),
986e461dc072 Initial revision
glantau
parents:
diff changeset
750 rv10_decode_init,
986e461dc072 Initial revision
glantau
parents:
diff changeset
751 NULL,
986e461dc072 Initial revision
glantau
parents:
diff changeset
752 rv10_decode_end,
986e461dc072 Initial revision
glantau
parents:
diff changeset
753 rv10_decode_frame,
559
michaelni
parents: 556
diff changeset
754 CODEC_CAP_DR1
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
755 };
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
756
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
757 AVCodec rv20_decoder = {
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
758 "rv20",
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
759 CODEC_TYPE_VIDEO,
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
760 CODEC_ID_RV20,
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
761 sizeof(MpegEncContext),
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
762 rv10_decode_init,
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
763 NULL,
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
764 rv10_decode_end,
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
765 rv10_decode_frame,
2453
f67b63ed036d avoid buf_size == 0 checks in every decoder
michael
parents: 2412
diff changeset
766 CODEC_CAP_DR1 | CODEC_CAP_DELAY,
2379
a9aae760463e seeking in rm
michael
parents: 2378
diff changeset
767 .flush= ff_mpeg_flush,
1639
3e2b774edce4 rv20 decoder
michael
parents: 1598
diff changeset
768 };
1655
c92147a61d97 rv20 (h263) b frame decoding support
michael
parents: 1652
diff changeset
769