You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

970 lines
33KB

  1. /*
  2. * MSMPEG4 backend for encoder and decoder
  3. * Copyright (c) 2001 Fabrice Bellard
  4. * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
  5. *
  6. * msmpeg4v1 & v2 stuff by Michael Niedermayer <michaelni@gmx.at>
  7. *
  8. * This file is part of Libav.
  9. *
  10. * Libav is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU Lesser General Public
  12. * License as published by the Free Software Foundation; either
  13. * version 2.1 of the License, or (at your option) any later version.
  14. *
  15. * Libav is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. * Lesser General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU Lesser General Public
  21. * License along with Libav; if not, write to the Free Software
  22. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  23. */
  24. #include "avcodec.h"
  25. #include "internal.h"
  26. #include "mpegutils.h"
  27. #include "mpegvideo.h"
  28. #include "msmpeg4.h"
  29. #include "libavutil/x86/asm.h"
  30. #include "h263.h"
  31. #include "mpeg4video.h"
  32. #include "msmpeg4data.h"
  33. #include "vc1data.h"
  34. #include "wmv2.h"
  35. #define DC_VLC_BITS 9
  36. #define V2_INTRA_CBPC_VLC_BITS 3
  37. #define V2_MB_TYPE_VLC_BITS 7
  38. #define MV_VLC_BITS 9
  39. #define V2_MV_VLC_BITS 9
  40. #define TEX_VLC_BITS 9
  41. #define DEFAULT_INTER_INDEX 3
  42. static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n,
  43. int32_t **dc_val_ptr)
  44. {
  45. int i;
  46. if (n < 4) {
  47. i= 0;
  48. } else {
  49. i= n-3;
  50. }
  51. *dc_val_ptr= &s->last_dc[i];
  52. return s->last_dc[i];
  53. }
  54. /****************************************/
  55. /* decoding stuff */
  56. VLC ff_mb_non_intra_vlc[4];
  57. static VLC v2_dc_lum_vlc;
  58. static VLC v2_dc_chroma_vlc;
  59. static VLC v2_intra_cbpc_vlc;
  60. static VLC v2_mb_type_vlc;
  61. static VLC v2_mv_vlc;
  62. VLC ff_inter_intra_vlc;
  63. /* This is identical to h263 except that its range is multiplied by 2. */
  64. static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code)
  65. {
  66. int code, val, sign, shift;
  67. code = get_vlc2(&s->gb, v2_mv_vlc.table, V2_MV_VLC_BITS, 2);
  68. ff_dlog(s, "MV code %d at %d %d pred: %d\n", code, s->mb_x,s->mb_y, pred);
  69. if (code < 0)
  70. return 0xffff;
  71. if (code == 0)
  72. return pred;
  73. sign = get_bits1(&s->gb);
  74. shift = f_code - 1;
  75. val = code;
  76. if (shift) {
  77. val = (val - 1) << shift;
  78. val |= get_bits(&s->gb, shift);
  79. val++;
  80. }
  81. if (sign)
  82. val = -val;
  83. val += pred;
  84. if (val <= -64)
  85. val += 64;
  86. else if (val >= 64)
  87. val -= 64;
  88. return val;
  89. }
  90. static int msmpeg4v12_decode_mb(MpegEncContext *s, int16_t block[6][64])
  91. {
  92. int cbp, code, i;
  93. if (s->pict_type == AV_PICTURE_TYPE_P) {
  94. if (s->use_skip_mb_code) {
  95. if (get_bits1(&s->gb)) {
  96. /* skip mb */
  97. s->mb_intra = 0;
  98. for(i=0;i<6;i++)
  99. s->block_last_index[i] = -1;
  100. s->mv_dir = MV_DIR_FORWARD;
  101. s->mv_type = MV_TYPE_16X16;
  102. s->mv[0][0][0] = 0;
  103. s->mv[0][0][1] = 0;
  104. s->mb_skipped = 1;
  105. return 0;
  106. }
  107. }
  108. if(s->msmpeg4_version==2)
  109. code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
  110. else
  111. code = get_vlc2(&s->gb, ff_h263_inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  112. if(code<0 || code>7){
  113. av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
  114. return -1;
  115. }
  116. s->mb_intra = code >>2;
  117. cbp = code & 0x3;
  118. } else {
  119. s->mb_intra = 1;
  120. if(s->msmpeg4_version==2)
  121. cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
  122. else
  123. cbp= get_vlc2(&s->gb, ff_h263_intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 1);
  124. if(cbp<0 || cbp>3){
  125. av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
  126. return -1;
  127. }
  128. }
  129. if (!s->mb_intra) {
  130. int mx, my, cbpy;
  131. cbpy= get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1);
  132. if(cbpy<0){
  133. av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
  134. return -1;
  135. }
  136. cbp|= cbpy<<2;
  137. if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
  138. ff_h263_pred_motion(s, 0, 0, &mx, &my);
  139. mx= msmpeg4v2_decode_motion(s, mx, 1);
  140. my= msmpeg4v2_decode_motion(s, my, 1);
  141. s->mv_dir = MV_DIR_FORWARD;
  142. s->mv_type = MV_TYPE_16X16;
  143. s->mv[0][0][0] = mx;
  144. s->mv[0][0][1] = my;
  145. } else {
  146. if(s->msmpeg4_version==2){
  147. s->ac_pred = get_bits1(&s->gb);
  148. cbp|= get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
  149. } else{
  150. s->ac_pred = 0;
  151. cbp|= get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
  152. if(s->pict_type==AV_PICTURE_TYPE_P) cbp^=0x3C;
  153. }
  154. }
  155. s->bdsp.clear_blocks(s->block[0]);
  156. for (i = 0; i < 6; i++) {
  157. if (ff_msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
  158. {
  159. av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
  160. return -1;
  161. }
  162. }
  163. return 0;
  164. }
  165. static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64])
  166. {
  167. int cbp, code, i;
  168. uint8_t *coded_val;
  169. uint32_t * const mb_type_ptr = &s->current_picture.mb_type[s->mb_x + s->mb_y*s->mb_stride];
  170. if (s->pict_type == AV_PICTURE_TYPE_P) {
  171. if (s->use_skip_mb_code) {
  172. if (get_bits1(&s->gb)) {
  173. /* skip mb */
  174. s->mb_intra = 0;
  175. for(i=0;i<6;i++)
  176. s->block_last_index[i] = -1;
  177. s->mv_dir = MV_DIR_FORWARD;
  178. s->mv_type = MV_TYPE_16X16;
  179. s->mv[0][0][0] = 0;
  180. s->mv[0][0][1] = 0;
  181. s->mb_skipped = 1;
  182. *mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
  183. return 0;
  184. }
  185. }
  186. code = get_vlc2(&s->gb, ff_mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3);
  187. if (code < 0)
  188. return -1;
  189. //s->mb_intra = (code & 0x40) ? 0 : 1;
  190. s->mb_intra = (~code & 0x40) >> 6;
  191. cbp = code & 0x3f;
  192. } else {
  193. s->mb_intra = 1;
  194. code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2);
  195. if (code < 0)
  196. return -1;
  197. /* predict coded block pattern */
  198. cbp = 0;
  199. for(i=0;i<6;i++) {
  200. int val = ((code >> (5 - i)) & 1);
  201. if (i < 4) {
  202. int pred = ff_msmpeg4_coded_block_pred(s, i, &coded_val);
  203. val = val ^ pred;
  204. *coded_val = val;
  205. }
  206. cbp |= val << (5 - i);
  207. }
  208. }
  209. if (!s->mb_intra) {
  210. int mx, my;
  211. if(s->per_mb_rl_table && cbp){
  212. s->rl_table_index = decode012(&s->gb);
  213. s->rl_chroma_table_index = s->rl_table_index;
  214. }
  215. ff_h263_pred_motion(s, 0, 0, &mx, &my);
  216. if (ff_msmpeg4_decode_motion(s, &mx, &my) < 0)
  217. return -1;
  218. s->mv_dir = MV_DIR_FORWARD;
  219. s->mv_type = MV_TYPE_16X16;
  220. s->mv[0][0][0] = mx;
  221. s->mv[0][0][1] = my;
  222. *mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16;
  223. } else {
  224. ff_dlog(s, "I at %d %d %d %06X\n", s->mb_x, s->mb_y,
  225. ((cbp & 3) ? 1 : 0) +((cbp & 0x3C)? 2 : 0),
  226. show_bits(&s->gb, 24));
  227. s->ac_pred = get_bits1(&s->gb);
  228. *mb_type_ptr = MB_TYPE_INTRA;
  229. if(s->inter_intra_pred){
  230. s->h263_aic_dir= get_vlc2(&s->gb, ff_inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1);
  231. ff_dlog(s, "%d%d %d %d/",
  232. s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);
  233. }
  234. if(s->per_mb_rl_table && cbp){
  235. s->rl_table_index = decode012(&s->gb);
  236. s->rl_chroma_table_index = s->rl_table_index;
  237. }
  238. }
  239. s->bdsp.clear_blocks(s->block[0]);
  240. for (i = 0; i < 6; i++) {
  241. if (ff_msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
  242. {
  243. av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
  244. return -1;
  245. }
  246. }
  247. return 0;
  248. }
  249. /* init all vlc decoding tables */
  250. av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
  251. {
  252. MpegEncContext *s = avctx->priv_data;
  253. static int done = 0;
  254. int i;
  255. MVTable *mv;
  256. if (ff_h263_decode_init(avctx) < 0)
  257. return -1;
  258. ff_msmpeg4_common_init(s);
  259. if (!done) {
  260. done = 1;
  261. for(i=0;i<NB_RL_TABLES;i++) {
  262. ff_rl_init(&ff_rl_table[i], ff_static_rl_table_store[i]);
  263. }
  264. INIT_VLC_RL(ff_rl_table[0], 642);
  265. INIT_VLC_RL(ff_rl_table[1], 1104);
  266. INIT_VLC_RL(ff_rl_table[2], 554);
  267. INIT_VLC_RL(ff_rl_table[3], 940);
  268. INIT_VLC_RL(ff_rl_table[4], 962);
  269. INIT_VLC_RL(ff_rl_table[5], 554);
  270. mv = &ff_mv_tables[0];
  271. INIT_VLC_STATIC(&mv->vlc, MV_VLC_BITS, mv->n + 1,
  272. mv->table_mv_bits, 1, 1,
  273. mv->table_mv_code, 2, 2, 3714);
  274. mv = &ff_mv_tables[1];
  275. INIT_VLC_STATIC(&mv->vlc, MV_VLC_BITS, mv->n + 1,
  276. mv->table_mv_bits, 1, 1,
  277. mv->table_mv_code, 2, 2, 2694);
  278. INIT_VLC_STATIC(&ff_msmp4_dc_luma_vlc[0], DC_VLC_BITS, 120,
  279. &ff_table0_dc_lum[0][1], 8, 4,
  280. &ff_table0_dc_lum[0][0], 8, 4, 1158);
  281. INIT_VLC_STATIC(&ff_msmp4_dc_chroma_vlc[0], DC_VLC_BITS, 120,
  282. &ff_table0_dc_chroma[0][1], 8, 4,
  283. &ff_table0_dc_chroma[0][0], 8, 4, 1118);
  284. INIT_VLC_STATIC(&ff_msmp4_dc_luma_vlc[1], DC_VLC_BITS, 120,
  285. &ff_table1_dc_lum[0][1], 8, 4,
  286. &ff_table1_dc_lum[0][0], 8, 4, 1476);
  287. INIT_VLC_STATIC(&ff_msmp4_dc_chroma_vlc[1], DC_VLC_BITS, 120,
  288. &ff_table1_dc_chroma[0][1], 8, 4,
  289. &ff_table1_dc_chroma[0][0], 8, 4, 1216);
  290. INIT_VLC_STATIC(&v2_dc_lum_vlc, DC_VLC_BITS, 512,
  291. &ff_v2_dc_lum_table[0][1], 8, 4,
  292. &ff_v2_dc_lum_table[0][0], 8, 4, 1472);
  293. INIT_VLC_STATIC(&v2_dc_chroma_vlc, DC_VLC_BITS, 512,
  294. &ff_v2_dc_chroma_table[0][1], 8, 4,
  295. &ff_v2_dc_chroma_table[0][0], 8, 4, 1506);
  296. INIT_VLC_STATIC(&v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4,
  297. &ff_v2_intra_cbpc[0][1], 2, 1,
  298. &ff_v2_intra_cbpc[0][0], 2, 1, 8);
  299. INIT_VLC_STATIC(&v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8,
  300. &ff_v2_mb_type[0][1], 2, 1,
  301. &ff_v2_mb_type[0][0], 2, 1, 128);
  302. INIT_VLC_STATIC(&v2_mv_vlc, V2_MV_VLC_BITS, 33,
  303. &ff_mvtab[0][1], 2, 1,
  304. &ff_mvtab[0][0], 2, 1, 538);
  305. INIT_VLC_STATIC(&ff_mb_non_intra_vlc[0], MB_NON_INTRA_VLC_BITS, 128,
  306. &ff_wmv2_inter_table[0][0][1], 8, 4,
  307. &ff_wmv2_inter_table[0][0][0], 8, 4, 1636);
  308. INIT_VLC_STATIC(&ff_mb_non_intra_vlc[1], MB_NON_INTRA_VLC_BITS, 128,
  309. &ff_wmv2_inter_table[1][0][1], 8, 4,
  310. &ff_wmv2_inter_table[1][0][0], 8, 4, 2648);
  311. INIT_VLC_STATIC(&ff_mb_non_intra_vlc[2], MB_NON_INTRA_VLC_BITS, 128,
  312. &ff_wmv2_inter_table[2][0][1], 8, 4,
  313. &ff_wmv2_inter_table[2][0][0], 8, 4, 1532);
  314. INIT_VLC_STATIC(&ff_mb_non_intra_vlc[3], MB_NON_INTRA_VLC_BITS, 128,
  315. &ff_wmv2_inter_table[3][0][1], 8, 4,
  316. &ff_wmv2_inter_table[3][0][0], 8, 4, 2488);
  317. INIT_VLC_STATIC(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64,
  318. &ff_msmp4_mb_i_table[0][1], 4, 2,
  319. &ff_msmp4_mb_i_table[0][0], 4, 2, 536);
  320. INIT_VLC_STATIC(&ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 4,
  321. &ff_table_inter_intra[0][1], 2, 1,
  322. &ff_table_inter_intra[0][0], 2, 1, 8);
  323. }
  324. switch(s->msmpeg4_version){
  325. case 1:
  326. case 2:
  327. s->decode_mb= msmpeg4v12_decode_mb;
  328. break;
  329. case 3:
  330. case 4:
  331. s->decode_mb= msmpeg4v34_decode_mb;
  332. break;
  333. case 5:
  334. if (CONFIG_WMV2_DECODER)
  335. s->decode_mb= ff_wmv2_decode_mb;
  336. case 6:
  337. //FIXME + TODO VC1 decode mb
  338. break;
  339. }
  340. s->slice_height= s->mb_height; //to avoid 1/0 if the first frame is not a keyframe
  341. return 0;
  342. }
  343. int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
  344. {
  345. int code;
  346. if(s->msmpeg4_version==1){
  347. int start_code = get_bits_long(&s->gb, 32);
  348. if(start_code!=0x00000100){
  349. av_log(s->avctx, AV_LOG_ERROR, "invalid startcode\n");
  350. return -1;
  351. }
  352. skip_bits(&s->gb, 5); // frame number */
  353. }
  354. s->pict_type = get_bits(&s->gb, 2) + 1;
  355. if (s->pict_type != AV_PICTURE_TYPE_I &&
  356. s->pict_type != AV_PICTURE_TYPE_P){
  357. av_log(s->avctx, AV_LOG_ERROR, "invalid picture type\n");
  358. return -1;
  359. }
  360. #if 0
  361. {
  362. static int had_i=0;
  363. if(s->pict_type == AV_PICTURE_TYPE_I) had_i=1;
  364. if(!had_i) return -1;
  365. }
  366. #endif
  367. s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
  368. if(s->qscale==0){
  369. av_log(s->avctx, AV_LOG_ERROR, "invalid qscale\n");
  370. return -1;
  371. }
  372. if (s->pict_type == AV_PICTURE_TYPE_I) {
  373. code = get_bits(&s->gb, 5);
  374. if(s->msmpeg4_version==1){
  375. if(code==0 || code>s->mb_height){
  376. av_log(s->avctx, AV_LOG_ERROR, "invalid slice height %d\n", code);
  377. return -1;
  378. }
  379. s->slice_height = code;
  380. }else{
  381. /* 0x17: one slice, 0x18: two slices, ... */
  382. if (code < 0x17){
  383. av_log(s->avctx, AV_LOG_ERROR, "error, slice code was %X\n", code);
  384. return -1;
  385. }
  386. s->slice_height = s->mb_height / (code - 0x16);
  387. }
  388. switch(s->msmpeg4_version){
  389. case 1:
  390. case 2:
  391. s->rl_chroma_table_index = 2;
  392. s->rl_table_index = 2;
  393. s->dc_table_index = 0; //not used
  394. break;
  395. case 3:
  396. s->rl_chroma_table_index = decode012(&s->gb);
  397. s->rl_table_index = decode012(&s->gb);
  398. s->dc_table_index = get_bits1(&s->gb);
  399. break;
  400. case 4:
  401. ff_msmpeg4_decode_ext_header(s, (2+5+5+17+7)/8);
  402. if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
  403. else s->per_mb_rl_table= 0;
  404. if(!s->per_mb_rl_table){
  405. s->rl_chroma_table_index = decode012(&s->gb);
  406. s->rl_table_index = decode012(&s->gb);
  407. }
  408. s->dc_table_index = get_bits1(&s->gb);
  409. s->inter_intra_pred= 0;
  410. break;
  411. }
  412. s->no_rounding = 1;
  413. if(s->avctx->debug&FF_DEBUG_PICT_INFO)
  414. av_log(s->avctx, AV_LOG_DEBUG, "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n",
  415. s->qscale,
  416. s->rl_chroma_table_index,
  417. s->rl_table_index,
  418. s->dc_table_index,
  419. s->per_mb_rl_table,
  420. s->slice_height);
  421. } else {
  422. switch(s->msmpeg4_version){
  423. case 1:
  424. case 2:
  425. if(s->msmpeg4_version==1)
  426. s->use_skip_mb_code = 1;
  427. else
  428. s->use_skip_mb_code = get_bits1(&s->gb);
  429. s->rl_table_index = 2;
  430. s->rl_chroma_table_index = s->rl_table_index;
  431. s->dc_table_index = 0; //not used
  432. s->mv_table_index = 0;
  433. break;
  434. case 3:
  435. s->use_skip_mb_code = get_bits1(&s->gb);
  436. s->rl_table_index = decode012(&s->gb);
  437. s->rl_chroma_table_index = s->rl_table_index;
  438. s->dc_table_index = get_bits1(&s->gb);
  439. s->mv_table_index = get_bits1(&s->gb);
  440. break;
  441. case 4:
  442. s->use_skip_mb_code = get_bits1(&s->gb);
  443. if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
  444. else s->per_mb_rl_table= 0;
  445. if(!s->per_mb_rl_table){
  446. s->rl_table_index = decode012(&s->gb);
  447. s->rl_chroma_table_index = s->rl_table_index;
  448. }
  449. s->dc_table_index = get_bits1(&s->gb);
  450. s->mv_table_index = get_bits1(&s->gb);
  451. s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE);
  452. break;
  453. }
  454. if(s->avctx->debug&FF_DEBUG_PICT_INFO)
  455. av_log(s->avctx, AV_LOG_DEBUG, "skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n",
  456. s->use_skip_mb_code,
  457. s->rl_table_index,
  458. s->rl_chroma_table_index,
  459. s->dc_table_index,
  460. s->mv_table_index,
  461. s->per_mb_rl_table,
  462. s->qscale);
  463. if(s->flipflop_rounding){
  464. s->no_rounding ^= 1;
  465. }else{
  466. s->no_rounding = 0;
  467. }
  468. }
  469. ff_dlog(s->avctx, "%d %d %d %d %d\n", s->pict_type, s->bit_rate,
  470. s->inter_intra_pred, s->width, s->height);
  471. s->esc3_level_length= 0;
  472. s->esc3_run_length= 0;
  473. return 0;
  474. }
  475. int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size)
  476. {
  477. int left= buf_size*8 - get_bits_count(&s->gb);
  478. int length= s->msmpeg4_version>=3 ? 17 : 16;
  479. /* the alt_bitstream reader could read over the end so we need to check it */
  480. if(left>=length && left<length+8)
  481. {
  482. skip_bits(&s->gb, 5); /* fps */
  483. s->bit_rate= get_bits(&s->gb, 11)*1024;
  484. if(s->msmpeg4_version>=3)
  485. s->flipflop_rounding= get_bits1(&s->gb);
  486. else
  487. s->flipflop_rounding= 0;
  488. }
  489. else if(left<length+8)
  490. {
  491. s->flipflop_rounding= 0;
  492. if(s->msmpeg4_version != 2)
  493. av_log(s->avctx, AV_LOG_ERROR, "ext header missing, %d left\n", left);
  494. }
  495. else
  496. {
  497. av_log(s->avctx, AV_LOG_ERROR, "I frame too long, ignoring ext header\n");
  498. }
  499. return 0;
  500. }
  501. static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
  502. {
  503. int level, pred;
  504. if(s->msmpeg4_version<=2){
  505. if (n < 4) {
  506. level = get_vlc2(&s->gb, v2_dc_lum_vlc.table, DC_VLC_BITS, 3);
  507. } else {
  508. level = get_vlc2(&s->gb, v2_dc_chroma_vlc.table, DC_VLC_BITS, 3);
  509. }
  510. if (level < 0)
  511. return -1;
  512. level-=256;
  513. }else{ //FIXME optimize use unified tables & index
  514. if (n < 4) {
  515. level = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
  516. } else {
  517. level = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
  518. }
  519. if (level < 0){
  520. av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
  521. return -1;
  522. }
  523. if (level == DC_MAX) {
  524. level = get_bits(&s->gb, 8);
  525. if (get_bits1(&s->gb))
  526. level = -level;
  527. } else if (level != 0) {
  528. if (get_bits1(&s->gb))
  529. level = -level;
  530. }
  531. }
  532. if(s->msmpeg4_version==1){
  533. int32_t *dc_val;
  534. pred = msmpeg4v1_pred_dc(s, n, &dc_val);
  535. level += pred;
  536. /* update predictor */
  537. *dc_val= level;
  538. }else{
  539. int16_t *dc_val;
  540. pred = ff_msmpeg4_pred_dc(s, n, &dc_val, dir_ptr);
  541. level += pred;
  542. /* update predictor */
  543. if (n < 4) {
  544. *dc_val = level * s->y_dc_scale;
  545. } else {
  546. *dc_val = level * s->c_dc_scale;
  547. }
  548. }
  549. return level;
  550. }
  551. //#define ERROR_DETAILS
  552. int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t * block,
  553. int n, int coded, const uint8_t *scan_table)
  554. {
  555. int level, i, last, run, run_diff;
  556. int av_uninit(dc_pred_dir);
  557. RLTable *rl;
  558. RL_VLC_ELEM *rl_vlc;
  559. int qmul, qadd;
  560. if (s->mb_intra) {
  561. qmul=1;
  562. qadd=0;
  563. /* DC coef */
  564. level = msmpeg4_decode_dc(s, n, &dc_pred_dir);
  565. if (level < 0){
  566. av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale);
  567. if(s->inter_intra_pred) level=0;
  568. else return -1;
  569. }
  570. if (n < 4) {
  571. rl = &ff_rl_table[s->rl_table_index];
  572. if(level > 256*s->y_dc_scale){
  573. av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ L qscale: %d//\n", s->qscale);
  574. if(!s->inter_intra_pred) return -1;
  575. }
  576. } else {
  577. rl = &ff_rl_table[3 + s->rl_chroma_table_index];
  578. if(level > 256*s->c_dc_scale){
  579. av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ C qscale: %d//\n", s->qscale);
  580. if(!s->inter_intra_pred) return -1;
  581. }
  582. }
  583. block[0] = level;
  584. run_diff = s->msmpeg4_version >= 4;
  585. i = 0;
  586. if (!coded) {
  587. goto not_coded;
  588. }
  589. if (s->ac_pred) {
  590. if (dc_pred_dir == 0)
  591. scan_table = s->intra_v_scantable.permutated; /* left */
  592. else
  593. scan_table = s->intra_h_scantable.permutated; /* top */
  594. } else {
  595. scan_table = s->intra_scantable.permutated;
  596. }
  597. rl_vlc= rl->rl_vlc[0];
  598. } else {
  599. qmul = s->qscale << 1;
  600. qadd = (s->qscale - 1) | 1;
  601. i = -1;
  602. rl = &ff_rl_table[3 + s->rl_table_index];
  603. if(s->msmpeg4_version==2)
  604. run_diff = 0;
  605. else
  606. run_diff = 1;
  607. if (!coded) {
  608. s->block_last_index[n] = i;
  609. return 0;
  610. }
  611. if(!scan_table)
  612. scan_table = s->inter_scantable.permutated;
  613. rl_vlc= rl->rl_vlc[s->qscale];
  614. }
  615. {
  616. OPEN_READER(re, &s->gb);
  617. for(;;) {
  618. UPDATE_CACHE(re, &s->gb);
  619. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
  620. if (level==0) {
  621. int cache;
  622. cache= GET_CACHE(re, &s->gb);
  623. /* escape */
  624. if (s->msmpeg4_version==1 || (cache&0x80000000)==0) {
  625. if (s->msmpeg4_version==1 || (cache&0x40000000)==0) {
  626. /* third escape */
  627. if(s->msmpeg4_version!=1) LAST_SKIP_BITS(re, &s->gb, 2);
  628. UPDATE_CACHE(re, &s->gb);
  629. if(s->msmpeg4_version<=3){
  630. last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
  631. run= SHOW_UBITS(re, &s->gb, 6); SKIP_CACHE(re, &s->gb, 6);
  632. level= SHOW_SBITS(re, &s->gb, 8);
  633. SKIP_COUNTER(re, &s->gb, 1+6+8);
  634. }else{
  635. int sign;
  636. last= SHOW_UBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1);
  637. if(!s->esc3_level_length){
  638. int ll;
  639. ff_dlog(s->avctx, "ESC-3 %X at %d %d\n",
  640. show_bits(&s->gb, 24), s->mb_x, s->mb_y);
  641. if(s->qscale<8){
  642. ll= SHOW_UBITS(re, &s->gb, 3); SKIP_BITS(re, &s->gb, 3);
  643. if(ll==0){
  644. ll= 8+SHOW_UBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1);
  645. }
  646. }else{
  647. ll=2;
  648. while(ll<8 && SHOW_UBITS(re, &s->gb, 1)==0){
  649. ll++;
  650. SKIP_BITS(re, &s->gb, 1);
  651. }
  652. if(ll<8) SKIP_BITS(re, &s->gb, 1);
  653. }
  654. s->esc3_level_length= ll;
  655. s->esc3_run_length= SHOW_UBITS(re, &s->gb, 2) + 3; SKIP_BITS(re, &s->gb, 2);
  656. UPDATE_CACHE(re, &s->gb);
  657. }
  658. run= SHOW_UBITS(re, &s->gb, s->esc3_run_length);
  659. SKIP_BITS(re, &s->gb, s->esc3_run_length);
  660. sign= SHOW_UBITS(re, &s->gb, 1);
  661. SKIP_BITS(re, &s->gb, 1);
  662. level= SHOW_UBITS(re, &s->gb, s->esc3_level_length);
  663. SKIP_BITS(re, &s->gb, s->esc3_level_length);
  664. if(sign) level= -level;
  665. }
  666. #if 0 // waste of time / this will detect very few errors
  667. {
  668. const int abs_level= FFABS(level);
  669. const int run1= run - rl->max_run[last][abs_level] - run_diff;
  670. if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
  671. if(abs_level <= rl->max_level[last][run]){
  672. av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
  673. return DECODING_AC_LOST;
  674. }
  675. if(abs_level <= rl->max_level[last][run]*2){
  676. av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
  677. return DECODING_AC_LOST;
  678. }
  679. if(run1>=0 && abs_level <= rl->max_level[last][run1]){
  680. av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
  681. return DECODING_AC_LOST;
  682. }
  683. }
  684. }
  685. #endif
  686. //level = level * qmul + (level>0) * qadd - (level<=0) * qadd ;
  687. if (level>0) level= level * qmul + qadd;
  688. else level= level * qmul - qadd;
  689. #if 0 // waste of time too :(
  690. if(level>2048 || level<-2048){
  691. av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc\n");
  692. return DECODING_AC_LOST;
  693. }
  694. #endif
  695. i+= run + 1;
  696. if(last) i+=192;
  697. #ifdef ERROR_DETAILS
  698. if(run==66)
  699. av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC3 level=%d\n", level);
  700. else if((i>62 && i<192) || i>192+63)
  701. av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC3 i=%d run=%d level=%d\n", i, run, level);
  702. #endif
  703. } else {
  704. /* second escape */
  705. SKIP_BITS(re, &s->gb, 2);
  706. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
  707. i+= run + rl->max_run[run>>7][level/qmul] + run_diff; //FIXME opt indexing
  708. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  709. LAST_SKIP_BITS(re, &s->gb, 1);
  710. #ifdef ERROR_DETAILS
  711. if(run==66)
  712. av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC2 level=%d\n", level);
  713. else if((i>62 && i<192) || i>192+63)
  714. av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC2 i=%d run=%d level=%d\n", i, run, level);
  715. #endif
  716. }
  717. } else {
  718. /* first escape */
  719. SKIP_BITS(re, &s->gb, 1);
  720. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
  721. i+= run;
  722. level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
  723. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  724. LAST_SKIP_BITS(re, &s->gb, 1);
  725. #ifdef ERROR_DETAILS
  726. if(run==66)
  727. av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC1 level=%d\n", level);
  728. else if((i>62 && i<192) || i>192+63)
  729. av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC1 i=%d run=%d level=%d\n", i, run, level);
  730. #endif
  731. }
  732. } else {
  733. i+= run;
  734. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  735. LAST_SKIP_BITS(re, &s->gb, 1);
  736. #ifdef ERROR_DETAILS
  737. if(run==66)
  738. av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code level=%d\n", level);
  739. else if((i>62 && i<192) || i>192+63)
  740. av_log(s->avctx, AV_LOG_ERROR, "run overflow i=%d run=%d level=%d\n", i, run, level);
  741. #endif
  742. }
  743. if (i > 62){
  744. i-= 192;
  745. if(i&(~63)){
  746. const int left= get_bits_left(&s->gb);
  747. if (((i + 192 == 64 && level / qmul == -1) ||
  748. !(s->avctx->err_recognition & AV_EF_BITSTREAM)) &&
  749. left >= 0) {
  750. av_log(s->avctx, AV_LOG_ERROR, "ignoring overflow at %d %d\n", s->mb_x, s->mb_y);
  751. break;
  752. }else{
  753. av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
  754. return -1;
  755. }
  756. }
  757. block[scan_table[i]] = level;
  758. break;
  759. }
  760. block[scan_table[i]] = level;
  761. }
  762. CLOSE_READER(re, &s->gb);
  763. }
  764. not_coded:
  765. if (s->mb_intra) {
  766. ff_mpeg4_pred_ac(s, block, n, dc_pred_dir);
  767. if (s->ac_pred) {
  768. i = 63; /* XXX: not optimal */
  769. }
  770. }
  771. if(s->msmpeg4_version>=4 && i>0) i=63; //FIXME/XXX optimize
  772. s->block_last_index[n] = i;
  773. return 0;
  774. }
  775. int ff_msmpeg4_decode_motion(MpegEncContext * s,
  776. int *mx_ptr, int *my_ptr)
  777. {
  778. MVTable *mv;
  779. int code, mx, my;
  780. mv = &ff_mv_tables[s->mv_table_index];
  781. code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2);
  782. if (code < 0){
  783. av_log(s->avctx, AV_LOG_ERROR, "illegal MV code at %d %d\n", s->mb_x, s->mb_y);
  784. return -1;
  785. }
  786. if (code == mv->n) {
  787. mx = get_bits(&s->gb, 6);
  788. my = get_bits(&s->gb, 6);
  789. } else {
  790. mx = mv->table_mvx[code];
  791. my = mv->table_mvy[code];
  792. }
  793. mx += *mx_ptr - 32;
  794. my += *my_ptr - 32;
  795. /* WARNING : they do not do exactly modulo encoding */
  796. if (mx <= -64)
  797. mx += 64;
  798. else if (mx >= 64)
  799. mx -= 64;
  800. if (my <= -64)
  801. my += 64;
  802. else if (my >= 64)
  803. my -= 64;
  804. *mx_ptr = mx;
  805. *my_ptr = my;
  806. return 0;
  807. }
  808. AVCodec ff_msmpeg4v1_decoder = {
  809. .name = "msmpeg4v1",
  810. .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"),
  811. .type = AVMEDIA_TYPE_VIDEO,
  812. .id = AV_CODEC_ID_MSMPEG4V1,
  813. .priv_data_size = sizeof(MpegEncContext),
  814. .init = ff_msmpeg4_decode_init,
  815. .close = ff_h263_decode_end,
  816. .decode = ff_h263_decode_frame,
  817. .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  818. .pix_fmts = (const enum AVPixelFormat[]) {
  819. AV_PIX_FMT_YUV420P,
  820. AV_PIX_FMT_NONE
  821. },
  822. };
  823. AVCodec ff_msmpeg4v2_decoder = {
  824. .name = "msmpeg4v2",
  825. .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"),
  826. .type = AVMEDIA_TYPE_VIDEO,
  827. .id = AV_CODEC_ID_MSMPEG4V2,
  828. .priv_data_size = sizeof(MpegEncContext),
  829. .init = ff_msmpeg4_decode_init,
  830. .close = ff_h263_decode_end,
  831. .decode = ff_h263_decode_frame,
  832. .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  833. .pix_fmts = (const enum AVPixelFormat[]) {
  834. AV_PIX_FMT_YUV420P,
  835. AV_PIX_FMT_NONE
  836. },
  837. };
  838. AVCodec ff_msmpeg4v3_decoder = {
  839. .name = "msmpeg4",
  840. .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"),
  841. .type = AVMEDIA_TYPE_VIDEO,
  842. .id = AV_CODEC_ID_MSMPEG4V3,
  843. .priv_data_size = sizeof(MpegEncContext),
  844. .init = ff_msmpeg4_decode_init,
  845. .close = ff_h263_decode_end,
  846. .decode = ff_h263_decode_frame,
  847. .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  848. .pix_fmts = (const enum AVPixelFormat[]) {
  849. AV_PIX_FMT_YUV420P,
  850. AV_PIX_FMT_NONE
  851. },
  852. };
  853. AVCodec ff_wmv1_decoder = {
  854. .name = "wmv1",
  855. .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"),
  856. .type = AVMEDIA_TYPE_VIDEO,
  857. .id = AV_CODEC_ID_WMV1,
  858. .priv_data_size = sizeof(MpegEncContext),
  859. .init = ff_msmpeg4_decode_init,
  860. .close = ff_h263_decode_end,
  861. .decode = ff_h263_decode_frame,
  862. .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  863. .pix_fmts = (const enum AVPixelFormat[]) {
  864. AV_PIX_FMT_YUV420P,
  865. AV_PIX_FMT_NONE
  866. },
  867. };