annotate qtsmc.c @ 4564:5e1221d4655e

completely reworked FILM demuxer to support both audio and video...neither of which work yet (CVID video and uncompressed audio)...but the demuxer is working well now
author melanson
date Thu, 07 Feb 2002 05:55:29 +0000
parents 9eb7a02393a3
children b3d18d070ec1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
1 /*
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
2 Apple Graphics (SMC) Decoder for MPlayer
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
3 by Mike Melanson
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
4
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
5 The description of the decoding algorithm can be found here:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
6 http://www.pcisys.net/~melanson/codecs/
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
7 */
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
8
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
9 #include <stdlib.h>
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
10 #include "config.h"
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
11 #include "bswap.h"
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
12 #include "mp_msg.h"
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
13
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
14 #define BE_16(x) (be2me_16(*(unsigned short *)(x)))
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
15 #define BE_32(x) (be2me_32(*(unsigned int *)(x)))
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
16
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
17 #define COLORS_PER_TABLE 256
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
18 #define BYTES_PER_COLOR 4
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
19
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
20 #define CPAIR 2
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
21 #define CQUAD 4
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
22 #define COCTET 8
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
23
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
24 static unsigned char *color_pairs;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
25 static unsigned char *color_quads;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
26 static unsigned char *color_octets;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
27
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
28 static int color_pair_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
29 static int color_quad_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
30 static int color_octet_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
31
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
32 static int smc_initialized;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
33
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
34 // returns 0 if successfully initialized (enough memory was available),
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
35 // non-zero on failure
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
36 int qt_init_decode_smc(void)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
37 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
38 // be pessimistic to start
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
39 smc_initialized = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
40
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
41 // allocate memory for the 3 palette tables
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
42 if ((color_pairs = (unsigned char *)malloc(
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
43 COLORS_PER_TABLE * BYTES_PER_COLOR * 2)) == 0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
44 return 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
45 if ((color_quads = (unsigned char *)malloc(
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
46 COLORS_PER_TABLE * BYTES_PER_COLOR * 4)) == 0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
47 return 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
48 if ((color_octets = (unsigned char *)malloc(
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
49 COLORS_PER_TABLE * BYTES_PER_COLOR * 8)) == 0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
50 return 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
51
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
52 // if execution got this far, initialization succeeded
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
53 smc_initialized = 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
54 return 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
55 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
56
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
57 #define GET_BLOCK_COUNT \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
58 (opcode & 0x10) ? (1 + encoded[stream_ptr++]) : 1 + (opcode & 0x0F);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
59 #define ADVANCE_BLOCK() \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
60 { \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
61 pixel_ptr += block_x_inc; \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
62 if (pixel_ptr >= (width * bytes_per_pixel)) \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
63 { \
4298
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
64 counter++; \
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
65 pixel_ptr = 0; \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
66 row_ptr += block_y_inc * 4; \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
67 } \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
68 total_blocks--; \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
69 if (total_blocks < 0) \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
70 { \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
71 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "block counter just went negative (this should not happen)\n"); \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
72 return; \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
73 } \
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
74 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
75
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
76 void qt_decode_smc(
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
77 unsigned char *encoded,
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
78 int encoded_size,
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
79 unsigned char *decoded,
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
80 int width,
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
81 int height,
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
82 unsigned char *palette_map,
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
83 int bytes_per_pixel)
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
84 {
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
85 int i;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
86 int stream_ptr = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
87 int chunk_size;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
88 unsigned char opcode;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
89 int n_blocks;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
90 unsigned int color_flags;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
91 unsigned int color_flags_a;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
92 unsigned int color_flags_b;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
93 unsigned int flag_mask;
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
94
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
95 int row_ptr = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
96 int pixel_ptr = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
97 int pixel_x, pixel_y;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
98 int row_inc = bytes_per_pixel * (width - 4);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
99 int max_height = row_inc * height;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
100 int block_x_inc = bytes_per_pixel * 4;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
101 int block_y_inc = bytes_per_pixel * width;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
102 int block_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
103 int prev_block_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
104 int prev_block_ptr1, prev_block_ptr2;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
105 int prev_block_flag;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
106 int total_blocks;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
107 int color_table_index; // indexes to color pair, quad, or octet tables
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
108 int color_index; // indexes into palette map
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
109
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
110 static int counter;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
111
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
112 //printf ("opcode count = %d\n", counter);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
113 counter = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
114
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
115 if (!smc_initialized)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
116 return;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
117
4298
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
118 // reset color tables
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
119 color_pair_index = 0;
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
120 color_quad_index = 0;
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
121 color_octet_index = 0;
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
122
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
123 chunk_size = BE_32(&encoded[stream_ptr]) & 0x00FFFFFF;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
124 stream_ptr += 4;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
125 if (chunk_size != encoded_size)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
126 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "MOV chunk size != encoded chunk size; using MOV chunk size\n");
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
127
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
128 chunk_size = encoded_size;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
129 total_blocks = (width * height) / (4 * 4);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
130
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
131 // traverse through the blocks
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
132 while (total_blocks)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
133 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
134 // sanity checks
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
135 // make sure stream ptr hasn't gone out of bounds
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
136 if (stream_ptr > chunk_size)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
137 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
138 mp_msg(MSGT_DECVIDEO, MSGL_ERR,
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
139 "SMC decoder just went out of bounds (stream ptr = %d, chunk size = %d)\n",
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
140 stream_ptr, chunk_size);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
141 return;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
142 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
143 // make sure the row pointer hasn't gone wild
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
144 if (row_ptr >= max_height)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
145 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
146 mp_msg(MSGT_DECVIDEO, MSGL_ERR,
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
147 "SMC decoder just went out of bounds (row ptr = %d, height = %d)\n",
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
148 row_ptr, max_height);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
149 return;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
150 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
151
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
152 opcode = encoded[stream_ptr++];
4298
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
153 //if (counter < 3)
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
154 //printf ("%d: opcode %02X\n", counter, opcode);
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
155 switch (opcode & 0xF0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
156 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
157 // skip n blocks
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
158 case 0x00:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
159 case 0x10:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
160 n_blocks = GET_BLOCK_COUNT;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
161 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
162 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
163 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
164
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
165 // repeat last block n times
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
166 case 0x20:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
167 case 0x30:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
168 n_blocks = GET_BLOCK_COUNT;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
169
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
170 // sanity check
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
171 if ((row_ptr == 0) && (pixel_ptr == 0))
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
172 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
173 mp_msg(MSGT_DECVIDEO, MSGL_WARN,
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
174 "encountered repeat block opcode (%02X) but no blocks rendered yet\n",
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
175 opcode & 0xF0);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
176 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
177 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
178
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
179 // figure out where the previous block started
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
180 if (row_ptr == 0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
181 prev_block_ptr1 = (row_ptr - block_y_inc * 4) + width - 4;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
182 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
183 prev_block_ptr1 = row_ptr + pixel_ptr - 4;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
184
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
185 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
186 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
187 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
188 prev_block_ptr = prev_block_ptr1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
189 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
190 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
191 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
192 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
193 decoded[block_ptr++] = decoded[prev_block_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
194 decoded[block_ptr++] = decoded[prev_block_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
195 decoded[block_ptr++] = decoded[prev_block_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
196 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
197 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
198 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
199 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
200 prev_block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
201 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
202 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
203 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
204 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
205
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
206 // repeat previous pair of blocks n times
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
207 case 0x40:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
208 case 0x50:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
209 n_blocks = GET_BLOCK_COUNT;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
210 n_blocks *= 2;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
211
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
212 // sanity check
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
213 if ((row_ptr == 0) && (pixel_ptr < 2 * block_x_inc))
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
214 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
215 mp_msg(MSGT_DECVIDEO, MSGL_WARN,
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
216 "encountered repeat block opcode (%02X) but not enough blocks rendered yet\n",
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
217 opcode & 0xF0);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
218 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
219 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
220
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
221 // figure out where the previous 2 blocks started
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
222 if (row_ptr == 0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
223 prev_block_ptr1 = (row_ptr - block_y_inc * 4) +
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
224 ((width - 4) * bytes_per_pixel);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
225 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
226 prev_block_ptr1 = row_ptr + pixel_ptr - block_x_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
227
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
228 if (row_ptr == 0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
229 prev_block_ptr2 = (row_ptr - block_y_inc * 4) +
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
230 ((width - 8) * bytes_per_pixel);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
231 else if (row_ptr == block_x_inc)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
232 prev_block_ptr2 = (row_ptr - block_y_inc * 4) +
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
233 ((width - 4) * bytes_per_pixel);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
234 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
235 prev_block_ptr2 = row_ptr + pixel_ptr - (block_x_inc * 2);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
236
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
237 prev_block_flag = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
238 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
239 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
240 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
241 if (prev_block_flag)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
242 prev_block_ptr = prev_block_ptr2;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
243 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
244 prev_block_ptr = prev_block_ptr1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
245 prev_block_flag = !prev_block_flag;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
246
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
247 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
248 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
249 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
250 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
251 decoded[block_ptr++] = decoded[prev_block_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
252 decoded[block_ptr++] = decoded[prev_block_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
253 decoded[block_ptr++] = decoded[prev_block_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
254 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
255 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
256 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
257 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
258 prev_block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
259 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
260 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
261 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
262 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
263
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
264 // 1-color block encoding
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
265 case 0x60:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
266 case 0x70:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
267 n_blocks = GET_BLOCK_COUNT;
4298
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
268 //printf ("1-color encoding for %d blocks\n", n_blocks);
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
269 color_index = encoded[stream_ptr++] * 4;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
270
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
271 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
272 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
273 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
274 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
275 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
276 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
277 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
278 decoded[block_ptr++] = palette_map[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
279 decoded[block_ptr++] = palette_map[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
280 decoded[block_ptr++] = palette_map[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
281 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
282 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
283 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
284 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
285 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
286 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
287 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
288 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
289
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
290 // 2-color block encoding
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
291 case 0x80:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
292 case 0x90:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
293 n_blocks = (opcode & 0x0F) + 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
294
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
295 // figure out which color pair to use to paint the 2-color block
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
296 if ((opcode & 0xF0) == 0x80)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
297 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
298 // fetch the next 2 colors from bytestream and store in next
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
299 // available entry in the color pair table
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
300 for (i = 0; i < CPAIR; i++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
301 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
302 color_index = encoded[stream_ptr++] * BYTES_PER_COLOR;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
303 color_table_index = CPAIR * BYTES_PER_COLOR * color_pair_index +
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
304 (i * BYTES_PER_COLOR);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
305 color_pairs[color_table_index + 0] = palette_map[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
306 color_pairs[color_table_index + 1] = palette_map[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
307 color_pairs[color_table_index + 2] = palette_map[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
308 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
309 // this is the base index to use for this block
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
310 color_table_index = CPAIR * BYTES_PER_COLOR * color_pair_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
311 color_pair_index++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
312 if (color_pair_index == COLORS_PER_TABLE)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
313 color_pair_index = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
314 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
315 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
316 color_table_index = CPAIR * BYTES_PER_COLOR * encoded[stream_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
317
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
318 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
319 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
320 color_flags = BE_16(&encoded[stream_ptr]);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
321 stream_ptr += 2;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
322 flag_mask = 0x8000;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
323 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
324 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
325 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
326 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
327 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
328 if (color_flags & flag_mask)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
329 color_index = color_table_index + BYTES_PER_COLOR;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
330 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
331 color_index = color_table_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
332 flag_mask >>= 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
333
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
334 decoded[block_ptr++] = color_pairs[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
335 decoded[block_ptr++] = color_pairs[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
336 decoded[block_ptr++] = color_pairs[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
337 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
338 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
339 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
340 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
341 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
342 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
343 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
344 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
345
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
346 // 4-color block encoding
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
347 case 0xA0:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
348 case 0xB0:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
349 //for(i = 0; i < 16; i++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
350 // printf (" %02X", encoded[stream_ptr - 1 + i]);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
351 //printf ("\n");
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
352 n_blocks = (opcode & 0x0F) + 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
353
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
354 // figure out which color quad to use to paint the 4-color block
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
355 if ((opcode & 0xF0) == 0xA0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
356 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
357 // fetch the next 4 colors from bytestream and store in next
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
358 // available entry in the color pair table
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
359 for (i = 0; i < CQUAD; i++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
360 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
361 color_index = encoded[stream_ptr++] * BYTES_PER_COLOR;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
362 color_table_index = CQUAD * BYTES_PER_COLOR * color_quad_index +
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
363 (i * BYTES_PER_COLOR);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
364 color_quads[color_table_index + 0] = palette_map[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
365 color_quads[color_table_index + 1] = palette_map[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
366 color_quads[color_table_index + 2] = palette_map[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
367 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
368 // this is the base index to use for this block
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
369 color_table_index = CQUAD * BYTES_PER_COLOR * color_quad_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
370 color_quad_index++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
371 if (color_quad_index == COLORS_PER_TABLE)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
372 color_quad_index = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
373 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
374 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
375 color_table_index = CQUAD * BYTES_PER_COLOR * encoded[stream_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
376
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
377 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
378 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
379 color_flags = BE_32(&encoded[stream_ptr]);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
380 stream_ptr += 4;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
381 // flag mask actually acts as a bit shift count here
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
382 flag_mask = 30;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
383 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
384 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
385 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
386 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
387 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
388 color_index = color_table_index + (BYTES_PER_COLOR *
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
389 ((color_flags >> flag_mask) & 0x03));
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
390 flag_mask -= 2;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
391
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
392 decoded[block_ptr++] = color_quads[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
393 decoded[block_ptr++] = color_quads[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
394 decoded[block_ptr++] = color_quads[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
395 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
396 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
397 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
398 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
399 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
400 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
401 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
402 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
403
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
404 // 8-color block encoding
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
405 case 0xC0:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
406 case 0xD0:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
407 n_blocks = (opcode & 0x0F) + 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
408
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
409 // figure out which color octet to use to paint the 8-color block
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
410 if ((opcode & 0xF0) == 0xC0)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
411 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
412 // fetch the next 8 colors from bytestream and store in next
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
413 // available entry in the color pair table
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
414 for (i = 0; i < COCTET; i++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
415 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
416 color_index = encoded[stream_ptr++] * BYTES_PER_COLOR;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
417 color_table_index = COCTET * BYTES_PER_COLOR * color_octet_index +
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
418 (i * BYTES_PER_COLOR);
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
419 color_octets[color_table_index + 0] = palette_map[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
420 color_octets[color_table_index + 1] = palette_map[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
421 color_octets[color_table_index + 2] = palette_map[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
422 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
423 // this is the base index to use for this block
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
424 color_table_index = COCTET * BYTES_PER_COLOR * color_octet_index;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
425 color_octet_index++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
426 if (color_octet_index == COLORS_PER_TABLE)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
427 color_octet_index = 0;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
428 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
429 else
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
430 color_table_index = COCTET * BYTES_PER_COLOR * encoded[stream_ptr++];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
431
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
432 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
433 {
4298
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
434 /*
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
435 For this input:
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
436 01 23 45 67 89 AB
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
437 This is the output:
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
438 flags_a = xx012456, flags_b = xx89A37B
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
439 */
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
440 // build the color flags
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
441 color_flags_a = color_flags_b = 0;
4298
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
442 color_flags_a =
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
443 (encoded[stream_ptr + 0] << 16) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
444 ((encoded[stream_ptr + 1] & 0xF0) << 8) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
445 ((encoded[stream_ptr + 2] & 0xF0) << 4) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
446 ((encoded[stream_ptr + 2] & 0x0F) << 4) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
447 ((encoded[stream_ptr + 3] & 0xF0) >> 4);
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
448 color_flags_b =
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
449 (encoded[stream_ptr + 4] << 16) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
450 ((encoded[stream_ptr + 5] & 0xF0) << 8) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
451 ((encoded[stream_ptr + 1] & 0x0F) << 8) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
452 ((encoded[stream_ptr + 3] & 0x0F) << 4) |
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
453 (encoded[stream_ptr + 5] & 0x0F);
9eb7a02393a3 fixed some major flaws; decoder is now almost correct
melanson
parents: 4275
diff changeset
454 stream_ptr += 6;
4275
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
455
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
456 color_flags = color_flags_a;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
457 // flag mask actually acts as a bit shift count here
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
458 flag_mask = 21;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
459 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
460 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
461 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
462 // reload flags at third row (iteration pixel_y == 2)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
463 if (pixel_y == 2)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
464 color_flags = color_flags_b;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
465 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
466 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
467 color_index = color_table_index + (BYTES_PER_COLOR *
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
468 ((color_flags >> flag_mask) & 0x07));
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
469 flag_mask -= 3;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
470
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
471 decoded[block_ptr++] = color_octets[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
472 decoded[block_ptr++] = color_octets[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
473 decoded[block_ptr++] = color_octets[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
474 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
475 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
476 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
477 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
478 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
479 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
480 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
481 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
482
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
483 // 16-color block encoding (every pixel is a different color)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
484 case 0xE0:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
485 n_blocks = (opcode & 0x0F) + 1;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
486
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
487 while (n_blocks--)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
488 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
489 block_ptr = row_ptr + pixel_ptr;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
490 for (pixel_y = 0; pixel_y < 4; pixel_y++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
491 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
492 for (pixel_x = 0; pixel_x < 4; pixel_x++)
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
493 {
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
494 color_index = encoded[stream_ptr++] * BYTES_PER_COLOR;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
495 decoded[block_ptr++] = palette_map[color_index + 0];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
496 decoded[block_ptr++] = palette_map[color_index + 1];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
497 decoded[block_ptr++] = palette_map[color_index + 2];
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
498 if (bytes_per_pixel == 4) /* 32bpp */
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
499 block_ptr++;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
500 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
501 block_ptr += row_inc;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
502 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
503 ADVANCE_BLOCK();
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
504 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
505 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
506
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
507 case 0xF0:
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
508 mp_msg(MSGT_DECVIDEO, MSGL_HINT, "0xF0 opcode seen in SMC chunk (MPlayer developers would like to know)\n");
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
509 break;
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
510 }
818be6ba8758 initial implementation of SMC codec; it almost works, too!
melanson
parents: 4227
diff changeset
511 }
4227
4b652eac6738 added skeleton for QT SMC decoder
melanson
parents:
diff changeset
512 }