1 /*
2 * Renderware TeXture Dictionary (.txd) image decoder
3 * Copyright (c) 2007 Ivo van Poorten
4 *
5 * See also: http://wiki.multimedia.cx/index.php?title=TXD
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
29
30 #define TXD_DXT1 0x31545844
31 #define TXD_DXT3 0x33545844
32
35 {
39 unsigned int y, v;
40 uint8_t *ptr;
41 uint32_t *pal;
44
47
49
51 version = bytestream2_get_le32(&gb);
54 w = bytestream2_get_le16(&gb);
55 h = bytestream2_get_le16(&gb);
56 depth = bytestream2_get_byte(&gb);
58 flags = bytestream2_get_byte(&gb);
59
60 if (version < 8 || version > 9) {
63 }
64
65 if (depth == 8) {
69 } else if (depth == 16) {
72 case 0:
78 break;
82 }
83 } else if (depth == 32) {
87 } else {
90 }
91
94
97
100
102
105
106 if (depth == 8) {
107 pal = (uint32_t *)
p->data[1];
108 for (y = 0; y < 256; y++) {
109 v = bytestream2_get_be32(&gb);
110 pal[y] = (v >> 8) + (v << 24);
111 }
113 for (y=0; y<
h; y++) {
116 }
117 } else if (depth == 16) {
120 case 0:
122 for (j = 0; j < avctx->
height; j += 4) {
123 for (
i = 0;
i < avctx->
width;
i += 4) {
124 uint8_t *
p = ptr +
i * 4 + j *
stride;
127 }
128 }
129 break;
131 for (j = 0; j < avctx->
height; j += 4) {
132 for (
i = 0;
i < avctx->
width;
i += 4) {
133 uint8_t *
p = ptr +
i * 4 + j *
stride;
136 }
137 }
138 break;
139 default:
141 }
142 } else if (depth == 32) {
144 case 0x15:
145 case 0x16:
146 for (y=0; y<
h; y++) {
149 }
150 break;
151 default:
153 }
154 }
155
156 *got_frame = 1;
157
159
163 }
164
172 };