msmpeg4dec.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. /*
  2. * MSMPEG4 backend for encoder and decoder
  3. * Copyright (c) 2001 Fabrice Bellard
  4. * Copyright (c) 2002-2013 Michael Niedermayer <michaelni@gmx.at>
  5. *
  6. * msmpeg4v1 & v2 stuff by Michael Niedermayer <michaelni@gmx.at>
  7. *
  8. * This file is part of FFmpeg.
  9. *
  10. * FFmpeg 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. * FFmpeg 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 FFmpeg; if not, write to the Free Software
  22. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  23. */
  24. #include "libavutil/thread.h"
  25. #include "avcodec.h"
  26. #include "codec_internal.h"
  27. #include "mpegutils.h"
  28. #include "mpegvideo.h"
  29. #include "mpegvideodec.h"
  30. #include "msmpeg4.h"
  31. #include "msmpeg4dec.h"
  32. #include "libavutil/imgutils.h"
  33. #include "h263.h"
  34. #include "h263data.h"
  35. #include "h263dec.h"
  36. #include "mpeg4videodec.h"
  37. #include "msmpeg4data.h"
  38. #include "msmpeg4_vc1_data.h"
  39. #define V2_INTRA_CBPC_VLC_BITS 3
  40. #define V2_MB_TYPE_VLC_BITS 7
  41. #define MV_VLC_BITS 9
  42. #define TEX_VLC_BITS 9
  43. #define DEFAULT_INTER_INDEX 3
  44. static const VLCElem *mv_tables[2];
  45. static inline int msmpeg4v1_pred_dc(H263DecContext *const h, int n,
  46. int32_t **dc_val_ptr)
  47. {
  48. int i;
  49. if (n < 4) {
  50. i= 0;
  51. } else {
  52. i= n-3;
  53. }
  54. *dc_val_ptr= &h->last_dc[i];
  55. return h->last_dc[i];
  56. }
  57. /****************************************/
  58. /* decoding stuff */
  59. const VLCElem *ff_mb_non_intra_vlc[4];
  60. static VLCElem v2_dc_lum_vlc[1472];
  61. static VLCElem v2_dc_chroma_vlc[1506];
  62. static VLCElem v2_intra_cbpc_vlc[8];
  63. static VLCElem v2_mb_type_vlc[128];
  64. VLCElem ff_inter_intra_vlc[8];
  65. /* This is identical to H.263 except that its range is multiplied by 2. */
  66. static int msmpeg4v2_decode_motion(H263DecContext *const h, int pred, int f_code)
  67. {
  68. int code, val, sign, shift;
  69. code = get_vlc2(&h->gb, ff_h263_mv_vlc, H263_MV_VLC_BITS, 2);
  70. ff_dlog(h->c.avctx, "MV code %d at %d %d pred: %d\n",
  71. code, h->c.mb_x,h->c.mb_y, pred);
  72. if (code < 0)
  73. return 0xffff;
  74. if (code == 0)
  75. return pred;
  76. sign = get_bits1(&h->gb);
  77. shift = f_code - 1;
  78. val = code;
  79. if (shift) {
  80. val = (val - 1) << shift;
  81. val |= get_bits(&h->gb, shift);
  82. val++;
  83. }
  84. if (sign)
  85. val = -val;
  86. val += pred;
  87. if (val <= -64)
  88. val += 64;
  89. else if (val >= 64)
  90. val -= 64;
  91. return val;
  92. }
  93. static int msmpeg4v12_decode_mb(H263DecContext *const h)
  94. {
  95. MSMP4DecContext *const ms = mpv_to_msmpeg4(h);
  96. int cbp, code, i;
  97. uint32_t * const mb_type_ptr = &h->c.cur_pic.mb_type[h->c.mb_x + h->c.mb_y*h->c.mb_stride];
  98. if (h->c.pict_type == AV_PICTURE_TYPE_P) {
  99. if (ms->use_skip_mb_code) {
  100. if (get_bits1(&h->gb)) {
  101. /* skip mb */
  102. h->c.mb_intra = 0;
  103. for(i=0;i<6;i++)
  104. h->c.block_last_index[i] = -1;
  105. h->c.mv_dir = MV_DIR_FORWARD;
  106. h->c.mv_type = MV_TYPE_16X16;
  107. h->c.mv[0][0][0] = 0;
  108. h->c.mv[0][0][1] = 0;
  109. h->c.mb_skipped = 1;
  110. *mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_FORWARD_MV | MB_TYPE_16x16;
  111. return 0;
  112. }
  113. }
  114. if (h->c.msmpeg4_version == MSMP4_V2)
  115. code = get_vlc2(&h->gb, v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 1);
  116. else
  117. code = get_vlc2(&h->gb, ff_h263_inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 2);
  118. if(code<0 || code>7){
  119. av_log(h->c.avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n",
  120. code, h->c.mb_x, h->c.mb_y);
  121. return -1;
  122. }
  123. h->c.mb_intra = code >>2;
  124. cbp = code & 0x3;
  125. } else {
  126. h->c.mb_intra = 1;
  127. if (h->c.msmpeg4_version == MSMP4_V2)
  128. cbp = get_vlc2(&h->gb, v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 1);
  129. else
  130. cbp = get_vlc2(&h->gb, ff_h263_intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 2);
  131. if(cbp<0 || cbp>3){
  132. av_log(h->c.avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n",
  133. cbp, h->c.mb_x, h->c.mb_y);
  134. return -1;
  135. }
  136. }
  137. if (!h->c.mb_intra) {
  138. int mx, my, cbpy;
  139. cbpy = get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
  140. if(cbpy<0){
  141. av_log(h->c.avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n",
  142. cbp, h->c.mb_x, h->c.mb_y);
  143. return -1;
  144. }
  145. cbp|= cbpy<<2;
  146. if (h->c.msmpeg4_version == MSMP4_V1 || (cbp&3) != 3)
  147. cbp ^= 0x3C;
  148. ff_h263_pred_motion(&h->c, 0, 0, &mx, &my);
  149. mx = msmpeg4v2_decode_motion(h, mx, 1);
  150. my = msmpeg4v2_decode_motion(h, my, 1);
  151. h->c.mv_dir = MV_DIR_FORWARD;
  152. h->c.mv_type = MV_TYPE_16X16;
  153. h->c.mv[0][0][0] = mx;
  154. h->c.mv[0][0][1] = my;
  155. *mb_type_ptr = MB_TYPE_FORWARD_MV | MB_TYPE_16x16;
  156. } else {
  157. int v;
  158. if (h->c.msmpeg4_version == MSMP4_V2) {
  159. h->c.ac_pred = get_bits1(&h->gb);
  160. v = get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
  161. if (v < 0) {
  162. av_log(h->c.avctx, AV_LOG_ERROR, "cbpy vlc invalid\n");
  163. return -1;
  164. }
  165. cbp|= v<<2;
  166. } else{
  167. h->c.ac_pred = 0;
  168. v = get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
  169. if (v < 0) {
  170. av_log(h->c.avctx, AV_LOG_ERROR, "cbpy vlc invalid\n");
  171. return -1;
  172. }
  173. cbp|= v<<2;
  174. if (h->c.pict_type==AV_PICTURE_TYPE_P) cbp^=0x3C;
  175. }
  176. *mb_type_ptr = MB_TYPE_INTRA;
  177. }
  178. h->c.bdsp.clear_blocks(h->block[0]);
  179. for (i = 0; i < 6; i++) {
  180. if (ff_msmpeg4_decode_block(ms, h->block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
  181. {
  182. av_log(h->c.avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n",
  183. h->c.mb_x, h->c.mb_y, i);
  184. return -1;
  185. }
  186. }
  187. return 0;
  188. }
  189. static int msmpeg4v34_decode_mb(H263DecContext *const h)
  190. {
  191. MSMP4DecContext *const ms = mpv_to_msmpeg4(h);
  192. int cbp, code, i;
  193. uint8_t *coded_val;
  194. uint32_t * const mb_type_ptr = &h->c.cur_pic.mb_type[h->c.mb_x + h->c.mb_y*h->c.mb_stride];
  195. if (get_bits_left(&h->gb) <= 0)
  196. return AVERROR_INVALIDDATA;
  197. if (h->c.pict_type == AV_PICTURE_TYPE_P) {
  198. if (ms->use_skip_mb_code) {
  199. if (get_bits1(&h->gb)) {
  200. /* skip mb */
  201. h->c.mb_intra = 0;
  202. for(i=0;i<6;i++)
  203. h->c.block_last_index[i] = -1;
  204. h->c.mv_dir = MV_DIR_FORWARD;
  205. h->c.mv_type = MV_TYPE_16X16;
  206. h->c.mv[0][0][0] = 0;
  207. h->c.mv[0][0][1] = 0;
  208. h->c.mb_skipped = 1;
  209. *mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_FORWARD_MV | MB_TYPE_16x16;
  210. return 0;
  211. }
  212. }
  213. code = get_vlc2(&h->gb, ff_mb_non_intra_vlc[DEFAULT_INTER_INDEX], MB_NON_INTRA_VLC_BITS, 3);
  214. //h->c.mb_intra = (code & 0x40) ? 0 : 1;
  215. h->c.mb_intra = (~code & 0x40) >> 6;
  216. cbp = code & 0x3f;
  217. } else {
  218. h->c.mb_intra = 1;
  219. code = get_vlc2(&h->gb, ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 2);
  220. /* predict coded block pattern */
  221. cbp = 0;
  222. for(i=0;i<6;i++) {
  223. int val = ((code >> (5 - i)) & 1);
  224. if (i < 4) {
  225. int pred = ff_msmpeg4_coded_block_pred(&h->c, i, &coded_val);
  226. val = val ^ pred;
  227. *coded_val = val;
  228. }
  229. cbp |= val << (5 - i);
  230. }
  231. }
  232. if (!h->c.mb_intra) {
  233. int mx, my;
  234. if (ms->per_mb_rl_table && cbp) {
  235. ms->rl_table_index = decode012(&h->gb);
  236. ms->rl_chroma_table_index = ms->rl_table_index;
  237. }
  238. ff_h263_pred_motion(&h->c, 0, 0, &mx, &my);
  239. ff_msmpeg4_decode_motion(ms, &mx, &my);
  240. h->c.mv_dir = MV_DIR_FORWARD;
  241. h->c.mv_type = MV_TYPE_16X16;
  242. h->c.mv[0][0][0] = mx;
  243. h->c.mv[0][0][1] = my;
  244. *mb_type_ptr = MB_TYPE_FORWARD_MV | MB_TYPE_16x16;
  245. } else {
  246. ff_dlog(h->c.avctx, "I at %d %d %d %06X\n", h->c.mb_x, h->c.mb_y,
  247. ((cbp & 3) ? 1 : 0) +((cbp & 0x3C)? 2 : 0),
  248. show_bits(&h->gb, 24));
  249. h->c.ac_pred = get_bits1(&h->gb);
  250. *mb_type_ptr = MB_TYPE_INTRA;
  251. if (h->c.inter_intra_pred) {
  252. h->c.h263_aic_dir = get_vlc2(&h->gb, ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 1);
  253. ff_dlog(h->c.avctx, "%d%d %d %d/",
  254. h->c.ac_pred, h->c.h263_aic_dir, h->c.mb_x, h->c.mb_y);
  255. }
  256. if (ms->per_mb_rl_table && cbp) {
  257. ms->rl_table_index = decode012(&h->gb);
  258. ms->rl_chroma_table_index = ms->rl_table_index;
  259. }
  260. }
  261. h->c.bdsp.clear_blocks(h->block[0]);
  262. for (i = 0; i < 6; i++) {
  263. if (ff_msmpeg4_decode_block(ms, h->block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
  264. {
  265. av_log(h->c.avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n",
  266. h->c.mb_x, h->c.mb_y, i);
  267. return -1;
  268. }
  269. }
  270. return 0;
  271. }
  272. /* init all vlc decoding tables */
  273. static av_cold void msmpeg4_decode_init_static(void)
  274. {
  275. static VLCElem vlc_buf[3714 + 2694 + 1636 + 2648 + 1532 + 2488];
  276. VLCInitState state = VLC_INIT_STATE(vlc_buf);
  277. INIT_FIRST_VLC_RL(ff_rl_table[0], 642);
  278. INIT_FIRST_VLC_RL(ff_rl_table[1], 1104);
  279. INIT_FIRST_VLC_RL(ff_rl_table[2], 554);
  280. VLC_INIT_RL(ff_rl_table[3], 940);
  281. VLC_INIT_RL(ff_rl_table[4], 962);
  282. /* ff_rl_table[5] coincides with ff_h263_rl_inter which has just been
  283. * initialized in ff_h263_decode_init() earlier. So just copy the VLCs. */
  284. av_assert1(ff_h263_rl_inter.rl_vlc[0]);
  285. memcpy(ff_rl_table[5].rl_vlc, ff_h263_rl_inter.rl_vlc, sizeof(ff_rl_table[5].rl_vlc));
  286. VLC_INIT_STATIC_TABLE(v2_dc_lum_vlc, MSMP4_DC_VLC_BITS, 512,
  287. &ff_v2_dc_lum_table[0][1], 8, 4,
  288. &ff_v2_dc_lum_table[0][0], 8, 4, 0);
  289. VLC_INIT_STATIC_TABLE(v2_dc_chroma_vlc, MSMP4_DC_VLC_BITS, 512,
  290. &ff_v2_dc_chroma_table[0][1], 8, 4,
  291. &ff_v2_dc_chroma_table[0][0], 8, 4, 0);
  292. VLC_INIT_STATIC_TABLE(v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4,
  293. &ff_v2_intra_cbpc[0][1], 2, 1,
  294. &ff_v2_intra_cbpc[0][0], 2, 1, 0);
  295. VLC_INIT_STATIC_TABLE(v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8,
  296. &ff_v2_mb_type[0][1], 2, 1,
  297. &ff_v2_mb_type[0][0], 2, 1, 0);
  298. mv_tables[0] = ff_vlc_init_tables_from_lengths(&state, MV_VLC_BITS,
  299. MSMPEG4_MV_TABLES_NB_ELEMS,
  300. ff_msmp4_mv_table0_lens, 1,
  301. ff_msmp4_mv_table0, 2, 2,
  302. 0, 0);
  303. mv_tables[1] = ff_vlc_init_tables_from_lengths(&state, MV_VLC_BITS,
  304. MSMPEG4_MV_TABLES_NB_ELEMS,
  305. ff_msmp4_mv_table1_lens, 1,
  306. ff_msmp4_mv_table1, 2, 2,
  307. 0, 0);
  308. for (unsigned i = 0; i < 4; i++) {
  309. ff_mb_non_intra_vlc[i] =
  310. ff_vlc_init_tables_sparse(&state, MB_NON_INTRA_VLC_BITS, 128,
  311. &ff_wmv2_inter_table[i][0][1], 8, 4,
  312. &ff_wmv2_inter_table[i][0][0], 8, 4,
  313. NULL, 0, 0, 0);
  314. }
  315. VLC_INIT_STATIC_TABLE(ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 4,
  316. &ff_table_inter_intra[0][1], 2, 1,
  317. &ff_table_inter_intra[0][0], 2, 1, 0);
  318. ff_msmp4_vc1_vlcs_init_once();
  319. }
  320. static int msmpeg4_decode_picture_header(H263DecContext *const h)
  321. {
  322. MSMP4DecContext *const ms = mpv_to_msmpeg4(h);
  323. int code;
  324. // at minimum one bit per macroblock is required at least in a valid frame,
  325. // we discard frames much smaller than this. Frames smaller than 1/8 of the
  326. // smallest "black/skip" frame generally contain not much recoverable content
  327. // while at the same time they have the highest computational requirements
  328. // per byte
  329. if (get_bits_left(&h->gb) * 8LL < (h->c.width+15)/16 * ((h->c.height+15)/16))
  330. return AVERROR_INVALIDDATA;
  331. if (h->c.msmpeg4_version == MSMP4_V1) {
  332. int start_code = get_bits_long(&h->gb, 32);
  333. if(start_code!=0x00000100){
  334. av_log(h->c.avctx, AV_LOG_ERROR, "invalid startcode\n");
  335. return -1;
  336. }
  337. skip_bits(&h->gb, 5); // frame number */
  338. }
  339. h->c.pict_type = get_bits(&h->gb, 2) + 1;
  340. if (h->c.pict_type != AV_PICTURE_TYPE_I &&
  341. h->c.pict_type != AV_PICTURE_TYPE_P){
  342. av_log(h->c.avctx, AV_LOG_ERROR, "invalid picture type\n");
  343. return -1;
  344. }
  345. h->c.chroma_qscale = h->c.qscale = get_bits(&h->gb, 5);
  346. if (h->c.qscale == 0) {
  347. av_log(h->c.avctx, AV_LOG_ERROR, "invalid qscale\n");
  348. return -1;
  349. }
  350. if (h->c.pict_type == AV_PICTURE_TYPE_I) {
  351. code = get_bits(&h->gb, 5);
  352. if (h->c.msmpeg4_version == MSMP4_V1) {
  353. if(code==0 || code>h->c.mb_height) {
  354. av_log(h->c.avctx, AV_LOG_ERROR, "invalid slice height %d\n", code);
  355. return -1;
  356. }
  357. h->slice_height = code;
  358. }else{
  359. /* 0x17: one slice, 0x18: two slices, ... */
  360. if (code < 0x17){
  361. av_log(h->c.avctx, AV_LOG_ERROR, "error, slice code was %X\n", code);
  362. return -1;
  363. }
  364. h->slice_height = h->c.mb_height / (code - 0x16);
  365. }
  366. switch (h->c.msmpeg4_version) {
  367. case MSMP4_V1:
  368. case MSMP4_V2:
  369. ms->rl_chroma_table_index = 2;
  370. ms->rl_table_index = 2;
  371. ms->dc_table_index = 0; //not used
  372. break;
  373. case MSMP4_V3:
  374. ms->rl_chroma_table_index = decode012(&h->gb);
  375. ms->rl_table_index = decode012(&h->gb);
  376. ms->dc_table_index = get_bits1(&h->gb);
  377. break;
  378. case MSMP4_WMV1:
  379. ff_msmpeg4_decode_ext_header(h, (2+5+5+17+7)/8);
  380. if (ms->bit_rate > MBAC_BITRATE)
  381. ms->per_mb_rl_table = get_bits1(&h->gb);
  382. else
  383. ms->per_mb_rl_table = 0;
  384. if (!ms->per_mb_rl_table) {
  385. ms->rl_chroma_table_index = decode012(&h->gb);
  386. ms->rl_table_index = decode012(&h->gb);
  387. }
  388. ms->dc_table_index = get_bits1(&h->gb);
  389. h->c.inter_intra_pred= 0;
  390. break;
  391. default:
  392. av_unreachable("msmpeg4_decode_picture_header() only used by MSMP4V1-3, WMV1");
  393. }
  394. h->c.no_rounding = 1;
  395. if (h->c.avctx->debug & FF_DEBUG_PICT_INFO)
  396. av_log(h->c.avctx, AV_LOG_DEBUG, "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n",
  397. h->c.qscale,
  398. ms->rl_chroma_table_index,
  399. ms->rl_table_index,
  400. ms->dc_table_index,
  401. ms->per_mb_rl_table,
  402. h->slice_height);
  403. } else {
  404. switch (h->c.msmpeg4_version) {
  405. case MSMP4_V1:
  406. case MSMP4_V2:
  407. if (h->c.msmpeg4_version == MSMP4_V1)
  408. ms->use_skip_mb_code = 1;
  409. else
  410. ms->use_skip_mb_code = get_bits1(&h->gb);
  411. ms->rl_table_index = 2;
  412. ms->rl_chroma_table_index = ms->rl_table_index;
  413. ms->dc_table_index = 0; //not used
  414. ms->mv_table_index = 0;
  415. break;
  416. case MSMP4_V3:
  417. ms->use_skip_mb_code = get_bits1(&h->gb);
  418. ms->rl_table_index = decode012(&h->gb);
  419. ms->rl_chroma_table_index = ms->rl_table_index;
  420. ms->dc_table_index = get_bits1(&h->gb);
  421. ms->mv_table_index = get_bits1(&h->gb);
  422. break;
  423. case MSMP4_WMV1:
  424. ms->use_skip_mb_code = get_bits1(&h->gb);
  425. if (ms->bit_rate > MBAC_BITRATE)
  426. ms->per_mb_rl_table = get_bits1(&h->gb);
  427. else
  428. ms->per_mb_rl_table = 0;
  429. if (!ms->per_mb_rl_table) {
  430. ms->rl_table_index = decode012(&h->gb);
  431. ms->rl_chroma_table_index = ms->rl_table_index;
  432. }
  433. ms->dc_table_index = get_bits1(&h->gb);
  434. ms->mv_table_index = get_bits1(&h->gb);
  435. h->c.inter_intra_pred = h->c.width*h->c.height < 320*240 &&
  436. ms->bit_rate <= II_BITRATE;
  437. break;
  438. default:
  439. av_unreachable("msmpeg4_decode_picture_header() only used by MSMP4V1-3, WMV1");
  440. }
  441. if (h->c.avctx->debug&FF_DEBUG_PICT_INFO)
  442. av_log(h->c.avctx, AV_LOG_DEBUG, "skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n",
  443. ms->use_skip_mb_code,
  444. ms->rl_table_index,
  445. ms->rl_chroma_table_index,
  446. ms->dc_table_index,
  447. ms->mv_table_index,
  448. ms->per_mb_rl_table,
  449. h->c.qscale);
  450. if (ms->flipflop_rounding) {
  451. h->c.no_rounding ^= 1;
  452. }else{
  453. h->c.no_rounding = 0;
  454. }
  455. }
  456. ff_dlog(h->c.avctx, "%d %d %d %d %d\n", h->c.pict_type, ms->bit_rate,
  457. h->c.inter_intra_pred, h->c.width, h->c.height);
  458. ms->esc3_level_length = 0;
  459. ms->esc3_run_length = 0;
  460. return 0;
  461. }
  462. int ff_msmpeg4_decode_ext_header(H263DecContext *const h, int buf_size)
  463. {
  464. MSMP4DecContext *const ms = mpv_to_msmpeg4(h);
  465. int left = buf_size*8 - get_bits_count(&h->gb);
  466. int length = h->c.msmpeg4_version >= MSMP4_V3 ? 17 : 16;
  467. /* the alt_bitstream reader could read over the end so we need to check it */
  468. if(left>=length && left<length+8)
  469. {
  470. skip_bits(&h->gb, 5); /* fps */
  471. ms->bit_rate = get_bits(&h->gb, 11) * 1024;
  472. if (h->c.msmpeg4_version >= MSMP4_V3)
  473. ms->flipflop_rounding = get_bits1(&h->gb);
  474. else
  475. ms->flipflop_rounding = 0;
  476. }
  477. else if(left<length+8)
  478. {
  479. ms->flipflop_rounding = 0;
  480. if (h->c.msmpeg4_version != MSMP4_V2)
  481. av_log(h->c.avctx, AV_LOG_ERROR, "ext header missing, %d left\n", left);
  482. }
  483. else
  484. {
  485. av_log(h->c.avctx, AV_LOG_ERROR, "I-frame too long, ignoring ext header\n");
  486. }
  487. return 0;
  488. }
  489. static int msmpeg4_decode_dc(MSMP4DecContext *const ms, int n, int *dir_ptr)
  490. {
  491. H263DecContext *const h = &ms->h;
  492. int level, pred;
  493. if (h->c.msmpeg4_version <= MSMP4_V2) {
  494. if (n < 4) {
  495. level = get_vlc2(&h->gb, v2_dc_lum_vlc, MSMP4_DC_VLC_BITS, 3);
  496. } else {
  497. level = get_vlc2(&h->gb, v2_dc_chroma_vlc, MSMP4_DC_VLC_BITS, 3);
  498. }
  499. if (level < 0) {
  500. av_log(h->c.avctx, AV_LOG_ERROR, "illegal dc vlc\n");
  501. *dir_ptr = 0;
  502. return -1;
  503. }
  504. level-=256;
  505. } else {
  506. level = get_vlc2(&h->gb, ff_msmp4_dc_vlc[ms->dc_table_index][n >= 4],
  507. MSMP4_DC_VLC_BITS, 3);
  508. if (level == DC_MAX) {
  509. level = get_bits(&h->gb, 8);
  510. if (get_bits1(&h->gb))
  511. level = -level;
  512. } else if (level != 0) {
  513. if (get_bits1(&h->gb))
  514. level = -level;
  515. }
  516. }
  517. if (h->c.msmpeg4_version == MSMP4_V1) {
  518. int32_t *dc_val;
  519. pred = msmpeg4v1_pred_dc(h, n, &dc_val);
  520. level += pred;
  521. /* update predictor */
  522. *dc_val= level;
  523. }else{
  524. int16_t *dc_val;
  525. pred = ff_msmpeg4_pred_dc(&h->c, n, &dc_val, dir_ptr);
  526. level += pred;
  527. /* update predictor */
  528. if (n < 4) {
  529. *dc_val = level * h->c.y_dc_scale;
  530. } else {
  531. *dc_val = level * h->c.c_dc_scale;
  532. }
  533. }
  534. return level;
  535. }
  536. int ff_msmpeg4_decode_block(MSMP4DecContext *const ms, int16_t * block,
  537. int n, int coded, const uint8_t *scan_table)
  538. {
  539. H263DecContext *const h = &ms->h;
  540. int level, i, last, run, run_diff;
  541. int dc_pred_dir = -1; //unused but its passed around, so it needs to be initialized
  542. const RLTable *rl;
  543. const RL_VLC_ELEM *rl_vlc;
  544. int qmul, qadd;
  545. if (h->c.mb_intra) {
  546. qmul=1;
  547. qadd=0;
  548. /* DC coef */
  549. level = msmpeg4_decode_dc(ms, n, &dc_pred_dir);
  550. if (level < 0){
  551. av_log(h->c.avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, h->c.qscale);
  552. if (h->c.inter_intra_pred)
  553. level = 0;
  554. }
  555. if (n < 4) {
  556. rl = &ff_rl_table[ms->rl_table_index];
  557. if (level > 256 * h->c.y_dc_scale) {
  558. av_log(h->c.avctx, AV_LOG_ERROR, "dc overflow+ L qscale: %d//\n", h->c.qscale);
  559. if (!h->c.inter_intra_pred)
  560. return -1;
  561. }
  562. } else {
  563. rl = &ff_rl_table[3 + ms->rl_chroma_table_index];
  564. if (level > 256 * h->c.c_dc_scale) {
  565. av_log(h->c.avctx, AV_LOG_ERROR, "dc overflow+ C qscale: %d//\n", h->c.qscale);
  566. if (!h->c.inter_intra_pred)
  567. return -1;
  568. }
  569. }
  570. block[0] = level;
  571. run_diff = h->c.msmpeg4_version >= MSMP4_WMV1;
  572. i = 0;
  573. if (!coded) {
  574. goto not_coded;
  575. }
  576. if (h->c.ac_pred) {
  577. if (dc_pred_dir == 0)
  578. scan_table = h->c.permutated_intra_v_scantable; /* left */
  579. else
  580. scan_table = h->c.permutated_intra_h_scantable; /* top */
  581. } else {
  582. scan_table = h->c.intra_scantable.permutated;
  583. }
  584. rl_vlc= rl->rl_vlc[0];
  585. } else {
  586. qmul = h->c.qscale << 1;
  587. qadd = (h->c.qscale - 1) | 1;
  588. i = -1;
  589. rl = &ff_rl_table[3 + ms->rl_table_index];
  590. if (h->c.msmpeg4_version == MSMP4_V2)
  591. run_diff = 0;
  592. else
  593. run_diff = 1;
  594. if (!coded) {
  595. h->c.block_last_index[n] = i;
  596. return 0;
  597. }
  598. if(!scan_table)
  599. scan_table = h->c.inter_scantable.permutated;
  600. rl_vlc= rl->rl_vlc[h->c.qscale];
  601. }
  602. {
  603. OPEN_READER(re, &h->gb);
  604. for(;;) {
  605. UPDATE_CACHE(re, &h->gb);
  606. GET_RL_VLC(level, run, re, &h->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
  607. if (level==0) {
  608. int cache;
  609. cache= GET_CACHE(re, &h->gb);
  610. /* escape */
  611. if (h->c.msmpeg4_version == MSMP4_V1 || (cache&0x80000000)==0) {
  612. if (h->c.msmpeg4_version == MSMP4_V1 || (cache&0x40000000)==0) {
  613. /* third escape */
  614. if (h->c.msmpeg4_version != MSMP4_V1)
  615. LAST_SKIP_BITS(re, &h->gb, 2);
  616. UPDATE_CACHE(re, &h->gb);
  617. if (h->c.msmpeg4_version <= MSMP4_V3) {
  618. last = SHOW_UBITS(re, &h->gb, 1); SKIP_CACHE(re, &h->gb, 1);
  619. run = SHOW_UBITS(re, &h->gb, 6); SKIP_CACHE(re, &h->gb, 6);
  620. level = SHOW_SBITS(re, &h->gb, 8);
  621. SKIP_COUNTER(re, &h->gb, 1 + 6 + 8);
  622. }else{
  623. int sign;
  624. last = SHOW_UBITS(re, &h->gb, 1); SKIP_BITS(re, &h->gb, 1);
  625. if (!ms->esc3_level_length) {
  626. int ll;
  627. ff_dlog(h->c.avctx, "ESC-3 %X at %d %d\n",
  628. show_bits(&h->gb, 24), h->c.mb_x, h->c.mb_y);
  629. if (h->c.qscale < 8) {
  630. ll = SHOW_UBITS(re, &h->gb, 3); SKIP_BITS(re, &h->gb, 3);
  631. if(ll==0){
  632. ll = 8+SHOW_UBITS(re, &h->gb, 1); SKIP_BITS(re, &h->gb, 1);
  633. }
  634. }else{
  635. ll=2;
  636. while (ll < 8 && SHOW_UBITS(re, &h->gb, 1) == 0) {
  637. ll++;
  638. SKIP_BITS(re, &h->gb, 1);
  639. }
  640. if (ll<8) SKIP_BITS(re, &h->gb, 1);
  641. }
  642. ms->esc3_level_length = ll;
  643. ms->esc3_run_length = SHOW_UBITS(re, &h->gb, 2) + 3; SKIP_BITS(re, &h->gb, 2);
  644. UPDATE_CACHE(re, &h->gb);
  645. }
  646. run = SHOW_UBITS(re, &h->gb, ms->esc3_run_length);
  647. SKIP_BITS(re, &h->gb, ms->esc3_run_length);
  648. sign= SHOW_UBITS(re, &h->gb, 1);
  649. SKIP_BITS(re, &h->gb, 1);
  650. level = SHOW_UBITS(re, &h->gb, ms->esc3_level_length);
  651. SKIP_BITS(re, &h->gb, ms->esc3_level_length);
  652. if(sign) level= -level;
  653. }
  654. //level = level * qmul + (level>0) * qadd - (level<=0) * qadd ;
  655. if (level>0) level= level * qmul + qadd;
  656. else level= level * qmul - qadd;
  657. i+= run + 1;
  658. if(last) i+=192;
  659. } else {
  660. /* second escape */
  661. SKIP_BITS(re, &h->gb, 2);
  662. GET_RL_VLC(level, run, re, &h->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
  663. i+= run + rl->max_run[run>>7][level/qmul] + run_diff; //FIXME opt indexing
  664. level = (level ^ SHOW_SBITS(re, &h->gb, 1)) - SHOW_SBITS(re, &h->gb, 1);
  665. LAST_SKIP_BITS(re, &h->gb, 1);
  666. }
  667. } else {
  668. /* first escape */
  669. SKIP_BITS(re, &h->gb, 1);
  670. GET_RL_VLC(level, run, re, &h->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
  671. i+= run;
  672. level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
  673. level = (level ^ SHOW_SBITS(re, &h->gb, 1)) - SHOW_SBITS(re, &h->gb, 1);
  674. LAST_SKIP_BITS(re, &h->gb, 1);
  675. }
  676. } else {
  677. i+= run;
  678. level = (level ^ SHOW_SBITS(re, &h->gb, 1)) - SHOW_SBITS(re, &h->gb, 1);
  679. LAST_SKIP_BITS(re, &h->gb, 1);
  680. }
  681. if (i > 62){
  682. i-= 192;
  683. if(i&(~63)){
  684. const int left = get_bits_left(&h->gb);
  685. if (((i + 192 == 64 && level / qmul == -1) ||
  686. !(h->c.avctx->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT))) &&
  687. left >= 0) {
  688. av_log(h->c.avctx, AV_LOG_ERROR, "ignoring overflow at %d %d\n",
  689. h->c.mb_x, h->c.mb_y);
  690. i = 63;
  691. break;
  692. }else{
  693. av_log(h->c.avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n",
  694. h->c.mb_x, h->c.mb_y);
  695. return -1;
  696. }
  697. }
  698. block[scan_table[i]] = level;
  699. break;
  700. }
  701. block[scan_table[i]] = level;
  702. }
  703. CLOSE_READER(re, &h->gb);
  704. }
  705. if (h->c.mb_intra) {
  706. not_coded:
  707. ff_mpeg4_pred_ac(h, block, n, dc_pred_dir);
  708. }
  709. h->c.block_last_index[n] = i;
  710. return 0;
  711. }
  712. void ff_msmpeg4_decode_motion(MSMP4DecContext *const ms, int *mx_ptr, int *my_ptr)
  713. {
  714. const VLCElem *const mv_vlc = mv_tables[ms->mv_table_index];
  715. H263DecContext *const h = &ms->h;
  716. int sym, mx, my;
  717. sym = get_vlc2(&h->gb, mv_vlc, MV_VLC_BITS, 2);
  718. if (sym) {
  719. mx = sym >> 8;
  720. my = sym & 0xFF;
  721. } else {
  722. /* Escape */
  723. mx = get_bits(&h->gb, 6);
  724. my = get_bits(&h->gb, 6);
  725. }
  726. mx += *mx_ptr - 32;
  727. my += *my_ptr - 32;
  728. /* WARNING : they do not do exactly modulo encoding */
  729. if (mx <= -64)
  730. mx += 64;
  731. else if (mx >= 64)
  732. mx -= 64;
  733. if (my <= -64)
  734. my += 64;
  735. else if (my >= 64)
  736. my -= 64;
  737. *mx_ptr = mx;
  738. *my_ptr = my;
  739. }
  740. av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
  741. {
  742. static AVOnce init_static_once = AV_ONCE_INIT;
  743. H263DecContext *const h = avctx->priv_data;
  744. int ret;
  745. ret = av_image_check_size(avctx->width, avctx->height, 0, avctx);
  746. if (ret < 0)
  747. return ret;
  748. if (ff_h263_decode_init(avctx) < 0)
  749. return -1;
  750. // We unquantize inter blocks as we parse them.
  751. h->c.dct_unquantize_inter = NULL;
  752. h->decode_header = msmpeg4_decode_picture_header;
  753. ff_msmpeg4_common_init(&h->c);
  754. switch (h->c.msmpeg4_version) {
  755. case MSMP4_V1:
  756. case MSMP4_V2:
  757. h->decode_mb = msmpeg4v12_decode_mb;
  758. break;
  759. case MSMP4_V3:
  760. case MSMP4_WMV1:
  761. h->decode_mb = msmpeg4v34_decode_mb;
  762. break;
  763. case MSMP4_WMV2:
  764. break;
  765. default:
  766. av_unreachable("List contains all cases using ff_msmpeg4_decode_init()");
  767. }
  768. h->slice_height = h->c.mb_height; //to avoid 1/0 if the first frame is not a keyframe
  769. ff_thread_once(&init_static_once, msmpeg4_decode_init_static);
  770. return 0;
  771. }
  772. const FFCodec ff_msmpeg4v1_decoder = {
  773. .p.name = "msmpeg4v1",
  774. CODEC_LONG_NAME("MPEG-4 part 2 Microsoft variant version 1"),
  775. .p.type = AVMEDIA_TYPE_VIDEO,
  776. .p.id = AV_CODEC_ID_MSMPEG4V1,
  777. .priv_data_size = sizeof(MSMP4DecContext),
  778. .init = ff_msmpeg4_decode_init,
  779. FF_CODEC_DECODE_CB(ff_h263_decode_frame),
  780. .close = ff_mpv_decode_close,
  781. .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  782. .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
  783. FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
  784. .p.max_lowres = 3,
  785. };
  786. const FFCodec ff_msmpeg4v2_decoder = {
  787. .p.name = "msmpeg4v2",
  788. CODEC_LONG_NAME("MPEG-4 part 2 Microsoft variant version 2"),
  789. .p.type = AVMEDIA_TYPE_VIDEO,
  790. .p.id = AV_CODEC_ID_MSMPEG4V2,
  791. .priv_data_size = sizeof(MSMP4DecContext),
  792. .init = ff_msmpeg4_decode_init,
  793. FF_CODEC_DECODE_CB(ff_h263_decode_frame),
  794. .close = ff_mpv_decode_close,
  795. .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  796. .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
  797. FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
  798. .p.max_lowres = 3,
  799. };
  800. const FFCodec ff_msmpeg4v3_decoder = {
  801. .p.name = "msmpeg4",
  802. CODEC_LONG_NAME("MPEG-4 part 2 Microsoft variant version 3"),
  803. .p.type = AVMEDIA_TYPE_VIDEO,
  804. .p.id = AV_CODEC_ID_MSMPEG4V3,
  805. .priv_data_size = sizeof(MSMP4DecContext),
  806. .init = ff_msmpeg4_decode_init,
  807. FF_CODEC_DECODE_CB(ff_h263_decode_frame),
  808. .close = ff_mpv_decode_close,
  809. .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  810. .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
  811. FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
  812. .p.max_lowres = 3,
  813. };
  814. const FFCodec ff_wmv1_decoder = {
  815. .p.name = "wmv1",
  816. CODEC_LONG_NAME("Windows Media Video 7"),
  817. .p.type = AVMEDIA_TYPE_VIDEO,
  818. .p.id = AV_CODEC_ID_WMV1,
  819. .priv_data_size = sizeof(MSMP4DecContext),
  820. .init = ff_msmpeg4_decode_init,
  821. FF_CODEC_DECODE_CB(ff_h263_decode_frame),
  822. .close = ff_mpv_decode_close,
  823. .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,
  824. .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
  825. FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
  826. .p.max_lowres = 3,
  827. };