Mercurial > libavcodec.hg
annotate svq1.c @ 903:22ee74da2cd3 libavcodec
cleanup
adding AVVideoFrame
moving quality, pict_type, key_frame, qscale_table, ... to AVVideoFrame
removing obsolete variables in AVCodecContext
skiping of MBs in b frames
correctly initalizing AVCodecContext
picture buffer cleanup
| author | michaelni |
|---|---|
| date | Wed, 04 Dec 2002 10:04:03 +0000 |
| parents | 058194d7ade6 |
| children | 3814e9115672 |
| rev | line source |
|---|---|
|
536
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
1 /* |
| 521 | 2 * |
|
536
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
3 * Copyright (C) 2002 the xine project |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
4 * Copyright (C) 2002 the ffmpeg project |
| 521 | 5 * |
|
536
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
6 * This library is free software; you can redistribute it and/or |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
8 * License as published by the Free Software Foundation; either |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
9 * version 2 of the License, or (at your option) any later version. |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
10 * |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
11 * This library is distributed in the hope that it will be useful, |
| 521 | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
536
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
14 * Lesser General Public License for more details. |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
15 * |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
17 * License along with this library; if not, write to the Free Software |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
19 * |
| 537 | 20 * Ported to mplayer by Arpi <arpi@thot.banki.hu> |
|
536
6fac683d9997
Change licence to LGPL since there are no objections from side of original author
nickols_k
parents:
530
diff
changeset
|
21 * Ported to libavcodec by Nick Kurshev <nickols_k@mail.ru> |
| 521 | 22 * |
| 23 */ | |
| 24 //#define DEBUG_SVQ1 | |
| 25 #include <stdio.h> | |
| 26 #include <stdlib.h> | |
| 27 #include <string.h> | |
| 28 #include <unistd.h> | |
| 29 | |
| 528 | 30 #include "common.h" |
| 521 | 31 #include "avcodec.h" |
| 32 #include "dsputil.h" | |
| 33 #include "mpegvideo.h" | |
| 34 #include "bswap.h" | |
| 35 #define bit_buffer_t GetBitContext | |
| 551 | 36 |
| 37 static inline unsigned int get_bit_cache(GetBitContext *s){ | |
| 38 OPEN_READER(re, s) | |
| 39 UPDATE_CACHE(re, s) | |
| 40 return GET_CACHE(re, s); | |
| 41 // CLOSE_READER(re, s) | |
| 42 } | |
| 521 | 43 |
| 44 /* variable length (bit) code */ | |
| 45 typedef struct vlc_code_s { | |
| 46 int16_t value :10, | |
| 47 length :6; | |
| 48 } vlc_code_t; | |
| 49 | |
| 530 | 50 #define MEDIAN(a,b,c) (((a < b) != (b >= c)) ? b : (((a < c) != (c > b)) ? c : a)) |
| 521 | 51 |
| 52 #define SVQ1_BLOCK_SKIP 0 | |
| 53 #define SVQ1_BLOCK_INTER 1 | |
| 54 #define SVQ1_BLOCK_INTER_4V 2 | |
| 55 #define SVQ1_BLOCK_INTRA 3 | |
| 56 | |
| 57 /* motion vector (prediction) */ | |
| 58 typedef struct svq1_pmv_s { | |
| 59 int x; | |
| 60 int y; | |
| 61 } svq1_pmv_t; | |
| 62 | |
| 579 | 63 #include "svq1_cb.h" |
| 521 | 64 |
| 65 /* block type, codes 000 .. 1xx */ | |
| 528 | 66 static vlc_code_t svq1_block_type_table[8] = { |
| 521 | 67 { SVQ1_BLOCK_INTRA, 3 }, { SVQ1_BLOCK_INTER_4V, 3 }, |
| 68 { SVQ1_BLOCK_INTER, 2 }, { SVQ1_BLOCK_INTER, 2 }, | |
| 69 { SVQ1_BLOCK_SKIP, 1 }, { SVQ1_BLOCK_SKIP, 1 }, | |
| 70 { SVQ1_BLOCK_SKIP, 1 }, { SVQ1_BLOCK_SKIP, 1 } | |
| 71 }; | |
| 72 | |
| 73 /* motion vector, codes 0000011 .. 011xxxx */ | |
| 528 | 74 static vlc_code_t svq1_motion_table_0[61] = { |
| 521 | 75 { 7, 8 }, { 6, 8 }, { 5, 8 }, { 4, 7 }, { 4, 7 }, |
| 76 { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, | |
| 77 { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, | |
| 78 { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, | |
| 79 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 80 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 81 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 82 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 } | |
| 83 }; | |
| 84 | |
| 85 /* motion vector, codes 000000000010 ... 0000010111xx */ | |
| 528 | 86 static vlc_code_t svq1_motion_table_1[94] = { |
| 521 | 87 {32, 13}, {31, 13}, {30, 12}, {30, 12}, {29, 12}, {29, 12}, |
| 88 {28, 12}, {28, 12}, {27, 12}, {27, 12}, {26, 12}, {26, 12}, {25, 12}, {25, 12}, | |
| 89 {24, 11}, {24, 11}, {24, 11}, {24, 11}, {23, 11}, {23, 11}, {23, 11}, {23, 11}, | |
| 90 {22, 11}, {22, 11}, {22, 11}, {22, 11}, {21, 11}, {21, 11}, {21, 11}, {21, 11}, | |
| 91 {20, 11}, {20, 11}, {20, 11}, {20, 11}, {19, 11}, {19, 11}, {19, 11}, {19, 11}, | |
| 92 {18, 11}, {18, 11}, {18, 11}, {18, 11}, {17, 11}, {17, 11}, {17, 11}, {17, 11}, | |
| 93 {16, 11}, {16, 11}, {16, 11}, {16, 11}, {15, 11}, {15, 11}, {15, 11}, {15, 11}, | |
| 94 {14, 11}, {14, 11}, {14, 11}, {14, 11}, {13, 11}, {13, 11}, {13, 11}, {13, 11}, | |
| 95 {12, 11}, {12, 11}, {12, 11}, {12, 11}, {11, 11}, {11, 11}, {11, 11}, {11, 11}, | |
| 96 {10, 10}, {10, 10}, {10, 10}, {10, 10}, {10, 10}, {10, 10}, {10, 10}, {10, 10}, | |
| 97 { 9, 10}, { 9, 10}, { 9, 10}, { 9, 10}, { 9, 10}, { 9, 10}, { 9, 10}, { 9, 10}, | |
| 98 { 8, 10}, { 8, 10}, { 8, 10}, { 8, 10}, { 8, 10}, { 8, 10}, { 8, 10}, { 8, 10}, | |
| 99 }; | |
| 100 | |
| 101 /* inter-coded vector codebook count tables, codes 000000 ... 111111 */ | |
| 528 | 102 static vlc_code_t svq1_inter_vector_tables[6][64] = { |
| 521 | 103 /* 4x2 vector, codes 0000xxx ... 11xxxxx */ |
| 104 { { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, | |
| 105 { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, | |
| 106 { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, | |
| 107 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 108 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 109 { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, | |
| 110 {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, | |
| 111 {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 } }, | |
| 112 | |
| 113 /* 4x4 vector, codes 0000xxx ... 11xxxxx */ | |
| 114 { { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, | |
| 115 { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, | |
| 116 { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, | |
| 117 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 118 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 119 { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, | |
| 120 {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, | |
| 121 {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 }, {-1, 2 } }, | |
| 122 | |
| 123 /* 8x4 vector, codes 00000xx ... 1xxxxxx */ | |
| 124 { { 6, 5 }, { 6, 5 }, { 5, 5 }, { 5, 5 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, | |
| 125 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, | |
| 126 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 127 { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, | |
| 128 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 129 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 130 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 131 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 } }, | |
| 132 | |
| 133 /* 8x8 vector, codes 00000xx ... 1xxxxxx */ | |
| 134 { { 6, 5 }, { 6, 5 }, { 5, 5 }, { 5, 5 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, | |
| 135 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, | |
| 136 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 137 { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, | |
| 138 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 139 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 140 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 141 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 } }, | |
| 142 | |
| 143 /* 16x8 vector, codes 00000xx ... 1xxxxxx */ | |
| 144 { { 6, 5 }, { 6, 5 }, { 5, 5 }, { 5, 5 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, | |
| 145 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, { 2, 4 }, | |
| 146 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 147 { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, | |
| 148 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 149 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 150 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 151 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 } }, | |
| 152 | |
| 153 /* 16x16 vector, codes 000000x ... 1xxxxxx */ | |
| 154 { { 6, 6 }, { 5, 6 }, { 4, 5 }, { 4, 5 }, { 3, 5 }, { 3, 5 }, { 2, 5 }, { 2, 5 }, | |
| 155 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 156 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, | |
| 157 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, | |
| 158 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 159 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 160 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, | |
| 161 {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 }, {-1, 1 } } | |
| 162 }; | |
| 163 | |
| 164 /* vector codebook count tables, codes 0000000 ... 1111111 */ | |
| 528 | 165 static vlc_code_t svq1_intra_vector_tables[6][128] = { |
| 521 | 166 /* 4x2 vector, codes 00000xx ... 1xxxxxx */ |
| 167 { { 5, 5 }, { 5, 5 }, { 5, 5 }, { 5, 5 }, {-1, 5 }, {-1, 5 }, {-1, 5 }, {-1, 5 }, | |
| 168 { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, | |
| 169 { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, | |
| 170 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, | |
| 171 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 172 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 173 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 174 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 175 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 176 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 177 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 178 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 179 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 180 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 181 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 182 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 } }, | |
| 183 | |
| 184 /* 4x4 vector, codes 0000xxx ... 11xxxxx */ | |
| 185 { { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, | |
| 186 {-1, 4 }, {-1, 4 }, {-1, 4 }, {-1, 4 }, {-1, 4 }, {-1, 4 }, {-1, 4 }, {-1, 4 }, | |
| 187 { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, | |
| 188 { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, | |
| 189 { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, | |
| 190 { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, | |
| 191 { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, | |
| 192 { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 }, | |
| 193 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 194 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 195 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 196 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 197 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, | |
| 198 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, | |
| 199 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, | |
| 200 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 } }, | |
| 201 | |
| 202 /* 8x4 vector, codes 00000xx ... 1xxxxxx */ | |
| 203 { { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, {-1, 5 }, {-1, 5 }, {-1, 5 }, {-1, 5 }, | |
| 204 { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, | |
| 205 { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, { 5, 4 }, | |
| 206 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, | |
| 207 { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, | |
| 208 { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, { 4, 3 }, | |
| 209 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 210 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 211 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 212 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 213 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 214 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 215 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 216 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 217 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 218 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 } }, | |
| 219 | |
| 220 /* 8x8 vector, codes 000000x ... 1xxxxxx */ | |
| 221 { { 2, 6 }, { 2, 6 }, {-1, 6 }, {-1, 6 }, { 5, 5 }, { 5, 5 }, { 5, 5 }, { 5, 5 }, | |
| 222 { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, { 6, 4 }, | |
| 223 { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, { 4, 4 }, | |
| 224 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, | |
| 225 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 226 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 227 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 228 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 229 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 230 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 231 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 232 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 233 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 234 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 235 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 236 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 } }, | |
| 237 | |
| 238 /* 16x8 vector, codes 000000x ... 1xxxxxx */ | |
| 239 { { 4, 6 }, { 4, 6 }, {-1, 6 }, {-1, 6 }, { 5, 5 }, { 5, 5 }, { 5, 5 }, { 5, 5 }, | |
| 240 { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, | |
| 241 { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, | |
| 242 { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, { 6, 3 }, | |
| 243 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 244 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 245 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 246 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 247 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 248 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 249 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 250 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 251 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 252 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 253 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 254 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 } }, | |
| 255 | |
| 256 /* 16x16 vector, codes 0000000 ... 1xxxxxx */ | |
| 257 { { 5, 7 }, {-1, 7 }, { 4, 6 }, { 4, 6 }, { 6, 5 }, { 6, 5 }, { 6, 5 }, { 6, 5 }, | |
| 258 { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, | |
| 259 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 260 { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, | |
| 261 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 262 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 263 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 264 { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 }, | |
| 265 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 266 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 267 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 268 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 269 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 270 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 271 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 272 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 } } | |
| 273 }; | |
| 274 | |
| 275 /* intra mean value, codes 00100101 ... 1111xxxx */ | |
| 528 | 276 static vlc_code_t svq1_intra_mean_table_0[219] = { |
| 521 | 277 {135, 8 }, {136, 8 }, {165, 8 }, |
| 278 {134, 8 }, {129, 8 }, {164, 8 }, {163, 8 }, {133, 8 }, {162, 8 }, {174, 8 }, {175, 8 }, | |
| 279 {161, 8 }, {160, 8 }, {159, 8 }, {158, 8 }, {157, 8 }, {156, 8 }, {155, 8 }, {154, 8 }, | |
| 280 {153, 8 }, {151, 8 }, {152, 8 }, {132, 8 }, {110, 8 }, {131, 8 }, {108, 8 }, {130, 8 }, | |
| 281 {166, 8 }, {105, 8 }, {104, 8 }, {103, 8 }, {127, 8 }, {101, 8 }, {167, 8 }, {168, 8 }, | |
| 282 { 98, 8 }, {128, 8 }, { 48, 8 }, { 95, 8 }, { 62, 8 }, { 93, 8 }, { 92, 8 }, { 91, 8 }, | |
| 283 { 90, 8 }, { 89, 8 }, { 60, 8 }, { 87, 8 }, { 86, 8 }, { 57, 8 }, { 84, 8 }, { 83, 8 }, | |
| 284 { 82, 8 }, { 81, 8 }, { 80, 8 }, { 79, 8 }, { 78, 8 }, { 77, 8 }, { 76, 8 }, { 75, 8 }, | |
| 285 { 74, 8 }, { 73, 8 }, { 72, 8 }, { 71, 8 }, { 70, 8 }, { 69, 8 }, { 68, 8 }, { 67, 8 }, | |
| 286 { 66, 8 }, { 65, 8 }, { 56, 8 }, { 63, 8 }, { 23, 8 }, { 61, 8 }, { 30, 8 }, { 59, 8 }, | |
| 287 { 58, 8 }, { 52, 8 }, { 29, 8 }, { 55, 8 }, { 54, 8 }, { 53, 8 }, { 50, 8 }, { 51, 8 }, | |
| 288 { 22, 8 }, { 49, 8 }, { 85, 7 }, { 85, 7 }, { 97, 7 }, { 97, 7 }, { 88, 7 }, { 88, 7 }, | |
| 289 { 64, 7 }, { 64, 7 }, { 94, 7 }, { 94, 7 }, {106, 7 }, {106, 7 }, {107, 7 }, {107, 7 }, | |
| 290 {109, 7 }, {109, 7 }, {111, 7 }, {111, 7 }, {112, 7 }, {112, 7 }, {113, 7 }, {113, 7 }, | |
| 291 {114, 7 }, {114, 7 }, {115, 7 }, {115, 7 }, {116, 7 }, {116, 7 }, {117, 7 }, {117, 7 }, | |
| 292 {118, 7 }, {118, 7 }, {119, 7 }, {119, 7 }, {120, 7 }, {120, 7 }, { 99, 7 }, { 99, 7 }, | |
| 293 {102, 7 }, {102, 7 }, { 28, 7 }, { 28, 7 }, {100, 7 }, {100, 7 }, { 96, 7 }, { 96, 7 }, | |
| 294 {139, 7 }, {139, 7 }, { 24, 7 }, { 24, 7 }, { 1, 7 }, { 1, 7 }, {138, 7 }, {138, 7 }, | |
| 295 {121, 7 }, {121, 7 }, {122, 7 }, {122, 7 }, {123, 7 }, {123, 7 }, {124, 7 }, {124, 7 }, | |
| 296 {125, 7 }, {125, 7 }, {126, 7 }, {126, 7 }, {137, 7 }, {137, 7 }, {140, 7 }, {140, 7 }, | |
| 297 {150, 7 }, {150, 7 }, {144, 7 }, {144, 7 }, {141, 7 }, {141, 7 }, {142, 7 }, {142, 7 }, | |
| 298 {143, 7 }, {143, 7 }, {145, 7 }, {145, 7 }, {147, 7 }, {147, 7 }, {146, 7 }, {146, 7 }, | |
| 299 { 27, 6 }, { 27, 6 }, { 27, 6 }, { 27, 6 }, {148, 6 }, {148, 6 }, {148, 6 }, {148, 6 }, | |
| 300 {149, 6 }, {149, 6 }, {149, 6 }, {149, 6 }, { 0, 6 }, { 0, 6 }, { 0, 6 }, { 0, 6 }, | |
| 301 { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, | |
| 302 { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, { 26, 4 }, | |
| 303 { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, | |
| 304 { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 }, { 25, 4 } | |
| 305 }; | |
| 306 | |
| 307 /* intra mean value, codes 0000001101 ... 001001001x */ | |
| 528 | 308 static vlc_code_t svq1_intra_mean_table_1[135] = { |
| 521 | 309 {218, 10}, {219, 10}, {220, 10}, |
| 310 {221, 10}, {222, 10}, {217, 10}, {230, 10}, {215, 10}, {208, 10}, {207, 10}, {206, 10}, | |
| 311 {214, 10}, {204, 10}, {223, 10}, {224, 10}, {225, 10}, {226, 10}, {227, 10}, {228, 10}, | |
| 312 {229, 10}, {213, 10}, {212, 10}, {231, 10}, {232, 10}, {211, 10}, {210, 10}, {236, 10}, | |
| 313 {209, 10}, {216, 10}, {205, 10}, { 18, 10}, {186, 9 }, {186, 9 }, {185, 9 }, {185, 9 }, | |
| 314 {184, 9 }, {184, 9 }, {182, 9 }, {182, 9 }, {183, 9 }, {183, 9 }, {180, 9 }, {180, 9 }, | |
| 315 {181, 9 }, {181, 9 }, {178, 9 }, {178, 9 }, {187, 9 }, {187, 9 }, {176, 9 }, {176, 9 }, | |
| 316 {188, 9 }, {188, 9 }, {179, 9 }, {179, 9 }, {173, 9 }, {173, 9 }, {172, 9 }, {172, 9 }, | |
| 317 {171, 9 }, {171, 9 }, {170, 9 }, {170, 9 }, {169, 9 }, {169, 9 }, {189, 9 }, {189, 9 }, | |
| 318 {190, 9 }, {190, 9 }, {191, 9 }, {191, 9 }, {192, 9 }, {192, 9 }, {193, 9 }, {193, 9 }, | |
| 319 {194, 9 }, {194, 9 }, {195, 9 }, {195, 9 }, {196, 9 }, {196, 9 }, {197, 9 }, {197, 9 }, | |
| 320 {198, 9 }, {198, 9 }, {200, 9 }, {200, 9 }, {201, 9 }, {201, 9 }, {202, 9 }, {202, 9 }, | |
| 321 {203, 9 }, {203, 9 }, {199, 9 }, {199, 9 }, {177, 9 }, {177, 9 }, { 40, 9 }, { 40, 9 }, | |
| 322 { 39, 9 }, { 39, 9 }, { 38, 9 }, { 38, 9 }, { 37, 9 }, { 37, 9 }, { 36, 9 }, { 36, 9 }, | |
| 323 { 35, 9 }, { 35, 9 }, { 34, 9 }, { 34, 9 }, { 33, 9 }, { 33, 9 }, { 32, 9 }, { 32, 9 }, | |
| 324 { 31, 9 }, { 31, 9 }, { 21, 9 }, { 21, 9 }, { 11, 9 }, { 11, 9 }, { 41, 9 }, { 41, 9 }, | |
| 325 { 45, 9 }, { 45, 9 }, { 44, 9 }, { 44, 9 }, { 42, 9 }, { 42, 9 }, { 43, 9 }, { 43, 9 }, | |
| 326 { 47, 9 }, { 47, 9 }, { 46, 9 }, { 46, 9 } | |
| 327 }; | |
| 328 | |
| 329 /* intra mean value, codes 00000000000001 ... 00000011001xxx */ | |
| 528 | 330 static vlc_code_t svq1_intra_mean_table_2[207] = { |
| 521 | 331 {255, 14}, { 14, 14}, { 13, 14}, { 17, 12}, { 17, 12}, { 17, 12}, { 17, 12}, |
| 332 {243, 11}, {243, 11}, {243, 11}, {243, 11}, {243, 11}, {243, 11}, {243, 11}, {243, 11}, | |
| 333 {242, 11}, {242, 11}, {242, 11}, {242, 11}, {242, 11}, {242, 11}, {242, 11}, {242, 11}, | |
| 334 {241, 11}, {241, 11}, {241, 11}, {241, 11}, {241, 11}, {241, 11}, {241, 11}, {241, 11}, | |
| 335 {240, 11}, {240, 11}, {240, 11}, {240, 11}, {240, 11}, {240, 11}, {240, 11}, {240, 11}, | |
| 336 {237, 11}, {237, 11}, {237, 11}, {237, 11}, {237, 11}, {237, 11}, {237, 11}, {237, 11}, | |
| 337 {239, 11}, {239, 11}, {239, 11}, {239, 11}, {239, 11}, {239, 11}, {239, 11}, {239, 11}, | |
| 338 {235, 11}, {235, 11}, {235, 11}, {235, 11}, {235, 11}, {235, 11}, {235, 11}, {235, 11}, | |
| 339 {234, 11}, {234, 11}, {234, 11}, {234, 11}, {234, 11}, {234, 11}, {234, 11}, {234, 11}, | |
| 340 {233, 11}, {233, 11}, {233, 11}, {233, 11}, {233, 11}, {233, 11}, {233, 11}, {233, 11}, | |
| 341 {244, 11}, {244, 11}, {244, 11}, {244, 11}, {244, 11}, {244, 11}, {244, 11}, {244, 11}, | |
| 342 {238, 11}, {238, 11}, {238, 11}, {238, 11}, {238, 11}, {238, 11}, {238, 11}, {238, 11}, | |
| 343 { 20, 11}, { 20, 11}, { 20, 11}, { 20, 11}, { 20, 11}, { 20, 11}, { 20, 11}, { 20, 11}, | |
| 344 {248, 11}, {248, 11}, {248, 11}, {248, 11}, {248, 11}, {248, 11}, {248, 11}, {248, 11}, | |
| 345 {249, 11}, {249, 11}, {249, 11}, {249, 11}, {249, 11}, {249, 11}, {249, 11}, {249, 11}, | |
| 346 {250, 11}, {250, 11}, {250, 11}, {250, 11}, {250, 11}, {250, 11}, {250, 11}, {250, 11}, | |
| 347 {251, 11}, {251, 11}, {251, 11}, {251, 11}, {251, 11}, {251, 11}, {251, 11}, {251, 11}, | |
| 348 {252, 11}, {252, 11}, {252, 11}, {252, 11}, {252, 11}, {252, 11}, {252, 11}, {252, 11}, | |
| 349 {253, 11}, {253, 11}, {253, 11}, {253, 11}, {253, 11}, {253, 11}, {253, 11}, {253, 11}, | |
| 350 {254, 11}, {254, 11}, {254, 11}, {254, 11}, {254, 11}, {254, 11}, {254, 11}, {254, 11}, | |
| 351 { 12, 11}, { 12, 11}, { 12, 11}, { 12, 11}, { 12, 11}, { 12, 11}, { 12, 11}, { 12, 11}, | |
| 352 { 10, 11}, { 10, 11}, { 10, 11}, { 10, 11}, { 10, 11}, { 10, 11}, { 10, 11}, { 10, 11}, | |
| 353 {245, 11}, {245, 11}, {245, 11}, {245, 11}, {245, 11}, {245, 11}, {245, 11}, {245, 11}, | |
| 354 {247, 11}, {247, 11}, {247, 11}, {247, 11}, {247, 11}, {247, 11}, {247, 11}, {247, 11}, | |
| 355 { 19, 11}, { 19, 11}, { 19, 11}, { 19, 11}, { 19, 11}, { 19, 11}, { 19, 11}, { 19, 11}, | |
| 356 {246, 11}, {246, 11}, {246, 11}, {246, 11}, {246, 11}, {246, 11}, {246, 11}, {246, 11} | |
| 357 }; | |
| 358 | |
| 359 /* intra mean value, codes 00000000000000000000 ... 000000000000001xxxxx */ | |
| 528 | 360 static vlc_code_t svq1_intra_mean_table_3[64] = { |
| 521 | 361 { 6, 20}, { 3, 20}, { 4, 20}, { 5, 20}, { 7, 20}, { 8, 20}, { 9, 19}, { 9, 19}, |
| 362 { 2, 17}, { 2, 17}, { 2, 17}, { 2, 17}, { 2, 17}, { 2, 17}, { 2, 17}, { 2, 17}, | |
| 363 { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, | |
| 364 { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, { 16, 16}, | |
| 365 { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, | |
| 366 { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, | |
| 367 { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, | |
| 368 { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15}, { 15, 15} | |
| 369 }; | |
| 370 | |
| 371 /* inter mean value, codes 00001011 ... 1xxxxxxx */ | |
| 528 | 372 static vlc_code_t svq1_inter_mean_table_0[245] = { |
| 521 | 373 { 10, 8 }, { 12, 8 }, { 11, 8 }, {-11, 8 }, {-12, 8 }, |
| 374 {-10, 8 }, { -9, 8 }, { -7, 7 }, { -7, 7 }, { -6, 7 }, { -6, 7 }, { 8, 7 }, { 8, 7 }, | |
| 375 { -8, 7 }, { -8, 7 }, { 9, 7 }, { 9, 7 }, { 6, 7 }, { 6, 7 }, { 7, 7 }, { 7, 7 }, | |
| 376 { -5, 6 }, { -5, 6 }, { -5, 6 }, { -5, 6 }, { -4, 6 }, { -4, 6 }, { -4, 6 }, { -4, 6 }, | |
| 377 { 5, 6 }, { 5, 6 }, { 5, 6 }, { 5, 6 }, { 4, 6 }, { 4, 6 }, { 4, 6 }, { 4, 6 }, | |
| 378 { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, { 3, 5 }, | |
| 379 { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, { 2, 5 }, | |
| 380 { -2, 5 }, { -2, 5 }, { -2, 5 }, { -2, 5 }, { -2, 5 }, { -2, 5 }, { -2, 5 }, { -2, 5 }, | |
| 381 { -3, 5 }, { -3, 5 }, { -3, 5 }, { -3, 5 }, { -3, 5 }, { -3, 5 }, { -3, 5 }, { -3, 5 }, | |
| 382 { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, | |
| 383 { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, { -1, 4 }, | |
| 384 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 385 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 386 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 387 { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, { 1, 3 }, | |
| 388 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 389 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 390 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 391 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 392 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 393 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 394 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 395 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 396 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 397 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 398 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 399 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 400 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 401 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 402 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, | |
| 403 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 } | |
| 404 }; | |
| 405 | |
| 406 /* inter mean value, codes 000000010010 ... 00001011xxxx */ | |
| 528 | 407 static vlc_code_t svq1_inter_mean_table_1[158] = { |
| 521 | 408 {-30, 12}, {-31, 12}, {-32, 12}, {-33, 12}, { 31, 12}, {-34, 12}, |
| 409 {-35, 12}, { 29, 12}, { 30, 12}, { 33, 12}, { 34, 12}, { 32, 12}, {-29, 11}, {-29, 11}, | |
| 410 {-28, 11}, {-28, 11}, { 28, 11}, { 28, 11}, {-27, 11}, {-27, 11}, {-26, 11}, {-26, 11}, | |
| 411 { 27, 11}, { 27, 11}, { 26, 11}, { 26, 11}, { 25, 11}, { 25, 11}, { 24, 11}, { 24, 11}, | |
| 412 { 23, 11}, { 23, 11}, { 22, 11}, { 22, 11}, {-24, 11}, {-24, 11}, {-25, 11}, {-25, 11}, | |
| 413 {-23, 10}, {-23, 10}, {-23, 10}, {-23, 10}, {-21, 10}, {-21, 10}, {-21, 10}, {-21, 10}, | |
| 414 {-20, 10}, {-20, 10}, {-20, 10}, {-20, 10}, {-19, 10}, {-19, 10}, {-19, 10}, {-19, 10}, | |
| 415 {-18, 10}, {-18, 10}, {-18, 10}, {-18, 10}, {-22, 10}, {-22, 10}, {-22, 10}, {-22, 10}, | |
| 416 { 19, 10}, { 19, 10}, { 19, 10}, { 19, 10}, { 21, 10}, { 21, 10}, { 21, 10}, { 21, 10}, | |
| 417 { 20, 10}, { 20, 10}, { 20, 10}, { 20, 10}, { 18, 10}, { 18, 10}, { 18, 10}, { 18, 10}, | |
| 418 {-14, 9 }, {-14, 9 }, {-14, 9 }, {-14, 9 }, {-14, 9 }, {-14, 9 }, {-14, 9 }, {-14, 9 }, | |
| 419 {-17, 9 }, {-17, 9 }, {-17, 9 }, {-17, 9 }, {-17, 9 }, {-17, 9 }, {-17, 9 }, {-17, 9 }, | |
| 420 { 16, 9 }, { 16, 9 }, { 16, 9 }, { 16, 9 }, { 16, 9 }, { 16, 9 }, { 16, 9 }, { 16, 9 }, | |
| 421 { 13, 9 }, { 13, 9 }, { 13, 9 }, { 13, 9 }, { 13, 9 }, { 13, 9 }, { 13, 9 }, { 13, 9 }, | |
| 422 { 14, 9 }, { 14, 9 }, { 14, 9 }, { 14, 9 }, { 14, 9 }, { 14, 9 }, { 14, 9 }, { 14, 9 }, | |
| 423 { 15, 9 }, { 15, 9 }, { 15, 9 }, { 15, 9 }, { 15, 9 }, { 15, 9 }, { 15, 9 }, { 15, 9 }, | |
| 424 { 17, 9 }, { 17, 9 }, { 17, 9 }, { 17, 9 }, { 17, 9 }, { 17, 9 }, { 17, 9 }, { 17, 9 }, | |
| 425 {-13, 9 }, {-13, 9 }, {-13, 9 }, {-13, 9 }, {-13, 9 }, {-13, 9 }, {-13, 9 }, {-13, 9 }, | |
| 426 {-16, 9 }, {-16, 9 }, {-16, 9 }, {-16, 9 }, {-16, 9 }, {-16, 9 }, {-16, 9 }, {-16, 9 }, | |
| 427 {-15, 9 }, {-15, 9 }, {-15, 9 }, {-15, 9 }, {-15, 9 }, {-15, 9 }, {-15, 9 }, {-15, 9 } | |
| 428 }; | |
| 429 | |
| 430 /* inter mean value, codes 000000000010111 ... 0000000100011xx */ | |
| 528 | 431 static vlc_code_t svq1_inter_mean_table_2[121] = { |
| 521 | 432 { 61, 15}, |
| 433 { 52, 15}, { 58, 15}, {-56, 15}, {-57, 15}, { 59, 15}, {-55, 15}, { 60, 15}, {-54, 15}, | |
| 434 { 53, 15}, {-62, 15}, {-60, 15}, {-59, 15}, {-58, 15}, { 57, 15}, { 56, 15}, {-53, 15}, | |
| 435 { 55, 15}, { 54, 15}, { 50, 14}, { 50, 14}, { 45, 14}, { 45, 14}, {-52, 14}, {-52, 14}, | |
| 436 {-51, 14}, {-51, 14}, {-50, 14}, {-50, 14}, { 46, 14}, { 46, 14}, {-49, 14}, {-49, 14}, | |
| 437 {-48, 14}, {-48, 14}, { 48, 14}, { 48, 14}, {-47, 14}, {-47, 14}, { 49, 14}, { 49, 14}, | |
| 438 {-45, 14}, {-45, 14}, {-44, 14}, {-44, 14}, { 47, 14}, { 47, 14}, { 51, 14}, { 51, 14}, | |
| 439 { 44, 14}, { 44, 14}, {-46, 14}, {-46, 14}, {-43, 13}, {-43, 13}, {-43, 13}, {-43, 13}, | |
| 440 {-42, 13}, {-42, 13}, {-42, 13}, {-42, 13}, {-41, 13}, {-41, 13}, {-41, 13}, {-41, 13}, | |
| 441 {-40, 13}, {-40, 13}, {-40, 13}, {-40, 13}, {-39, 13}, {-39, 13}, {-39, 13}, {-39, 13}, | |
| 442 {-38, 13}, {-38, 13}, {-38, 13}, {-38, 13}, {-37, 13}, {-37, 13}, {-37, 13}, {-37, 13}, | |
| 443 {-36, 13}, {-36, 13}, {-36, 13}, {-36, 13}, { 42, 13}, { 42, 13}, { 42, 13}, { 42, 13}, | |
| 444 { 36, 13}, { 36, 13}, { 36, 13}, { 36, 13}, { 43, 13}, { 43, 13}, { 43, 13}, { 43, 13}, | |
| 445 { 41, 13}, { 41, 13}, { 41, 13}, { 41, 13}, { 40, 13}, { 40, 13}, { 40, 13}, { 40, 13}, | |
| 446 { 35, 13}, { 35, 13}, { 35, 13}, { 35, 13}, { 39, 13}, { 39, 13}, { 39, 13}, { 39, 13}, | |
| 447 { 38, 13}, { 38, 13}, { 38, 13}, { 38, 13}, { 37, 13}, { 37, 13}, { 37, 13}, { 37, 13} | |
| 448 }; | |
| 449 | |
| 450 /* inter mean value, codes 000000000000100101 ... 0000000000101101xx */ | |
| 528 | 451 static vlc_code_t svq1_inter_mean_table_3[147] = { |
| 521 | 452 {111, 18}, {102, 18}, { 99, 18}, |
| 453 {-86, 18}, { 97, 18}, {-97, 18}, { 96, 18}, {-95, 18}, {-76, 18}, {-77, 18}, {-78, 18}, | |
| 454 {-85, 18}, {-80, 18}, {-81, 18}, { 89, 18}, { 90, 18}, {-84, 18}, {-89, 18}, { 80, 18}, | |
| 455 {-90, 18}, {-88, 18}, { 92, 18}, { 93, 18}, { 95, 18}, {-109,18}, {-79, 17}, {-79, 17}, | |
| 456 {-83, 17}, {-83, 17}, {-75, 17}, {-75, 17}, {-74, 17}, {-74, 17}, {-73, 17}, {-73, 17}, | |
| 457 {-72, 17}, {-72, 17}, { 87, 17}, { 87, 17}, { 86, 17}, { 86, 17}, { 75, 17}, { 75, 17}, | |
| 458 { 85, 17}, { 85, 17}, { 84, 17}, { 84, 17}, { 81, 17}, { 81, 17}, { 79, 17}, { 79, 17}, | |
| 459 { 74, 17}, { 74, 17}, { 72, 17}, { 72, 17}, { 82, 17}, { 82, 17}, { 78, 17}, { 78, 17}, | |
| 460 { 83, 17}, { 83, 17}, { 76, 17}, { 76, 17}, { 73, 17}, { 73, 17}, { 77, 17}, { 77, 17}, | |
| 461 { 70, 16}, { 70, 16}, { 70, 16}, { 70, 16}, { 69, 16}, { 69, 16}, { 69, 16}, { 69, 16}, | |
| 462 { 64, 16}, { 64, 16}, { 64, 16}, { 64, 16}, {-68, 16}, {-68, 16}, {-68, 16}, {-68, 16}, | |
| 463 {-66, 16}, {-66, 16}, {-66, 16}, {-66, 16}, { 68, 16}, { 68, 16}, { 68, 16}, { 68, 16}, | |
| 464 {-69, 16}, {-69, 16}, {-69, 16}, {-69, 16}, { 65, 16}, { 65, 16}, { 65, 16}, { 65, 16}, | |
| 465 { 71, 16}, { 71, 16}, { 71, 16}, { 71, 16}, {-70, 16}, {-70, 16}, {-70, 16}, {-70, 16}, | |
| 466 {-65, 16}, {-65, 16}, {-65, 16}, {-65, 16}, {-67, 16}, {-67, 16}, {-67, 16}, {-67, 16}, | |
| 467 {-63, 16}, {-63, 16}, {-63, 16}, {-63, 16}, {-71, 16}, {-71, 16}, {-71, 16}, {-71, 16}, | |
| 468 { 67, 16}, { 67, 16}, { 67, 16}, { 67, 16}, {-61, 16}, {-61, 16}, {-61, 16}, {-61, 16}, | |
| 469 {-64, 16}, {-64, 16}, {-64, 16}, {-64, 16}, { 63, 16}, { 63, 16}, { 63, 16}, { 63, 16}, | |
| 470 { 62, 16}, { 62, 16}, { 62, 16}, { 62, 16}, { 66, 16}, { 66, 16}, { 66, 16}, { 66, 16} | |
| 471 }; | |
| 472 | |
| 473 /* inter mean value, codes 00000000000001001001 ... 0000000000001001001x */ | |
| 528 | 474 static vlc_code_t svq1_inter_mean_table_4[75] = { |
| 521 | 475 {142, 20}, {135, 20}, {125, 20}, {123, 20}, {122, 20}, {119, 20}, {117, 20}, |
| 476 {113, 20}, {104, 20}, {103, 20}, {-120,20}, {-114,20}, {-108,20}, {-104,20}, {-102,20}, | |
| 477 {-101,20}, {-93, 20}, {-91, 19}, {-91, 19}, {-96, 19}, {-96, 19}, { 88, 19}, { 88, 19}, | |
| 478 { 91, 19}, { 91, 19}, { 94, 19}, { 94, 19}, {121, 19}, {121, 19}, {120, 19}, {120, 19}, | |
| 479 {-110,19}, {-110,19}, {118, 19}, {118, 19}, {115, 19}, {115, 19}, {114, 19}, {114, 19}, | |
| 480 {112, 19}, {112, 19}, {107, 19}, {107, 19}, {110, 19}, {110, 19}, {109, 19}, {109, 19}, | |
| 481 {108, 19}, {108, 19}, {-103,19}, {-103,19}, {106, 19}, {106, 19}, {105, 19}, {105, 19}, | |
| 482 {-100,19}, {-100,19}, {101, 19}, {101, 19}, {100, 19}, {100, 19}, {-99, 19}, {-99, 19}, | |
| 483 {-82, 19}, {-82, 19}, {-87, 19}, {-87, 19}, {-94, 19}, {-94, 19}, {-98, 19}, {-98, 19}, | |
| 484 { 98, 19}, { 98, 19}, {-92, 19}, {-92, 19} | |
| 485 }; | |
| 486 | |
| 487 /* inter mean value, codes 0000000000000000000000 ... 000000000000010010001x */ | |
| 528 | 488 static vlc_code_t svq1_inter_mean_table_5[292] = { |
| 521 | 489 {255, 22}, {254, 22}, {253, 22}, {252, 22}, {251, 22}, {250, 22}, {249, 22}, {248, 22}, |
| 490 {247, 22}, {246, 22}, {245, 22}, {244, 22}, {243, 22}, {242, 22}, {241, 22}, {240, 22}, | |
| 491 {239, 22}, {238, 22}, {237, 22}, {236, 22}, {235, 22}, {234, 22}, {233, 22}, {232, 22}, | |
| 492 {231, 22}, {230, 22}, {229, 22}, {228, 22}, {227, 22}, {226, 22}, {225, 22}, {224, 22}, | |
| 493 {223, 22}, {222, 22}, {221, 22}, {220, 22}, {219, 22}, {218, 22}, {217, 22}, {216, 22}, | |
| 494 {215, 22}, {214, 22}, {213, 22}, {212, 22}, {211, 22}, {210, 22}, {209, 22}, {208, 22}, | |
| 495 {207, 22}, {206, 22}, {205, 22}, {204, 22}, {203, 22}, {202, 22}, {201, 22}, {200, 22}, | |
| 496 {199, 22}, {198, 22}, {197, 22}, {196, 22}, {195, 22}, {194, 22}, {193, 22}, {192, 22}, | |
| 497 {191, 22}, {190, 22}, {189, 22}, {188, 22}, {187, 22}, {186, 22}, {185, 22}, {184, 22}, | |
| 498 {183, 22}, {182, 22}, {181, 22}, {180, 22}, {179, 22}, {178, 22}, {177, 22}, {176, 22}, | |
| 499 {175, 22}, {174, 22}, {173, 22}, {172, 22}, {171, 22}, {170, 22}, {169, 22}, {168, 22}, | |
| 500 {167, 22}, {166, 22}, {-256,22}, {164, 22}, {-211,22}, {162, 22}, {161, 22}, {160, 22}, | |
| 501 {-210,22}, {-168,22}, {157, 22}, {156, 22}, {155, 22}, {154, 22}, {153, 22}, {152, 22}, | |
| 502 {151, 22}, {150, 22}, {149, 22}, {148, 22}, {147, 22}, {146, 22}, {145, 22}, {144, 22}, | |
| 503 {143, 22}, {-208,22}, {141, 22}, {140, 22}, {139, 22}, {-200,22}, {137, 22}, {136, 22}, | |
| 504 {-198,22}, {134, 22}, {133, 22}, {-196,22}, {-201,22}, {130, 22}, {129, 22}, {128, 22}, | |
| 505 {127, 22}, {126, 22}, {-195,22}, {124, 22}, {-167,22}, {-166,22}, {-165,22}, {-164,22}, | |
| 506 {-163,22}, {-162,22}, {-161,22}, {-180,22}, {-160,22}, {-159,22}, {-158,22}, {-157,22}, | |
| 507 {-156,22}, {-155,22}, {-154,22}, {-153,22}, {-152,22}, {-151,22}, {-150,22}, {-149,22}, | |
| 508 {-148,22}, {-147,22}, {-146,22}, {-145,22}, {-144,22}, {-143,22}, {-142,22}, {-141,22}, | |
| 509 {-140,22}, {-139,22}, {-138,22}, {-137,22}, {-136,22}, {-135,22}, {-134,22}, {-133,22}, | |
| 510 {-132,22}, {-131,22}, {-130,22}, {-129,22}, {-126,22}, {-125,22}, {-124,22}, {-123,22}, | |
| 511 {-122,22}, {-121,22}, {-118,22}, {-116,22}, {-115,22}, {-113,22}, {-112,22}, {-107,22}, | |
| 512 {-106,22}, {-169,22}, {-170,22}, {-171,22}, {-172,22}, {-173,22}, {-174,22}, {-175,22}, | |
| 513 {-176,22}, {-177,22}, {-178,22}, {-187,22}, {-179,22}, {-181,22}, {-182,22}, {-183,22}, | |
| 514 {-184,22}, {-185,22}, {-186,22}, {-235,22}, {-188,22}, {-189,22}, {-190,22}, {-191,22}, | |
| 515 {-192,22}, {-193,22}, {-194,22}, {-197,22}, {-255,22}, {-254,22}, {-253,22}, {-252,22}, | |
| 516 {-251,22}, {-250,22}, {-249,22}, {-248,22}, {-247,22}, {-246,22}, {-245,22}, {-244,22}, | |
| 517 {-243,22}, {-242,22}, {-241,22}, {-240,22}, {-239,22}, {-238,22}, {-237,22}, {-232,22}, | |
| 518 {-236,22}, {-234,22}, {-233,22}, {-217,22}, {-231,22}, {-230,22}, {-229,22}, {-228,22}, | |
| 519 {-227,22}, {-226,22}, {-225,22}, {-224,22}, {-223,22}, {-222,22}, {-221,22}, {-220,22}, | |
| 520 {-219,22}, {-216,22}, {-202,22}, {-205,22}, {-215,22}, {-214,22}, {-213,22}, {-204,22}, | |
| 521 {-212,22}, {-209,22}, {-218,22}, {-199,22}, {-207,22}, {-206,22}, {165, 21}, {165, 21}, | |
| 522 {131, 21}, {131, 21}, {163, 21}, {163, 21}, {-203,21}, {-203,21}, {116, 21}, {116, 21}, | |
| 523 {159, 21}, {159, 21}, {138, 21}, {138, 21}, {158, 21}, {158, 21}, {-105,21}, {-105,21}, | |
| 524 {-111,21}, {-111,21}, {132, 21}, {132, 21}, {128, 21}, {128, 21}, {-127,21}, {-127,21}, | |
| 525 {-119,21}, {-119,21}, {-117,21}, {-117,21} | |
| 526 }; | |
| 527 | |
| 528 | 528 #define SVQ1_PROCESS_VECTOR()\ |
| 529 for (; level > 0; i++) {\ | |
| 530 /* process next depth */\ | |
| 531 if (i == m) {\ | |
| 532 m = n;\ | |
| 533 if (--level == 0)\ | |
| 534 break;\ | |
| 535 }\ | |
| 536 /* divide block if next bit set */\ | |
| 537 if (get_bits (bitbuf, 1) == 0)\ | |
| 538 break;\ | |
| 539 /* add child nodes */\ | |
| 540 list[n++] = list[i];\ | |
| 541 list[n++] = list[i] + (((level & 1) ? pitch : 1) << ((level / 2) + 1));\ | |
| 542 } | |
| 521 | 543 |
| 528 | 544 #define SVQ1_ADD_CODEBOOK()\ |
| 545 /* add codebook entries to vector */\ | |
| 546 for (j=0; j < stages; j++) {\ | |
| 547 n3 = codebook[entries[j]] ^ 0x80808080;\ | |
| 548 n1 += ((n3 & 0xFF00FF00) >> 8);\ | |
| 549 n2 += (n3 & 0x00FF00FF);\ | |
| 550 }\ | |
| 551 \ | |
| 552 /* clip to [0..255] */\ | |
| 553 if (n1 & 0xFF00FF00) {\ | |
| 554 n3 = ((( n1 >> 15) & 0x00010001) | 0x01000100) - 0x00010001;\ | |
| 555 n1 += 0x7F007F00;\ | |
| 556 n1 |= (((~n1 >> 15) & 0x00010001) | 0x01000100) - 0x00010001;\ | |
| 557 n1 &= (n3 & 0x00FF00FF);\ | |
| 558 }\ | |
| 559 \ | |
| 560 if (n2 & 0xFF00FF00) {\ | |
| 561 n3 = ((( n2 >> 15) & 0x00010001) | 0x01000100) - 0x00010001;\ | |
| 562 n2 += 0x7F007F00;\ | |
| 563 n2 |= (((~n2 >> 15) & 0x00010001) | 0x01000100) - 0x00010001;\ | |
| 564 n2 &= (n3 & 0x00FF00FF);\ | |
| 565 } | |
| 566 | |
| 567 #define SVQ1_DO_CODEBOOK_INTRA()\ | |
| 568 for (y=0; y < height; y++) {\ | |
| 569 for (x=0; x < (width / 4); x++, codebook++) {\ | |
| 570 n1 = n4;\ | |
| 571 n2 = n4;\ | |
| 572 SVQ1_ADD_CODEBOOK()\ | |
| 573 /* store result */\ | |
| 574 dst[x] = (n1 << 8) | n2;\ | |
| 575 }\ | |
| 576 dst += (pitch / 4);\ | |
| 577 } | |
| 578 | |
| 579 #define SVQ1_DO_CODEBOOK_NONINTRA()\ | |
| 580 for (y=0; y < height; y++) {\ | |
| 581 for (x=0; x < (width / 4); x++, codebook++) {\ | |
| 582 n3 = dst[x];\ | |
| 583 /* add mean value to vector */\ | |
| 584 n1 = ((n3 & 0xFF00FF00) >> 8) + n4;\ | |
| 585 n2 = (n3 & 0x00FF00FF) + n4;\ | |
| 586 SVQ1_ADD_CODEBOOK()\ | |
| 587 /* store result */\ | |
| 588 dst[x] = (n1 << 8) | n2;\ | |
| 589 }\ | |
| 590 dst += (pitch / 4);\ | |
| 591 } | |
| 592 | |
| 593 #define SVQ1_CALC_CODEBOOK_ENTRIES(cbook)\ | |
| 862 | 594 codebook = (const uint32_t *) cbook[level];\ |
| 528 | 595 bit_cache = get_bits (bitbuf, 4*stages);\ |
| 596 /* calculate codebook entries for this vector */\ | |
| 597 for (j=0; j < stages; j++) {\ | |
| 598 entries[j] = (((bit_cache >> (4*(stages - j - 1))) & 0xF) + 16*j) << (level + 1);\ | |
| 599 }\ | |
| 600 mean -= (stages * 128);\ | |
| 601 n4 = ((mean + (mean >> 31)) << 16) | (mean & 0xFFFF); | |
| 602 | |
| 603 static int svq1_decode_block_intra (bit_buffer_t *bitbuf, uint8_t *pixels, int pitch ) { | |
| 521 | 604 uint32_t bit_cache; |
| 605 vlc_code_t *vlc; | |
| 606 uint8_t *list[63]; | |
| 607 uint32_t *dst; | |
| 862 | 608 const uint32_t *codebook; |
| 521 | 609 int entries[6]; |
| 610 int i, j, m, n; | |
| 611 int mean, stages; | |
| 862 | 612 unsigned x, y, width, height, level; |
| 521 | 613 uint32_t n1, n2, n3, n4; |
| 614 | |
| 615 /* initialize list for breadth first processing of vectors */ | |
| 616 list[0] = pixels; | |
| 617 | |
| 618 /* recursively process vector */ | |
| 619 for (i=0, m=1, n=1, level=5; i < n; i++) { | |
| 528 | 620 SVQ1_PROCESS_VECTOR(); |
| 521 | 621 |
| 622 /* destination address and vector size */ | |
| 623 dst = (uint32_t *) list[i]; | |
| 624 width = 1 << ((4 + level) /2); | |
| 625 height = 1 << ((3 + level) /2); | |
| 626 | |
| 627 /* get number of stages (-1 skips vector, 0 for mean only) */ | |
| 628 bit_cache = get_bit_cache (bitbuf); | |
| 629 | |
| 528 | 630 vlc = &svq1_intra_vector_tables[level][bit_cache >> (32 - 7)]; |
| 521 | 631 |
| 632 /* flush bits */ | |
| 633 stages = vlc->value; | |
| 634 skip_bits(bitbuf,vlc->length); | |
| 635 | |
| 636 if (stages == -1) { | |
| 637 for (y=0; y < height; y++) { | |
| 638 memset (&dst[y*(pitch / 4)], 0, width); | |
| 639 } | |
| 640 continue; /* skip vector */ | |
| 641 } | |
| 642 | |
| 643 if ((stages > 0) && (level >= 4)) { | |
| 644 #ifdef DEBUG_SVQ1 | |
| 528 | 645 printf("Error (svq1_decode_block_intra): invalid vector: stages=%i level=%i\n",stages,level); |
| 521 | 646 #endif |
| 647 return -1; /* invalid vector */ | |
| 648 } | |
| 649 | |
| 650 /* get mean value for vector */ | |
| 651 bit_cache = get_bit_cache (bitbuf); | |
| 652 | |
| 528 | 653 if (bit_cache >= 0x25000000) |
| 654 vlc = &svq1_intra_mean_table_0[(bit_cache >> (32 - 8)) - 37]; | |
| 655 else if (bit_cache >= 0x03400000) | |
| 656 vlc = &svq1_intra_mean_table_1[(bit_cache >> (32 - 10)) - 13]; | |
| 657 else if (bit_cache >= 0x00040000) | |
| 658 vlc = &svq1_intra_mean_table_2[(bit_cache >> (32 - 14)) - 1]; | |
| 659 else | |
| 660 vlc = &svq1_intra_mean_table_3[bit_cache >> (32 - 20)]; | |
| 521 | 661 |
| 662 /* flush bits */ | |
| 663 mean = vlc->value; | |
| 664 skip_bits(bitbuf,vlc->length); | |
| 665 | |
| 528 | 666 if (stages == 0) { |
| 521 | 667 for (y=0; y < height; y++) { |
| 668 memset (&dst[y*(pitch / 4)], mean, width); | |
| 669 } | |
| 670 } else { | |
| 528 | 671 SVQ1_CALC_CODEBOOK_ENTRIES(svq1_intra_codebooks); |
| 672 SVQ1_DO_CODEBOOK_INTRA() | |
| 521 | 673 } |
| 674 } | |
| 675 | |
| 676 return 0; | |
| 677 } | |
| 678 | |
| 528 | 679 static int svq1_decode_block_non_intra (bit_buffer_t *bitbuf, uint8_t *pixels, int pitch ) { |
| 680 uint32_t bit_cache; | |
| 681 vlc_code_t *vlc; | |
| 682 uint8_t *list[63]; | |
| 683 uint32_t *dst; | |
| 862 | 684 const uint32_t *codebook; |
| 528 | 685 int entries[6]; |
| 686 int i, j, m, n; | |
| 687 int mean, stages; | |
| 688 int x, y, width, height, level; | |
| 689 uint32_t n1, n2, n3, n4; | |
| 690 | |
| 691 /* initialize list for breadth first processing of vectors */ | |
| 692 list[0] = pixels; | |
| 693 | |
| 694 /* recursively process vector */ | |
| 695 for (i=0, m=1, n=1, level=5; i < n; i++) { | |
| 696 SVQ1_PROCESS_VECTOR(); | |
| 697 | |
| 698 /* destination address and vector size */ | |
| 699 dst = (uint32_t *) list[i]; | |
| 700 width = 1 << ((4 + level) /2); | |
| 701 height = 1 << ((3 + level) /2); | |
| 702 | |
| 703 /* get number of stages (-1 skips vector, 0 for mean only) */ | |
| 704 bit_cache = get_bit_cache (bitbuf); | |
| 705 | |
| 706 vlc = &svq1_inter_vector_tables[level][bit_cache >> (32 - 6)]; | |
| 707 | |
| 708 /* flush bits */ | |
| 709 stages = vlc->value; | |
| 710 skip_bits(bitbuf,vlc->length); | |
| 711 | |
| 712 if (stages == -1) continue; /* skip vector */ | |
| 713 | |
| 714 if ((stages > 0) && (level >= 4)) { | |
| 715 #ifdef DEBUG_SVQ1 | |
| 716 printf("Error (svq1_decode_block_non_intra): invalid vector: stages=%i level=%i\n",stages,level); | |
| 717 #endif | |
| 718 return -1; /* invalid vector */ | |
| 719 } | |
| 720 | |
| 721 /* get mean value for vector */ | |
| 722 bit_cache = get_bit_cache (bitbuf); | |
| 723 | |
| 724 if (bit_cache >= 0x0B000000) | |
| 725 vlc = &svq1_inter_mean_table_0[(bit_cache >> (32 - 8)) - 11]; | |
| 726 else if (bit_cache >= 0x01200000) | |
| 727 vlc = &svq1_inter_mean_table_1[(bit_cache >> (32 - 12)) - 18]; | |
| 728 else if (bit_cache >= 0x002E0000) | |
| 729 vlc = &svq1_inter_mean_table_2[(bit_cache >> (32 - 15)) - 23]; | |
| 730 else if (bit_cache >= 0x00094000) | |
| 731 vlc = &svq1_inter_mean_table_3[(bit_cache >> (32 - 18)) - 37]; | |
| 732 else if (bit_cache >= 0x00049000) | |
| 733 vlc = &svq1_inter_mean_table_4[(bit_cache >> (32 - 20)) - 73]; | |
| 734 else | |
| 735 vlc = &svq1_inter_mean_table_5[bit_cache >> (32 - 22)]; | |
| 736 | |
| 737 /* flush bits */ | |
| 738 mean = vlc->value; | |
| 739 skip_bits(bitbuf,vlc->length); | |
| 740 | |
| 741 SVQ1_CALC_CODEBOOK_ENTRIES(svq1_inter_codebooks); | |
| 742 SVQ1_DO_CODEBOOK_NONINTRA() | |
| 743 } | |
| 744 return 0; | |
| 745 } | |
| 746 | |
| 747 static int svq1_decode_motion_vector (bit_buffer_t *bitbuf, svq1_pmv_t *mv, svq1_pmv_t **pmv) { | |
| 521 | 748 uint32_t bit_cache; |
| 749 vlc_code_t *vlc; | |
| 750 int diff, sign; | |
| 751 int i; | |
| 752 | |
| 753 for (i=0; i < 2; i++) { | |
| 754 | |
| 755 /* get motion code */ | |
| 756 bit_cache = get_bit_cache (bitbuf); | |
| 757 | |
| 758 if (!(bit_cache & 0xFFE00000)) | |
| 759 return -1; /* invalid vlc code */ | |
| 760 | |
| 761 if (bit_cache & 0x80000000) { | |
| 762 diff = 0; | |
| 763 | |
| 764 /* flush bit */ | |
| 765 skip_bits(bitbuf,1); | |
| 766 | |
| 767 } else { | |
| 768 if (bit_cache >= 0x06000000) { | |
| 528 | 769 vlc = &svq1_motion_table_0[(bit_cache >> (32 - 7)) - 3]; |
| 521 | 770 } else { |
| 528 | 771 vlc = &svq1_motion_table_1[(bit_cache >> (32 - 12)) - 2]; |
| 521 | 772 } |
| 773 | |
| 774 /* decode motion vector differential */ | |
| 775 sign = (int) (bit_cache << (vlc->length - 1)) >> 31; | |
| 776 diff = (vlc->value ^ sign) - sign; | |
| 777 | |
| 778 /* flush bits */ | |
| 779 skip_bits(bitbuf,vlc->length); | |
| 780 } | |
| 781 | |
| 782 /* add median of motion vector predictors and clip result */ | |
| 783 if (i == 1) | |
| 784 mv->y = ((diff + MEDIAN(pmv[0]->y, pmv[1]->y, pmv[2]->y)) << 26) >> 26; | |
| 785 else | |
| 786 mv->x = ((diff + MEDIAN(pmv[0]->x, pmv[1]->x, pmv[2]->x)) << 26) >> 26; | |
| 787 } | |
| 788 | |
| 789 return 0; | |
| 790 } | |
| 791 | |
| 528 | 792 static void svq1_skip_block (uint8_t *current, uint8_t *previous, int pitch, int x, int y) { |
| 521 | 793 uint8_t *src; |
| 794 uint8_t *dst; | |
| 795 int i; | |
| 796 | |
| 797 src = &previous[x + y*pitch]; | |
| 798 dst = current; | |
| 799 | |
| 800 for (i=0; i < 16; i++) { | |
| 801 memcpy (dst, src, 16); | |
| 802 src += pitch; | |
| 803 dst += pitch; | |
| 804 } | |
| 805 } | |
| 806 | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
807 static int svq1_motion_inter_block (MpegEncContext *s, bit_buffer_t *bitbuf, |
| 521 | 808 uint8_t *current, uint8_t *previous, int pitch, |
| 809 svq1_pmv_t *motion, int x, int y) { | |
| 810 uint8_t *src; | |
| 811 uint8_t *dst; | |
| 812 svq1_pmv_t mv; | |
| 813 svq1_pmv_t *pmv[3]; | |
| 814 int result; | |
| 815 | |
| 816 /* predict and decode motion vector */ | |
| 817 pmv[0] = &motion[0]; | |
| 818 if (y == 0) { | |
| 528 | 819 pmv[1] = |
| 521 | 820 pmv[2] = pmv[0]; |
| 821 } | |
| 528 | 822 else { |
| 823 pmv[1] = &motion[(x / 8) + 2]; | |
| 824 pmv[2] = &motion[(x / 8) + 4]; | |
| 825 } | |
| 521 | 826 |
| 528 | 827 result = svq1_decode_motion_vector (bitbuf, &mv, pmv); |
| 521 | 828 |
| 829 if (result != 0) | |
| 830 return result; | |
| 831 | |
| 528 | 832 motion[0].x = |
| 833 motion[(x / 8) + 2].x = | |
| 521 | 834 motion[(x / 8) + 3].x = mv.x; |
| 528 | 835 motion[0].y = |
| 836 motion[(x / 8) + 2].y = | |
| 521 | 837 motion[(x / 8) + 3].y = mv.y; |
| 838 | |
| 839 src = &previous[(x + (mv.x >> 1)) + (y + (mv.y >> 1))*pitch]; | |
| 840 dst = current; | |
| 841 | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
842 s->dsp.put_pixels_tab[0][((mv.y & 1) << 1) | (mv.x & 1)](dst,src,pitch,16); |
| 521 | 843 |
| 844 return 0; | |
| 845 } | |
| 846 | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
847 static int svq1_motion_inter_4v_block (MpegEncContext *s, bit_buffer_t *bitbuf, |
| 521 | 848 uint8_t *current, uint8_t *previous, int pitch, |
| 849 svq1_pmv_t *motion,int x, int y) { | |
| 850 uint8_t *src; | |
| 851 uint8_t *dst; | |
| 852 svq1_pmv_t mv; | |
| 853 svq1_pmv_t *pmv[4]; | |
| 854 int i, result; | |
| 855 | |
| 856 /* predict and decode motion vector (0) */ | |
| 857 pmv[0] = &motion[0]; | |
| 858 if (y == 0) { | |
| 528 | 859 pmv[1] = |
| 521 | 860 pmv[2] = pmv[0]; |
| 861 } | |
| 528 | 862 else { |
| 863 pmv[1] = &motion[(x / 8) + 2]; | |
| 864 pmv[2] = &motion[(x / 8) + 4]; | |
| 865 } | |
| 521 | 866 |
| 528 | 867 result = svq1_decode_motion_vector (bitbuf, &mv, pmv); |
| 521 | 868 |
| 869 if (result != 0) | |
| 870 return result; | |
| 871 | |
| 872 /* predict and decode motion vector (1) */ | |
| 873 pmv[0] = &mv; | |
| 874 if (y == 0) { | |
| 528 | 875 pmv[1] = |
| 521 | 876 pmv[2] = pmv[0]; |
| 877 } | |
| 528 | 878 else { |
| 879 pmv[1] = &motion[(x / 8) + 3]; | |
| 880 } | |
| 881 result = svq1_decode_motion_vector (bitbuf, &motion[0], pmv); | |
| 521 | 882 |
| 883 if (result != 0) | |
| 884 return result; | |
| 885 | |
| 886 /* predict and decode motion vector (2) */ | |
| 887 pmv[1] = &motion[0]; | |
| 888 pmv[2] = &motion[(x / 8) + 1]; | |
| 889 | |
| 528 | 890 result = svq1_decode_motion_vector (bitbuf, &motion[(x / 8) + 2], pmv); |
| 521 | 891 |
| 892 if (result != 0) | |
| 893 return result; | |
| 894 | |
| 895 /* predict and decode motion vector (3) */ | |
| 896 pmv[2] = &motion[(x / 8) + 2]; | |
| 897 pmv[3] = &motion[(x / 8) + 3]; | |
| 898 | |
| 528 | 899 result = svq1_decode_motion_vector (bitbuf, pmv[3], pmv); |
| 521 | 900 |
| 901 if (result != 0) | |
| 902 return result; | |
| 903 | |
| 904 /* form predictions */ | |
| 905 for (i=0; i < 4; i++) { | |
| 906 src = &previous[(x + (pmv[i]->x >> 1)) + (y + (pmv[i]->y >> 1))*pitch]; | |
| 907 dst = current; | |
| 908 | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
909 s->dsp.put_pixels_tab[1][((pmv[i]->y & 1) << 1) | (pmv[i]->x & 1)](dst,src,pitch,8); |
| 521 | 910 |
| 911 /* select next block */ | |
| 912 if (i & 1) { | |
| 913 current += 8*(pitch - 1); | |
| 914 previous += 8*(pitch - 1); | |
| 915 } else { | |
| 916 current += 8; | |
| 917 previous += 8; | |
| 918 } | |
| 919 } | |
| 920 | |
| 921 return 0; | |
| 922 } | |
| 923 | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
924 static int svq1_decode_delta_block (MpegEncContext *s, bit_buffer_t *bitbuf, |
| 521 | 925 uint8_t *current, uint8_t *previous, int pitch, |
| 926 svq1_pmv_t *motion, int x, int y) { | |
| 927 uint32_t bit_cache; | |
| 928 uint32_t block_type; | |
| 929 int result = 0; | |
| 930 | |
| 931 /* get block type */ | |
| 932 bit_cache = get_bit_cache (bitbuf); | |
| 933 | |
| 934 bit_cache >>= (32 - 3); | |
| 528 | 935 block_type = svq1_block_type_table[bit_cache].value; |
| 936 skip_bits(bitbuf,svq1_block_type_table[bit_cache].length); | |
| 521 | 937 |
| 938 /* reset motion vectors */ | |
| 939 if (block_type == SVQ1_BLOCK_SKIP || block_type == SVQ1_BLOCK_INTRA) { | |
| 528 | 940 motion[0].x = |
| 941 motion[0].y = | |
| 942 motion[(x / 8) + 2].x = | |
| 943 motion[(x / 8) + 2].y = | |
| 944 motion[(x / 8) + 3].x = | |
| 521 | 945 motion[(x / 8) + 3].y = 0; |
| 946 } | |
| 947 | |
| 948 switch (block_type) { | |
| 949 case SVQ1_BLOCK_SKIP: | |
| 528 | 950 svq1_skip_block (current, previous, pitch, x, y); |
| 521 | 951 break; |
| 952 | |
| 953 case SVQ1_BLOCK_INTER: | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
954 result = svq1_motion_inter_block (s, bitbuf, current, previous, pitch, motion, x, y); |
| 521 | 955 |
| 956 if (result != 0) | |
| 957 { | |
| 958 #ifdef DEBUG_SVQ1 | |
| 528 | 959 printf("Error in svq1_motion_inter_block %i\n",result); |
| 521 | 960 #endif |
| 961 break; | |
| 962 } | |
| 528 | 963 result = svq1_decode_block_non_intra (bitbuf, current, pitch); |
| 521 | 964 break; |
| 965 | |
| 966 case SVQ1_BLOCK_INTER_4V: | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
967 result = svq1_motion_inter_4v_block (s, bitbuf, current, previous, pitch, motion, x, y); |
| 521 | 968 |
| 969 if (result != 0) | |
| 970 { | |
| 971 #ifdef DEBUG_SVQ1 | |
| 528 | 972 printf("Error in svq1_motion_inter_4v_block %i\n",result); |
| 521 | 973 #endif |
| 974 break; | |
| 975 } | |
| 528 | 976 result = svq1_decode_block_non_intra (bitbuf, current, pitch); |
| 521 | 977 break; |
| 978 | |
| 979 case SVQ1_BLOCK_INTRA: | |
| 528 | 980 result = svq1_decode_block_intra (bitbuf, current, pitch); |
| 521 | 981 break; |
| 982 } | |
| 983 | |
| 984 return result; | |
| 985 } | |
| 986 | |
| 987 /* standard video sizes */ | |
| 528 | 988 static struct { int width; int height; } svq1_frame_size_table[8] = { |
| 521 | 989 { 160, 120 }, { 128, 96 }, { 176, 144 }, { 352, 288 }, |
| 990 { 704, 576 }, { 240, 180 }, { 320, 240 }, { -1, -1 } | |
| 991 }; | |
| 992 | |
| 528 | 993 static int svq1_decode_frame_header (bit_buffer_t *bitbuf,MpegEncContext *s) { |
| 521 | 994 int frame_size_code; |
| 995 | |
| 996 /* unknown field */ | |
| 997 get_bits (bitbuf, 8); | |
| 998 | |
| 999 /* frame type */ | |
| 557 | 1000 s->pict_type= get_bits (bitbuf, 2)+1; |
| 1001 if(s->pict_type==4) | |
| 1002 return -1; | |
| 521 | 1003 |
| 557 | 1004 if (s->pict_type == I_TYPE) { |
| 521 | 1005 |
| 1006 /* unknown fields */ | |
| 1007 if (s->f_code == 0x50 || s->f_code == 0x60) { | |
| 1008 get_bits (bitbuf, 16); | |
| 1009 } | |
| 1010 | |
| 1011 if ((s->f_code ^ 0x10) >= 0x50) { | |
| 1012 skip_bits(bitbuf,8*get_bits (bitbuf, 8)); | |
| 1013 } | |
| 1014 | |
| 1015 get_bits (bitbuf, 2); | |
| 1016 get_bits (bitbuf, 2); | |
| 1017 get_bits (bitbuf, 1); | |
| 1018 | |
| 1019 /* load frame size */ | |
| 1020 frame_size_code = get_bits (bitbuf, 3); | |
| 1021 | |
| 1022 if (frame_size_code == 7) { | |
| 1023 /* load width, height (12 bits each) */ | |
| 1024 s->width = get_bits (bitbuf, 12); | |
| 1025 s->height = get_bits (bitbuf, 12); | |
| 1026 | |
| 1027 if (!s->width || !s->height) | |
| 1028 return -1; | |
| 1029 } else { | |
| 1030 /* get width, height from table */ | |
| 528 | 1031 s->width = svq1_frame_size_table[frame_size_code].width; |
| 1032 s->height = svq1_frame_size_table[frame_size_code].height; | |
| 521 | 1033 } |
| 1034 } | |
| 1035 | |
| 1036 /* unknown fields */ | |
| 1037 if (get_bits (bitbuf, 1) == 1) { | |
| 1038 get_bits (bitbuf, 1); | |
| 1039 get_bits (bitbuf, 1); | |
| 1040 | |
| 1041 if (get_bits (bitbuf, 2) != 0) | |
| 1042 return -1; | |
| 1043 } | |
| 1044 | |
| 1045 if (get_bits (bitbuf, 1) == 1) { | |
| 1046 get_bits (bitbuf, 1); | |
| 1047 get_bits (bitbuf, 4); | |
| 1048 get_bits (bitbuf, 1); | |
| 1049 get_bits (bitbuf, 2); | |
| 1050 | |
| 1051 while (get_bits (bitbuf, 1) == 1) { | |
| 1052 get_bits (bitbuf, 8); | |
| 1053 } | |
| 1054 } | |
| 1055 | |
| 1056 return 0; | |
| 1057 } | |
| 1058 | |
| 1059 static int svq1_decode_frame(AVCodecContext *avctx, | |
| 1060 void *data, int *data_size, | |
| 1061 UINT8 *buf, int buf_size) | |
| 1062 { | |
| 1063 MpegEncContext *s=avctx->priv_data; | |
| 1064 uint8_t *current, *previous; | |
| 1065 int result, i, x, y, width, height; | |
| 903 | 1066 AVVideoFrame *pict = data; |
| 521 | 1067 |
| 1068 /* initialize bit buffer */ | |
| 1069 init_get_bits(&s->gb,buf,buf_size); | |
| 1070 | |
| 1071 /* decode frame header */ | |
| 1072 s->f_code = get_bits (&s->gb, 22); | |
| 1073 | |
| 1074 if ((s->f_code & ~0x70) || !(s->f_code & 0x60)) | |
| 1075 return -1; | |
| 1076 | |
| 1077 /* swap some header bytes (why?) */ | |
| 1078 if (s->f_code != 0x20) { | |
| 1079 uint32_t *src = (uint32_t *) (buf + 4); | |
| 1080 | |
| 1081 for (i=0; i < 4; i++) { | |
| 1082 src[i] = ((src[i] << 16) | (src[i] >> 16)) ^ src[7 - i]; | |
| 1083 } | |
| 1084 } | |
| 1085 | |
| 528 | 1086 result = svq1_decode_frame_header (&s->gb, s); |
| 521 | 1087 |
| 1088 if (result != 0) | |
| 1089 { | |
| 1090 #ifdef DEBUG_SVQ1 | |
| 528 | 1091 printf("Error in svq1_decode_frame_header %i\n",result); |
| 521 | 1092 #endif |
| 1093 return result; | |
| 1094 } | |
| 561 | 1095 |
| 1096 if(avctx->hurry_up && s->pict_type==B_TYPE) return buf_size; | |
| 521 | 1097 |
| 903 | 1098 if(MPV_frame_start(s, avctx) < 0) |
| 1099 return -1; | |
| 1100 | |
| 521 | 1101 /* decode y, u and v components */ |
| 1102 for (i=0; i < 3; i++) { | |
| 557 | 1103 int linesize; |
| 521 | 1104 if (i == 0) { |
| 528 | 1105 width = (s->width+15)&~15; |
| 1106 height = (s->height+15)&~15; | |
| 557 | 1107 linesize= s->linesize; |
| 521 | 1108 } else { |
| 560 | 1109 if(s->flags&CODEC_FLAG_GRAY) break; |
| 528 | 1110 width = (s->width/4+15)&~15; |
| 1111 height = (s->height/4+15)&~15; | |
| 557 | 1112 linesize= s->uvlinesize; |
| 521 | 1113 } |
| 1114 | |
| 903 | 1115 current = s->current_picture.data[i]; |
| 521 | 1116 |
| 557 | 1117 if(s->pict_type==B_TYPE){ |
| 903 | 1118 previous = s->next_picture.data[i]; |
| 557 | 1119 }else{ |
| 903 | 1120 previous = s->last_picture.data[i]; |
| 557 | 1121 } |
| 1122 | |
| 1123 if (s->pict_type == I_TYPE) { | |
| 521 | 1124 /* keyframe */ |
| 1125 for (y=0; y < height; y+=16) { | |
| 1126 for (x=0; x < width; x+=16) { | |
| 557 | 1127 result = svq1_decode_block_intra (&s->gb, ¤t[x], linesize); |
| 521 | 1128 if (result != 0) |
| 1129 { | |
| 1130 #ifdef DEBUG_SVQ1 | |
| 528 | 1131 printf("Error in svq1_decode_block %i (keyframe)\n",result); |
| 521 | 1132 #endif |
| 1133 return result; | |
| 1134 } | |
| 1135 } | |
| 557 | 1136 current += 16*linesize; |
| 521 | 1137 } |
| 1138 } else { | |
| 557 | 1139 svq1_pmv_t pmv[width/8+3]; |
| 521 | 1140 /* delta frame */ |
| 557 | 1141 memset (pmv, 0, ((width / 8) + 3) * sizeof(svq1_pmv_t)); |
| 521 | 1142 |
| 1143 for (y=0; y < height; y+=16) { | |
| 1144 for (x=0; x < width; x+=16) { | |
|
853
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
1145 result = svq1_decode_delta_block (s, &s->gb, ¤t[x], previous, |
|
eacc2dd8fd9d
* using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents:
771
diff
changeset
|
1146 linesize, pmv, x, y); |
| 521 | 1147 if (result != 0) |
| 1148 { | |
| 1149 #ifdef DEBUG_SVQ1 | |
| 528 | 1150 printf("Error in svq1_decode_delta_block %i\n",result); |
| 521 | 1151 #endif |
| 1152 return result; | |
| 1153 } | |
| 1154 } | |
| 1155 | |
| 557 | 1156 pmv[0].x = |
| 1157 pmv[0].y = 0; | |
| 521 | 1158 |
| 557 | 1159 current += 16*linesize; |
| 521 | 1160 } |
| 1161 } | |
| 903 | 1162 } |
| 1163 | |
| 1164 *pict = *(AVVideoFrame*)&s->current_picture; | |
| 528 | 1165 |
| 557 | 1166 |
| 903 | 1167 MPV_frame_end(s); |
| 1168 | |
| 1169 *data_size=sizeof(AVVideoFrame); | |
| 561 | 1170 return buf_size; |
| 521 | 1171 } |
| 1172 | |
| 1173 static int svq1_decode_init(AVCodecContext *avctx) | |
| 1174 { | |
| 1175 MpegEncContext *s = avctx->priv_data; | |
| 579 | 1176 |
| 521 | 1177 s->avctx = avctx; |
| 1178 s->width = (avctx->width+3)&~3; | |
| 1179 s->height = (avctx->height+3)&~3; | |
| 1180 s->codec_id= avctx->codec->id; | |
| 557 | 1181 avctx->pix_fmt = PIX_FMT_YUV410P; |
| 1182 avctx->has_b_frames= s->has_b_frames=1; // not true, but DP frames and these behave like unidirectional b frames | |
| 560 | 1183 s->flags= avctx->flags; |
| 521 | 1184 if (MPV_common_init(s) < 0) return -1; |
| 1185 return 0; | |
| 1186 } | |
| 1187 | |
| 1188 static int svq1_decode_end(AVCodecContext *avctx) | |
| 1189 { | |
| 1190 MpegEncContext *s = avctx->priv_data; | |
| 1191 | |
| 1192 MPV_common_end(s); | |
| 1193 return 0; | |
| 1194 } | |
| 1195 | |
| 1196 AVCodec svq1_decoder = { | |
| 1197 "svq1", | |
| 1198 CODEC_TYPE_VIDEO, | |
| 1199 CODEC_ID_SVQ1, | |
| 1200 sizeof(MpegEncContext), | |
| 1201 svq1_decode_init, | |
| 1202 NULL, | |
| 1203 svq1_decode_end, | |
| 557 | 1204 svq1_decode_frame, |
| 1205 CODEC_CAP_DR1, | |
| 521 | 1206 }; |
