annotate indeo3.c @ 4630:1416371d4a6c libavcodec

add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter also mark them as NOT part of the public API yet, so we can change their argument to CodecID if we decide to do so
author michael
date Wed, 07 Mar 2007 09:29:44 +0000
parents 16c24b902f43
children 66ef3690d108
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1 /*
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
2 * Intel Indeo 3 (IV31, IV32, etc.) video decoder for ffmpeg
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
3 * written, produced, and directed by Alan Smithee
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3776
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3776
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3776
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3776
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3776
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
15 * Lesser General Public License for more details.
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
16 *
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3776
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2979
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
20 */
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
21
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
22 #include <stdio.h>
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
23 #include <stdlib.h>
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
24 #include <string.h>
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
25 #include <unistd.h>
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
26
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
27 #include "common.h"
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
28 #include "avcodec.h"
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
29 #include "dsputil.h"
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
30 #include "mpegvideo.h"
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
31
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
32 #include "indeo3data.h"
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
33
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
34 typedef struct
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
35 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
36 unsigned char *Ybuf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
37 unsigned char *Ubuf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
38 unsigned char *Vbuf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
39 unsigned char *the_buf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
40 unsigned int the_buf_size;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
41 unsigned short y_w, y_h;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
42 unsigned short uv_w, uv_h;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
43 } YUVBufs;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
44
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
45 typedef struct Indeo3DecodeContext {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
46 AVCodecContext *avctx;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
47 int width, height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
48 AVFrame frame;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
49
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
50 YUVBufs iv_frame[2];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
51 YUVBufs *cur_frame;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
52 YUVBufs *ref_frame;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
53
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
54 unsigned char *ModPred;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
55 unsigned short *corrector_type;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
56 } Indeo3DecodeContext;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
57
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
58 static int corrector_type_0[24] = {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
59 195, 159, 133, 115, 101, 93, 87, 77,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
60 195, 159, 133, 115, 101, 93, 87, 77,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
61 128, 79, 79, 79, 79, 79, 79, 79
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
62 };
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
63
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
64 static int corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 };
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
65
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
66 static void build_modpred(Indeo3DecodeContext *s)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
67 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
68 int i, j;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
69
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
70 s->ModPred = (unsigned char *) av_malloc (8 * 128);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
71
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
72 for (i=0; i < 128; ++i) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
73 s->ModPred[i+0*128] = (i > 126) ? 254 : 2*((i + 1) - ((i + 1) % 2));
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
74 s->ModPred[i+1*128] = (i == 7) ? 20 : ((i == 119 || i == 120)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
75 ? 236 : 2*((i + 2) - ((i + 1) % 3)));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
76 s->ModPred[i+2*128] = (i > 125) ? 248 : 2*((i + 2) - ((i + 2) % 4));
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
77 s->ModPred[i+3*128] = 2*((i + 1) - ((i - 3) % 5));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
78 s->ModPred[i+4*128] = (i == 8) ? 20 : 2*((i + 1) - ((i - 3) % 6));
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
79 s->ModPred[i+5*128] = 2*((i + 4) - ((i + 3) % 7));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
80 s->ModPred[i+6*128] = (i > 123) ? 240 : 2*((i + 4) - ((i + 4) % 8));
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
81 s->ModPred[i+7*128] = 2*((i + 5) - ((i + 4) % 9));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
82 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
83
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
84 s->corrector_type = (unsigned short *) av_malloc (24 * 256 * sizeof(unsigned short));
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
85
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
86 for (i=0; i < 24; ++i) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
87 for (j=0; j < 256; ++j) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
88 s->corrector_type[i*256+j] = (j < corrector_type_0[i])
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
89 ? 1 : ((j < 248 || (i == 16 && j == 248))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
90 ? 0 : corrector_type_2[j - 248]);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
91 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
92 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
93 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
94
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
95 static void iv_Decode_Chunk(Indeo3DecodeContext *s, unsigned char *cur,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
96 unsigned char *ref, int width, int height, unsigned char *buf1,
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
97 long fflags2, unsigned char *hdr,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
98 unsigned char *buf2, int min_width_160);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
99
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
100 /* ---------------------------------------------------------------------- */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
101 static void iv_alloc_frames(Indeo3DecodeContext *s)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
102 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
103 int luma_width, luma_height, luma_pixels, chroma_width, chroma_height,
2288
3d4a1f8e6a27 * fixing a few of gcc 'clean-code' warnings
kabi
parents: 2244
diff changeset
104 chroma_pixels, i;
3d4a1f8e6a27 * fixing a few of gcc 'clean-code' warnings
kabi
parents: 2244
diff changeset
105 unsigned int bufsize;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
106
1481
0cfed95c7707 fixes levis.avi
michaelni
parents: 1454
diff changeset
107 luma_width = (s->width + 3) & (~3);
0cfed95c7707 fixes levis.avi
michaelni
parents: 1454
diff changeset
108 luma_height = (s->height + 3) & (~3);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
109
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
110 s->iv_frame[0].y_w = s->iv_frame[0].y_h =
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
111 s->iv_frame[0].the_buf_size = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
112 s->iv_frame[1].y_w = s->iv_frame[1].y_h =
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
113 s->iv_frame[1].the_buf_size = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
114 s->iv_frame[1].the_buf = NULL;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
115
1481
0cfed95c7707 fixes levis.avi
michaelni
parents: 1454
diff changeset
116 chroma_width = ((luma_width >> 2) + 3) & (~3);
0cfed95c7707 fixes levis.avi
michaelni
parents: 1454
diff changeset
117 chroma_height = ((luma_height>> 2) + 3) & (~3);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
118 luma_pixels = luma_width * luma_height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
119 chroma_pixels = chroma_width * chroma_height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
120
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
121 bufsize = luma_pixels * 2 + luma_width * 3 +
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
122 (chroma_pixels + chroma_width) * 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
123
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
124 if((s->iv_frame[0].the_buf =
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
125 (s->iv_frame[0].the_buf_size == 0 ? av_malloc(bufsize) :
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
126 av_realloc(s->iv_frame[0].the_buf, bufsize))) == NULL)
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
127 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
128 s->iv_frame[0].y_w = s->iv_frame[1].y_w = luma_width;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
129 s->iv_frame[0].y_h = s->iv_frame[1].y_h = luma_height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
130 s->iv_frame[0].uv_w = s->iv_frame[1].uv_w = chroma_width;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
131 s->iv_frame[0].uv_h = s->iv_frame[1].uv_h = chroma_height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
132 s->iv_frame[0].the_buf_size = bufsize;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
133
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
134 s->iv_frame[0].Ybuf = s->iv_frame[0].the_buf + luma_width;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
135 i = luma_pixels + luma_width * 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
136 s->iv_frame[1].Ybuf = s->iv_frame[0].the_buf + i;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
137 i += (luma_pixels + luma_width);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
138 s->iv_frame[0].Ubuf = s->iv_frame[0].the_buf + i;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
139 i += (chroma_pixels + chroma_width);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
140 s->iv_frame[1].Ubuf = s->iv_frame[0].the_buf + i;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
141 i += (chroma_pixels + chroma_width);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
142 s->iv_frame[0].Vbuf = s->iv_frame[0].the_buf + i;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
143 i += (chroma_pixels + chroma_width);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
144 s->iv_frame[1].Vbuf = s->iv_frame[0].the_buf + i;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
145
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
146 for(i = 1; i <= luma_width; i++)
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
147 s->iv_frame[0].Ybuf[-i] = s->iv_frame[1].Ybuf[-i] =
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
148 s->iv_frame[0].Ubuf[-i] = 0x80;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
149
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
150 for(i = 1; i <= chroma_width; i++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
151 s->iv_frame[1].Ubuf[-i] = 0x80;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
152 s->iv_frame[0].Vbuf[-i] = 0x80;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
153 s->iv_frame[1].Vbuf[-i] = 0x80;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
154 s->iv_frame[1].Vbuf[chroma_pixels+i-1] = 0x80;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
155 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
156 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
157
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
158 /* ---------------------------------------------------------------------- */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
159 static void iv_free_func(Indeo3DecodeContext *s)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
160 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
161 int i;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
162
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
163 for(i = 0 ; i < 2 ; i++) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
164 if(s->iv_frame[i].the_buf != NULL)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
165 av_free(s->iv_frame[i].the_buf);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
166 s->iv_frame[i].Ybuf = s->iv_frame[i].Ubuf =
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
167 s->iv_frame[i].Vbuf = NULL;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
168 s->iv_frame[i].the_buf = NULL;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
169 s->iv_frame[i].the_buf_size = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
170 s->iv_frame[i].y_w = s->iv_frame[i].y_h = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
171 s->iv_frame[i].uv_w = s->iv_frame[i].uv_h = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
172 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
173
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
174 av_free(s->ModPred);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
175 av_free(s->corrector_type);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
176 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
177
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
178 /* ---------------------------------------------------------------------- */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
179 static unsigned long iv_decode_frame(Indeo3DecodeContext *s,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
180 unsigned char *buf, int buf_size)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
181 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
182 unsigned int hdr_width, hdr_height,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
183 chroma_width, chroma_height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
184 unsigned long fflags1, fflags2, fflags3, offs1, offs2, offs3, offs;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
185 unsigned char *hdr_pos, *buf_pos;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
186
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
187 buf_pos = buf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
188 buf_pos += 18;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
189
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
190 fflags1 = le2me_16(*(uint16_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
191 buf_pos += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
192 fflags3 = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
193 buf_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
194 fflags2 = *buf_pos++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
195 buf_pos += 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
196 hdr_height = le2me_16(*(uint16_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
197 buf_pos += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
198 hdr_width = le2me_16(*(uint16_t *)buf_pos);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
199
2422
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2288
diff changeset
200 if(avcodec_check_dimensions(NULL, hdr_width, hdr_height))
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2288
diff changeset
201 return -1;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
202
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
203 buf_pos += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
204 chroma_height = ((hdr_height >> 2) + 3) & 0x7ffc;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
205 chroma_width = ((hdr_width >> 2) + 3) & 0x7ffc;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
206 offs1 = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
207 buf_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
208 offs2 = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
209 buf_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
210 offs3 = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
211 buf_pos += 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
212 hdr_pos = buf_pos;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
213 if(fflags3 == 0x80) return 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
214
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
215 if(fflags1 & 0x200) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
216 s->cur_frame = s->iv_frame + 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
217 s->ref_frame = s->iv_frame;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
218 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
219 s->cur_frame = s->iv_frame;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
220 s->ref_frame = s->iv_frame + 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
221 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
222
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
223 buf_pos = buf + 16 + offs1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
224 offs = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
225 buf_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
226
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
227 iv_Decode_Chunk(s, s->cur_frame->Ybuf, s->ref_frame->Ybuf, hdr_width,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
228 hdr_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
4591
16c24b902f43 use FFMIN
aurel
parents: 3947
diff changeset
229 FFMIN(hdr_width, 160));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
230
2244
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
231 if (!(s->avctx->flags & CODEC_FLAG_GRAY))
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
232 {
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
233
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
234 buf_pos = buf + 16 + offs2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
235 offs = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
236 buf_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
237
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
238 iv_Decode_Chunk(s, s->cur_frame->Vbuf, s->ref_frame->Vbuf, chroma_width,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
239 chroma_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
4591
16c24b902f43 use FFMIN
aurel
parents: 3947
diff changeset
240 FFMIN(chroma_width, 40));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
241
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
242 buf_pos = buf + 16 + offs3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
243 offs = le2me_32(*(uint32_t *)buf_pos);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
244 buf_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
245
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
246 iv_Decode_Chunk(s, s->cur_frame->Ubuf, s->ref_frame->Ubuf, chroma_width,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
247 chroma_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
4591
16c24b902f43 use FFMIN
aurel
parents: 3947
diff changeset
248 FFMIN(chroma_width, 40));
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
249
2244
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
250 }
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
251
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
252 return 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
253 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
254
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
255 typedef struct {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
256 long xpos;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
257 long ypos;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
258 long width;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
259 long height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
260 long split_flag;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
261 long split_direction;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
262 long usl7;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
263 } ustr_t;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
264
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
265 /* ---------------------------------------------------------------------- */
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
266
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
267 #define LV1_CHECK(buf1,rle_v3,lv1,lp2) \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
268 if((lv1 & 0x80) != 0) { \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
269 if(rle_v3 != 0) \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
270 rle_v3 = 0; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
271 else { \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
272 rle_v3 = 1; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
273 buf1 -= 2; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
274 } \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
275 } \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
276 lp2 = 4;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
277
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
278
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
279 #define RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3) \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
280 if(rle_v3 == 0) { \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
281 rle_v2 = *buf1; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
282 rle_v1 = 1; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
283 if(rle_v2 > 32) { \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
284 rle_v2 -= 32; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
285 rle_v1 = 0; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
286 } \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
287 rle_v3 = 1; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
288 } \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
289 buf1--;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
290
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
291
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
292 #define LP2_CHECK(buf1,rle_v3,lp2) \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
293 if(lp2 == 0 && rle_v3 != 0) \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
294 rle_v3 = 0; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
295 else { \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
296 buf1--; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
297 rle_v3 = 1; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
298 }
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
299
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
300
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
301 #define RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2) \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
302 rle_v2--; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
303 if(rle_v2 == 0) { \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
304 rle_v3 = 0; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
305 buf1 += 2; \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
306 } \
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
307 lp2 = 4;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
308
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
309 static void iv_Decode_Chunk(Indeo3DecodeContext *s,
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
310 unsigned char *cur, unsigned char *ref, int width, int height,
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
311 unsigned char *buf1, long fflags2, unsigned char *hdr,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
312 unsigned char *buf2, int min_width_160)
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
313 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
314 unsigned char bit_buf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
315 unsigned long bit_pos, lv, lv1, lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
316 long *width_tbl, width_tbl_arr[10];
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
317 signed char *ref_vectors;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
318 unsigned char *cur_frm_pos, *ref_frm_pos, *cp, *cp2;
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
319 uint32_t *cur_lp, *ref_lp;
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
320 const uint32_t *correction_lp[2], *correctionloworder_lp[2], *correctionhighorder_lp[2];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
321 unsigned short *correction_type_sp[2];
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
322 ustr_t strip_tbl[20], *strip;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
323 int i, j, k, lp1, lp2, flag1, cmd, blks_width, blks_height, region_160_width,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
324 rle_v1, rle_v2, rle_v3;
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
325 unsigned short res;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
326
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
327 bit_buf = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
328 ref_vectors = NULL;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
329
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
330 width_tbl = width_tbl_arr + 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
331 i = (width < 0 ? width + 3 : width)/4;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
332 for(j = -1; j < 8; j++)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
333 width_tbl[j] = i * j;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
334
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
335 strip = strip_tbl;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
336
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
337 for(region_160_width = 0; region_160_width < (width - min_width_160); region_160_width += min_width_160);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
338
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
339 strip->ypos = strip->xpos = 0;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
340 for(strip->width = min_width_160; width > strip->width; strip->width *= 2);
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
341 strip->height = height;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
342 strip->split_direction = 0;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
343 strip->split_flag = 0;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
344 strip->usl7 = 0;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
345
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
346 bit_pos = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
347
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
348 rle_v1 = rle_v2 = rle_v3 = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
349
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
350 while(strip >= strip_tbl) {
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
351 if(bit_pos <= 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
352 bit_pos = 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
353 bit_buf = *buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
354 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
355
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
356 bit_pos -= 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
357 cmd = (bit_buf >> bit_pos) & 0x03;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
358
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
359 if(cmd == 0) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
360 strip++;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
361 memcpy(strip, strip-1, sizeof(ustr_t));
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
362 strip->split_flag = 1;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
363 strip->split_direction = 0;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
364 strip->height = (strip->height > 8 ? ((strip->height+8)>>4)<<3 : 4);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
365 continue;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
366 } else if(cmd == 1) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
367 strip++;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
368 memcpy(strip, strip-1, sizeof(ustr_t));
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
369 strip->split_flag = 1;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
370 strip->split_direction = 1;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
371 strip->width = (strip->width > 8 ? ((strip->width+8)>>4)<<3 : 4);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
372 continue;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
373 } else if(cmd == 2) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
374 if(strip->usl7 == 0) {
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
375 strip->usl7 = 1;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
376 ref_vectors = NULL;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
377 continue;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
378 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
379 } else if(cmd == 3) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
380 if(strip->usl7 == 0) {
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
381 strip->usl7 = 1;
3776
1843a85123b7 fix some signedness warnings
mru
parents: 3036
diff changeset
382 ref_vectors = (signed char*)buf2 + (*buf1 * 2);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
383 buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
384 continue;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
385 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
386 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
387
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
388 cur_frm_pos = cur + width * strip->ypos + strip->xpos;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
389
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
390 if((blks_width = strip->width) < 0)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
391 blks_width += 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
392 blks_width >>= 2;
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
393 blks_height = strip->height;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
394
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
395 if(ref_vectors != NULL) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
396 ref_frm_pos = ref + (ref_vectors[0] + strip->ypos) * width +
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
397 ref_vectors[1] + strip->xpos;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
398 } else
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
399 ref_frm_pos = cur_frm_pos - width_tbl[4];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
400
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
401 if(cmd == 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
402 if(bit_pos <= 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
403 bit_pos = 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
404 bit_buf = *buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
405 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
406
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
407 bit_pos -= 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
408 cmd = (bit_buf >> bit_pos) & 0x03;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
409
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
410 if(cmd == 0 || ref_vectors != NULL) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
411 for(lp1 = 0; lp1 < blks_width; lp1++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
412 for(i = 0, j = 0; i < blks_height; i++, j += width_tbl[1])
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
413 ((uint32_t *)cur_frm_pos)[j] = ((uint32_t *)ref_frm_pos)[j];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
414 cur_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
415 ref_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
416 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
417 } else if(cmd != 1)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
418 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
419 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
420 k = *buf1 >> 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
421 j = *buf1 & 0x0f;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
422 buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
423 lv = j + fflags2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
424
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
425 if((lv - 8) <= 7 && (k == 0 || k == 3 || k == 10)) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
426 cp2 = s->ModPred + ((lv - 8) << 7);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
427 cp = ref_frm_pos;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
428 for(i = 0; i < blks_width << 2; i++) {
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
429 int v = *cp >> 1;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
430 *(cp++) = cp2[v];
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
431 }
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
432 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
433
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
434 if(k == 1 || k == 4) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
435 lv = (hdr[j] & 0xf) + fflags2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
436 correction_type_sp[0] = s->corrector_type + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
437 correction_lp[0] = correction + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
438 lv = (hdr[j] >> 4) + fflags2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
439 correction_lp[1] = correction + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
440 correction_type_sp[1] = s->corrector_type + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
441 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
442 correctionloworder_lp[0] = correctionloworder_lp[1] = correctionloworder + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
443 correctionhighorder_lp[0] = correctionhighorder_lp[1] = correctionhighorder + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
444 correction_type_sp[0] = correction_type_sp[1] = s->corrector_type + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
445 correction_lp[0] = correction_lp[1] = correction + (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
446 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
447
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
448 switch(k) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
449 case 1:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
450 case 0: /********** CASE 0 **********/
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
451 for( ; blks_height > 0; blks_height -= 4) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
452 for(lp1 = 0; lp1 < blks_width; lp1++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
453 for(lp2 = 0; lp2 < 4; ) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
454 k = *buf1++;
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
455 cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2];
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
456 ref_lp = ((uint32_t *)ref_frm_pos) + width_tbl[lp2];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
457
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
458 switch(correction_type_sp[0][k]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
459 case 0:
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
460 *cur_lp = le2me_32(((le2me_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
461 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
462 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
463 case 1:
2549
89ca1169b24c indeo3 for bigendian patch by (demo-n <demo-n users.sourceforge net)
michael
parents: 2528
diff changeset
464 res = ((le2me_16(((unsigned short *)(ref_lp))[0]) >> 1) + correction_lp[lp2 & 0x01][*buf1]) << 1;
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
465 ((unsigned short *)cur_lp)[0] = le2me_16(res);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
466 res = ((le2me_16(((unsigned short *)(ref_lp))[1]) >> 1) + correction_lp[lp2 & 0x01][k]) << 1;
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
467 ((unsigned short *)cur_lp)[1] = le2me_16(res);
2549
89ca1169b24c indeo3 for bigendian patch by (demo-n <demo-n users.sourceforge net)
michael
parents: 2528
diff changeset
468 buf1++;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
469 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
470 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
471 case 2:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
472 if(lp2 == 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
473 for(i = 0, j = 0; i < 2; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
474 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
475 lp2 += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
476 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
477 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
478 case 3:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
479 if(lp2 < 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
480 for(i = 0, j = 0; i < (3 - lp2); i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
481 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
482 lp2 = 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
483 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
484 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
485 case 8:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
486 if(lp2 == 0) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
487 RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
488
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
489 if(rle_v1 == 1 || ref_vectors != NULL) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
490 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
491 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
492 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
493
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
494 RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
495 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
496 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
497 rle_v1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
498 rle_v2 = *buf1 - 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
499 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
500 case 5:
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
501 LP2_CHECK(buf1,rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
502 case 4:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
503 for(i = 0, j = 0; i < (4 - lp2); i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
504 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
505 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
506 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
507
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
508 case 7:
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
509 if(rle_v3 != 0)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
510 rle_v3 = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
511 else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
512 buf1--;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
513 rle_v3 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
514 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
515 case 6:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
516 if(ref_vectors != NULL) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
517 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
518 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
519 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
520 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
521 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
522
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
523 case 9:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
524 lv1 = *buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
525 lv = (lv1 & 0x7F) << 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
526 lv += (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
527 lv += (lv << 16);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
528 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
529 cur_lp[j] = lv;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
530
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
531 LV1_CHECK(buf1,rle_v3,lv1,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
532 break;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
533 default:
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
534 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
535 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
536 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
537
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
538 cur_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
539 ref_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
540 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
541
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
542 cur_frm_pos += ((width - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
543 ref_frm_pos += ((width - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
544 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
545 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
546
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
547 case 4:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
548 case 3: /********** CASE 3 **********/
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
549 if(ref_vectors != NULL)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
550 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
551 flag1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
552
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
553 for( ; blks_height > 0; blks_height -= 8) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
554 for(lp1 = 0; lp1 < blks_width; lp1++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
555 for(lp2 = 0; lp2 < 4; ) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
556 k = *buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
557
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
558 cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2 * 2];
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
559 ref_lp = ((uint32_t *)cur_frm_pos) + width_tbl[(lp2 * 2) - 1];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
560
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
561 switch(correction_type_sp[lp2 & 0x01][k]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
562 case 0:
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
563 cur_lp[width_tbl[1]] = le2me_32(((le2me_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
564 if(lp2 > 0 || flag1 == 0 || strip->ypos != 0)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
565 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
566 else
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
567 cur_lp[0] = le2me_32(((le2me_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
568 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
569 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
570
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
571 case 1:
2549
89ca1169b24c indeo3 for bigendian patch by (demo-n <demo-n users.sourceforge net)
michael
parents: 2528
diff changeset
572 res = ((le2me_16(((unsigned short *)ref_lp)[0]) >> 1) + correction_lp[lp2 & 0x01][*buf1]) << 1;
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
573 ((unsigned short *)cur_lp)[width_tbl[2]] = le2me_16(res);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
574 res = ((le2me_16(((unsigned short *)ref_lp)[1]) >> 1) + correction_lp[lp2 & 0x01][k]) << 1;
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
575 ((unsigned short *)cur_lp)[width_tbl[2]+1] = le2me_16(res);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
576
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
577 if(lp2 > 0 || flag1 == 0 || strip->ypos != 0)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
578 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
579 else
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
580 cur_lp[0] = cur_lp[width_tbl[1]];
2549
89ca1169b24c indeo3 for bigendian patch by (demo-n <demo-n users.sourceforge net)
michael
parents: 2528
diff changeset
581 buf1++;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
582 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
583 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
584
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
585 case 2:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
586 if(lp2 == 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
587 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
588 cur_lp[j] = *ref_lp;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
589 lp2 += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
590 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
591 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
592
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
593 case 3:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
594 if(lp2 < 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
595 for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
596 cur_lp[j] = *ref_lp;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
597 lp2 = 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
598 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
599 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
600
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
601 case 6:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
602 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
603 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
604
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
605 case 7:
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
606 if(rle_v3 != 0)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
607 rle_v3 = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
608 else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
609 buf1--;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
610 rle_v3 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
611 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
612 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
613 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
614
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
615 case 8:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
616 if(lp2 == 0) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
617 RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
618
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
619 if(rle_v1 == 1) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
620 for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
621 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
622 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
623
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
624 RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
625 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
626 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
627 rle_v2 = (*buf1) - 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
628 rle_v1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
629 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
630 case 5:
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
631 LP2_CHECK(buf1,rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
632 case 4:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
633 for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
634 cur_lp[j] = *ref_lp;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
635 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
636 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
637
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
638 case 9:
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1481
diff changeset
639 av_log(s->avctx, AV_LOG_ERROR, "UNTESTED.\n");
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
640 lv1 = *buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
641 lv = (lv1 & 0x7F) << 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
642 lv += (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
643 lv += (lv << 16);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
644
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
645 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
646 cur_lp[j] = lv;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
647
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
648 LV1_CHECK(buf1,rle_v3,lv1,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
649 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
650
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
651 default:
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
652 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
653 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
654 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
655
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
656 cur_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
657 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
658
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
659 cur_frm_pos += (((width * 2) - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
660 flag1 = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
661 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
662 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
663
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
664 case 10: /********** CASE 10 **********/
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
665 if(ref_vectors == NULL) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
666 flag1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
667
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
668 for( ; blks_height > 0; blks_height -= 8) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
669 for(lp1 = 0; lp1 < blks_width; lp1 += 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
670 for(lp2 = 0; lp2 < 4; ) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
671 k = *buf1++;
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
672 cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2 * 2];
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
673 ref_lp = ((uint32_t *)cur_frm_pos) + width_tbl[(lp2 * 2) - 1];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
674 lv1 = ref_lp[0];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
675 lv2 = ref_lp[1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
676 if(lp2 == 0 && flag1 != 0) {
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
677 #ifdef WORDS_BIGENDIAN
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
678 lv1 = lv1 & 0xFF00FF00;
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
679 lv1 = (lv1 >> 8) | lv1;
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
680 lv2 = lv2 & 0xFF00FF00;
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
681 lv2 = (lv2 >> 8) | lv2;
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
682 #else
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
683 lv1 = lv1 & 0x00FF00FF;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
684 lv1 = (lv1 << 8) | lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
685 lv2 = lv2 & 0x00FF00FF;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
686 lv2 = (lv2 << 8) | lv2;
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
687 #endif
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
688 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
689
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
690 switch(correction_type_sp[lp2 & 0x01][k]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
691 case 0:
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
692 cur_lp[width_tbl[1]] = le2me_32(((le2me_32(lv1) >> 1) + correctionloworder_lp[lp2 & 0x01][k]) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
693 cur_lp[width_tbl[1]+1] = le2me_32(((le2me_32(lv2) >> 1) + correctionhighorder_lp[lp2 & 0x01][k]) << 1);
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
694 if(lp2 > 0 || strip->ypos != 0 || flag1 == 0) {
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
695 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
696 cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
697 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
698 cur_lp[0] = cur_lp[width_tbl[1]];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
699 cur_lp[1] = cur_lp[width_tbl[1]+1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
700 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
701 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
702 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
703
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
704 case 1:
2549
89ca1169b24c indeo3 for bigendian patch by (demo-n <demo-n users.sourceforge net)
michael
parents: 2528
diff changeset
705 cur_lp[width_tbl[1]] = le2me_32(((le2me_32(lv1) >> 1) + correctionloworder_lp[lp2 & 0x01][*buf1]) << 1);
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
706 cur_lp[width_tbl[1]+1] = le2me_32(((le2me_32(lv2) >> 1) + correctionloworder_lp[lp2 & 0x01][k]) << 1);
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
707 if(lp2 > 0 || strip->ypos != 0 || flag1 == 0) {
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
708 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
709 cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
710 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
711 cur_lp[0] = cur_lp[width_tbl[1]];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
712 cur_lp[1] = cur_lp[width_tbl[1]+1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
713 }
2549
89ca1169b24c indeo3 for bigendian patch by (demo-n <demo-n users.sourceforge net)
michael
parents: 2528
diff changeset
714 buf1++;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
715 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
716 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
717
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
718 case 2:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
719 if(lp2 == 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
720 if(flag1 != 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
721 for(i = 0, j = width_tbl[1]; i < 3; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
722 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
723 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
724 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
725 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
726 cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
727 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
728 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
729 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
730 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
731 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
732 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
733 lp2 += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
734 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
735 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
736
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
737 case 3:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
738 if(lp2 < 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
739 if(lp2 == 0 && flag1 != 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
740 for(i = 0, j = width_tbl[1]; i < 5; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
741 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
742 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
743 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
744 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
745 cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
746 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
747 for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
748 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
749 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
750 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
751 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
752 lp2 = 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
753 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
754 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
755
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
756 case 8:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
757 if(lp2 == 0) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
758 RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
759 if(rle_v1 == 1) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
760 if(flag1 != 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
761 for(i = 0, j = width_tbl[1]; i < 7; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
762 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
763 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
764 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
765 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
766 cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
767 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
768 for(i = 0, j = 0; i < 8; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
769 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
770 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
771 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
772 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
773 }
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
774 RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
775 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
776 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
777 rle_v1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
778 rle_v2 = (*buf1) - 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
779 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
780 case 5:
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
781 LP2_CHECK(buf1,rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
782 case 4:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
783 if(lp2 == 0 && flag1 != 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
784 for(i = 0, j = width_tbl[1]; i < 7; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
785 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
786 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
787 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
788 cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
789 cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
790 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
791 for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
792 cur_lp[j] = lv1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
793 cur_lp[j+1] = lv2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
794 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
795 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
796 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
797 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
798
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
799 case 6:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
800 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
801 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
802
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
803 case 7:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
804 if(lp2 == 0) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
805 if(rle_v3 != 0)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
806 rle_v3 = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
807 else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
808 buf1--;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
809 rle_v3 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
810 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
811 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
812 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
813 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
814
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
815 case 9:
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1481
diff changeset
816 av_log(s->avctx, AV_LOG_ERROR, "UNTESTED.\n");
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
817 lv1 = *buf1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
818 lv = (lv1 & 0x7F) << 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
819 lv += (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
820 lv += (lv << 16);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
821 for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
822 cur_lp[j] = lv;
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
823 LV1_CHECK(buf1,rle_v3,lv1,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
824 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
825
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
826 default:
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
827 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
828 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
829 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
830
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
831 cur_frm_pos += 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
832 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
833
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
834 cur_frm_pos += (((width * 2) - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
835 flag1 = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
836 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
837 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
838 for( ; blks_height > 0; blks_height -= 8) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
839 for(lp1 = 0; lp1 < blks_width; lp1 += 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
840 for(lp2 = 0; lp2 < 4; ) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
841 k = *buf1++;
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
842 cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2 * 2];
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
843 ref_lp = ((uint32_t *)ref_frm_pos) + width_tbl[lp2 * 2];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
844
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
845 switch(correction_type_sp[lp2 & 0x01][k]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
846 case 0:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
847 lv1 = correctionloworder_lp[lp2 & 0x01][k];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
848 lv2 = correctionhighorder_lp[lp2 & 0x01][k];
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
849 cur_lp[0] = le2me_32(((le2me_32(ref_lp[0]) >> 1) + lv1) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
850 cur_lp[1] = le2me_32(((le2me_32(ref_lp[1]) >> 1) + lv2) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
851 cur_lp[width_tbl[1]] = le2me_32(((le2me_32(ref_lp[width_tbl[1]]) >> 1) + lv1) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
852 cur_lp[width_tbl[1]+1] = le2me_32(((le2me_32(ref_lp[width_tbl[1]+1]) >> 1) + lv2) << 1);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
853 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
854 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
855
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
856 case 1:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
857 lv1 = correctionloworder_lp[lp2 & 0x01][*buf1++];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
858 lv2 = correctionloworder_lp[lp2 & 0x01][k];
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
859 cur_lp[0] = le2me_32(((le2me_32(ref_lp[0]) >> 1) + lv1) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
860 cur_lp[1] = le2me_32(((le2me_32(ref_lp[1]) >> 1) + lv2) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
861 cur_lp[width_tbl[1]] = le2me_32(((le2me_32(ref_lp[width_tbl[1]]) >> 1) + lv1) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
862 cur_lp[width_tbl[1]+1] = le2me_32(((le2me_32(ref_lp[width_tbl[1]+1]) >> 1) + lv2) << 1);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
863 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
864 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
865
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
866 case 2:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
867 if(lp2 == 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
868 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
869 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
870 cur_lp[j+1] = ref_lp[j+1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
871 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
872 lp2 += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
873 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
874 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
875
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
876 case 3:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
877 if(lp2 < 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
878 for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
879 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
880 cur_lp[j+1] = ref_lp[j+1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
881 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
882 lp2 = 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
883 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
884 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
885
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
886 case 8:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
887 if(lp2 == 0) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
888 RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
889 for(i = 0, j = 0; i < 8; i++, j += width_tbl[1]) {
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
890 ((uint32_t *)cur_frm_pos)[j] = ((uint32_t *)ref_frm_pos)[j];
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
891 ((uint32_t *)cur_frm_pos)[j+1] = ((uint32_t *)ref_frm_pos)[j+1];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
892 }
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
893 RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
894 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
895 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
896 rle_v1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
897 rle_v2 = (*buf1) - 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
898 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
899 case 5:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
900 case 7:
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
901 LP2_CHECK(buf1,rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
902 case 6:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
903 case 4:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
904 for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
905 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
906 cur_lp[j+1] = ref_lp[j+1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
907 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
908 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
909 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
910
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
911 case 9:
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1481
diff changeset
912 av_log(s->avctx, AV_LOG_ERROR, "UNTESTED.\n");
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
913 lv1 = *buf1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
914 lv = (lv1 & 0x7F) << 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
915 lv += (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
916 lv += (lv << 16);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
917 for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
918 ((uint32_t *)cur_frm_pos)[j] = ((uint32_t *)cur_frm_pos)[j+1] = lv;
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
919 LV1_CHECK(buf1,rle_v3,lv1,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
920 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
921
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
922 default:
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
923 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
924 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
925 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
926
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
927 cur_frm_pos += 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
928 ref_frm_pos += 8;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
929 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
930
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
931 cur_frm_pos += (((width * 2) - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
932 ref_frm_pos += (((width * 2) - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
933 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
934 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
935 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
936
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
937 case 11: /********** CASE 11 **********/
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
938 if(ref_vectors == NULL)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
939 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
940
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
941 for( ; blks_height > 0; blks_height -= 8) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
942 for(lp1 = 0; lp1 < blks_width; lp1++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
943 for(lp2 = 0; lp2 < 4; ) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
944 k = *buf1++;
1454
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
945 cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2 * 2];
8b6e5cca1d37 use const data - began to make code more portable
bellard
parents: 1282
diff changeset
946 ref_lp = ((uint32_t *)ref_frm_pos) + width_tbl[lp2 * 2];
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
947
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
948 switch(correction_type_sp[lp2 & 0x01][k]) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
949 case 0:
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
950 cur_lp[0] = le2me_32(((le2me_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
951 cur_lp[width_tbl[1]] = le2me_32(((le2me_32(ref_lp[width_tbl[1]]) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
952 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
953 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
954
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
955 case 1:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
956 lv1 = (unsigned short)(correction_lp[lp2 & 0x01][*buf1++]);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
957 lv2 = (unsigned short)(correction_lp[lp2 & 0x01][k]);
2528
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
958 res = (unsigned short)(((le2me_16(((unsigned short *)ref_lp)[0]) >> 1) + lv1) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
959 ((unsigned short *)cur_lp)[0] = le2me_16(res);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
960 res = (unsigned short)(((le2me_16(((unsigned short *)ref_lp)[1]) >> 1) + lv2) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
961 ((unsigned short *)cur_lp)[1] = le2me_16(res);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
962 res = (unsigned short)(((le2me_16(((unsigned short *)ref_lp)[width_tbl[2]]) >> 1) + lv1) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
963 ((unsigned short *)cur_lp)[width_tbl[2]] = le2me_16(res);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
964 res = (unsigned short)(((le2me_16(((unsigned short *)ref_lp)[width_tbl[2]+1]) >> 1) + lv2) << 1);
5b738c5093ce indeo3 for bigendian patch by (elf at frogger dot rules dot pl Sebastian Jedruszkiewicz)
michael
parents: 2453
diff changeset
965 ((unsigned short *)cur_lp)[width_tbl[2]+1] = le2me_16(res);
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
966 lp2++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
967 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
968
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
969 case 2:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
970 if(lp2 == 0) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
971 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
972 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
973 lp2 += 2;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
974 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
975 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
976
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
977 case 3:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
978 if(lp2 < 2) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
979 for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
980 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
981 lp2 = 3;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
982 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
983 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
984
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
985 case 8:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
986 if(lp2 == 0) {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
987 RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
988
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
989 for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
990 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
991
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
992 RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
993 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
994 } else {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
995 rle_v1 = 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
996 rle_v2 = (*buf1) - 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
997 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
998 case 5:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
999 case 7:
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1000 LP2_CHECK(buf1,rle_v3,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1001 case 4:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1002 case 6:
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1003 for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1004 cur_lp[j] = ref_lp[j];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1005 lp2 = 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1006 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1007
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1008 case 9:
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1481
diff changeset
1009 av_log(s->avctx, AV_LOG_ERROR, "UNTESTED.\n");
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1010 lv1 = *buf1++;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1011 lv = (lv1 & 0x7F) << 1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1012 lv += (lv << 8);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1013 lv += (lv << 16);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1014 for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1015 cur_lp[j] = lv;
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1016 LV1_CHECK(buf1,rle_v3,lv1,lp2)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1017 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1018
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
1019 default:
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1020 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1021 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1022 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1023
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1024 cur_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1025 ref_frm_pos += 4;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1026 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1027
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1028 cur_frm_pos += (((width * 2) - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1029 ref_frm_pos += (((width * 2) - blks_width) * 4);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1030 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1031 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1032
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
1033 default:
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1034 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1035 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1036 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1037
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2549
diff changeset
1038 if(strip < strip_tbl)
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1039 return;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1040
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1041 for( ; strip >= strip_tbl; strip--) {
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1042 if(strip->split_flag != 0) {
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1043 strip->split_flag = 0;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1044 strip->usl7 = (strip-1)->usl7;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1045
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1046 if(strip->split_direction) {
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1047 strip->xpos += strip->width;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1048 strip->width = (strip-1)->width - strip->width;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1049 if(region_160_width <= strip->xpos && width < strip->width + strip->xpos)
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1050 strip->width = width - strip->xpos;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1051 } else {
1198
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1052 strip->ypos += strip->height;
cae31b22b14e code redundancy reduction, courtesy of suxen_drol -at- hotmail.com
tmmm
parents: 1190
diff changeset
1053 strip->height = (strip-1)->height - strip->height;
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1054 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1055 break;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1056 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1057 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1058 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1059 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1060
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1061 static int indeo3_decode_init(AVCodecContext *avctx)
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1062 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1063 Indeo3DecodeContext *s = avctx->priv_data;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1064
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1065 s->avctx = avctx;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1066 s->width = avctx->width;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1067 s->height = avctx->height;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1068 avctx->pix_fmt = PIX_FMT_YUV410P;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1069 avctx->has_b_frames = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1070
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1071 build_modpred(s);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1072 iv_alloc_frames(s);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1073
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1074 return 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1075 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1076
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1077 static int indeo3_decode_frame(AVCodecContext *avctx,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1078 void *data, int *data_size,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1079 unsigned char *buf, int buf_size)
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1080 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1081 Indeo3DecodeContext *s=avctx->priv_data;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1082 unsigned char *src, *dest;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1083 int y;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1084
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1085 iv_decode_frame(s, buf, buf_size);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1086
1228
d63e0185a90f release buffer cleanup
michaelni
parents: 1198
diff changeset
1087 if(s->frame.data[0])
d63e0185a90f release buffer cleanup
michaelni
parents: 1198
diff changeset
1088 avctx->release_buffer(avctx, &s->frame);
d63e0185a90f release buffer cleanup
michaelni
parents: 1198
diff changeset
1089
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1090 s->frame.reference = 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1091 if(avctx->get_buffer(avctx, &s->frame) < 0) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1481
diff changeset
1092 av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1093 return -1;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1094 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1095
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1096 src = s->cur_frame->Ybuf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1097 dest = s->frame.data[0];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1098 for (y = 0; y < s->height; y++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1099 memcpy(dest, src, s->cur_frame->y_w);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1100 src += s->cur_frame->y_w;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1101 dest += s->frame.linesize[0];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1102 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1103
2244
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
1104 if (!(s->avctx->flags & CODEC_FLAG_GRAY))
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
1105 {
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1106 src = s->cur_frame->Ubuf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1107 dest = s->frame.data[1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1108 for (y = 0; y < s->height / 4; y++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1109 memcpy(dest, src, s->cur_frame->uv_w);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1110 src += s->cur_frame->uv_w;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1111 dest += s->frame.linesize[1];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1112 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1113
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1114 src = s->cur_frame->Vbuf;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1115 dest = s->frame.data[2];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1116 for (y = 0; y < s->height / 4; y++) {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1117 memcpy(dest, src, s->cur_frame->uv_w);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1118 src += s->cur_frame->uv_w;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1119 dest += s->frame.linesize[2];
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1120 }
2244
4a0cfd63f078 greyscale decoding (option to skip u,v planes) support
alex
parents: 2028
diff changeset
1121 }
1190
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1122
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1123 *data_size=sizeof(AVFrame);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1124 *(AVFrame*)data= s->frame;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1125
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1126 return buf_size;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1127 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1128
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1129 static int indeo3_decode_end(AVCodecContext *avctx)
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1130 {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1131 Indeo3DecodeContext *s = avctx->priv_data;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1132
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1133 iv_free_func(s);
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1134
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1135 return 0;
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1136 }
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1137
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1138 AVCodec indeo3_decoder = {
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1139 "indeo3",
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1140 CODEC_TYPE_VIDEO,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1141 CODEC_ID_INDEO3,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1142 sizeof(Indeo3DecodeContext),
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1143 indeo3_decode_init,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1144 NULL,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1145 indeo3_decode_end,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1146 indeo3_decode_frame,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1147 0,
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1148 NULL
60bd91a6e218 native Indeo3 decoder implementation
tmmm
parents:
diff changeset
1149 };