annotate truemotion1.c @ 3990:746a60ba3177 libavcodec

enable CMOV_IS_FAST as its faster or equal speed on every cpu (duron, athlon, PM, P3) from which ive seen benchmarks, it might be slower on P4 but noone has posted benchmarks ...
author michael
date Wed, 11 Oct 2006 12:23:40 +0000
parents c8c591fe26f8
children 05e932ddaaa9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
1 /*
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
2 * Duck TrueMotion 1.0 Decoder
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
3 * Copyright (C) 2003 Alex Beregszaszi & Mike Melanson
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
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: 3036
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
15 * Lesser General Public License for more details.
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
16 *
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
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: 3036
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
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
20 */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
21
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
22 /**
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
23 * @file truemotion1.c
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
24 * Duck TrueMotion v1 Video Decoder by
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
25 * Alex Beregszaszi (alex@fsn.hu) and
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
26 * Mike Melanson (melanson@pcisys.net)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
27 *
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
28 * The TrueMotion v1 decoder presently only decodes 16-bit TM1 data and
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
29 * outputs RGB555 (or RGB565) data. 24-bit TM1 data is not supported yet.
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
30 */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
31
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
32 #include <stdio.h>
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
33 #include <stdlib.h>
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
34 #include <string.h>
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
35 #include <unistd.h>
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
36
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
37 #include "common.h"
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
38 #include "avcodec.h"
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
39 #include "dsputil.h"
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
40
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
41 #include "truemotion1data.h"
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
42
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
43 typedef struct TrueMotion1Context {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
44 AVCodecContext *avctx;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
45 AVFrame frame;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
46 AVFrame prev_frame;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
47
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
48 uint8_t *buf;
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
49 int size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
50
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
51 uint8_t *mb_change_bits;
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
52 int mb_change_bits_row_size;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
53 uint8_t *index_stream;
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
54 int index_stream_size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
55
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
56 int flags;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
57 int x, y, w, h;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
58
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
59 uint32_t y_predictor_table[1024];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
60 uint32_t c_predictor_table[1024];
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
61 uint32_t fat_y_predictor_table[1024];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
62 uint32_t fat_c_predictor_table[1024];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
63
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
64 int compression;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
65 int block_type;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
66 int block_width;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
67 int block_height;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
68
2073
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
69 int16_t ydt[8];
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
70 int16_t cdt[8];
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
71 int16_t fat_ydt[8];
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
72 int16_t fat_cdt[8];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
73
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
74 int last_deltaset, last_vectable;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
75
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
76 unsigned int *vert_pred;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
77
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
78 } TrueMotion1Context;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
79
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
80 #define FLAG_SPRITE 32
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
81 #define FLAG_KEYFRAME 16
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
82 #define FLAG_INTERFRAME 8
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
83 #define FLAG_INTERPOLATED 4
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
84
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
85 struct frame_header {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
86 uint8_t header_size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
87 uint8_t compression;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
88 uint8_t deltaset;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
89 uint8_t vectable;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
90 uint16_t ysize;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
91 uint16_t xsize;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
92 uint16_t checksum;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
93 uint8_t version;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
94 uint8_t header_type;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
95 uint8_t flags;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
96 uint8_t control;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
97 uint16_t xoffset;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
98 uint16_t yoffset;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
99 uint16_t width;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
100 uint16_t height;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
101 };
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
102
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
103 #define ALGO_NOP 0
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
104 #define ALGO_RGB16V 1
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
105 #define ALGO_RGB16H 2
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
106 #define ALGO_RGB24H 3
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
107
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
108 /* these are the various block sizes that can occupy a 4x4 block */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
109 #define BLOCK_2x2 0
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
110 #define BLOCK_2x4 1
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
111 #define BLOCK_4x2 2
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
112 #define BLOCK_4x4 3
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
113
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
114 typedef struct comp_types {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
115 int algorithm;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
116 int block_width; // vres
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
117 int block_height; // hres
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
118 int block_type;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
119 } comp_types;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
120
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
121 /* { valid for metatype }, algorithm, num of deltas, vert res, horiz res */
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
122 static comp_types compression_types[17] = {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
123 { ALGO_NOP, 0, 0, 0 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
124
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
125 { ALGO_RGB16V, 4, 4, BLOCK_4x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
126 { ALGO_RGB16H, 4, 4, BLOCK_4x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
127 { ALGO_RGB16V, 4, 2, BLOCK_4x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
128 { ALGO_RGB16H, 4, 2, BLOCK_4x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
129
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
130 { ALGO_RGB16V, 2, 4, BLOCK_2x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
131 { ALGO_RGB16H, 2, 4, BLOCK_2x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
132 { ALGO_RGB16V, 2, 2, BLOCK_2x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
133 { ALGO_RGB16H, 2, 2, BLOCK_2x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
134
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
135 { ALGO_NOP, 4, 4, BLOCK_4x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
136 { ALGO_RGB24H, 4, 4, BLOCK_4x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
137 { ALGO_NOP, 4, 2, BLOCK_4x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
138 { ALGO_RGB24H, 4, 2, BLOCK_4x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
139
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
140 { ALGO_NOP, 2, 4, BLOCK_2x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
141 { ALGO_RGB24H, 2, 4, BLOCK_2x4 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
142 { ALGO_NOP, 2, 2, BLOCK_2x2 },
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
143 { ALGO_RGB24H, 2, 2, BLOCK_2x2 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
144 };
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
145
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
146 static void select_delta_tables(TrueMotion1Context *s, int delta_table_index)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
147 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
148 int i;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
149
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
150 if (delta_table_index > 3)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
151 return;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
152
2073
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
153 memcpy(s->ydt, ydts[delta_table_index], 8 * sizeof(int16_t));
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
154 memcpy(s->cdt, cdts[delta_table_index], 8 * sizeof(int16_t));
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
155 memcpy(s->fat_ydt, fat_ydts[delta_table_index], 8 * sizeof(int16_t));
95d303a305d2 fix initialization bug in which execution overwrites essential data
melanson
parents: 2028
diff changeset
156 memcpy(s->fat_cdt, fat_cdts[delta_table_index], 8 * sizeof(int16_t));
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
157
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
158 /* Y skinny deltas need to be halved for some reason; maybe the
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
159 * skinny Y deltas should be modified */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
160 for (i = 0; i < 8; i++)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
161 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
162 /* drop the lsb before dividing by 2-- net effect: round down
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
163 * when dividing a negative number (e.g., -3/2 = -2, not -1) */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
164 s->ydt[i] &= 0xFFFE;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
165 s->ydt[i] /= 2;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
166 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
167 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
168
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
169 #ifdef WORDS_BIGENDIAN
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
170 static int make_ydt15_entry(int p2, int p1, int16_t *ydt)
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
171 #else
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
172 static int make_ydt15_entry(int p1, int p2, int16_t *ydt)
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
173 #endif
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
174 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
175 int lo, hi;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
176
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
177 lo = ydt[p1];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
178 lo += (lo << 5) + (lo << 10);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
179 hi = ydt[p2];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
180 hi += (hi << 5) + (hi << 10);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
181 return ((lo + (hi << 16)) << 1);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
182 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
183
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
184 #ifdef WORDS_BIGENDIAN
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
185 static int make_cdt15_entry(int p2, int p1, int16_t *cdt)
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
186 #else
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
187 static int make_cdt15_entry(int p1, int p2, int16_t *cdt)
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
188 #endif
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
189 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
190 int r, b, lo;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
191
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
192 b = cdt[p2];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
193 r = cdt[p1] << 10;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
194 lo = b + r;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
195 return ((lo + (lo << 16)) << 1);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
196 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
197
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
198 #ifdef WORDS_BIGENDIAN
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
199 static int make_ydt16_entry(int p2, int p1, int16_t *ydt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
200 #else
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
201 static int make_ydt16_entry(int p1, int p2, int16_t *ydt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
202 #endif
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
203 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
204 int lo, hi;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
205
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
206 lo = ydt[p1];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
207 lo += (lo << 6) + (lo << 11);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
208 hi = ydt[p2];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
209 hi += (hi << 6) + (hi << 11);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
210 return ((lo + (hi << 16)) << 1);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
211 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
212
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
213 #ifdef WORDS_BIGENDIAN
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
214 static int make_cdt16_entry(int p2, int p1, int16_t *cdt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
215 #else
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
216 static int make_cdt16_entry(int p1, int p2, int16_t *cdt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
217 #endif
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
218 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
219 int r, b, lo;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
220
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
221 b = cdt[p2];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
222 r = cdt[p1] << 11;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
223 lo = b + r;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
224 return ((lo + (lo << 16)) << 1);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
225 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
226
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
227 #ifdef WORDS_BIGENDIAN
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
228 static int make_ydt24_entry(int p2, int p1, int16_t *ydt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
229 #else
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
230 static int make_ydt24_entry(int p1, int p2, int16_t *ydt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
231 #endif
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
232 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
233 int lo, hi;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
234
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
235 lo = ydt[p1];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
236 hi = ydt[p2];
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
237 return ((lo + (hi << 8) + (hi << 16)) << 1);
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
238 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
239
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
240 #ifdef WORDS_BIGENDIAN
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
241 static int make_cdt24_entry(int p2, int p1, int16_t *cdt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
242 #else
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
243 static int make_cdt24_entry(int p1, int p2, int16_t *cdt)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
244 #endif
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
245 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
246 int r, b;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
247
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
248 b = cdt[p2];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
249 r = cdt[p1]<<16;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
250 return ((b+r) << 1);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
251 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
252
2753
ba8ecddf5598 adding a few const
michael
parents: 2453
diff changeset
253 static void gen_vector_table15(TrueMotion1Context *s, const uint8_t *sel_vector_table)
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
254 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
255 int len, i, j;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
256 unsigned char delta_pair;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
257
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
258 for (i = 0; i < 1024; i += 4)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
259 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
260 len = *sel_vector_table++ / 2;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
261 for (j = 0; j < len; j++)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
262 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
263 delta_pair = *sel_vector_table++;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
264 s->y_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
265 make_ydt15_entry(delta_pair >> 4, delta_pair & 0xf, s->ydt);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
266 s->c_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
267 make_cdt15_entry(delta_pair >> 4, delta_pair & 0xf, s->cdt);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
268 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
269 s->y_predictor_table[i+(j-1)] |= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
270 s->c_predictor_table[i+(j-1)] |= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
271 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
272 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
273
2753
ba8ecddf5598 adding a few const
michael
parents: 2453
diff changeset
274 static void gen_vector_table16(TrueMotion1Context *s, const uint8_t *sel_vector_table)
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
275 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
276 int len, i, j;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
277 unsigned char delta_pair;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
278
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
279 for (i = 0; i < 1024; i += 4)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
280 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
281 len = *sel_vector_table++ / 2;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
282 for (j = 0; j < len; j++)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
283 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
284 delta_pair = *sel_vector_table++;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
285 s->y_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
286 make_ydt16_entry(delta_pair >> 4, delta_pair & 0xf, s->ydt);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
287 s->c_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
288 make_cdt16_entry(delta_pair >> 4, delta_pair & 0xf, s->cdt);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
289 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
290 s->y_predictor_table[i+(j-1)] |= 1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
291 s->c_predictor_table[i+(j-1)] |= 1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
292 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
293 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
294
2753
ba8ecddf5598 adding a few const
michael
parents: 2453
diff changeset
295 static void gen_vector_table24(TrueMotion1Context *s, const uint8_t *sel_vector_table)
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
296 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
297 int len, i, j;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
298 unsigned char delta_pair;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
299
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
300 for (i = 0; i < 1024; i += 4)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
301 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
302 len = *sel_vector_table++ / 2;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
303 for (j = 0; j < len; j++)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
304 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
305 delta_pair = *sel_vector_table++;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
306 s->y_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
307 make_ydt24_entry(delta_pair >> 4, delta_pair & 0xf, s->ydt);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
308 s->c_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
309 make_cdt24_entry(delta_pair >> 4, delta_pair & 0xf, s->cdt);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
310 s->fat_y_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
311 make_ydt24_entry(delta_pair >> 4, delta_pair & 0xf, s->fat_ydt);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
312 s->fat_c_predictor_table[i+j] = 0xfffffffe &
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
313 make_cdt24_entry(delta_pair >> 4, delta_pair & 0xf, s->fat_cdt);
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
314 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
315 s->y_predictor_table[i+(j-1)] |= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
316 s->c_predictor_table[i+(j-1)] |= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
317 s->fat_y_predictor_table[i+(j-1)] |= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
318 s->fat_c_predictor_table[i+(j-1)] |= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
319 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
320 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
321
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
322 /* Returns the number of bytes consumed from the bytestream. Returns -1 if
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
323 * there was an error while decoding the header */
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
324 static int truemotion1_decode_header(TrueMotion1Context *s)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
325 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
326 int i;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
327 struct frame_header header;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
328 uint8_t header_buffer[128]; /* logical maximum size of the header */
2753
ba8ecddf5598 adding a few const
michael
parents: 2453
diff changeset
329 const uint8_t *sel_vector_table;
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
330
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
331 /* There is 1 change bit per 4 pixels, so each change byte represents
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
332 * 32 pixels; divide width by 4 to obtain the number of change bits and
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
333 * then round up to the nearest byte. */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
334 s->mb_change_bits_row_size = ((s->avctx->width >> 2) + 7) >> 3;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
335
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
336 header.header_size = ((s->buf[0] >> 5) | (s->buf[0] << 3)) & 0x7f;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
337 if (s->buf[0] < 0x10)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
338 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
339 av_log(s->avctx, AV_LOG_ERROR, "invalid header size (%d)\n", s->buf[0]);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
340 return -1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
341 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
342
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
343 /* unscramble the header bytes with a XOR operation */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
344 memset(header_buffer, 0, 128);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
345 for (i = 1; i < header.header_size; i++)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
346 header_buffer[i - 1] = s->buf[i] ^ s->buf[i + 1];
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
347
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
348 header.compression = header_buffer[0];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
349 header.deltaset = header_buffer[1];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
350 header.vectable = header_buffer[2];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
351 header.ysize = LE_16(&header_buffer[3]);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
352 header.xsize = LE_16(&header_buffer[5]);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
353 header.checksum = LE_16(&header_buffer[7]);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
354 header.version = header_buffer[9];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
355 header.header_type = header_buffer[10];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
356 header.flags = header_buffer[11];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
357 header.control = header_buffer[12];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
358
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
359 /* Version 2 */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
360 if (header.version >= 2)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
361 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
362 if (header.header_type > 3)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
363 {
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
364 av_log(s->avctx, AV_LOG_ERROR, "invalid header type (%d)\n", header.header_type);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
365 return -1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
366 } else if ((header.header_type == 2) || (header.header_type == 3)) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
367 s->flags = header.flags;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
368 if (!(s->flags & FLAG_INTERFRAME))
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
369 s->flags |= FLAG_KEYFRAME;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
370 } else
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
371 s->flags = FLAG_KEYFRAME;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
372 } else /* Version 1 */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
373 s->flags = FLAG_KEYFRAME;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
374
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
375 if (s->flags & FLAG_SPRITE) {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
376 av_log(s->avctx, AV_LOG_INFO, "SPRITE frame found, please report the sample to the developers\n");
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
377 s->w = header.width;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
378 s->h = header.height;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
379 s->x = header.xoffset;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
380 s->y = header.yoffset;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
381 } else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
382 s->w = header.xsize;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
383 s->h = header.ysize;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
384 if (header.header_type < 2) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
385 if ((s->w < 213) && (s->h >= 176))
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
386 {
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
387 s->flags |= FLAG_INTERPOLATED;
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
388 av_log(s->avctx, AV_LOG_INFO, "INTERPOLATION selected, please report the sample to the developers\n");
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
389 }
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
390 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
391 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
392
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
393 if (header.compression > 17) {
1927
d7505fbe66cb conversion to av_log
alex
parents: 1881
diff changeset
394 av_log(s->avctx, AV_LOG_ERROR, "invalid compression type (%d)\n", header.compression);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
395 return -1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
396 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
397
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
398 if ((header.deltaset != s->last_deltaset) ||
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
399 (header.vectable != s->last_vectable))
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
400 select_delta_tables(s, header.deltaset);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
401
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
402 if ((header.compression & 1) && header.header_type)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
403 sel_vector_table = pc_tbl2;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
404 else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
405 if (header.vectable < 4)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
406 sel_vector_table = tables[header.vectable - 1];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
407 else {
1927
d7505fbe66cb conversion to av_log
alex
parents: 1881
diff changeset
408 av_log(s->avctx, AV_LOG_ERROR, "invalid vector table id (%d)\n", header.vectable);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
409 return -1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
410 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
411 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
412
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
413 // FIXME: where to place this ?!?!
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
414 if (compression_types[header.compression].algorithm == ALGO_RGB24H)
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
415 s->avctx->pix_fmt = PIX_FMT_RGBA32;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
416 else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
417 s->avctx->pix_fmt = PIX_FMT_RGB555; // RGB565 is supported aswell
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
418
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
419 if ((header.deltaset != s->last_deltaset) || (header.vectable != s->last_vectable))
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
420 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
421 if (compression_types[header.compression].algorithm == ALGO_RGB24H)
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
422 gen_vector_table24(s, sel_vector_table);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
423 else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
424 if (s->avctx->pix_fmt == PIX_FMT_RGB555)
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
425 gen_vector_table15(s, sel_vector_table);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
426 else
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
427 gen_vector_table16(s, sel_vector_table);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
428 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
429
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
430 /* set up pointers to the other key data chunks */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
431 s->mb_change_bits = s->buf + header.header_size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
432 if (s->flags & FLAG_KEYFRAME) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
433 /* no change bits specified for a keyframe; only index bytes */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
434 s->index_stream = s->mb_change_bits;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
435 } else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
436 /* one change bit per 4x4 block */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
437 s->index_stream = s->mb_change_bits +
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
438 (s->mb_change_bits_row_size * (s->avctx->height >> 2));
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
439 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
440 s->index_stream_size = s->size - (s->index_stream - s->buf);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
441
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
442 s->last_deltaset = header.deltaset;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
443 s->last_vectable = header.vectable;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
444 s->compression = header.compression;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
445 s->block_width = compression_types[header.compression].block_width;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
446 s->block_height = compression_types[header.compression].block_height;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
447 s->block_type = compression_types[header.compression].block_type;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
448
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
449 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
450 av_log(s->avctx, AV_LOG_INFO, "tables: %d / %d c:%d %dx%d t:%d %s%s%s%s\n",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
451 s->last_deltaset, s->last_vectable, s->compression, s->block_width,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
452 s->block_height, s->block_type,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
453 s->flags & FLAG_KEYFRAME ? " KEY" : "",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
454 s->flags & FLAG_INTERFRAME ? " INTER" : "",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
455 s->flags & FLAG_SPRITE ? " SPRITE" : "",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
456 s->flags & FLAG_INTERPOLATED ? " INTERPOL" : "");
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
457
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
458 return header.header_size;
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
459 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
460
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
461 static int truemotion1_decode_init(AVCodecContext *avctx)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
462 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
463 TrueMotion1Context *s = (TrueMotion1Context *)avctx->priv_data;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
464
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
465 s->avctx = avctx;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
466
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
467 // FIXME: it may change ?
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
468 // if (avctx->bits_per_sample == 24)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
469 // avctx->pix_fmt = PIX_FMT_RGB24;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
470 // else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
471 // avctx->pix_fmt = PIX_FMT_RGB555;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
472
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
473 avctx->has_b_frames = 0;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
474 s->frame.data[0] = s->prev_frame.data[0] = NULL;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
475
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
476 /* there is a vertical predictor for each pixel in a line; each vertical
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
477 * predictor is 0 to start with */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
478 s->vert_pred =
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
479 (unsigned int *)av_malloc(s->avctx->width * sizeof(unsigned int));
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
480
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
481 return 0;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
482 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
483
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
484 /*
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
485 Block decoding order:
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
486
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
487 dxi: Y-Y
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
488 dxic: Y-C-Y
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
489 dxic2: Y-C-Y-C
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
490
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
491 hres,vres,i,i%vres (0 < i < 4)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
492 2x2 0: 0 dxic2
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
493 2x2 1: 1 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
494 2x2 2: 0 dxic2
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
495 2x2 3: 1 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
496 2x4 0: 0 dxic2
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
497 2x4 1: 1 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
498 2x4 2: 2 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
499 2x4 3: 3 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
500 4x2 0: 0 dxic
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
501 4x2 1: 1 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
502 4x2 2: 0 dxic
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
503 4x2 3: 1 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
504 4x4 0: 0 dxic
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
505 4x4 1: 1 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
506 4x4 2: 2 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
507 4x4 3: 3 dxi
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
508 */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
509
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
510 #define GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
511 {\
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
512 if (index_stream_index >= s->index_stream_size) { \
1927
d7505fbe66cb conversion to av_log
alex
parents: 1881
diff changeset
513 av_log(s->avctx, AV_LOG_INFO, " help! truemotion1 decoder went out of bounds\n"); \
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
514 return; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
515 } \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
516 index = s->index_stream[index_stream_index++] * 4; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
517 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
518
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
519 #define APPLY_C_PREDICTOR() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
520 predictor_pair = s->c_predictor_table[index]; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
521 horiz_pred += (predictor_pair >> 1); \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
522 if (predictor_pair & 1) { \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
523 GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
524 if (!index) { \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
525 GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
526 predictor_pair = s->c_predictor_table[index]; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
527 horiz_pred += ((predictor_pair >> 1) * 5); \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
528 if (predictor_pair & 1) \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
529 GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
530 else \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
531 index++; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
532 } \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
533 } else \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
534 index++;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
535
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
536 #define APPLY_C_PREDICTOR_24() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
537 predictor_pair = s->c_predictor_table[index]; \
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
538 horiz_pred += (predictor_pair >> 1); \
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
539 if (predictor_pair & 1) { \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
540 GET_NEXT_INDEX() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
541 if (!index) { \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
542 GET_NEXT_INDEX() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
543 predictor_pair = s->fat_c_predictor_table[index]; \
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
544 horiz_pred += (predictor_pair >> 1); \
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
545 if (predictor_pair & 1) \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
546 GET_NEXT_INDEX() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
547 else \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
548 index++; \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
549 } \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
550 } else \
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
551 index++;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
552
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
553
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
554 #define APPLY_Y_PREDICTOR() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
555 predictor_pair = s->y_predictor_table[index]; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
556 horiz_pred += (predictor_pair >> 1); \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
557 if (predictor_pair & 1) { \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
558 GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
559 if (!index) { \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
560 GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
561 predictor_pair = s->y_predictor_table[index]; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
562 horiz_pred += ((predictor_pair >> 1) * 5); \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
563 if (predictor_pair & 1) \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
564 GET_NEXT_INDEX() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
565 else \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
566 index++; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
567 } \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
568 } else \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
569 index++;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
570
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
571 #define APPLY_Y_PREDICTOR_24() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
572 predictor_pair = s->y_predictor_table[index]; \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
573 horiz_pred += (predictor_pair >> 1); \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
574 if (predictor_pair & 1) { \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
575 GET_NEXT_INDEX() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
576 if (!index) { \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
577 GET_NEXT_INDEX() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
578 predictor_pair = s->fat_y_predictor_table[index]; \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
579 horiz_pred += (predictor_pair >> 1); \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
580 if (predictor_pair & 1) \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
581 GET_NEXT_INDEX() \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
582 else \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
583 index++; \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
584 } \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
585 } else \
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
586 index++;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
587
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
588 #define OUTPUT_PIXEL_PAIR() \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
589 *current_pixel_pair = *vert_pred + horiz_pred; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
590 *vert_pred++ = *current_pixel_pair++; \
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
591 prev_pixel_pair++;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
592
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
593 static void truemotion1_decode_16bit(TrueMotion1Context *s)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
594 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
595 int y;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
596 int pixels_left; /* remaining pixels on this line */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
597 unsigned int predictor_pair;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
598 unsigned int horiz_pred;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
599 unsigned int *vert_pred;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
600 unsigned int *current_pixel_pair;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
601 unsigned int *prev_pixel_pair;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
602 unsigned char *current_line = s->frame.data[0];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
603 unsigned char *prev_line = s->prev_frame.data[0];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
604 int keyframe = s->flags & FLAG_KEYFRAME;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
605
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
606 /* these variables are for managing the stream of macroblock change bits */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
607 unsigned char *mb_change_bits = s->mb_change_bits;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
608 unsigned char mb_change_byte;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
609 unsigned char mb_change_byte_mask;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
610 int mb_change_index;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
611
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
612 /* these variables are for managing the main index stream */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
613 int index_stream_index = 0; /* yes, the index into the index stream */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
614 int index;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
615
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
616 /* clean out the line buffer */
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
617 memset(s->vert_pred, 0, s->avctx->width * sizeof(unsigned int));
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
618
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
619 GET_NEXT_INDEX();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
620
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
621 for (y = 0; y < s->avctx->height; y++) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
622
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
623 /* re-init variables for the next line iteration */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
624 horiz_pred = 0;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
625 current_pixel_pair = (unsigned int *)current_line;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
626 prev_pixel_pair = (unsigned int *)prev_line;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
627 vert_pred = s->vert_pred;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
628 mb_change_index = 0;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
629 mb_change_byte = mb_change_bits[mb_change_index++];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
630 mb_change_byte_mask = 0x01;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
631 pixels_left = s->avctx->width;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
632
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
633 while (pixels_left > 0) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
634
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
635 if (keyframe || ((mb_change_byte & mb_change_byte_mask) == 0)) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
636
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
637 switch (y & 3) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
638 case 0:
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
639 /* if macroblock width is 2, apply C-Y-C-Y; else
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
640 * apply C-Y-Y */
1654
1c123e036890 this should make the decoder safe for big-endian platforms
melanson
parents: 1650
diff changeset
641 if (s->block_width == 2) {
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
642 APPLY_C_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
643 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
644 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
645 APPLY_C_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
646 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
647 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
648 } else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
649 APPLY_C_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
650 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
651 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
652 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
653 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
654 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
655 break;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
656
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
657 case 1:
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
658 case 3:
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
659 /* always apply 2 Y predictors on these iterations */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
660 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
661 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
662 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
663 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
664 break;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
665
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
666 case 2:
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
667 /* this iteration might be C-Y-C-Y, Y-Y, or C-Y-Y
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
668 * depending on the macroblock type */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
669 if (s->block_type == BLOCK_2x2) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
670 APPLY_C_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
671 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
672 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
673 APPLY_C_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
674 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
675 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
676 } else if (s->block_type == BLOCK_4x2) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
677 APPLY_C_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
678 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
679 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
680 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
681 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
682 } else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
683 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
684 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
685 APPLY_Y_PREDICTOR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
686 OUTPUT_PIXEL_PAIR();
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
687 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
688 break;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
689 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
690
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
691 } else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
692
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
693 /* skip (copy) four pixels, but reassign the horizontal
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
694 * predictor */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
695 *current_pixel_pair = *prev_pixel_pair++;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
696 *vert_pred++ = *current_pixel_pair++;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
697 *current_pixel_pair = *prev_pixel_pair++;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
698 horiz_pred = *current_pixel_pair - *vert_pred;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
699 *vert_pred++ = *current_pixel_pair++;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
700
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
701 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
702
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
703 if (!keyframe) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
704 mb_change_byte_mask <<= 1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
705
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
706 /* next byte */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
707 if (!mb_change_byte_mask) {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
708 mb_change_byte = mb_change_bits[mb_change_index++];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
709 mb_change_byte_mask = 0x01;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
710 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
711 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
712
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
713 pixels_left -= 4;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
714 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
715
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
716 /* next change row */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
717 if (((y + 1) & 3) == 0)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
718 mb_change_bits += s->mb_change_bits_row_size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
719
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
720 current_line += s->frame.linesize[0];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
721 prev_line += s->prev_frame.linesize[0];
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
722 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
723 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
724
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
725 static void truemotion1_decode_24bit(TrueMotion1Context *s)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
726 {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
727 int y;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
728 int pixels_left; /* remaining pixels on this line */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
729 unsigned int predictor_pair;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
730 unsigned int horiz_pred;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
731 unsigned int *vert_pred;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
732 unsigned int *current_pixel_pair;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
733 unsigned int *prev_pixel_pair;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
734 unsigned char *current_line = s->frame.data[0];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
735 unsigned char *prev_line = s->prev_frame.data[0];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
736 int keyframe = s->flags & FLAG_KEYFRAME;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
737
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
738 /* these variables are for managing the stream of macroblock change bits */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
739 unsigned char *mb_change_bits = s->mb_change_bits;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
740 unsigned char mb_change_byte;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
741 unsigned char mb_change_byte_mask;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
742 int mb_change_index;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
743
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
744 /* these variables are for managing the main index stream */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
745 int index_stream_index = 0; /* yes, the index into the index stream */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
746 int index;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
747
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
748 /* clean out the line buffer */
2939
04cf75617d00 clear the whole vert_pred buffer for 24 bit decoding.
reimar
parents: 2938
diff changeset
749 memset(s->vert_pred, 0, s->avctx->width * sizeof(unsigned int));
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
750
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
751 GET_NEXT_INDEX();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
752
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
753 for (y = 0; y < s->avctx->height; y++) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
754
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
755 /* re-init variables for the next line iteration */
2938
363be7734674 improvements by Reimar D«Óffinger; 24-bit decoding is not perfect, only
melanson
parents: 2753
diff changeset
756 horiz_pred = 0;
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
757 current_pixel_pair = (unsigned int *)current_line;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
758 prev_pixel_pair = (unsigned int *)prev_line;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
759 vert_pred = s->vert_pred;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
760 mb_change_index = 0;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
761 mb_change_byte = mb_change_bits[mb_change_index++];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
762 mb_change_byte_mask = 0x01;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
763 pixels_left = s->avctx->width;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
764
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
765 while (pixels_left > 0) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
766
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
767 if (keyframe || ((mb_change_byte & mb_change_byte_mask) == 0)) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
768
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
769 switch (y & 3) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
770 case 0:
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
771 /* if macroblock width is 2, apply C-Y-C-Y; else
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
772 * apply C-Y-Y */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
773 if (s->block_width == 2) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
774 APPLY_C_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
775 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
776 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
777 APPLY_C_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
778 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
779 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
780 } else {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
781 APPLY_C_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
782 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
783 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
784 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
785 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
786 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
787 break;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
788
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
789 case 1:
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
790 case 3:
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
791 /* always apply 2 Y predictors on these iterations */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
792 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
793 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
794 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
795 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
796 break;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
797
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
798 case 2:
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
799 /* this iteration might be C-Y-C-Y, Y-Y, or C-Y-Y
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
800 * depending on the macroblock type */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
801 if (s->block_type == BLOCK_2x2) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
802 APPLY_C_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
803 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
804 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
805 APPLY_C_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
806 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
807 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
808 } else if (s->block_type == BLOCK_4x2) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
809 APPLY_C_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
810 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
811 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
812 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
813 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
814 } else {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
815 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
816 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
817 APPLY_Y_PREDICTOR_24();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
818 OUTPUT_PIXEL_PAIR();
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
819 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
820 break;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
821 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
822
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
823 } else {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
824
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
825 /* skip (copy) four pixels, but reassign the horizontal
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
826 * predictor */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
827 *current_pixel_pair = *prev_pixel_pair++;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
828 *vert_pred++ = *current_pixel_pair++;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
829 *current_pixel_pair = *prev_pixel_pair++;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
830 horiz_pred = *current_pixel_pair - *vert_pred;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
831 *vert_pred++ = *current_pixel_pair++;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2939
diff changeset
832
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
833 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
834
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
835 if (!keyframe) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
836 mb_change_byte_mask <<= 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
837
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
838 /* next byte */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
839 if (!mb_change_byte_mask) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
840 mb_change_byte = mb_change_bits[mb_change_index++];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
841 mb_change_byte_mask = 0x01;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
842 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
843 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
844
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
845 pixels_left -= 4;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
846 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
847
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
848 /* next change row */
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
849 if (((y + 1) & 3) == 0)
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
850 mb_change_bits += s->mb_change_bits_row_size;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
851
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
852 current_line += s->frame.linesize[0];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
853 prev_line += s->prev_frame.linesize[0];
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
854 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
855 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
856
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
857
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
858 static int truemotion1_decode_frame(AVCodecContext *avctx,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
859 void *data, int *data_size,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
860 uint8_t *buf, int buf_size)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
861 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
862 TrueMotion1Context *s = (TrueMotion1Context *)avctx->priv_data;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
863
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
864 s->buf = buf;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
865 s->size = buf_size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
866
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
867 if (truemotion1_decode_header(s) == -1)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
868 return -1;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
869
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
870 s->frame.reference = 1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
871 if (avctx->get_buffer(avctx, &s->frame) < 0) {
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
872 av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
873 return -1;
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
874 }
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
875
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
876 /* check for a do-nothing frame and copy the previous frame */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
877 if (compression_types[s->compression].algorithm == ALGO_NOP)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
878 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
879 memcpy(s->frame.data[0], s->prev_frame.data[0],
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
880 s->frame.linesize[0] * s->avctx->height);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
881 } else if (compression_types[s->compression].algorithm == ALGO_RGB24H) {
2245
81802fed5b8c Decoding to bgr15/16 from 16bit input. Decoding of 24bit input added, not yet finished, but at least the picture can be recognized
alex
parents: 2073
diff changeset
882 truemotion1_decode_24bit(s);
1650
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
883 } else {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
884 truemotion1_decode_16bit(s);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
885 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
886
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
887 if (s->prev_frame.data[0])
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
888 avctx->release_buffer(avctx, &s->prev_frame);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
889
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
890 /* shuffle frames */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
891 s->prev_frame = s->frame;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
892
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
893 *data_size = sizeof(AVFrame);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
894 *(AVFrame*)data = s->frame;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
895
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
896 /* report that the buffer was completely consumed */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
897 return buf_size;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
898 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
899
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
900 static int truemotion1_decode_end(AVCodecContext *avctx)
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
901 {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
902 TrueMotion1Context *s = (TrueMotion1Context *)avctx->priv_data;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
903
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
904 /* release the last frame */
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
905 if (s->prev_frame.data[0])
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
906 avctx->release_buffer(avctx, &s->prev_frame);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
907
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
908 av_free(s->vert_pred);
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
909
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
910 return 0;
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
911 }
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
912
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
913 AVCodec truemotion1_decoder = {
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
914 "truemotion1",
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
915 CODEC_TYPE_VIDEO,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
916 CODEC_ID_TRUEMOTION1,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
917 sizeof(TrueMotion1Context),
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
918 truemotion1_decode_init,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
919 NULL,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
920 truemotion1_decode_end,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
921 truemotion1_decode_frame,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
922 CODEC_CAP_DR1,
bdade3baabfc initial support for Duck TrueMotion v1 (think of it as On2 VP1); only
melanson
parents:
diff changeset
923 };