00001
00032 #include "contributors.h"
00033 #include "global.h"
00034 #include "elements.h"
00035
00036 static int ec_flag[SE_MAX_ELEMENTS];
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00073 int set_ec_flag(
00074 int se)
00075 {
00076
00077
00078
00079
00080
00081 switch (se)
00082 {
00083 case SE_HEADER :
00084 ec_flag[SE_HEADER] = EC_REQ;
00085 case SE_PTYPE :
00086 ec_flag[SE_PTYPE] = EC_REQ;
00087 case SE_MBTYPE :
00088 ec_flag[SE_MBTYPE] = EC_REQ;
00089
00090 case SE_REFFRAME :
00091 ec_flag[SE_REFFRAME] = EC_REQ;
00092 ec_flag[SE_MVD] = EC_REQ;
00093 se = SE_CBP_INTER;
00094 break;
00095
00096 case SE_INTRAPREDMODE :
00097 ec_flag[SE_INTRAPREDMODE] = EC_REQ;
00098 se = SE_CBP_INTRA;
00099 break;
00100 case SE_MVD :
00101 ec_flag[SE_MVD] = EC_REQ;
00102 se = SE_CBP_INTER;
00103 break;
00104
00105 default:
00106 break;
00107 }
00108
00109 switch (se)
00110 {
00111 case SE_CBP_INTRA :
00112 ec_flag[SE_CBP_INTRA] = EC_REQ;
00113 case SE_LUM_DC_INTRA :
00114 ec_flag[SE_LUM_DC_INTRA] = EC_REQ;
00115 case SE_CHR_DC_INTRA :
00116 ec_flag[SE_CHR_DC_INTRA] = EC_REQ;
00117 case SE_LUM_AC_INTRA :
00118 ec_flag[SE_LUM_AC_INTRA] = EC_REQ;
00119 case SE_CHR_AC_INTRA :
00120 ec_flag[SE_CHR_AC_INTRA] = EC_REQ;
00121 break;
00122
00123 case SE_CBP_INTER :
00124 ec_flag[SE_CBP_INTER] = EC_REQ;
00125 case SE_LUM_DC_INTER :
00126 ec_flag[SE_LUM_DC_INTER] = EC_REQ;
00127 case SE_CHR_DC_INTER :
00128 ec_flag[SE_CHR_DC_INTER] = EC_REQ;
00129 case SE_LUM_AC_INTER :
00130 ec_flag[SE_LUM_AC_INTER] = EC_REQ;
00131 case SE_CHR_AC_INTER :
00132 ec_flag[SE_CHR_AC_INTER] = EC_REQ;
00133 break;
00134 case SE_DELTA_QUANT_INTER :
00135 ec_flag[SE_DELTA_QUANT_INTER] = EC_REQ;
00136 break;
00137 case SE_DELTA_QUANT_INTRA :
00138 ec_flag[SE_DELTA_QUANT_INTRA] = EC_REQ;
00139 break;
00140 default:
00141 break;
00142
00143 }
00144 return EC_REQ;
00145 }
00146
00154 void reset_ec_flags()
00155 {
00156 int i;
00157 for (i=0; i<SE_MAX_ELEMENTS; i++)
00158 ec_flag[i] = NO_EC;
00159 }
00160
00161
00173 int get_concealed_element(SyntaxElement *sym)
00174 {
00175 if (ec_flag[sym->type] == NO_EC)
00176 return NO_EC;
00177
00178
00179
00180
00181
00182 switch (sym->type)
00183 {
00184 case SE_HEADER :
00185 sym->len = 31;
00186 sym->inf = 0;
00187 break;
00188
00189 case SE_PTYPE :
00190 case SE_MBTYPE :
00191 case SE_REFFRAME :
00192 sym->len = 1;
00193 sym->inf = 0;
00194 break;
00195
00196 case SE_INTRAPREDMODE :
00197 case SE_MVD :
00198 sym->len = 1;
00199 sym->inf = 0;
00200 break;
00201
00202 case SE_CBP_INTRA :
00203 sym->len = 5;
00204 sym->inf = 0;
00205 break;
00206
00207 case SE_LUM_DC_INTRA :
00208 case SE_CHR_DC_INTRA :
00209 case SE_LUM_AC_INTRA :
00210 case SE_CHR_AC_INTRA :
00211 sym->len = 1;
00212 sym->inf = 0;
00213 break;
00214
00215 case SE_CBP_INTER :
00216 sym->len = 1;
00217 sym->inf = 0;
00218 break;
00219
00220 case SE_LUM_DC_INTER :
00221 case SE_CHR_DC_INTER :
00222 case SE_LUM_AC_INTER :
00223 case SE_CHR_AC_INTER :
00224 sym->len = 1;
00225 sym->inf = 0;
00226 break;
00227
00228 case SE_DELTA_QUANT_INTER:
00229 sym->len = 1;
00230 sym->inf = 0;
00231 break;
00232 case SE_DELTA_QUANT_INTRA:
00233 sym->len = 1;
00234 sym->inf = 0;
00235 break;
00236 default:
00237 break;
00238 }
00239
00240 return EC_REQ;
00241 }
00242