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.

2641 lines
86KB

  1. /*
  2. * H263/MPEG4 backend for ffmpeg encoder and decoder
  3. * Copyright (c) 2000,2001 Gerard Lantau.
  4. * H263+ support.
  5. * Copyright (c) 2001 Juan J. Sierralta P.
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. *
  21. * ac prediction encoding by Michael Niedermayer <michaelni@gmx.at>
  22. */
  23. #include "common.h"
  24. #include "dsputil.h"
  25. #include "avcodec.h"
  26. #include "mpegvideo.h"
  27. #include "h263data.h"
  28. #include "mpeg4data.h"
  29. //rounded divison & shift
  30. #define RDIV(a,b) ((a) > 0 ? ((a)+((b)>>1))/(b) : ((a)-((b)>>1))/(b))
  31. #define RSHIFT(a,b) ((a) > 0 ? ((a) + (1<<((b)-1)))>>(b) : ((a) + (1<<((b)-1))-1)>>(b))
  32. #define ABS(a) (((a)>=0)?(a):(-(a)))
  33. #define MAX(a,b) ((a) > (b) ? (a) : (b))
  34. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  35. static void h263_encode_block(MpegEncContext * s, DCTELEM * block,
  36. int n);
  37. static void h263_encode_motion(MpegEncContext * s, int val);
  38. static void h263p_encode_umotion(MpegEncContext * s, int val);
  39. static void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block,
  40. int n, int dc, UINT8 *scan_table);
  41. static int h263_decode_motion(MpegEncContext * s, int pred, int fcode);
  42. static int h263p_decode_umotion(MpegEncContext * s, int pred);
  43. static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
  44. int n, int coded);
  45. static int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
  46. int n, int coded);
  47. static inline int mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr);
  48. static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
  49. int dir);
  50. static void mpeg4_decode_sprite_trajectory(MpegEncContext * s);
  51. extern UINT32 inverse[256];
  52. static UINT16 mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
  53. static UINT8 fcode_tab[MAX_MV*2+1];
  54. static UINT8 umv_fcode_tab[MAX_MV*2+1];
  55. int h263_get_picture_format(int width, int height)
  56. {
  57. int format;
  58. if (width == 128 && height == 96)
  59. format = 1;
  60. else if (width == 176 && height == 144)
  61. format = 2;
  62. else if (width == 352 && height == 288)
  63. format = 3;
  64. else if (width == 704 && height == 576)
  65. format = 4;
  66. else if (width == 1408 && height == 1152)
  67. format = 5;
  68. else
  69. format = 7;
  70. return format;
  71. }
  72. void h263_encode_picture_header(MpegEncContext * s, int picture_number)
  73. {
  74. int format;
  75. align_put_bits(&s->pb);
  76. /* Update the pointer to last GOB */
  77. s->ptr_lastgob = pbBufPtr(&s->pb);
  78. s->gob_number = 0;
  79. put_bits(&s->pb, 22, 0x20); /* PSC */
  80. put_bits(&s->pb, 8, (((INT64)s->picture_number * 30 * FRAME_RATE_BASE) /
  81. s->frame_rate) & 0xff);
  82. put_bits(&s->pb, 1, 1); /* marker */
  83. put_bits(&s->pb, 1, 0); /* h263 id */
  84. put_bits(&s->pb, 1, 0); /* split screen off */
  85. put_bits(&s->pb, 1, 0); /* camera off */
  86. put_bits(&s->pb, 1, 0); /* freeze picture release off */
  87. format = h263_get_picture_format(s->width, s->height);
  88. if (!s->h263_plus) {
  89. /* H.263v1 */
  90. put_bits(&s->pb, 3, format);
  91. put_bits(&s->pb, 1, (s->pict_type == P_TYPE));
  92. /* By now UMV IS DISABLED ON H.263v1, since the restrictions
  93. of H.263v1 UMV implies to check the predicted MV after
  94. calculation of the current MB to see if we're on the limits */
  95. put_bits(&s->pb, 1, 0); /* unrestricted motion vector: off */
  96. put_bits(&s->pb, 1, 0); /* SAC: off */
  97. put_bits(&s->pb, 1, 0); /* advanced prediction mode: off */
  98. put_bits(&s->pb, 1, 0); /* not PB frame */
  99. put_bits(&s->pb, 5, s->qscale);
  100. put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
  101. } else {
  102. /* H.263v2 */
  103. /* H.263 Plus PTYPE */
  104. put_bits(&s->pb, 3, 7);
  105. put_bits(&s->pb,3,1); /* Update Full Extended PTYPE */
  106. if (format == 7)
  107. put_bits(&s->pb,3,6); /* Custom Source Format */
  108. else
  109. put_bits(&s->pb, 3, format);
  110. put_bits(&s->pb,1,0); /* Custom PCF: off */
  111. s->umvplus = (s->pict_type == P_TYPE) && s->unrestricted_mv;
  112. put_bits(&s->pb, 1, s->umvplus); /* Unrestricted Motion Vector */
  113. put_bits(&s->pb,1,0); /* SAC: off */
  114. put_bits(&s->pb,1,0); /* Advanced Prediction Mode: off */
  115. put_bits(&s->pb,1,0); /* Advanced Intra Coding: off */
  116. put_bits(&s->pb,1,0); /* Deblocking Filter: off */
  117. put_bits(&s->pb,1,0); /* Slice Structured: off */
  118. put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
  119. put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
  120. put_bits(&s->pb,1,0); /* Alternative Inter VLC: off */
  121. put_bits(&s->pb,1,0); /* Modified Quantization: off */
  122. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  123. put_bits(&s->pb,3,0); /* Reserved */
  124. put_bits(&s->pb, 3, s->pict_type == P_TYPE);
  125. put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
  126. put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
  127. put_bits(&s->pb,1,0); /* Rounding Type */
  128. put_bits(&s->pb,2,0); /* Reserved */
  129. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  130. /* This should be here if PLUSPTYPE */
  131. put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
  132. if (format == 7) {
  133. /* Custom Picture Format (CPFMT) */
  134. put_bits(&s->pb,4,2); /* Aspect ratio: CIF 12:11 (4:3) picture */
  135. put_bits(&s->pb,9,(s->width >> 2) - 1);
  136. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  137. put_bits(&s->pb,9,(s->height >> 2));
  138. }
  139. /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
  140. if (s->umvplus)
  141. put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
  142. put_bits(&s->pb, 5, s->qscale);
  143. }
  144. put_bits(&s->pb, 1, 0); /* no PEI */
  145. }
  146. int h263_encode_gob_header(MpegEncContext * s, int mb_line)
  147. {
  148. int pdif=0;
  149. /* Check to see if we need to put a new GBSC */
  150. /* for RTP packetization */
  151. if (s->rtp_mode) {
  152. pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
  153. if (pdif >= s->rtp_payload_size) {
  154. /* Bad luck, packet must be cut before */
  155. align_put_bits(&s->pb);
  156. flush_put_bits(&s->pb);
  157. /* Call the RTP callback to send the last GOB */
  158. if (s->rtp_callback) {
  159. pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
  160. s->rtp_callback(s->ptr_lastgob, pdif, s->gob_number);
  161. }
  162. s->ptr_lastgob = pbBufPtr(&s->pb);
  163. put_bits(&s->pb, 17, 1); /* GBSC */
  164. s->gob_number = mb_line / s->gob_index;
  165. put_bits(&s->pb, 5, s->gob_number); /* GN */
  166. put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
  167. put_bits(&s->pb, 5, s->qscale); /* GQUANT */
  168. //fprintf(stderr,"\nGOB: %2d size: %d", s->gob_number - 1, pdif);
  169. return pdif;
  170. } else if (pdif + s->mb_line_avgsize >= s->rtp_payload_size) {
  171. /* Cut the packet before we can't */
  172. align_put_bits(&s->pb);
  173. flush_put_bits(&s->pb);
  174. /* Call the RTP callback to send the last GOB */
  175. if (s->rtp_callback) {
  176. pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
  177. s->rtp_callback(s->ptr_lastgob, pdif, s->gob_number);
  178. }
  179. s->ptr_lastgob = pbBufPtr(&s->pb);
  180. put_bits(&s->pb, 17, 1); /* GBSC */
  181. s->gob_number = mb_line / s->gob_index;
  182. put_bits(&s->pb, 5, s->gob_number); /* GN */
  183. put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
  184. put_bits(&s->pb, 5, s->qscale); /* GQUANT */
  185. //fprintf(stderr,"\nGOB: %2d size: %d", s->gob_number - 1, pdif);
  186. return pdif;
  187. }
  188. }
  189. return 0;
  190. }
  191. static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int dir[6])
  192. {
  193. int score0=0, score1=0;
  194. int i, n;
  195. for(n=0; n<6; n++){
  196. INT16 *ac_val, *ac_val1;
  197. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  198. ac_val1= ac_val;
  199. if(dir[n]){
  200. ac_val-= s->block_wrap[n]*16;
  201. for(i=1; i<8; i++){
  202. const int level= block[n][block_permute_op(i )];
  203. score0+= ABS(level);
  204. score1+= ABS(level - ac_val[i+8]);
  205. ac_val1[i ]= block[n][block_permute_op(i<<3)];
  206. ac_val1[i+8]= level;
  207. }
  208. }else{
  209. ac_val-= 16;
  210. for(i=1; i<8; i++){
  211. const int level= block[n][block_permute_op(i<<3)];
  212. score0+= ABS(level);
  213. score1+= ABS(level - ac_val[i]);
  214. ac_val1[i ]= level;
  215. ac_val1[i+8]= block[n][block_permute_op(i )];
  216. }
  217. }
  218. }
  219. return score0 > score1 ? 1 : 0;
  220. }
  221. void mpeg4_encode_mb(MpegEncContext * s,
  222. DCTELEM block[6][64],
  223. int motion_x, int motion_y)
  224. {
  225. int cbpc, cbpy, i, cbp, pred_x, pred_y;
  226. int bits;
  227. // printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
  228. if (!s->mb_intra) {
  229. /* compute cbp */
  230. cbp = 0;
  231. for (i = 0; i < 6; i++) {
  232. if (s->block_last_index[i] >= 0)
  233. cbp |= 1 << (5 - i);
  234. }
  235. if ((cbp | motion_x | motion_y) == 0) {
  236. /* skip macroblock */
  237. put_bits(&s->pb, 1, 1);
  238. s->misc_bits++;
  239. s->last_bits++;
  240. s->skip_count++;
  241. return;
  242. }
  243. put_bits(&s->pb, 1, 0); /* mb coded */
  244. cbpc = cbp & 3;
  245. put_bits(&s->pb,
  246. inter_MCBPC_bits[cbpc],
  247. inter_MCBPC_code[cbpc]);
  248. cbpy = cbp >> 2;
  249. cbpy ^= 0xf;
  250. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  251. bits= get_bit_count(&s->pb);
  252. s->misc_bits+= bits - s->last_bits;
  253. s->last_bits=bits;
  254. /* motion vectors: 16x16 mode only now */
  255. h263_pred_motion(s, 0, &pred_x, &pred_y);
  256. h263_encode_motion(s, motion_x - pred_x);
  257. h263_encode_motion(s, motion_y - pred_y);
  258. bits= get_bit_count(&s->pb);
  259. s->mv_bits+= bits - s->last_bits;
  260. s->last_bits=bits;
  261. /* encode each block */
  262. for (i = 0; i < 6; i++) {
  263. mpeg4_encode_block(s, block[i], i, 0, zigzag_direct);
  264. }
  265. bits= get_bit_count(&s->pb);
  266. s->p_tex_bits+= bits - s->last_bits;
  267. s->last_bits=bits;
  268. s->p_count++;
  269. } else {
  270. int dc_diff[6]; //dc values with the dc prediction subtracted
  271. int dir[6]; //prediction direction
  272. int zigzag_last_index[6];
  273. UINT8 *scan_table[6];
  274. for(i=0; i<6; i++){
  275. const int level= block[i][0];
  276. UINT16 *dc_ptr;
  277. dc_diff[i]= level - mpeg4_pred_dc(s, i, &dc_ptr, &dir[i]);
  278. if (i < 4) {
  279. *dc_ptr = level * s->y_dc_scale;
  280. } else {
  281. *dc_ptr = level * s->c_dc_scale;
  282. }
  283. }
  284. s->ac_pred= decide_ac_pred(s, block, dir);
  285. if(s->ac_pred){
  286. for(i=0; i<6; i++){
  287. UINT8 *st;
  288. int last_index;
  289. mpeg4_inv_pred_ac(s, block[i], i, dir[i]);
  290. if (dir[i]==0) st = ff_alternate_vertical_scan; /* left */
  291. else st = ff_alternate_horizontal_scan; /* top */
  292. for(last_index=63; last_index>=0; last_index--) //FIXME optimize
  293. if(block[i][st[last_index]]) break;
  294. zigzag_last_index[i]= s->block_last_index[i];
  295. s->block_last_index[i]= last_index;
  296. scan_table[i]= st;
  297. }
  298. }else{
  299. for(i=0; i<6; i++)
  300. scan_table[i]= zigzag_direct;
  301. }
  302. /* compute cbp */
  303. cbp = 0;
  304. for (i = 0; i < 6; i++) {
  305. if (s->block_last_index[i] >= 1)
  306. cbp |= 1 << (5 - i);
  307. }
  308. cbpc = cbp & 3;
  309. if (s->pict_type == I_TYPE) {
  310. put_bits(&s->pb,
  311. intra_MCBPC_bits[cbpc],
  312. intra_MCBPC_code[cbpc]);
  313. } else {
  314. put_bits(&s->pb, 1, 0); /* mb coded */
  315. put_bits(&s->pb,
  316. inter_MCBPC_bits[cbpc + 4],
  317. inter_MCBPC_code[cbpc + 4]);
  318. }
  319. put_bits(&s->pb, 1, s->ac_pred);
  320. cbpy = cbp >> 2;
  321. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  322. bits= get_bit_count(&s->pb);
  323. s->misc_bits+= bits - s->last_bits;
  324. s->last_bits=bits;
  325. /* encode each block */
  326. for (i = 0; i < 6; i++) {
  327. mpeg4_encode_block(s, block[i], i, dc_diff[i], scan_table[i]);
  328. }
  329. bits= get_bit_count(&s->pb);
  330. s->i_tex_bits+= bits - s->last_bits;
  331. s->last_bits=bits;
  332. s->i_count++;
  333. /* restore ac coeffs & last_index stuff if we messed them up with the prediction */
  334. if(s->ac_pred){
  335. for(i=0; i<6; i++){
  336. int j;
  337. INT16 *ac_val;
  338. ac_val = s->ac_val[0][0] + s->block_index[i] * 16;
  339. if(dir[i]){
  340. for(j=1; j<8; j++)
  341. block[i][block_permute_op(j )]= ac_val[j+8];
  342. }else{
  343. for(j=1; j<8; j++)
  344. block[i][block_permute_op(j<<3)]= ac_val[j ];
  345. }
  346. s->block_last_index[i]= zigzag_last_index[i];
  347. }
  348. }
  349. }
  350. }
  351. void h263_encode_mb(MpegEncContext * s,
  352. DCTELEM block[6][64],
  353. int motion_x, int motion_y)
  354. {
  355. int cbpc, cbpy, i, cbp, pred_x, pred_y;
  356. // printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
  357. if (!s->mb_intra) {
  358. /* compute cbp */
  359. cbp = 0;
  360. for (i = 0; i < 6; i++) {
  361. if (s->block_last_index[i] >= 0)
  362. cbp |= 1 << (5 - i);
  363. }
  364. if ((cbp | motion_x | motion_y) == 0) {
  365. /* skip macroblock */
  366. put_bits(&s->pb, 1, 1);
  367. return;
  368. }
  369. put_bits(&s->pb, 1, 0); /* mb coded */
  370. cbpc = cbp & 3;
  371. put_bits(&s->pb,
  372. inter_MCBPC_bits[cbpc],
  373. inter_MCBPC_code[cbpc]);
  374. cbpy = cbp >> 2;
  375. cbpy ^= 0xf;
  376. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  377. /* motion vectors: 16x16 mode only now */
  378. h263_pred_motion(s, 0, &pred_x, &pred_y);
  379. if (!s->umvplus) {
  380. h263_encode_motion(s, motion_x - pred_x);
  381. h263_encode_motion(s, motion_y - pred_y);
  382. }
  383. else {
  384. h263p_encode_umotion(s, motion_x - pred_x);
  385. h263p_encode_umotion(s, motion_y - pred_y);
  386. if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
  387. /* To prevent Start Code emulation */
  388. put_bits(&s->pb,1,1);
  389. }
  390. } else {
  391. /* compute cbp */
  392. cbp = 0;
  393. for (i = 0; i < 6; i++) {
  394. if (s->block_last_index[i] >= 1)
  395. cbp |= 1 << (5 - i);
  396. }
  397. cbpc = cbp & 3;
  398. if (s->pict_type == I_TYPE) {
  399. put_bits(&s->pb,
  400. intra_MCBPC_bits[cbpc],
  401. intra_MCBPC_code[cbpc]);
  402. } else {
  403. put_bits(&s->pb, 1, 0); /* mb coded */
  404. put_bits(&s->pb,
  405. inter_MCBPC_bits[cbpc + 4],
  406. inter_MCBPC_code[cbpc + 4]);
  407. }
  408. if (s->h263_pred) {
  409. /* XXX: currently, we do not try to use ac prediction */
  410. put_bits(&s->pb, 1, 0); /* no ac prediction */
  411. }
  412. cbpy = cbp >> 2;
  413. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  414. }
  415. /* encode each block */
  416. if (s->h263_pred) {
  417. for (i = 0; i < 6; i++) {
  418. // mpeg4_encode_block(s, block[i], i);
  419. }
  420. } else {
  421. for (i = 0; i < 6; i++) {
  422. h263_encode_block(s, block[i], i);
  423. }
  424. }
  425. }
  426. void h263_pred_acdc(MpegEncContext * s, INT16 *block, int n)
  427. {
  428. int x, y, wrap, a, c, pred_dc, scale, i;
  429. INT16 *dc_val, *ac_val, *ac_val1;
  430. /* find prediction */
  431. if (n < 4) {
  432. x = 2 * s->mb_x + 1 + (n & 1);
  433. y = 2 * s->mb_y + 1 + ((n & 2) >> 1);
  434. wrap = s->mb_width * 2 + 2;
  435. dc_val = s->dc_val[0];
  436. ac_val = s->ac_val[0][0];
  437. scale = s->y_dc_scale;
  438. } else {
  439. x = s->mb_x + 1;
  440. y = s->mb_y + 1;
  441. wrap = s->mb_width + 2;
  442. dc_val = s->dc_val[n - 4 + 1];
  443. ac_val = s->ac_val[n - 4 + 1][0];
  444. scale = s->c_dc_scale;
  445. }
  446. ac_val += ((y) * wrap + (x)) * 16;
  447. ac_val1 = ac_val;
  448. /* B C
  449. * A X
  450. */
  451. a = dc_val[(x - 1) + (y) * wrap];
  452. c = dc_val[(x) + (y - 1) * wrap];
  453. pred_dc = 1024;
  454. if (s->ac_pred) {
  455. if (s->h263_aic_dir) {
  456. /* left prediction */
  457. if (a != 1024) {
  458. ac_val -= 16;
  459. for(i=1;i<8;i++) {
  460. block[block_permute_op(i*8)] += ac_val[i];
  461. }
  462. pred_dc = a;
  463. }
  464. } else {
  465. /* top prediction */
  466. if (c != 1024) {
  467. ac_val -= 16 * wrap;
  468. for(i=1;i<8;i++) {
  469. block[block_permute_op(i)] += ac_val[i + 8];
  470. }
  471. pred_dc = c;
  472. }
  473. }
  474. } else {
  475. /* just DC prediction */
  476. if (a != 1024 && c != 1024)
  477. pred_dc = (a + c) >> 1;
  478. else if (a != 1024)
  479. pred_dc = a;
  480. else
  481. pred_dc = c;
  482. }
  483. /* we assume pred is positive */
  484. block[0]=block[0]*scale + pred_dc;
  485. if (block[0] < 0)
  486. block[0] = 0;
  487. else if (!(block[0] & 1))
  488. block[0]++;
  489. /* Update AC/DC tables */
  490. dc_val[(x) + (y) * wrap] = block[0];
  491. /* left copy */
  492. for(i=1;i<8;i++)
  493. ac_val1[i] = block[block_permute_op(i * 8)];
  494. /* top copy */
  495. for(i=1;i<8;i++)
  496. ac_val1[8 + i] = block[block_permute_op(i)];
  497. }
  498. INT16 *h263_pred_motion(MpegEncContext * s, int block,
  499. int *px, int *py)
  500. {
  501. int xy, wrap;
  502. INT16 *A, *B, *C, *mot_val;
  503. static const int off[4]= {2, 1, 1, -1};
  504. wrap = s->block_wrap[0];
  505. xy = s->block_index[block];
  506. mot_val = s->motion_val[xy];
  507. /* special case for first line */
  508. if ((s->mb_y == 0 || s->first_slice_line || s->first_gob_line) && block<2) {
  509. A = s->motion_val[xy - 1];
  510. *px = A[0];
  511. *py = A[1];
  512. } else {
  513. A = s->motion_val[xy - 1];
  514. B = s->motion_val[xy - wrap];
  515. C = s->motion_val[xy + off[block] - wrap];
  516. *px = mid_pred(A[0], B[0], C[0]);
  517. *py = mid_pred(A[1], B[1], C[1]);
  518. }
  519. return mot_val;
  520. }
  521. static void h263_encode_motion(MpegEncContext * s, int val)
  522. {
  523. int range, l, m, bit_size, sign, code, bits;
  524. if (val == 0) {
  525. /* zero vector */
  526. code = 0;
  527. put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
  528. } else {
  529. bit_size = s->f_code - 1;
  530. range = 1 << bit_size;
  531. /* modulo encoding */
  532. l = range * 32;
  533. m = 2 * l;
  534. if (val < -l) {
  535. val += m;
  536. } else if (val >= l) {
  537. val -= m;
  538. }
  539. if (val >= 0) {
  540. val--;
  541. code = (val >> bit_size) + 1;
  542. bits = val & (range - 1);
  543. sign = 0;
  544. } else {
  545. val = -val;
  546. val--;
  547. code = (val >> bit_size) + 1;
  548. bits = val & (range - 1);
  549. sign = 1;
  550. }
  551. put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
  552. if (bit_size > 0) {
  553. put_bits(&s->pb, bit_size, bits);
  554. }
  555. }
  556. }
  557. /* Encode MV differences on H.263+ with Unrestricted MV mode */
  558. static void h263p_encode_umotion(MpegEncContext * s, int val)
  559. {
  560. short sval = 0;
  561. short i = 0;
  562. short n_bits = 0;
  563. short temp_val;
  564. int code = 0;
  565. int tcode;
  566. if ( val == 0)
  567. put_bits(&s->pb, 1, 1);
  568. else if (val == 1)
  569. put_bits(&s->pb, 3, 0);
  570. else if (val == -1)
  571. put_bits(&s->pb, 3, 2);
  572. else {
  573. sval = ((val < 0) ? (short)(-val):(short)val);
  574. temp_val = sval;
  575. while (temp_val != 0) {
  576. temp_val = temp_val >> 1;
  577. n_bits++;
  578. }
  579. i = n_bits - 1;
  580. while (i > 0) {
  581. tcode = (sval & (1 << (i-1))) >> (i-1);
  582. tcode = (tcode << 1) | 1;
  583. code = (code << 2) | tcode;
  584. i--;
  585. }
  586. code = ((code << 1) | (val < 0)) << 1;
  587. put_bits(&s->pb, (2*n_bits)+1, code);
  588. //printf("\nVal = %d\tCode = %d", sval, code);
  589. }
  590. }
  591. static void init_mv_penalty_and_fcode(MpegEncContext *s)
  592. {
  593. int f_code;
  594. int mv;
  595. for(f_code=1; f_code<=MAX_FCODE; f_code++){
  596. for(mv=-MAX_MV; mv<=MAX_MV; mv++){
  597. int len;
  598. if(mv==0) len= mvtab[0][1];
  599. else{
  600. int val, bit_size, range, code;
  601. bit_size = s->f_code - 1;
  602. range = 1 << bit_size;
  603. val=mv;
  604. if (val < 0)
  605. val = -val;
  606. val--;
  607. code = (val >> bit_size) + 1;
  608. if(code<33){
  609. len= mvtab[code][1] + 1 + bit_size;
  610. }else{
  611. len= mvtab[32][1] + 2 + bit_size;
  612. }
  613. }
  614. mv_penalty[f_code][mv+MAX_MV]= len;
  615. }
  616. }
  617. for(f_code=MAX_FCODE; f_code>0; f_code--){
  618. for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
  619. fcode_tab[mv+MAX_MV]= f_code;
  620. }
  621. }
  622. for(mv=0; mv<MAX_MV*2+1; mv++){
  623. umv_fcode_tab[mv]= 1;
  624. }
  625. }
  626. void h263_encode_init(MpegEncContext *s)
  627. {
  628. static int done = 0;
  629. if (!done) {
  630. done = 1;
  631. init_rl(&rl_inter);
  632. init_rl(&rl_intra);
  633. init_mv_penalty_and_fcode(s);
  634. }
  635. s->mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
  636. // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
  637. if(s->h263_plus) s->fcode_tab= umv_fcode_tab;
  638. else if(s->h263_pred) s->fcode_tab= fcode_tab;
  639. }
  640. static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
  641. {
  642. int level, run, last, i, j, last_index, last_non_zero, sign, slevel;
  643. int code;
  644. RLTable *rl = &rl_inter;
  645. if (s->mb_intra) {
  646. /* DC coef */
  647. level = block[0];
  648. /* 255 cannot be represented, so we clamp */
  649. if (level > 254) {
  650. level = 254;
  651. block[0] = 254;
  652. }
  653. /* 0 cannot be represented also */
  654. else if (!level) {
  655. level = 1;
  656. block[0] = 1;
  657. }
  658. if (level == 128)
  659. put_bits(&s->pb, 8, 0xff);
  660. else
  661. put_bits(&s->pb, 8, level & 0xff);
  662. i = 1;
  663. } else {
  664. i = 0;
  665. }
  666. /* AC coefs */
  667. last_index = s->block_last_index[n];
  668. last_non_zero = i - 1;
  669. for (; i <= last_index; i++) {
  670. j = zigzag_direct[i];
  671. level = block[j];
  672. if (level) {
  673. run = i - last_non_zero - 1;
  674. last = (i == last_index);
  675. sign = 0;
  676. slevel = level;
  677. if (level < 0) {
  678. sign = 1;
  679. level = -level;
  680. }
  681. code = get_rl_index(rl, last, run, level);
  682. put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  683. if (code == rl->n) {
  684. put_bits(&s->pb, 1, last);
  685. put_bits(&s->pb, 6, run);
  686. put_bits(&s->pb, 8, slevel & 0xff);
  687. } else {
  688. put_bits(&s->pb, 1, sign);
  689. }
  690. last_non_zero = i;
  691. }
  692. }
  693. }
  694. /***************************************************/
  695. static void mpeg4_stuffing(PutBitContext * pbc)
  696. {
  697. int length;
  698. put_bits(pbc, 1, 0);
  699. length= (-get_bit_count(pbc))&7;
  700. put_bits(pbc, length, (1<<length)-1);
  701. }
  702. static void put_string(PutBitContext * pbc, char *s)
  703. {
  704. while(*s){
  705. put_bits(pbc, 8, *s);
  706. s++;
  707. }
  708. put_bits(pbc, 8, 0);
  709. }
  710. static void mpeg4_encode_vol_header(MpegEncContext * s)
  711. {
  712. int vo_ver_id=1; //must be 2 if we want GMC or q-pel
  713. if(get_bit_count(&s->pb)!=0) mpeg4_stuffing(&s->pb);
  714. put_bits(&s->pb, 16, 0);
  715. put_bits(&s->pb, 16, 0x100); /* video obj */
  716. put_bits(&s->pb, 16, 0);
  717. put_bits(&s->pb, 16, 0x120); /* video obj layer */
  718. put_bits(&s->pb, 1, 0); /* random access vol */
  719. put_bits(&s->pb, 8, 1); /* video obj type indication= simple obj */
  720. put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
  721. put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
  722. put_bits(&s->pb, 3, 1); /* is obj layer priority */
  723. if(s->aspect_ratio_info)
  724. put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
  725. else
  726. put_bits(&s->pb, 4, 1); /* aspect ratio info= sqare pixel */
  727. put_bits(&s->pb, 1, 0); /* vol control parameters= no */
  728. put_bits(&s->pb, 2, RECT_SHAPE); /* vol shape= rectangle */
  729. put_bits(&s->pb, 1, 1); /* marker bit */
  730. put_bits(&s->pb, 16, s->time_increment_resolution=30000);
  731. s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1;
  732. if (s->time_increment_bits < 1)
  733. s->time_increment_bits = 1;
  734. put_bits(&s->pb, 1, 1); /* marker bit */
  735. put_bits(&s->pb, 1, 0); /* fixed vop rate=no */
  736. put_bits(&s->pb, 1, 1); /* marker bit */
  737. put_bits(&s->pb, 13, s->width); /* vol width */
  738. put_bits(&s->pb, 1, 1); /* marker bit */
  739. put_bits(&s->pb, 13, s->height); /* vol height */
  740. put_bits(&s->pb, 1, 1); /* marker bit */
  741. put_bits(&s->pb, 1, 0); /* interlace */
  742. put_bits(&s->pb, 1, 1); /* obmc disable */
  743. if (vo_ver_id == 1) {
  744. put_bits(&s->pb, 1, s->vol_sprite_usage=0); /* sprite enable */
  745. }else{ /* vo_ver_id == 2 */
  746. put_bits(&s->pb, 2, s->vol_sprite_usage=0); /* sprite enable */
  747. }
  748. put_bits(&s->pb, 1, 0); /* not 8 bit */
  749. put_bits(&s->pb, 1, 0); /* quant type= h263 style*/
  750. if (vo_ver_id != 1)
  751. put_bits(&s->pb, 1, s->quarter_sample=0);
  752. put_bits(&s->pb, 1, 1); /* complexity estimation disable */
  753. put_bits(&s->pb, 1, 1); /* resync marker disable */
  754. put_bits(&s->pb, 1, 0); /* data partitioned */
  755. if (vo_ver_id != 1){
  756. put_bits(&s->pb, 1, 0); /* newpred */
  757. put_bits(&s->pb, 1, 0); /* reduced res vop */
  758. }
  759. put_bits(&s->pb, 1, 0); /* scalability */
  760. mpeg4_stuffing(&s->pb);
  761. put_bits(&s->pb, 16, 0);
  762. put_bits(&s->pb, 16, 0x1B2); /* user_data */
  763. put_string(&s->pb, "ffmpeg"); //FIXME append some version ...
  764. s->no_rounding = 0;
  765. }
  766. /* write mpeg4 VOP header */
  767. void mpeg4_encode_picture_header(MpegEncContext * s, int picture_number)
  768. {
  769. if(s->pict_type==I_TYPE) mpeg4_encode_vol_header(s);
  770. if(get_bit_count(&s->pb)!=0) mpeg4_stuffing(&s->pb);
  771. put_bits(&s->pb, 16, 0); /* vop header */
  772. put_bits(&s->pb, 16, 0x1B6); /* vop header */
  773. put_bits(&s->pb, 2, s->pict_type - 1); /* pict type: I = 0 , P = 1 */
  774. /* XXX: time base + 1 not always correct */
  775. put_bits(&s->pb, 1, 1);
  776. put_bits(&s->pb, 1, 0);
  777. put_bits(&s->pb, 1, 1); /* marker */
  778. put_bits(&s->pb, s->time_increment_bits, 1); /* XXX: correct time increment */
  779. put_bits(&s->pb, 1, 1); /* marker */
  780. put_bits(&s->pb, 1, 1); /* vop coded */
  781. if ( s->pict_type == P_TYPE
  782. || (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE)) {
  783. s->no_rounding ^= 1;
  784. put_bits(&s->pb, 1, s->no_rounding); /* rounding type */
  785. }
  786. put_bits(&s->pb, 3, 0); /* intra dc VLC threshold */
  787. //FIXME sprite stuff
  788. put_bits(&s->pb, 5, s->qscale);
  789. if (s->pict_type != I_TYPE)
  790. put_bits(&s->pb, 3, s->f_code); /* fcode_for */
  791. if (s->pict_type == B_TYPE)
  792. put_bits(&s->pb, 3, s->b_code); /* fcode_back */
  793. // printf("****frame %d\n", picture_number);
  794. }
  795. void h263_dc_scale(MpegEncContext * s)
  796. {
  797. #if 1
  798. const static UINT8 y_tab[32]={
  799. // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  800. 0, 8, 8, 8, 8,10,12,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,38,40,42,44,46
  801. };
  802. const static UINT8 c_tab[32]={
  803. // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  804. 0, 8, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,20,21,22,23,24,25
  805. };
  806. s->y_dc_scale = y_tab[s->qscale];
  807. s->c_dc_scale = c_tab[s->qscale];
  808. #else
  809. int quant;
  810. quant = s->qscale;
  811. /* luminance */
  812. if (quant < 5)
  813. s->y_dc_scale = 8;
  814. else if (quant > 4 && quant < 9)
  815. s->y_dc_scale = (2 * quant);
  816. else if (quant > 8 && quant < 25)
  817. s->y_dc_scale = (quant + 8);
  818. else
  819. s->y_dc_scale = (2 * quant - 16);
  820. /* chrominance */
  821. if (quant < 5)
  822. s->c_dc_scale = 8;
  823. else if (quant > 4 && quant < 25)
  824. s->c_dc_scale = ((quant + 13) / 2);
  825. else
  826. s->c_dc_scale = (quant - 6);
  827. #endif
  828. }
  829. static inline int mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr)
  830. {
  831. int a, b, c, wrap, pred, scale;
  832. UINT16 *dc_val;
  833. int dummy;
  834. /* find prediction */
  835. if (n < 4) {
  836. scale = s->y_dc_scale;
  837. } else {
  838. scale = s->c_dc_scale;
  839. }
  840. wrap= s->block_wrap[n];
  841. dc_val = s->dc_val[0] + s->block_index[n];
  842. /* B C
  843. * A X
  844. */
  845. a = dc_val[ - 1];
  846. b = dc_val[ - 1 - wrap];
  847. c = dc_val[ - wrap];
  848. if (abs(a - b) < abs(b - c)) {
  849. pred = c;
  850. *dir_ptr = 1; /* top */
  851. } else {
  852. pred = a;
  853. *dir_ptr = 0; /* left */
  854. }
  855. /* we assume pred is positive */
  856. #ifdef ARCH_X86
  857. asm volatile (
  858. "xorl %%edx, %%edx \n\t"
  859. "mul %%ecx \n\t"
  860. : "=d" (pred), "=a"(dummy)
  861. : "a" (pred + (scale >> 1)), "c" (inverse[scale])
  862. );
  863. #else
  864. pred = (pred + (scale >> 1)) / scale;
  865. #endif
  866. /* prepare address for prediction update */
  867. *dc_val_ptr = &dc_val[0];
  868. return pred;
  869. }
  870. void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
  871. int dir)
  872. {
  873. int i;
  874. INT16 *ac_val, *ac_val1;
  875. /* find prediction */
  876. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  877. ac_val1 = ac_val;
  878. if (s->ac_pred) {
  879. if (dir == 0) {
  880. /* left prediction */
  881. ac_val -= 16;
  882. for(i=1;i<8;i++) {
  883. block[block_permute_op(i*8)] += ac_val[i];
  884. }
  885. } else {
  886. /* top prediction */
  887. ac_val -= 16 * s->block_wrap[n];
  888. for(i=1;i<8;i++) {
  889. block[block_permute_op(i)] += ac_val[i + 8];
  890. }
  891. }
  892. }
  893. /* left copy */
  894. for(i=1;i<8;i++)
  895. ac_val1[i] = block[block_permute_op(i * 8)];
  896. /* top copy */
  897. for(i=1;i<8;i++)
  898. ac_val1[8 + i] = block[block_permute_op(i)];
  899. }
  900. static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
  901. int dir)
  902. {
  903. int i;
  904. INT16 *ac_val;
  905. /* find prediction */
  906. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  907. if (dir == 0) {
  908. /* left prediction */
  909. ac_val -= 16;
  910. for(i=1;i<8;i++) {
  911. block[block_permute_op(i*8)] -= ac_val[i];
  912. }
  913. } else {
  914. /* top prediction */
  915. ac_val -= 16 * s->block_wrap[n];
  916. for(i=1;i<8;i++) {
  917. block[block_permute_op(i)] -= ac_val[i + 8];
  918. }
  919. }
  920. }
  921. static inline void mpeg4_encode_dc(MpegEncContext * s, int level, int n)
  922. {
  923. int size, v;
  924. /* find number of bits */
  925. size = 0;
  926. v = abs(level);
  927. while (v) {
  928. v >>= 1;
  929. size++;
  930. }
  931. if (n < 4) {
  932. /* luminance */
  933. put_bits(&s->pb, DCtab_lum[size][1], DCtab_lum[size][0]);
  934. } else {
  935. /* chrominance */
  936. put_bits(&s->pb, DCtab_chrom[size][1], DCtab_chrom[size][0]);
  937. }
  938. /* encode remaining bits */
  939. if (size > 0) {
  940. if (level < 0)
  941. level = (-level) ^ ((1 << size) - 1);
  942. put_bits(&s->pb, size, level);
  943. if (size > 8)
  944. put_bits(&s->pb, 1, 1);
  945. }
  946. }
  947. static void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n, int intra_dc, UINT8 *scan_table)
  948. {
  949. int level, run, last, i, j, last_index, last_non_zero, sign, slevel;
  950. int code;
  951. const RLTable *rl;
  952. if (s->mb_intra) {
  953. /* mpeg4 based DC predictor */
  954. mpeg4_encode_dc(s, intra_dc, n);
  955. i = 1;
  956. rl = &rl_intra;
  957. } else {
  958. i = 0;
  959. rl = &rl_inter;
  960. }
  961. /* AC coefs */
  962. last_index = s->block_last_index[n];
  963. last_non_zero = i - 1;
  964. for (; i <= last_index; i++) {
  965. j = scan_table[i];
  966. level = block[j];
  967. if (level) {
  968. run = i - last_non_zero - 1;
  969. last = (i == last_index);
  970. sign = 0;
  971. slevel = level;
  972. if (level < 0) {
  973. sign = 1;
  974. level = -level;
  975. }
  976. code = get_rl_index(rl, last, run, level);
  977. put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  978. if (code == rl->n) {
  979. int level1, run1;
  980. level1 = level - rl->max_level[last][run];
  981. if (level1 < 1)
  982. goto esc2;
  983. code = get_rl_index(rl, last, run, level1);
  984. if (code == rl->n) {
  985. esc2:
  986. put_bits(&s->pb, 1, 1);
  987. if (level > MAX_LEVEL)
  988. goto esc3;
  989. run1 = run - rl->max_run[last][level] - 1;
  990. if (run1 < 0)
  991. goto esc3;
  992. code = get_rl_index(rl, last, run1, level);
  993. if (code == rl->n) {
  994. esc3:
  995. /* third escape */
  996. put_bits(&s->pb, 1, 1);
  997. put_bits(&s->pb, 1, last);
  998. put_bits(&s->pb, 6, run);
  999. put_bits(&s->pb, 1, 1);
  1000. put_bits(&s->pb, 12, slevel & 0xfff);
  1001. put_bits(&s->pb, 1, 1);
  1002. } else {
  1003. /* second escape */
  1004. put_bits(&s->pb, 1, 0);
  1005. put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1006. put_bits(&s->pb, 1, sign);
  1007. }
  1008. } else {
  1009. /* first escape */
  1010. put_bits(&s->pb, 1, 0);
  1011. put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1012. put_bits(&s->pb, 1, sign);
  1013. }
  1014. } else {
  1015. put_bits(&s->pb, 1, sign);
  1016. }
  1017. last_non_zero = i;
  1018. }
  1019. }
  1020. }
  1021. /***********************************************/
  1022. /* decoding */
  1023. static VLC intra_MCBPC_vlc;
  1024. static VLC inter_MCBPC_vlc;
  1025. static VLC cbpy_vlc;
  1026. static VLC mv_vlc;
  1027. static VLC dc_lum, dc_chrom;
  1028. static VLC sprite_trajectory;
  1029. static VLC mb_type_b_vlc;
  1030. void init_rl(RLTable *rl)
  1031. {
  1032. INT8 max_level[MAX_RUN+1], max_run[MAX_LEVEL+1];
  1033. UINT8 index_run[MAX_RUN+1];
  1034. int last, run, level, start, end, i;
  1035. /* compute max_level[], max_run[] and index_run[] */
  1036. for(last=0;last<2;last++) {
  1037. if (last == 0) {
  1038. start = 0;
  1039. end = rl->last;
  1040. } else {
  1041. start = rl->last;
  1042. end = rl->n;
  1043. }
  1044. memset(max_level, 0, MAX_RUN + 1);
  1045. memset(max_run, 0, MAX_LEVEL + 1);
  1046. memset(index_run, rl->n, MAX_RUN + 1);
  1047. for(i=start;i<end;i++) {
  1048. run = rl->table_run[i];
  1049. level = rl->table_level[i];
  1050. if (index_run[run] == rl->n)
  1051. index_run[run] = i;
  1052. if (level > max_level[run])
  1053. max_level[run] = level;
  1054. if (run > max_run[level])
  1055. max_run[level] = run;
  1056. }
  1057. rl->max_level[last] = malloc(MAX_RUN + 1);
  1058. memcpy(rl->max_level[last], max_level, MAX_RUN + 1);
  1059. rl->max_run[last] = malloc(MAX_LEVEL + 1);
  1060. memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1);
  1061. rl->index_run[last] = malloc(MAX_RUN + 1);
  1062. memcpy(rl->index_run[last], index_run, MAX_RUN + 1);
  1063. }
  1064. }
  1065. void init_vlc_rl(RLTable *rl)
  1066. {
  1067. init_vlc(&rl->vlc, 9, rl->n + 1,
  1068. &rl->table_vlc[0][1], 4, 2,
  1069. &rl->table_vlc[0][0], 4, 2);
  1070. }
  1071. /* init vlcs */
  1072. /* XXX: find a better solution to handle static init */
  1073. void h263_decode_init_vlc(MpegEncContext *s)
  1074. {
  1075. static int done = 0;
  1076. if (!done) {
  1077. done = 1;
  1078. init_vlc(&intra_MCBPC_vlc, 6, 8,
  1079. intra_MCBPC_bits, 1, 1,
  1080. intra_MCBPC_code, 1, 1);
  1081. init_vlc(&inter_MCBPC_vlc, 9, 25,
  1082. inter_MCBPC_bits, 1, 1,
  1083. inter_MCBPC_code, 1, 1);
  1084. init_vlc(&cbpy_vlc, 6, 16,
  1085. &cbpy_tab[0][1], 2, 1,
  1086. &cbpy_tab[0][0], 2, 1);
  1087. init_vlc(&mv_vlc, 9, 33,
  1088. &mvtab[0][1], 2, 1,
  1089. &mvtab[0][0], 2, 1);
  1090. init_rl(&rl_inter);
  1091. init_rl(&rl_intra);
  1092. init_rl(&rl_intra_aic);
  1093. init_vlc_rl(&rl_inter);
  1094. init_vlc_rl(&rl_intra);
  1095. init_vlc_rl(&rl_intra_aic);
  1096. init_vlc(&dc_lum, 9, 13,
  1097. &DCtab_lum[0][1], 2, 1,
  1098. &DCtab_lum[0][0], 2, 1);
  1099. init_vlc(&dc_chrom, 9, 13,
  1100. &DCtab_chrom[0][1], 2, 1,
  1101. &DCtab_chrom[0][0], 2, 1);
  1102. init_vlc(&sprite_trajectory, 9, 15,
  1103. &sprite_trajectory_tab[0][1], 4, 2,
  1104. &sprite_trajectory_tab[0][0], 4, 2);
  1105. init_vlc(&mb_type_b_vlc, 4, 4,
  1106. &mb_type_b_tab[0][1], 2, 1,
  1107. &mb_type_b_tab[0][0], 2, 1);
  1108. }
  1109. }
  1110. int h263_decode_gob_header(MpegEncContext *s)
  1111. {
  1112. unsigned int val, gfid;
  1113. /* Check for GOB Start Code */
  1114. val = show_bits(&s->gb, 16);
  1115. if (val == 0) {
  1116. /* We have a GBSC probably with GSTUFF */
  1117. skip_bits(&s->gb, 16); /* Drop the zeros */
  1118. while (get_bits1(&s->gb) == 0); /* Seek the '1' bit */
  1119. #ifdef DEBUG
  1120. fprintf(stderr,"\nGOB Start Code at MB %d\n", (s->mb_y * s->mb_width) + s->mb_x);
  1121. #endif
  1122. s->gob_number = get_bits(&s->gb, 5); /* GN */
  1123. gfid = get_bits(&s->gb, 2); /* GFID */
  1124. s->qscale = get_bits(&s->gb, 5); /* GQUANT */
  1125. #ifdef DEBUG
  1126. fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale);
  1127. #endif
  1128. return 1;
  1129. }
  1130. return 0;
  1131. }
  1132. static inline void memsetw(short *tab, int val, int n)
  1133. {
  1134. int i;
  1135. for(i=0;i<n;i++)
  1136. tab[i] = val;
  1137. }
  1138. static int mpeg4_resync(MpegEncContext *s)
  1139. {
  1140. int state, v, bits;
  1141. int mb_num_bits= av_log2(s->mb_num - 1) + 1;
  1142. int header_extension=0, mb_num;
  1143. int c_wrap, c_xy, l_wrap, l_xy;
  1144. //printf("resync at %d %d\n", s->mb_x, s->mb_y);
  1145. //printf("%X\n", show_bits(&s->gb, 24));
  1146. if( get_bits_count(&s->gb) > s->gb.size*8-32)
  1147. return 0;
  1148. align_get_bits(&s->gb);
  1149. state = 0xff;
  1150. for(;;) {
  1151. v = get_bits(&s->gb, 8);
  1152. //printf("%X ", v);
  1153. state = ((state << 8) | v) & 0xffff;
  1154. if (state == 0) break;
  1155. if( get_bits_count(&s->gb) > s->gb.size*8-32){
  1156. printf("resync failed\n");
  1157. return -1;
  1158. }
  1159. }
  1160. //printf("%X\n", show_bits(&s->gb, 24));
  1161. bits=0;
  1162. while(!get_bits1(&s->gb) && bits<30) bits++;
  1163. if(s->pict_type == P_TYPE && bits != s->f_code-1)
  1164. printf("marker does not match f_code\n");
  1165. //FIXME check bits for B-framess
  1166. //printf("%X\n", show_bits(&s->gb, 24));
  1167. if(s->shape != RECT_SHAPE){
  1168. header_extension= get_bits1(&s->gb);
  1169. //FIXME more stuff here
  1170. }
  1171. mb_num= get_bits(&s->gb, mb_num_bits);
  1172. if(mb_num != s->mb_x + s->mb_y*s->mb_width){
  1173. printf("MB-num change not supported %d %d\n", mb_num, s->mb_x + s->mb_y*s->mb_width);
  1174. // s->mb_x= mb_num % s->mb_width;
  1175. // s->mb_y= mb_num / s->mb_width;
  1176. //FIXME many vars are wrong now
  1177. }
  1178. if(s->shape != BIN_ONLY_SHAPE){
  1179. s->qscale= get_bits(&s->gb, 5);
  1180. h263_dc_scale(s);
  1181. }
  1182. if(s->shape == RECT_SHAPE){
  1183. header_extension= get_bits1(&s->gb);
  1184. }
  1185. if(header_extension){
  1186. int time_incr=0;
  1187. printf("header extension not really supported\n");
  1188. while (get_bits1(&s->gb) != 0)
  1189. time_incr++;
  1190. check_marker(&s->gb, "before time_increment in video packed header");
  1191. s->time_increment= get_bits(&s->gb, s->time_increment_bits);
  1192. if(s->pict_type!=B_TYPE){
  1193. s->time_base+= time_incr;
  1194. s->last_non_b_time[1]= s->last_non_b_time[0];
  1195. s->last_non_b_time[0]= s->time_base*s->time_increment_resolution + s->time_increment;
  1196. }else{
  1197. s->time= (s->last_non_b_time[1]/s->time_increment_resolution + time_incr)*s->time_increment_resolution;
  1198. s->time+= s->time_increment;
  1199. }
  1200. check_marker(&s->gb, "before vop_coding_type in video packed header");
  1201. skip_bits(&s->gb, 2); /* vop coding type */
  1202. //FIXME not rect stuff here
  1203. if(s->shape != BIN_ONLY_SHAPE){
  1204. skip_bits(&s->gb, 3); /* intra dc vlc threshold */
  1205. if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE && s->num_sprite_warping_points){
  1206. mpeg4_decode_sprite_trajectory(s);
  1207. }
  1208. //FIXME reduced res stuff here
  1209. if (s->pict_type != I_TYPE) {
  1210. s->f_code = get_bits(&s->gb, 3); /* fcode_for */
  1211. if(s->f_code==0){
  1212. printf("Error, video packet header damaged or not MPEG4 header (f_code=0)\n");
  1213. return -1; // makes no sense to continue, as the MV decoding will break very quickly
  1214. }
  1215. }
  1216. if (s->pict_type == B_TYPE) {
  1217. s->b_code = get_bits(&s->gb, 3);
  1218. }
  1219. }
  1220. }
  1221. //FIXME new-pred stuff
  1222. l_wrap= s->block_wrap[0];
  1223. l_xy= s->mb_y*l_wrap*2;
  1224. c_wrap= s->block_wrap[4];
  1225. c_xy= s->mb_y*c_wrap;
  1226. /* clean DC */
  1227. memsetw(s->dc_val[0] + l_xy, 1024, l_wrap*3);
  1228. memsetw(s->dc_val[1] + c_xy, 1024, c_wrap*2);
  1229. memsetw(s->dc_val[2] + c_xy, 1024, c_wrap*2);
  1230. /* clean AC */
  1231. memset(s->ac_val[0] + l_xy, 0, l_wrap*3*16*sizeof(INT16));
  1232. memset(s->ac_val[1] + c_xy, 0, c_wrap*2*16*sizeof(INT16));
  1233. memset(s->ac_val[2] + c_xy, 0, c_wrap*2*16*sizeof(INT16));
  1234. /* clean MV */
  1235. memset(s->motion_val + l_xy, 0, l_wrap*3*2*sizeof(INT16));
  1236. // memset(s->motion_val, 0, 2*sizeof(INT16)*(2 + s->mb_width*2)*(2 + s->mb_height*2));
  1237. s->resync_x_pos= s->mb_x;
  1238. s->first_slice_line=1;
  1239. return 0;
  1240. }
  1241. int h263_decode_mb(MpegEncContext *s,
  1242. DCTELEM block[6][64])
  1243. {
  1244. int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
  1245. INT16 *mot_val;
  1246. static INT8 quant_tab[4] = { -1, -2, 1, 2 };
  1247. if(s->resync_marker){
  1248. if( s->resync_x_pos == s->mb_x+1
  1249. || s->resync_x_pos == s->mb_x){
  1250. /* f*ck mpeg4
  1251. this is here so we dont need to slowdown h263_pred_motion with it */
  1252. if(s->resync_x_pos == s->mb_x+1 && s->mb_x==0){
  1253. int xy= s->block_index[0] - s->block_wrap[0];
  1254. s->motion_val[xy][0]= s->motion_val[xy+2][0];
  1255. s->motion_val[xy][1]= s->motion_val[xy+2][1];
  1256. }
  1257. s->first_slice_line=0;
  1258. s->resync_x_pos=0; // isnt needed but for cleanness sake ;)
  1259. }
  1260. if(show_aligned_bits(&s->gb, 1, 16) == 0){
  1261. if( mpeg4_resync(s) < 0 ) return -1;
  1262. }
  1263. }
  1264. if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
  1265. if (get_bits1(&s->gb)) {
  1266. /* skip mb */
  1267. s->mb_intra = 0;
  1268. for(i=0;i<6;i++)
  1269. s->block_last_index[i] = -1;
  1270. s->mv_dir = MV_DIR_FORWARD;
  1271. s->mv_type = MV_TYPE_16X16;
  1272. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  1273. const int a= s->sprite_warping_accuracy;
  1274. // int l = (1 << (s->f_code - 1)) * 32;
  1275. s->mcsel=1;
  1276. s->mv[0][0][0] = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
  1277. s->mv[0][0][1] = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
  1278. /* if (s->mv[0][0][0] < -l) s->mv[0][0][0]= -l;
  1279. else if (s->mv[0][0][0] >= l) s->mv[0][0][0]= l-1;
  1280. if (s->mv[0][0][1] < -l) s->mv[0][0][1]= -l;
  1281. else if (s->mv[0][0][1] >= l) s->mv[0][0][1]= l-1;*/
  1282. s->mb_skiped = 0;
  1283. }else{
  1284. s->mcsel=0;
  1285. s->mv[0][0][0] = 0;
  1286. s->mv[0][0][1] = 0;
  1287. s->mb_skiped = 1;
  1288. }
  1289. return 0;
  1290. }
  1291. cbpc = get_vlc(&s->gb, &inter_MCBPC_vlc);
  1292. //fprintf(stderr, "\tCBPC: %d", cbpc);
  1293. if (cbpc < 0)
  1294. return -1;
  1295. if (cbpc > 20)
  1296. cbpc+=3;
  1297. else if (cbpc == 20)
  1298. fprintf(stderr, "Stuffing !");
  1299. dquant = cbpc & 8;
  1300. s->mb_intra = ((cbpc & 4) != 0);
  1301. if (s->mb_intra) goto intra;
  1302. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
  1303. s->mcsel= get_bits1(&s->gb);
  1304. else s->mcsel= 0;
  1305. cbpy = get_vlc(&s->gb, &cbpy_vlc);
  1306. cbp = (cbpc & 3) | ((cbpy ^ 0xf) << 2);
  1307. if (dquant) {
  1308. s->qscale += quant_tab[get_bits(&s->gb, 2)];
  1309. if (s->qscale < 1)
  1310. s->qscale = 1;
  1311. else if (s->qscale > 31)
  1312. s->qscale = 31;
  1313. h263_dc_scale(s);
  1314. }
  1315. s->mv_dir = MV_DIR_FORWARD;
  1316. if ((cbpc & 16) == 0) {
  1317. /* 16x16 motion prediction */
  1318. s->mv_type = MV_TYPE_16X16;
  1319. h263_pred_motion(s, 0, &pred_x, &pred_y);
  1320. if (s->umvplus_dec)
  1321. mx = h263p_decode_umotion(s, pred_x);
  1322. else if(!s->mcsel)
  1323. mx = h263_decode_motion(s, pred_x, s->f_code);
  1324. else {
  1325. const int a= s->sprite_warping_accuracy;
  1326. // int l = (1 << (s->f_code - 1)) * 32;
  1327. mx= RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
  1328. // if (mx < -l) mx= -l;
  1329. // else if (mx >= l) mx= l-1;
  1330. }
  1331. if (mx >= 0xffff)
  1332. return -1;
  1333. if (s->umvplus_dec)
  1334. my = h263p_decode_umotion(s, pred_y);
  1335. else if(!s->mcsel)
  1336. my = h263_decode_motion(s, pred_y, s->f_code);
  1337. else{
  1338. const int a= s->sprite_warping_accuracy;
  1339. // int l = (1 << (s->f_code - 1)) * 32;
  1340. my= RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
  1341. // if (my < -l) my= -l;
  1342. // else if (my >= l) my= l-1;
  1343. }
  1344. if (my >= 0xffff)
  1345. return -1;
  1346. s->mv[0][0][0] = mx;
  1347. s->mv[0][0][1] = my;
  1348. /*fprintf(stderr, "\n MB %d", (s->mb_y * s->mb_width) + s->mb_x);
  1349. fprintf(stderr, "\n\tmvx: %d\t\tpredx: %d", mx, pred_x);
  1350. fprintf(stderr, "\n\tmvy: %d\t\tpredy: %d", my, pred_y);*/
  1351. if (s->umvplus_dec && (mx - pred_x) == 1 && (my - pred_y) == 1)
  1352. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  1353. } else {
  1354. s->mv_type = MV_TYPE_8X8;
  1355. for(i=0;i<4;i++) {
  1356. mot_val = h263_pred_motion(s, i, &pred_x, &pred_y);
  1357. if (s->umvplus_dec)
  1358. mx = h263p_decode_umotion(s, pred_x);
  1359. else
  1360. mx = h263_decode_motion(s, pred_x, s->f_code);
  1361. if (mx >= 0xffff)
  1362. return -1;
  1363. if (s->umvplus_dec)
  1364. my = h263p_decode_umotion(s, pred_y);
  1365. else
  1366. my = h263_decode_motion(s, pred_y, s->f_code);
  1367. if (my >= 0xffff)
  1368. return -1;
  1369. s->mv[0][i][0] = mx;
  1370. s->mv[0][i][1] = my;
  1371. if (s->umvplus_dec && (mx - pred_x) == 1 && (my - pred_y) == 1)
  1372. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  1373. mot_val[0] = mx;
  1374. mot_val[1] = my;
  1375. }
  1376. }
  1377. } else if(s->pict_type==B_TYPE) {
  1378. int modb1; // first bit of modb
  1379. int modb2; // second bit of modb
  1380. int mb_type;
  1381. int time_pp;
  1382. int time_pb;
  1383. int xy;
  1384. s->mb_intra = 0; //B-frames never contain intra blocks
  1385. s->mcsel=0; // ... true gmc blocks
  1386. if(s->mb_x==0){
  1387. s->last_mv[0][0][0]=
  1388. s->last_mv[0][0][1]=
  1389. s->last_mv[1][0][0]=
  1390. s->last_mv[1][0][1]= 0;
  1391. }
  1392. /* if we skipped it in the future P Frame than skip it now too */
  1393. s->mb_skiped= s->mbskip_table[s->mb_y * s->mb_width + s->mb_x]; // Note, skiptab=0 if last was GMC
  1394. if(s->mb_skiped){
  1395. /* skip mb */
  1396. for(i=0;i<6;i++)
  1397. s->block_last_index[i] = -1;
  1398. s->mv_dir = MV_DIR_FORWARD;
  1399. s->mv_type = MV_TYPE_16X16;
  1400. s->mv[0][0][0] = 0;
  1401. s->mv[0][0][1] = 0;
  1402. s->mv[1][0][0] = 0;
  1403. s->mv[1][0][1] = 0;
  1404. //FIXME is this correct?
  1405. /* s->last_mv[0][0][0]=
  1406. s->last_mv[0][0][1]=0;*/
  1407. s->mb_skiped = 1;
  1408. return 0;
  1409. }
  1410. modb1= get_bits1(&s->gb);
  1411. if(modb1==0){
  1412. modb2= get_bits1(&s->gb);
  1413. mb_type= get_vlc(&s->gb, &mb_type_b_vlc);
  1414. if(modb2==0) cbp= get_bits(&s->gb, 6);
  1415. else cbp=0;
  1416. if (mb_type && cbp) {
  1417. if(get_bits1(&s->gb)){
  1418. s->qscale +=get_bits1(&s->gb)*4 - 2;
  1419. if (s->qscale < 1)
  1420. s->qscale = 1;
  1421. else if (s->qscale > 31)
  1422. s->qscale = 31;
  1423. h263_dc_scale(s);
  1424. }
  1425. }
  1426. }else{
  1427. mb_type=4; //like 0 but no vectors coded
  1428. cbp=0;
  1429. }
  1430. s->mv_type = MV_TYPE_16X16; // we'll switch to 8x8 only if the last P frame had 8x8 for this MB and mb_type=0 here
  1431. mx=my=0; //for case 4, we could put this to the mb_type=4 but than gcc compains about uninitalized mx/my
  1432. switch(mb_type)
  1433. {
  1434. case 0:
  1435. mx = h263_decode_motion(s, 0, 1);
  1436. my = h263_decode_motion(s, 0, 1);
  1437. case 4:
  1438. s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
  1439. xy= s->block_index[0];
  1440. time_pp= s->last_non_b_time[0] - s->last_non_b_time[1];
  1441. time_pb= s->time - s->last_non_b_time[1];
  1442. //if(time_pp>3000 )printf("%d %d ", time_pp, time_pb);
  1443. //FIXME 4MV
  1444. //FIXME avoid divides
  1445. s->mv[0][0][0] = s->motion_val[xy][0]*time_pb/time_pp + mx;
  1446. s->mv[0][0][1] = s->motion_val[xy][1]*time_pb/time_pp + my;
  1447. s->mv[1][0][0] = mx ? s->mv[0][0][0] - s->motion_val[xy][0]
  1448. : s->motion_val[xy][0]*(time_pb - time_pp)/time_pp + mx;
  1449. s->mv[1][0][1] = my ? s->mv[0][0][1] - s->motion_val[xy][1]
  1450. : s->motion_val[xy][1]*(time_pb - time_pp)/time_pp + my;
  1451. /* s->mv[0][0][0] =
  1452. s->mv[0][0][1] =
  1453. s->mv[1][0][0] =
  1454. s->mv[1][0][1] = 1000;*/
  1455. break;
  1456. case 1:
  1457. s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD;
  1458. mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code);
  1459. my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
  1460. s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
  1461. s->last_mv[0][0][1]= s->mv[0][0][1] = my;
  1462. mx = h263_decode_motion(s, s->last_mv[1][0][0], s->b_code);
  1463. my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
  1464. s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
  1465. s->last_mv[1][0][1]= s->mv[1][0][1] = my;
  1466. break;
  1467. case 2:
  1468. s->mv_dir = MV_DIR_BACKWARD;
  1469. mx = h263_decode_motion(s, s->last_mv[1][0][0], s->b_code);
  1470. my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
  1471. s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
  1472. s->last_mv[1][0][1]= s->mv[1][0][1] = my;
  1473. break;
  1474. case 3:
  1475. s->mv_dir = MV_DIR_FORWARD;
  1476. mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code);
  1477. my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
  1478. s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
  1479. s->last_mv[0][0][1]= s->mv[0][0][1] = my;
  1480. break;
  1481. default: return -1;
  1482. }
  1483. } else { /* I-Frame */
  1484. cbpc = get_vlc(&s->gb, &intra_MCBPC_vlc);
  1485. if (cbpc < 0)
  1486. return -1;
  1487. dquant = cbpc & 4;
  1488. s->mb_intra = 1;
  1489. intra:
  1490. s->ac_pred = 0;
  1491. if (s->h263_pred || s->h263_aic) {
  1492. s->ac_pred = get_bits1(&s->gb);
  1493. if (s->ac_pred && s->h263_aic)
  1494. s->h263_aic_dir = get_bits1(&s->gb);
  1495. }
  1496. if (s->h263_aic) {
  1497. s->y_dc_scale = 2 * s->qscale;
  1498. s->c_dc_scale = 2 * s->qscale;
  1499. }
  1500. cbpy = get_vlc(&s->gb, &cbpy_vlc);
  1501. cbp = (cbpc & 3) | (cbpy << 2);
  1502. if (dquant) {
  1503. s->qscale += quant_tab[get_bits(&s->gb, 2)];
  1504. if (s->qscale < 1)
  1505. s->qscale = 1;
  1506. else if (s->qscale > 31)
  1507. s->qscale = 31;
  1508. h263_dc_scale(s);
  1509. }
  1510. }
  1511. /* decode each block */
  1512. if (s->h263_pred) {
  1513. for (i = 0; i < 6; i++) {
  1514. if (mpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1) < 0)
  1515. return -1;
  1516. }
  1517. } else {
  1518. for (i = 0; i < 6; i++) {
  1519. if (h263_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1) < 0)
  1520. return -1;
  1521. }
  1522. }
  1523. return 0;
  1524. }
  1525. static int h263_decode_motion(MpegEncContext * s, int pred, int f_code)
  1526. {
  1527. int code, val, sign, shift, l, m;
  1528. code = get_vlc(&s->gb, &mv_vlc);
  1529. if (code < 0)
  1530. return 0xffff;
  1531. if (code == 0)
  1532. return pred;
  1533. sign = get_bits1(&s->gb);
  1534. shift = f_code - 1;
  1535. val = (code - 1) << shift;
  1536. if (shift > 0)
  1537. val |= get_bits(&s->gb, shift);
  1538. val++;
  1539. if (sign)
  1540. val = -val;
  1541. val += pred;
  1542. /* modulo decoding */
  1543. if (!s->h263_long_vectors) {
  1544. l = (1 << (f_code - 1)) * 32;
  1545. m = 2 * l;
  1546. if (val < -l) {
  1547. val += m;
  1548. } else if (val >= l) {
  1549. val -= m;
  1550. }
  1551. } else {
  1552. /* horrible h263 long vector mode */
  1553. if (pred < -31 && val < -63)
  1554. val += 64;
  1555. if (pred > 32 && val > 63)
  1556. val -= 64;
  1557. }
  1558. return val;
  1559. }
  1560. /* Decodes RVLC of H.263+ UMV */
  1561. static int h263p_decode_umotion(MpegEncContext * s, int pred)
  1562. {
  1563. int code = 0, sign;
  1564. if (get_bits1(&s->gb)) /* Motion difference = 0 */
  1565. return pred;
  1566. code = 2 + get_bits1(&s->gb);
  1567. while (get_bits1(&s->gb))
  1568. {
  1569. code <<= 1;
  1570. code += get_bits1(&s->gb);
  1571. }
  1572. sign = code & 1;
  1573. code >>= 1;
  1574. code = (sign) ? (pred - code) : (pred + code);
  1575. #ifdef DEBUG
  1576. fprintf(stderr,"H.263+ UMV Motion = %d\n", code);
  1577. #endif
  1578. return code;
  1579. }
  1580. static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
  1581. int n, int coded)
  1582. {
  1583. int code, level, i, j, last, run;
  1584. RLTable *rl = &rl_inter;
  1585. const UINT8 *scan_table;
  1586. scan_table = zigzag_direct;
  1587. if (s->h263_aic && s->mb_intra) {
  1588. rl = &rl_intra_aic;
  1589. i = 0;
  1590. if (s->ac_pred) {
  1591. if (s->h263_aic_dir)
  1592. scan_table = ff_alternate_vertical_scan; /* left */
  1593. else
  1594. scan_table = ff_alternate_horizontal_scan; /* top */
  1595. }
  1596. } else if (s->mb_intra) {
  1597. /* DC coef */
  1598. if (s->h263_rv10 && s->rv10_version == 3 && s->pict_type == I_TYPE) {
  1599. int component, diff;
  1600. component = (n <= 3 ? 0 : n - 4 + 1);
  1601. level = s->last_dc[component];
  1602. if (s->rv10_first_dc_coded[component]) {
  1603. diff = rv_decode_dc(s, n);
  1604. if (diff == 0xffff)
  1605. return -1;
  1606. level += diff;
  1607. level = level & 0xff; /* handle wrap round */
  1608. s->last_dc[component] = level;
  1609. } else {
  1610. s->rv10_first_dc_coded[component] = 1;
  1611. }
  1612. } else {
  1613. level = get_bits(&s->gb, 8);
  1614. if (level == 255)
  1615. level = 128;
  1616. }
  1617. block[0] = level;
  1618. i = 1;
  1619. } else {
  1620. i = 0;
  1621. }
  1622. if (!coded) {
  1623. if (s->mb_intra && s->h263_aic)
  1624. goto not_coded;
  1625. s->block_last_index[n] = i - 1;
  1626. return 0;
  1627. }
  1628. for(;;) {
  1629. code = get_vlc(&s->gb, &rl->vlc);
  1630. if (code < 0)
  1631. return -1;
  1632. if (code == rl->n) {
  1633. /* escape */
  1634. last = get_bits1(&s->gb);
  1635. run = get_bits(&s->gb, 6);
  1636. level = (INT8)get_bits(&s->gb, 8);
  1637. if (s->h263_rv10 && level == -128) {
  1638. /* XXX: should patch encoder too */
  1639. level = get_bits(&s->gb, 12);
  1640. level = (level << 20) >> 20;
  1641. }
  1642. } else {
  1643. run = rl->table_run[code];
  1644. level = rl->table_level[code];
  1645. last = code >= rl->last;
  1646. if (get_bits1(&s->gb))
  1647. level = -level;
  1648. }
  1649. i += run;
  1650. if (i >= 64)
  1651. return -1;
  1652. j = scan_table[i];
  1653. block[j] = level;
  1654. if (last)
  1655. break;
  1656. i++;
  1657. }
  1658. not_coded:
  1659. if (s->mb_intra && s->h263_aic) {
  1660. h263_pred_acdc(s, block, n);
  1661. i = 63;
  1662. }
  1663. s->block_last_index[n] = i;
  1664. return 0;
  1665. }
  1666. static int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
  1667. {
  1668. int level, pred, code;
  1669. UINT16 *dc_val;
  1670. if (n < 4)
  1671. code = get_vlc(&s->gb, &dc_lum);
  1672. else
  1673. code = get_vlc(&s->gb, &dc_chrom);
  1674. if (code < 0)
  1675. return -1;
  1676. if (code == 0) {
  1677. level = 0;
  1678. } else {
  1679. level = get_bits(&s->gb, code);
  1680. if ((level >> (code - 1)) == 0) /* if MSB not set it is negative*/
  1681. level = - (level ^ ((1 << code) - 1));
  1682. if (code > 8)
  1683. skip_bits1(&s->gb); /* marker */
  1684. }
  1685. pred = mpeg4_pred_dc(s, n, &dc_val, dir_ptr);
  1686. level += pred;
  1687. if (level < 0)
  1688. level = 0;
  1689. if (n < 4) {
  1690. *dc_val = level * s->y_dc_scale;
  1691. } else {
  1692. *dc_val = level * s->c_dc_scale;
  1693. }
  1694. return level;
  1695. }
  1696. static int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
  1697. int n, int coded)
  1698. {
  1699. int code, level, i, j, last, run;
  1700. int dc_pred_dir;
  1701. RLTable *rl;
  1702. const UINT8 *scan_table;
  1703. if (s->mb_intra) {
  1704. /* DC coef */
  1705. level = mpeg4_decode_dc(s, n, &dc_pred_dir);
  1706. if (level < 0)
  1707. return -1;
  1708. block[0] = level;
  1709. i = 1;
  1710. if (!coded)
  1711. goto not_coded;
  1712. rl = &rl_intra;
  1713. if (s->ac_pred) {
  1714. if (dc_pred_dir == 0)
  1715. scan_table = ff_alternate_vertical_scan; /* left */
  1716. else
  1717. scan_table = ff_alternate_horizontal_scan; /* top */
  1718. } else {
  1719. scan_table = zigzag_direct;
  1720. }
  1721. } else {
  1722. i = 0;
  1723. if (!coded) {
  1724. s->block_last_index[n] = i - 1;
  1725. return 0;
  1726. }
  1727. rl = &rl_inter;
  1728. scan_table = zigzag_direct;
  1729. }
  1730. for(;;) {
  1731. code = get_vlc(&s->gb, &rl->vlc);
  1732. if (code < 0)
  1733. return -1;
  1734. if (code == rl->n) {
  1735. /* escape */
  1736. if (get_bits1(&s->gb) != 0) {
  1737. if (get_bits1(&s->gb) != 0) {
  1738. /* third escape */
  1739. last = get_bits1(&s->gb);
  1740. run = get_bits(&s->gb, 6);
  1741. get_bits1(&s->gb); /* marker */
  1742. level = get_bits(&s->gb, 12);
  1743. level = (level << 20) >> 20; /* sign extend */
  1744. skip_bits1(&s->gb); /* marker */
  1745. } else {
  1746. /* second escape */
  1747. code = get_vlc(&s->gb, &rl->vlc);
  1748. if (code < 0 || code >= rl->n)
  1749. return -1;
  1750. run = rl->table_run[code];
  1751. level = rl->table_level[code];
  1752. last = code >= rl->last;
  1753. run += rl->max_run[last][level] + 1;
  1754. if (get_bits1(&s->gb))
  1755. level = -level;
  1756. }
  1757. } else {
  1758. /* first escape */
  1759. code = get_vlc(&s->gb, &rl->vlc);
  1760. if (code < 0 || code >= rl->n)
  1761. return -1;
  1762. run = rl->table_run[code];
  1763. level = rl->table_level[code];
  1764. last = code >= rl->last;
  1765. level += rl->max_level[last][run];
  1766. if (get_bits1(&s->gb))
  1767. level = -level;
  1768. }
  1769. } else {
  1770. run = rl->table_run[code];
  1771. level = rl->table_level[code];
  1772. last = code >= rl->last;
  1773. if (get_bits1(&s->gb))
  1774. level = -level;
  1775. }
  1776. i += run;
  1777. if (i >= 64)
  1778. return -1;
  1779. j = scan_table[i];
  1780. block[j] = level;
  1781. i++;
  1782. if (last)
  1783. break;
  1784. }
  1785. not_coded:
  1786. if (s->mb_intra) {
  1787. mpeg4_pred_ac(s, block, n, dc_pred_dir);
  1788. if (s->ac_pred) {
  1789. i = 64; /* XXX: not optimal */
  1790. }
  1791. }
  1792. s->block_last_index[n] = i - 1;
  1793. return 0;
  1794. }
  1795. /* most is hardcoded. should extend to handle all h263 streams */
  1796. int h263_decode_picture_header(MpegEncContext *s)
  1797. {
  1798. int format, width, height;
  1799. /* picture header */
  1800. if (get_bits(&s->gb, 22) != 0x20)
  1801. return -1;
  1802. s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
  1803. if (get_bits1(&s->gb) != 1)
  1804. return -1; /* marker */
  1805. if (get_bits1(&s->gb) != 0)
  1806. return -1; /* h263 id */
  1807. skip_bits1(&s->gb); /* split screen off */
  1808. skip_bits1(&s->gb); /* camera off */
  1809. skip_bits1(&s->gb); /* freeze picture release off */
  1810. /* Reset GOB number */
  1811. s->gob_number = 0;
  1812. format = get_bits(&s->gb, 3);
  1813. if (format != 7 && format != 6) {
  1814. s->h263_plus = 0;
  1815. /* H.263v1 */
  1816. width = h263_format[format][0];
  1817. height = h263_format[format][1];
  1818. if (!width)
  1819. return -1;
  1820. s->width = width;
  1821. s->height = height;
  1822. s->pict_type = I_TYPE + get_bits1(&s->gb);
  1823. s->unrestricted_mv = get_bits1(&s->gb);
  1824. s->h263_long_vectors = s->unrestricted_mv;
  1825. if (get_bits1(&s->gb) != 0)
  1826. return -1; /* SAC: off */
  1827. if (get_bits1(&s->gb) != 0) {
  1828. s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */
  1829. }
  1830. if (get_bits1(&s->gb) != 0)
  1831. return -1; /* not PB frame */
  1832. s->qscale = get_bits(&s->gb, 5);
  1833. skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
  1834. } else {
  1835. int ufep;
  1836. /* H.263v2 */
  1837. s->h263_plus = 1;
  1838. ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
  1839. if (ufep == 1) {
  1840. /* OPPTYPE */
  1841. format = get_bits(&s->gb, 3);
  1842. skip_bits(&s->gb,1); /* Custom PCF */
  1843. s->umvplus_dec = get_bits(&s->gb, 1); /* Unrestricted Motion Vector */
  1844. skip_bits1(&s->gb); /* Syntax-based Arithmetic Coding (SAC) */
  1845. if (get_bits1(&s->gb) != 0) {
  1846. s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */
  1847. }
  1848. if (get_bits1(&s->gb) != 0) { /* Advanced Intra Coding (AIC) */
  1849. s->h263_aic = 1;
  1850. }
  1851. skip_bits(&s->gb, 7);
  1852. skip_bits(&s->gb, 3); /* Reserved */
  1853. } else if (ufep != 0)
  1854. return -1;
  1855. /* MPPTYPE */
  1856. s->pict_type = get_bits(&s->gb, 3) + 1;
  1857. if (s->pict_type != I_TYPE &&
  1858. s->pict_type != P_TYPE)
  1859. return -1;
  1860. skip_bits(&s->gb, 2);
  1861. s->no_rounding = get_bits1(&s->gb);
  1862. //fprintf(stderr, "\nRTYPE: %d", s->no_rounding);
  1863. skip_bits(&s->gb, 4);
  1864. /* Get the picture dimensions */
  1865. if (ufep) {
  1866. if (format == 6) {
  1867. /* Custom Picture Format (CPFMT) */
  1868. skip_bits(&s->gb, 4); /* aspect ratio */
  1869. width = (get_bits(&s->gb, 9) + 1) * 4;
  1870. skip_bits1(&s->gb);
  1871. height = get_bits(&s->gb, 9) * 4;
  1872. #ifdef DEBUG
  1873. fprintf(stderr,"\nH.263+ Custom picture: %dx%d\n",width,height);
  1874. #endif
  1875. }
  1876. else {
  1877. width = h263_format[format][0];
  1878. height = h263_format[format][1];
  1879. }
  1880. if ((width == 0) || (height == 0))
  1881. return -1;
  1882. s->width = width;
  1883. s->height = height;
  1884. if (s->umvplus_dec) {
  1885. skip_bits1(&s->gb); /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
  1886. }
  1887. }
  1888. s->qscale = get_bits(&s->gb, 5);
  1889. }
  1890. /* PEI */
  1891. while (get_bits1(&s->gb) != 0) {
  1892. skip_bits(&s->gb, 8);
  1893. }
  1894. s->f_code = 1;
  1895. return 0;
  1896. }
  1897. static void mpeg4_decode_sprite_trajectory(MpegEncContext * s)
  1898. {
  1899. int i;
  1900. int a= 2<<s->sprite_warping_accuracy;
  1901. int rho= 3-s->sprite_warping_accuracy;
  1902. int r=16/a;
  1903. const int vop_ref[4][2]= {{0,0}, {s->width,0}, {0, s->height}, {s->width, s->height}}; // only true for rectangle shapes
  1904. int d[4][2]={{0,0}, {0,0}, {0,0}, {0,0}};
  1905. int sprite_ref[4][2];
  1906. int virtual_ref[2][2];
  1907. int w2, h2;
  1908. int alpha=0, beta=0;
  1909. int w= s->width;
  1910. int h= s->height;
  1911. //printf("SP %d\n", s->sprite_warping_accuracy);
  1912. for(i=0; i<s->num_sprite_warping_points; i++){
  1913. int length;
  1914. int x=0, y=0;
  1915. length= get_vlc(&s->gb, &sprite_trajectory);
  1916. if(length){
  1917. x= get_bits(&s->gb, length);
  1918. //printf("lx %d %d\n", length, x);
  1919. if ((x >> (length - 1)) == 0) /* if MSB not set it is negative*/
  1920. x = - (x ^ ((1 << length) - 1));
  1921. }
  1922. if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(&s->gb); /* marker bit */
  1923. length= get_vlc(&s->gb, &sprite_trajectory);
  1924. if(length){
  1925. y=get_bits(&s->gb, length);
  1926. //printf("ly %d %d\n", length, y);
  1927. if ((y >> (length - 1)) == 0) /* if MSB not set it is negative*/
  1928. y = - (y ^ ((1 << length) - 1));
  1929. }
  1930. skip_bits1(&s->gb); /* marker bit */
  1931. //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy);
  1932. //if(i>0 && (x!=0 || y!=0)) printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
  1933. //x=y=0;
  1934. d[i][0]= x;
  1935. d[i][1]= y;
  1936. }
  1937. while((1<<alpha)<w) alpha++;
  1938. while((1<<beta )<h) beta++; // there seems to be a typo in the mpeg4 std for the definition of w' and h'
  1939. w2= 1<<alpha;
  1940. h2= 1<<beta;
  1941. // Note, the 4th point isnt used for GMC
  1942. if(s->divx_version==500 && s->divx_build==413){
  1943. sprite_ref[0][0]= a*vop_ref[0][0] + d[0][0];
  1944. sprite_ref[0][1]= a*vop_ref[0][1] + d[0][1];
  1945. sprite_ref[1][0]= a*vop_ref[1][0] + d[0][0] + d[1][0];
  1946. sprite_ref[1][1]= a*vop_ref[1][1] + d[0][1] + d[1][1];
  1947. sprite_ref[2][0]= a*vop_ref[2][0] + d[0][0] + d[2][0];
  1948. sprite_ref[2][1]= a*vop_ref[2][1] + d[0][1] + d[2][1];
  1949. } else {
  1950. sprite_ref[0][0]= (a>>1)*(2*vop_ref[0][0] + d[0][0]);
  1951. sprite_ref[0][1]= (a>>1)*(2*vop_ref[0][1] + d[0][1]);
  1952. sprite_ref[1][0]= (a>>1)*(2*vop_ref[1][0] + d[0][0] + d[1][0]);
  1953. sprite_ref[1][1]= (a>>1)*(2*vop_ref[1][1] + d[0][1] + d[1][1]);
  1954. sprite_ref[2][0]= (a>>1)*(2*vop_ref[2][0] + d[0][0] + d[2][0]);
  1955. sprite_ref[2][1]= (a>>1)*(2*vop_ref[2][1] + d[0][1] + d[2][1]);
  1956. }
  1957. /* sprite_ref[3][0]= (a>>1)*(2*vop_ref[3][0] + d[0][0] + d[1][0] + d[2][0] + d[3][0]);
  1958. sprite_ref[3][1]= (a>>1)*(2*vop_ref[3][1] + d[0][1] + d[1][1] + d[2][1] + d[3][1]); */
  1959. // this is mostly identical to the mpeg4 std (and is totally unreadable because of that ...)
  1960. // perhaps it should be reordered to be more readable ...
  1961. // the idea behind this virtual_ref mess is to be able to use shifts later per pixel instead of divides
  1962. // so the distance between points is converted from w&h based to w2&h2 based which are of the 2^x form
  1963. virtual_ref[0][0]= 16*(vop_ref[0][0] + w2)
  1964. + RDIV(((w - w2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + w2*(r*sprite_ref[1][0] - 16*vop_ref[1][0])),w);
  1965. virtual_ref[0][1]= 16*vop_ref[0][1]
  1966. + RDIV(((w - w2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + w2*(r*sprite_ref[1][1] - 16*vop_ref[1][1])),w);
  1967. virtual_ref[1][0]= 16*vop_ref[0][0]
  1968. + RDIV(((h - h2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + h2*(r*sprite_ref[2][0] - 16*vop_ref[2][0])),h);
  1969. virtual_ref[1][1]= 16*(vop_ref[0][1] + h2)
  1970. + RDIV(((h - h2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + h2*(r*sprite_ref[2][1] - 16*vop_ref[2][1])),h);
  1971. switch(s->num_sprite_warping_points)
  1972. {
  1973. case 0:
  1974. s->sprite_offset[0][0]= 0;
  1975. s->sprite_offset[0][1]= 0;
  1976. s->sprite_offset[1][0]= 0;
  1977. s->sprite_offset[1][1]= 0;
  1978. s->sprite_delta[0][0][0]= a;
  1979. s->sprite_delta[0][0][1]= 0;
  1980. s->sprite_delta[0][1][0]= 0;
  1981. s->sprite_delta[0][1][1]= a;
  1982. s->sprite_delta[1][0][0]= a;
  1983. s->sprite_delta[1][0][1]= 0;
  1984. s->sprite_delta[1][1][0]= 0;
  1985. s->sprite_delta[1][1][1]= a;
  1986. s->sprite_shift[0][0]= 0;
  1987. s->sprite_shift[0][1]= 0;
  1988. s->sprite_shift[1][0]= 0;
  1989. s->sprite_shift[1][1]= 0;
  1990. break;
  1991. case 1: //GMC only
  1992. s->sprite_offset[0][0]= sprite_ref[0][0] - a*vop_ref[0][0];
  1993. s->sprite_offset[0][1]= sprite_ref[0][1] - a*vop_ref[0][1];
  1994. s->sprite_offset[1][0]= ((sprite_ref[0][0]>>1)|(sprite_ref[0][0]&1)) - a*(vop_ref[0][0]/2);
  1995. s->sprite_offset[1][1]= ((sprite_ref[0][1]>>1)|(sprite_ref[0][1]&1)) - a*(vop_ref[0][1]/2);
  1996. s->sprite_delta[0][0][0]= a;
  1997. s->sprite_delta[0][0][1]= 0;
  1998. s->sprite_delta[0][1][0]= 0;
  1999. s->sprite_delta[0][1][1]= a;
  2000. s->sprite_delta[1][0][0]= a;
  2001. s->sprite_delta[1][0][1]= 0;
  2002. s->sprite_delta[1][1][0]= 0;
  2003. s->sprite_delta[1][1][1]= a;
  2004. s->sprite_shift[0][0]= 0;
  2005. s->sprite_shift[0][1]= 0;
  2006. s->sprite_shift[1][0]= 0;
  2007. s->sprite_shift[1][1]= 0;
  2008. break;
  2009. case 2:
  2010. case 3: //FIXME
  2011. s->sprite_offset[0][0]= (sprite_ref[0][0]<<(alpha+rho))
  2012. + ((-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][0])
  2013. +( r*sprite_ref[0][1] - virtual_ref[0][1])*(-vop_ref[0][1]));
  2014. s->sprite_offset[0][1]= (sprite_ref[0][1]<<(alpha+rho))
  2015. + ((-r*sprite_ref[0][1] + virtual_ref[0][1])*(-vop_ref[0][0])
  2016. +(-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][1]));
  2017. s->sprite_offset[1][0]= ((-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][0] + 1)
  2018. +( r*sprite_ref[0][1] - virtual_ref[0][1])*(-2*vop_ref[0][1] + 1)
  2019. +2*w2*r*sprite_ref[0][0] - 16*w2);
  2020. s->sprite_offset[1][1]= ((-r*sprite_ref[0][1] + virtual_ref[0][1])*(-2*vop_ref[0][0] + 1)
  2021. +(-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][1] + 1)
  2022. +2*w2*r*sprite_ref[0][1] - 16*w2);
  2023. s->sprite_delta[0][0][0]= (-r*sprite_ref[0][0] + virtual_ref[0][0]);
  2024. s->sprite_delta[0][0][1]= ( r*sprite_ref[0][1] - virtual_ref[0][1]);
  2025. s->sprite_delta[0][1][0]= (-r*sprite_ref[0][1] + virtual_ref[0][1]);
  2026. s->sprite_delta[0][1][1]= (-r*sprite_ref[0][0] + virtual_ref[0][0]);
  2027. s->sprite_delta[1][0][0]= 4*(-r*sprite_ref[0][0] + virtual_ref[0][0]);
  2028. s->sprite_delta[1][0][1]= 4*( r*sprite_ref[0][1] - virtual_ref[0][1]);
  2029. s->sprite_delta[1][1][0]= 4*(-r*sprite_ref[0][1] + virtual_ref[0][1]);
  2030. s->sprite_delta[1][1][1]= 4*(-r*sprite_ref[0][0] + virtual_ref[0][0]);
  2031. s->sprite_shift[0][0]= alpha+rho;
  2032. s->sprite_shift[0][1]= alpha+rho;
  2033. s->sprite_shift[1][0]= alpha+rho+2;
  2034. s->sprite_shift[1][1]= alpha+rho+2;
  2035. break;
  2036. // case 3:
  2037. break;
  2038. }
  2039. /*printf("%d %d\n", s->sprite_delta[0][0][0], a<<s->sprite_shift[0][0]);
  2040. printf("%d %d\n", s->sprite_delta[0][0][1], 0);
  2041. printf("%d %d\n", s->sprite_delta[0][1][0], 0);
  2042. printf("%d %d\n", s->sprite_delta[0][1][1], a<<s->sprite_shift[0][1]);
  2043. printf("%d %d\n", s->sprite_delta[1][0][0], a<<s->sprite_shift[1][0]);
  2044. printf("%d %d\n", s->sprite_delta[1][0][1], 0);
  2045. printf("%d %d\n", s->sprite_delta[1][1][0], 0);
  2046. printf("%d %d\n", s->sprite_delta[1][1][1], a<<s->sprite_shift[1][1]);*/
  2047. /* try to simplify the situation */
  2048. if( s->sprite_delta[0][0][0] == a<<s->sprite_shift[0][0]
  2049. && s->sprite_delta[0][0][1] == 0
  2050. && s->sprite_delta[0][1][0] == 0
  2051. && s->sprite_delta[0][1][1] == a<<s->sprite_shift[0][1]
  2052. && s->sprite_delta[1][0][0] == a<<s->sprite_shift[1][0]
  2053. && s->sprite_delta[1][0][1] == 0
  2054. && s->sprite_delta[1][1][0] == 0
  2055. && s->sprite_delta[1][1][1] == a<<s->sprite_shift[1][1])
  2056. {
  2057. s->sprite_offset[0][0]>>=s->sprite_shift[0][0];
  2058. s->sprite_offset[0][1]>>=s->sprite_shift[0][1];
  2059. s->sprite_offset[1][0]>>=s->sprite_shift[1][0];
  2060. s->sprite_offset[1][1]>>=s->sprite_shift[1][1];
  2061. s->sprite_delta[0][0][0]= a;
  2062. s->sprite_delta[0][0][1]= 0;
  2063. s->sprite_delta[0][1][0]= 0;
  2064. s->sprite_delta[0][1][1]= a;
  2065. s->sprite_delta[1][0][0]= a;
  2066. s->sprite_delta[1][0][1]= 0;
  2067. s->sprite_delta[1][1][0]= 0;
  2068. s->sprite_delta[1][1][1]= a;
  2069. s->sprite_shift[0][0]= 0;
  2070. s->sprite_shift[0][1]= 0;
  2071. s->sprite_shift[1][0]= 0;
  2072. s->sprite_shift[1][1]= 0;
  2073. s->real_sprite_warping_points=1;
  2074. }
  2075. else
  2076. s->real_sprite_warping_points= s->num_sprite_warping_points;
  2077. }
  2078. /* decode mpeg4 VOP header */
  2079. int mpeg4_decode_picture_header(MpegEncContext * s)
  2080. {
  2081. int time_incr, startcode, state, v;
  2082. redo:
  2083. /* search next start code */
  2084. align_get_bits(&s->gb);
  2085. state = 0xff;
  2086. for(;;) {
  2087. v = get_bits(&s->gb, 8);
  2088. if (state == 0x000001) {
  2089. state = ((state << 8) | v) & 0xffffff;
  2090. startcode = state;
  2091. break;
  2092. }
  2093. state = ((state << 8) | v) & 0xffffff;
  2094. if( get_bits_count(&s->gb) > s->gb.size*8-32){
  2095. printf("no VOP startcode found\n");
  2096. return -1;
  2097. }
  2098. }
  2099. //printf("startcode %X %d\n", startcode, get_bits_count(&s->gb));
  2100. if (startcode == 0x120) { // Video Object Layer
  2101. int width, height, vo_ver_id;
  2102. /* vol header */
  2103. skip_bits(&s->gb, 1); /* random access */
  2104. skip_bits(&s->gb, 8); /* vo_type */
  2105. if (get_bits1(&s->gb) != 0) { /* is_ol_id */
  2106. vo_ver_id = get_bits(&s->gb, 4); /* vo_ver_id */
  2107. skip_bits(&s->gb, 3); /* vo_priority */
  2108. } else {
  2109. vo_ver_id = 1;
  2110. }
  2111. s->aspect_ratio_info= get_bits(&s->gb, 4);
  2112. if(s->aspect_ratio_info == EXTENDET_PAR){
  2113. skip_bits(&s->gb, 8); //par_width
  2114. skip_bits(&s->gb, 8); // par_height
  2115. }
  2116. if(get_bits1(&s->gb)){ /* vol control parameter */
  2117. printf("vol control parameter not supported\n");
  2118. return -1;
  2119. }
  2120. s->shape = get_bits(&s->gb, 2); /* vol shape */
  2121. if(s->shape != RECT_SHAPE) printf("only rectangular vol supported\n");
  2122. if(s->shape == GRAY_SHAPE && vo_ver_id != 1){
  2123. printf("Gray shape not supported\n");
  2124. skip_bits(&s->gb, 4); //video_object_layer_shape_extension
  2125. }
  2126. skip_bits1(&s->gb); /* marker */
  2127. s->time_increment_resolution = get_bits(&s->gb, 16);
  2128. s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1;
  2129. if (s->time_increment_bits < 1)
  2130. s->time_increment_bits = 1;
  2131. skip_bits1(&s->gb); /* marker */
  2132. if (get_bits1(&s->gb) != 0) { /* fixed_vop_rate */
  2133. skip_bits(&s->gb, s->time_increment_bits);
  2134. }
  2135. if (s->shape != BIN_ONLY_SHAPE) {
  2136. if (s->shape == RECT_SHAPE) {
  2137. skip_bits1(&s->gb); /* marker */
  2138. width = get_bits(&s->gb, 13);
  2139. skip_bits1(&s->gb); /* marker */
  2140. height = get_bits(&s->gb, 13);
  2141. skip_bits1(&s->gb); /* marker */
  2142. if(width && height){ /* they should be non zero but who knows ... */
  2143. s->width = width;
  2144. s->height = height;
  2145. // printf("%d %d\n", width, height);
  2146. }
  2147. }
  2148. if(get_bits1(&s->gb)) printf("interlaced not supported\n"); /* interlaced */
  2149. if(!get_bits1(&s->gb)) printf("OBMC not supported\n"); /* OBMC Disable */
  2150. if (vo_ver_id == 1) {
  2151. s->vol_sprite_usage = get_bits1(&s->gb); /* vol_sprite_usage */
  2152. } else {
  2153. s->vol_sprite_usage = get_bits(&s->gb, 2); /* vol_sprite_usage */
  2154. }
  2155. if(s->vol_sprite_usage==STATIC_SPRITE) printf("Static Sprites not supported\n");
  2156. if(s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE){
  2157. if(s->vol_sprite_usage==STATIC_SPRITE){
  2158. s->sprite_width = get_bits(&s->gb, 13);
  2159. skip_bits1(&s->gb); /* marker */
  2160. s->sprite_height= get_bits(&s->gb, 13);
  2161. skip_bits1(&s->gb); /* marker */
  2162. s->sprite_left = get_bits(&s->gb, 13);
  2163. skip_bits1(&s->gb); /* marker */
  2164. s->sprite_top = get_bits(&s->gb, 13);
  2165. skip_bits1(&s->gb); /* marker */
  2166. }
  2167. s->num_sprite_warping_points= get_bits(&s->gb, 6);
  2168. s->sprite_warping_accuracy = get_bits(&s->gb, 2);
  2169. s->sprite_brightness_change= get_bits1(&s->gb);
  2170. if(s->vol_sprite_usage==STATIC_SPRITE)
  2171. s->low_latency_sprite= get_bits1(&s->gb);
  2172. }
  2173. // FIXME sadct disable bit if verid!=1 && shape not rect
  2174. if (get_bits1(&s->gb) == 1) { /* not_8_bit */
  2175. s->quant_precision = get_bits(&s->gb, 4); /* quant_precision */
  2176. if(get_bits(&s->gb, 4)!=8) printf("N-bit not supported\n"); /* bits_per_pixel */
  2177. if(s->quant_precision!=5) printf("quant precission %d\n", s->quant_precision);
  2178. } else {
  2179. s->quant_precision = 5;
  2180. }
  2181. // FIXME a bunch of grayscale shape things
  2182. if(get_bits1(&s->gb)) printf("Quant-Type not supported\n"); /* vol_quant_type */ //FIXME
  2183. if(vo_ver_id != 1)
  2184. s->quarter_sample= get_bits1(&s->gb);
  2185. else s->quarter_sample=0;
  2186. if(!get_bits1(&s->gb)) printf("Complexity estimation not supported\n");
  2187. s->resync_marker= !get_bits1(&s->gb); /* resync_marker_disabled */
  2188. s->data_partioning= get_bits1(&s->gb);
  2189. if(s->data_partioning){
  2190. printf("data partitioning not supported\n");
  2191. skip_bits1(&s->gb); // reversible vlc
  2192. }
  2193. if(vo_ver_id != 1) {
  2194. s->new_pred= get_bits1(&s->gb);
  2195. if(s->new_pred){
  2196. printf("new pred not supported\n");
  2197. skip_bits(&s->gb, 2); /* requested upstream message type */
  2198. skip_bits1(&s->gb); /* newpred segment type */
  2199. }
  2200. s->reduced_res_vop= get_bits1(&s->gb);
  2201. if(s->reduced_res_vop) printf("reduced resolution VOP not supported\n");
  2202. }
  2203. else{
  2204. s->new_pred=0;
  2205. s->reduced_res_vop= 0;
  2206. }
  2207. s->scalability= get_bits1(&s->gb);
  2208. if (s->scalability) {
  2209. printf("scalability not supported\n");
  2210. }
  2211. }
  2212. //printf("end Data %X %d\n", show_bits(&s->gb, 32), get_bits_count(&s->gb)&0x7);
  2213. goto redo;
  2214. } else if (startcode == 0x1b2) { //userdata
  2215. char buf[256];
  2216. int i;
  2217. int e;
  2218. int ver, build;
  2219. //printf("user Data %X\n", show_bits(&s->gb, 32));
  2220. buf[0]= show_bits(&s->gb, 8);
  2221. for(i=1; i<256; i++){
  2222. buf[i]= show_bits(&s->gb, 16)&0xFF;
  2223. if(buf[i]==0) break;
  2224. skip_bits(&s->gb, 8);
  2225. }
  2226. buf[255]=0;
  2227. e=sscanf(buf, "DivX%dBuild%d", &ver, &build);
  2228. if(e==2){
  2229. s->divx_version= ver;
  2230. s->divx_build= build;
  2231. if(s->picture_number==0){
  2232. printf("This file was encoded with DivX%d Build%d\n", ver, build);
  2233. if(ver==500 && build==413){ //most likely all version are indeed totally buggy but i dunno for sure ...
  2234. printf("WARNING: this version of DivX is not MPEG4 compatible, trying to workaround these bugs...\n");
  2235. }else{
  2236. printf("hmm, i havnt seen that version of divx yet, lets assume they fixed these bugs ...\n"
  2237. "using mpeg4 decoder, if it fails contact the developers (of ffmpeg)\n");
  2238. }
  2239. }
  2240. }
  2241. //printf("User Data: %s\n", buf);
  2242. goto redo;
  2243. } else if (startcode != 0x1b6) { //VOP
  2244. goto redo;
  2245. }
  2246. s->pict_type = get_bits(&s->gb, 2) + 1; /* pict type: I = 0 , P = 1 */
  2247. //printf("pic: %d, qpel:%d\n", s->pict_type, s->quarter_sample);
  2248. time_incr=0;
  2249. while (get_bits1(&s->gb) != 0)
  2250. time_incr++;
  2251. check_marker(&s->gb, "before time_increment");
  2252. s->time_increment= get_bits(&s->gb, s->time_increment_bits);
  2253. if(s->pict_type!=B_TYPE){
  2254. s->time_base+= time_incr;
  2255. s->last_non_b_time[1]= s->last_non_b_time[0];
  2256. s->last_non_b_time[0]= s->time_base*s->time_increment_resolution + s->time_increment;
  2257. }else{
  2258. s->time= (s->last_non_b_time[1]/s->time_increment_resolution + time_incr)*s->time_increment_resolution;
  2259. s->time+= s->time_increment;
  2260. }
  2261. if(check_marker(&s->gb, "before vop_coded")==0 && s->picture_number==0){
  2262. printf("hmm, seems the headers arnt complete, trying to guess time_increment_bits\n");
  2263. for(s->time_increment_bits++ ;s->time_increment_bits<16; s->time_increment_bits++){
  2264. if(get_bits1(&s->gb)) break;
  2265. }
  2266. printf("my guess is %d bits ;)\n",s->time_increment_bits);
  2267. }
  2268. /* vop coded */
  2269. if (get_bits1(&s->gb) != 1)
  2270. goto redo;
  2271. //printf("time %d %d %d || %d %d %d\n", s->time_increment_bits, s->time_increment, s->time_base,
  2272. //s->time, s->last_non_b_time[0], s->last_non_b_time[1]);
  2273. if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == P_TYPE
  2274. || (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE))) {
  2275. /* rounding type for motion estimation */
  2276. s->no_rounding = get_bits1(&s->gb);
  2277. } else {
  2278. s->no_rounding = 0;
  2279. }
  2280. //FIXME reduced res stuff
  2281. if (s->shape != RECT_SHAPE) {
  2282. if (s->vol_sprite_usage != 1 || s->pict_type != I_TYPE) {
  2283. int width, height, hor_spat_ref, ver_spat_ref;
  2284. width = get_bits(&s->gb, 13);
  2285. skip_bits1(&s->gb); /* marker */
  2286. height = get_bits(&s->gb, 13);
  2287. skip_bits1(&s->gb); /* marker */
  2288. hor_spat_ref = get_bits(&s->gb, 13); /* hor_spat_ref */
  2289. skip_bits1(&s->gb); /* marker */
  2290. ver_spat_ref = get_bits(&s->gb, 13); /* ver_spat_ref */
  2291. }
  2292. skip_bits1(&s->gb); /* change_CR_disable */
  2293. if (get_bits1(&s->gb) != 0) {
  2294. skip_bits(&s->gb, 8); /* constant_alpha_value */
  2295. }
  2296. }
  2297. //FIXME complexity estimation stuff
  2298. if (s->shape != BIN_ONLY_SHAPE) {
  2299. int t;
  2300. t=get_bits(&s->gb, 3); /* intra dc VLC threshold */
  2301. //printf("threshold %d\n", t);
  2302. //FIXME interlaced specific bits
  2303. }
  2304. if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
  2305. if(s->num_sprite_warping_points){
  2306. mpeg4_decode_sprite_trajectory(s);
  2307. }
  2308. if(s->sprite_brightness_change) printf("sprite_brightness_change not supported\n");
  2309. if(s->vol_sprite_usage==STATIC_SPRITE) printf("static sprite not supported\n");
  2310. }
  2311. if (s->shape != BIN_ONLY_SHAPE) {
  2312. /* note: we do not use quant_precision to avoid problem if no
  2313. MPEG4 vol header as it is found on some old opendivx
  2314. movies */
  2315. s->qscale = get_bits(&s->gb, 5);
  2316. if(s->qscale==0){
  2317. printf("Error, header damaged or not MPEG4 header (qscale=0)\n");
  2318. return -1; // makes no sense to continue, as there is nothing left from the image then
  2319. }
  2320. if (s->pict_type != I_TYPE) {
  2321. s->f_code = get_bits(&s->gb, 3); /* fcode_for */
  2322. if(s->f_code==0){
  2323. printf("Error, header damaged or not MPEG4 header (f_code=0)\n");
  2324. return -1; // makes no sense to continue, as the MV decoding will break very quickly
  2325. }
  2326. }
  2327. if (s->pict_type == B_TYPE) {
  2328. s->b_code = get_bits(&s->gb, 3);
  2329. //printf("b-code %d\n", s->b_code);
  2330. }
  2331. //printf("quant:%d fcode:%d\n", s->qscale, s->f_code);
  2332. if(!s->scalability){
  2333. if (s->shape!=RECT_SHAPE && s->pict_type!=I_TYPE) {
  2334. skip_bits1(&s->gb); // vop shape coding type
  2335. }
  2336. }
  2337. }
  2338. s->picture_number++; // better than pic number==0 allways ;)
  2339. return 0;
  2340. }
  2341. /* don't understand why they choose a different header ! */
  2342. int intel_h263_decode_picture_header(MpegEncContext *s)
  2343. {
  2344. int format;
  2345. /* picture header */
  2346. if (get_bits(&s->gb, 22) != 0x20)
  2347. return -1;
  2348. skip_bits(&s->gb, 8); /* picture timestamp */
  2349. if (get_bits1(&s->gb) != 1)
  2350. return -1; /* marker */
  2351. if (get_bits1(&s->gb) != 0)
  2352. return -1; /* h263 id */
  2353. skip_bits1(&s->gb); /* split screen off */
  2354. skip_bits1(&s->gb); /* camera off */
  2355. skip_bits1(&s->gb); /* freeze picture release off */
  2356. format = get_bits(&s->gb, 3);
  2357. if (format != 7)
  2358. return -1;
  2359. s->h263_plus = 0;
  2360. s->pict_type = I_TYPE + get_bits1(&s->gb);
  2361. s->unrestricted_mv = get_bits1(&s->gb);
  2362. s->h263_long_vectors = s->unrestricted_mv;
  2363. if (get_bits1(&s->gb) != 0)
  2364. return -1; /* SAC: off */
  2365. if (get_bits1(&s->gb) != 0)
  2366. return -1; /* advanced prediction mode: off */
  2367. if (get_bits1(&s->gb) != 0)
  2368. return -1; /* not PB frame */
  2369. /* skip unknown header garbage */
  2370. skip_bits(&s->gb, 41);
  2371. s->qscale = get_bits(&s->gb, 5);
  2372. skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
  2373. /* PEI */
  2374. while (get_bits1(&s->gb) != 0) {
  2375. skip_bits(&s->gb, 8);
  2376. }
  2377. s->f_code = 1;
  2378. return 0;
  2379. }