annotate ffmpeg/libavcodec/indeo4data.h @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents 6840f77b83aa
children
rev   line source
yading@10 1 /*
yading@10 2 * Indeo Video Interactive 4 compatible decoder
yading@10 3 * Copyright (c) 2009-2010 Maxim Poliakovski
yading@10 4 *
yading@10 5 * This file is part of Libav.
yading@10 6 *
yading@10 7 * Libav is free software; you can redistribute it and/or
yading@10 8 * modify it under the terms of the GNU Lesser General Public
yading@10 9 * License as published by the Free Software Foundation; either
yading@10 10 * version 2.1 of the License, or (at your option) any later version.
yading@10 11 *
yading@10 12 * Libav is distributed in the hope that it will be useful,
yading@10 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@10 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@10 15 * Lesser General Public License for more details.
yading@10 16 *
yading@10 17 * You should have received a copy of the GNU Lesser General Public
yading@10 18 * License along with Libav; if not, write to the Free Software
yading@10 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@10 20 */
yading@10 21
yading@10 22 /**
yading@10 23 * @file
yading@10 24 * This file contains data needed for the Indeo 4 decoder.
yading@10 25 */
yading@10 26
yading@10 27 #ifndef AVCODEC_INDEO4DATA_H
yading@10 28 #define AVCODEC_INDEO4DATA_H
yading@10 29
yading@10 30 #include <stdint.h>
yading@10 31 #include "dsputil.h"
yading@10 32 #include "ivi_common.h"
yading@10 33
yading@10 34 /**
yading@10 35 * standard picture dimensions
yading@10 36 */
yading@10 37 static const uint16_t ivi4_common_pic_sizes[14] = {
yading@10 38 640, 480, 320, 240, 160, 120, 704, 480, 352, 240, 352, 288, 176, 144
yading@10 39 };
yading@10 40
yading@10 41 /**
yading@10 42 * Indeo 4 8x8 scan (zigzag) patterns
yading@10 43 */
yading@10 44 static const uint8_t ivi4_alternate_scan_8x8[64] = {
yading@10 45 0, 8, 1, 9, 16, 24, 2, 3, 17, 25, 10, 11, 32, 40, 48, 56,
yading@10 46 4, 5, 6, 7, 33, 41, 49, 57, 18, 19, 26, 27, 12, 13, 14, 15,
yading@10 47 34, 35, 43, 42, 50, 51, 59, 58, 20, 21, 22, 23, 31, 30, 29, 28,
yading@10 48 36, 37, 38, 39, 47, 46, 45, 44, 52, 53, 54, 55, 63, 62, 61, 60
yading@10 49 };
yading@10 50
yading@10 51 static const uint8_t ivi4_alternate_scan_4x4[16] = {
yading@10 52 0, 1, 4, 5, 8, 12, 2, 3, 9, 13, 6, 7, 10, 11, 14, 15
yading@10 53 };
yading@10 54
yading@10 55 static const uint8_t ivi4_vertical_scan_4x4[16] = {
yading@10 56 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15
yading@10 57 };
yading@10 58
yading@10 59 static const uint8_t ivi4_horizontal_scan_4x4[16] = {
yading@10 60 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
yading@10 61 };
yading@10 62
yading@10 63 static const uint8_t *scan_index_to_tab[15] = {
yading@10 64 // for 8x8 transforms
yading@10 65 ff_zigzag_direct,
yading@10 66 ivi4_alternate_scan_8x8,
yading@10 67 ff_ivi_horizontal_scan_8x8,
yading@10 68 ff_ivi_vertical_scan_8x8,
yading@10 69 ff_zigzag_direct,
yading@10 70
yading@10 71 // for 4x4 transforms
yading@10 72 ff_ivi_direct_scan_4x4,
yading@10 73 ivi4_alternate_scan_4x4,
yading@10 74 ivi4_vertical_scan_4x4,
yading@10 75 ivi4_horizontal_scan_4x4,
yading@10 76 ff_ivi_direct_scan_4x4,
yading@10 77
yading@10 78 // TODO: check if those are needed
yading@10 79 ff_ivi_horizontal_scan_8x8,
yading@10 80 ff_ivi_horizontal_scan_8x8,
yading@10 81 ff_ivi_horizontal_scan_8x8,
yading@10 82 ff_ivi_horizontal_scan_8x8,
yading@10 83 ff_ivi_horizontal_scan_8x8
yading@10 84 };
yading@10 85
yading@10 86 /**
yading@10 87 * Indeo 4 dequant tables
yading@10 88 */
yading@10 89 static const uint16_t ivi4_quant_8x8_intra[9][64] = {
yading@10 90 {
yading@10 91 43, 342, 385, 470, 555, 555, 598, 726,
yading@10 92 342, 342, 470, 513, 555, 598, 726, 769,
yading@10 93 385, 470, 555, 555, 598, 726, 726, 811,
yading@10 94 470, 470, 555, 555, 598, 726, 769, 854,
yading@10 95 470, 555, 555, 598, 683, 726, 854, 1025,
yading@10 96 555, 555, 598, 683, 726, 854, 1025, 1153,
yading@10 97 555, 555, 598, 726, 811, 982, 1195, 1451,
yading@10 98 555, 598, 726, 811, 982, 1195, 1451, 1793
yading@10 99 },
yading@10 100 {
yading@10 101 86, 1195, 2390, 2390, 4865, 4865, 4865, 4865,
yading@10 102 1195, 1195, 2390, 2390, 4865, 4865, 4865, 4865,
yading@10 103 2390, 2390, 4865, 4865, 6827, 6827, 6827, 6827,
yading@10 104 2390, 2390, 4865, 4865, 6827, 6827, 6827, 6827,
yading@10 105 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827,
yading@10 106 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827,
yading@10 107 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827,
yading@10 108 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827
yading@10 109 },
yading@10 110 {
yading@10 111 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 112 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 113 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 114 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 115 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 116 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 117 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
yading@10 118 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835
yading@10 119 },
yading@10 120 {
yading@10 121 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 122 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 123 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 124 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 125 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 126 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 127 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 128 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414
yading@10 129 },
yading@10 130 {
yading@10 131 897, 897, 897, 897, 897, 897, 897, 897,
yading@10 132 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
yading@10 133 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
yading@10 134 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
yading@10 135 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579,
yading@10 136 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
yading@10 137 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
yading@10 138 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091
yading@10 139 },
yading@10 140 {
yading@10 141 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 142 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 143 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 144 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 145 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 146 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 147 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 148 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414
yading@10 149 },
yading@10 150 {
yading@10 151 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 152 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 153 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 154 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 155 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 156 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 157 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
yading@10 158 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390
yading@10 159 },
yading@10 160 {
yading@10 161 22, 171, 214, 257, 257, 299, 299, 342,
yading@10 162 171, 171, 257, 257, 299, 299, 342, 385,
yading@10 163 214, 257, 257, 299, 299, 342, 342, 385,
yading@10 164 257, 257, 257, 299, 299, 342, 385, 427,
yading@10 165 257, 257, 299, 299, 342, 385, 427, 513,
yading@10 166 257, 299, 299, 342, 385, 427, 513, 598,
yading@10 167 299, 299, 299, 385, 385, 470, 598, 726,
yading@10 168 299, 299, 385, 385, 470, 598, 726, 897
yading@10 169 },
yading@10 170 {
yading@10 171 86, 598, 1195, 1195, 2390, 2390, 2390, 2390,
yading@10 172 598, 598, 1195, 1195, 2390, 2390, 2390, 2390,
yading@10 173 1195, 1195, 2390, 2390, 3414, 3414, 3414, 3414,
yading@10 174 1195, 1195, 2390, 2390, 3414, 3414, 3414, 3414,
yading@10 175 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 176 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 177 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 178 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414
yading@10 179 }
yading@10 180 };
yading@10 181
yading@10 182 static const uint16_t ivi4_quant_8x8_inter[9][64] = {
yading@10 183 {
yading@10 184 427, 427, 470, 427, 427, 427, 470, 470,
yading@10 185 427, 427, 470, 427, 427, 427, 470, 470,
yading@10 186 470, 470, 470, 470, 470, 470, 470, 470,
yading@10 187 427, 427, 470, 470, 427, 427, 470, 470,
yading@10 188 427, 427, 470, 427, 427, 427, 470, 470,
yading@10 189 427, 427, 470, 427, 427, 427, 470, 470,
yading@10 190 470, 470, 470, 470, 470, 470, 470, 470,
yading@10 191 470, 470, 470, 470, 470, 470, 470, 470
yading@10 192 },
yading@10 193 {
yading@10 194 1707, 1707, 2433, 2433, 3414, 3414, 3414, 3414,
yading@10 195 1707, 1707, 2433, 2433, 3414, 3414, 3414, 3414,
yading@10 196 2433, 2433, 3414, 3414, 4822, 4822, 4822, 4822,
yading@10 197 2433, 2433, 3414, 3414, 4822, 4822, 4822, 4822,
yading@10 198 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
yading@10 199 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
yading@10 200 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
yading@10 201 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414
yading@10 202 },
yading@10 203 {
yading@10 204 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 205 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 206 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 207 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 208 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 209 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 210 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
yading@10 211 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281
yading@10 212 },
yading@10 213 {
yading@10 214 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 215 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 216 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 217 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 218 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 219 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 220 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
yading@10 221 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433
yading@10 222 },
yading@10 223 {
yading@10 224 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
yading@10 225 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
yading@10 226 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
yading@10 227 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
yading@10 228 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
yading@10 229 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
yading@10 230 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
yading@10 231 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281
yading@10 232 },
yading@10 233 {
yading@10 234 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
yading@10 235 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
yading@10 236 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 237 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
yading@10 238 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
yading@10 239 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
yading@10 240 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
yading@10 241 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433
yading@10 242 },
yading@10 243 {
yading@10 244 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 245 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 246 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 247 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 248 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 249 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 250 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
yading@10 251 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707
yading@10 252 },
yading@10 253 {
yading@10 254 86, 171, 171, 214, 214, 214, 214, 257,
yading@10 255 171, 171, 214, 214, 214, 214, 257, 257,
yading@10 256 171, 214, 214, 214, 214, 257, 257, 257,
yading@10 257 214, 214, 214, 214, 257, 257, 257, 299,
yading@10 258 214, 214, 214, 257, 257, 257, 299, 299,
yading@10 259 214, 214, 257, 257, 257, 299, 299, 299,
yading@10 260 214, 257, 257, 257, 299, 299, 299, 342,
yading@10 261 257, 257, 257, 299, 299, 299, 342, 342
yading@10 262 },
yading@10 263 {
yading@10 264 854, 854, 1195, 1195, 1707, 1707, 1707, 1707,
yading@10 265 854, 854, 1195, 1195, 1707, 1707, 1707, 1707,
yading@10 266 1195, 1195, 1707, 1707, 2390, 2390, 2390, 2390,
yading@10 267 1195, 1195, 1707, 1707, 2390, 2390, 2390, 2390,
yading@10 268 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
yading@10 269 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
yading@10 270 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
yading@10 271 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707
yading@10 272 }
yading@10 273 };
yading@10 274
yading@10 275 static const uint16_t ivi4_quant_4x4_intra[5][16] = {
yading@10 276 {
yading@10 277 22, 214, 257, 299,
yading@10 278 214, 257, 299, 342,
yading@10 279 257, 299, 342, 427,
yading@10 280 299, 342, 427, 513
yading@10 281 },
yading@10 282 {
yading@10 283 129, 1025, 1451, 1451,
yading@10 284 1025, 1025, 1451, 1451,
yading@10 285 1451, 1451, 2049, 2049,
yading@10 286 1451, 1451, 2049, 2049
yading@10 287 },
yading@10 288 {
yading@10 289 43, 171, 171, 171,
yading@10 290 43, 171, 171, 171,
yading@10 291 43, 171, 171, 171,
yading@10 292 43, 171, 171, 171
yading@10 293 },
yading@10 294 {
yading@10 295 43, 43, 43, 43,
yading@10 296 171, 171, 171, 171,
yading@10 297 171, 171, 171, 171,
yading@10 298 171, 171, 171, 171
yading@10 299 },
yading@10 300 {
yading@10 301 43, 43, 43, 43,
yading@10 302 43, 43, 43, 43,
yading@10 303 43, 43, 43, 43,
yading@10 304 43, 43, 43, 43
yading@10 305 }
yading@10 306 };
yading@10 307
yading@10 308 static const uint16_t ivi4_quant_4x4_inter[5][16] = {
yading@10 309 {
yading@10 310 107, 214, 257, 299,
yading@10 311 214, 257, 299, 299,
yading@10 312 257, 299, 299, 342,
yading@10 313 299, 299, 342, 342
yading@10 314 },
yading@10 315 {
yading@10 316 513, 1025, 1238, 1238,
yading@10 317 1025, 1025, 1238, 1238,
yading@10 318 1238, 1238, 1451, 1451,
yading@10 319 1238, 1238, 1451, 1451
yading@10 320 },
yading@10 321 {
yading@10 322 43, 171, 171, 171,
yading@10 323 43, 171, 171, 171,
yading@10 324 43, 171, 171, 171,
yading@10 325 43, 171, 171, 171
yading@10 326 },
yading@10 327 {
yading@10 328 43, 43, 43, 43,
yading@10 329 171, 171, 171, 171,
yading@10 330 171, 171, 171, 171,
yading@10 331 171, 171, 171, 171
yading@10 332 },
yading@10 333 {
yading@10 334 43, 43, 43, 43,
yading@10 335 43, 43, 43, 43,
yading@10 336 43, 43, 43, 43,
yading@10 337 43, 43, 43, 43
yading@10 338 }
yading@10 339 };
yading@10 340
yading@10 341 /**
yading@10 342 * Table for mapping quant matrix index from the bitstream
yading@10 343 * into internal quant table number.
yading@10 344 */
yading@10 345 static const uint8_t quant_index_to_tab[22] = {
yading@10 346 0, 1, 0, 2, 1, 3, 0, 4, 1, 5, 0, 1, 6, 7, 8, // for 8x8 quant matrixes
yading@10 347 0, 1, 2, 2, 3, 3, 4 // for 4x4 quant matrixes
yading@10 348 };
yading@10 349
yading@10 350 #endif /* AVCODEC_INDEO4DATA_H */