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.

4458 lines
154KB

  1. /*
  2. * H263/MPEG4 backend for ffmpeg encoder and decoder
  3. * Copyright (c) 2000,2001 Fabrice Bellard.
  4. * H263+ support.
  5. * Copyright (c) 2001 Juan J. Sierralta P.
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2 of the License, or (at your option) any later version.
  11. *
  12. * This library 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 GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. *
  21. * ac prediction encoding, b-frame support, error resilience, optimizations,
  22. * qpel decoding, gmc decoding, interlaced decoding,
  23. * by Michael Niedermayer <michaelni@gmx.at>
  24. */
  25. //#define DEBUG
  26. #include "common.h"
  27. #include "dsputil.h"
  28. #include "avcodec.h"
  29. #include "mpegvideo.h"
  30. #include "h263data.h"
  31. #include "mpeg4data.h"
  32. //#undef NDEBUG
  33. //#include <assert.h>
  34. //rounded divison & shift
  35. #define RSHIFT(a,b) ((a) > 0 ? ((a) + (1<<((b)-1)))>>(b) : ((a) + (1<<((b)-1))-1)>>(b))
  36. #if 1
  37. #define PRINT_MB_TYPE(a) {}
  38. #else
  39. #define PRINT_MB_TYPE(a) printf(a)
  40. #endif
  41. #define INTRA_MCBPC_VLC_BITS 6
  42. #define INTER_MCBPC_VLC_BITS 6
  43. #define CBPY_VLC_BITS 6
  44. #define MV_VLC_BITS 9
  45. #define DC_VLC_BITS 9
  46. #define SPRITE_TRAJ_VLC_BITS 6
  47. #define MB_TYPE_B_VLC_BITS 4
  48. #define TEX_VLC_BITS 9
  49. static void h263_encode_block(MpegEncContext * s, DCTELEM * block,
  50. int n);
  51. static void h263_encode_motion(MpegEncContext * s, int val, int fcode);
  52. static void h263p_encode_umotion(MpegEncContext * s, int val);
  53. static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block,
  54. int n, int dc, UINT8 *scan_table,
  55. PutBitContext *dc_pb, PutBitContext *ac_pb);
  56. static int h263_decode_motion(MpegEncContext * s, int pred, int fcode);
  57. static int h263p_decode_umotion(MpegEncContext * s, int pred);
  58. static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
  59. int n, int coded);
  60. static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr);
  61. static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
  62. int n, int coded, int intra);
  63. static int h263_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr);
  64. static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
  65. int dir);
  66. static void mpeg4_decode_sprite_trajectory(MpegEncContext * s);
  67. extern UINT32 inverse[256];
  68. static UINT16 mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
  69. static UINT8 fcode_tab[MAX_MV*2+1];
  70. static UINT8 umv_fcode_tab[MAX_MV*2+1];
  71. static UINT16 uni_DCtab_lum [512][2];
  72. static UINT16 uni_DCtab_chrom[512][2];
  73. static UINT32 uni_mpeg4_intra_rl_bits[64*64*2*2];
  74. static UINT8 uni_mpeg4_intra_rl_len [64*64*2*2];
  75. static UINT32 uni_mpeg4_inter_rl_bits[64*64*2*2];
  76. static UINT8 uni_mpeg4_inter_rl_len [64*64*2*2];
  77. #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128 + (run)*256 + (level))
  78. //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
  79. /* mpeg4
  80. inter
  81. max level: 24/6
  82. max run: 53/63
  83. intra
  84. max level: 53/16
  85. max run: 29/41
  86. */
  87. int h263_get_picture_format(int width, int height)
  88. {
  89. int format;
  90. if (width == 128 && height == 96)
  91. format = 1;
  92. else if (width == 176 && height == 144)
  93. format = 2;
  94. else if (width == 352 && height == 288)
  95. format = 3;
  96. else if (width == 704 && height == 576)
  97. format = 4;
  98. else if (width == 1408 && height == 1152)
  99. format = 5;
  100. else
  101. format = 7;
  102. return format;
  103. }
  104. void h263_encode_picture_header(MpegEncContext * s, int picture_number)
  105. {
  106. int format;
  107. align_put_bits(&s->pb);
  108. /* Update the pointer to last GOB */
  109. s->ptr_lastgob = pbBufPtr(&s->pb);
  110. s->gob_number = 0;
  111. put_bits(&s->pb, 22, 0x20); /* PSC */
  112. put_bits(&s->pb, 8, (((INT64)s->picture_number * 30 * FRAME_RATE_BASE) /
  113. s->frame_rate) & 0xff);
  114. put_bits(&s->pb, 1, 1); /* marker */
  115. put_bits(&s->pb, 1, 0); /* h263 id */
  116. put_bits(&s->pb, 1, 0); /* split screen off */
  117. put_bits(&s->pb, 1, 0); /* camera off */
  118. put_bits(&s->pb, 1, 0); /* freeze picture release off */
  119. format = h263_get_picture_format(s->width, s->height);
  120. if (!s->h263_plus) {
  121. /* H.263v1 */
  122. put_bits(&s->pb, 3, format);
  123. put_bits(&s->pb, 1, (s->pict_type == P_TYPE));
  124. /* By now UMV IS DISABLED ON H.263v1, since the restrictions
  125. of H.263v1 UMV implies to check the predicted MV after
  126. calculation of the current MB to see if we're on the limits */
  127. put_bits(&s->pb, 1, 0); /* unrestricted motion vector: off */
  128. put_bits(&s->pb, 1, 0); /* SAC: off */
  129. put_bits(&s->pb, 1, 0); /* advanced prediction mode: off */
  130. put_bits(&s->pb, 1, 0); /* not PB frame */
  131. put_bits(&s->pb, 5, s->qscale);
  132. put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
  133. } else {
  134. /* H.263v2 */
  135. /* H.263 Plus PTYPE */
  136. put_bits(&s->pb, 3, 7);
  137. put_bits(&s->pb,3,1); /* Update Full Extended PTYPE */
  138. if (format == 7)
  139. put_bits(&s->pb,3,6); /* Custom Source Format */
  140. else
  141. put_bits(&s->pb, 3, format);
  142. put_bits(&s->pb,1,0); /* Custom PCF: off */
  143. s->umvplus = (s->pict_type == P_TYPE) && s->unrestricted_mv;
  144. put_bits(&s->pb, 1, s->umvplus); /* Unrestricted Motion Vector */
  145. put_bits(&s->pb,1,0); /* SAC: off */
  146. put_bits(&s->pb,1,0); /* Advanced Prediction Mode: off */
  147. put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
  148. put_bits(&s->pb,1,0); /* Deblocking Filter: off */
  149. put_bits(&s->pb,1,0); /* Slice Structured: off */
  150. put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
  151. put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
  152. put_bits(&s->pb,1,0); /* Alternative Inter VLC: off */
  153. put_bits(&s->pb,1,0); /* Modified Quantization: off */
  154. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  155. put_bits(&s->pb,3,0); /* Reserved */
  156. put_bits(&s->pb, 3, s->pict_type == P_TYPE);
  157. put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
  158. put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
  159. if (s->pict_type == I_TYPE)
  160. s->no_rounding = 0;
  161. else
  162. s->no_rounding ^= 1;
  163. put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
  164. put_bits(&s->pb,2,0); /* Reserved */
  165. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  166. /* This should be here if PLUSPTYPE */
  167. put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
  168. if (format == 7) {
  169. /* Custom Picture Format (CPFMT) */
  170. if (s->aspect_ratio_info)
  171. put_bits(&s->pb,4,s->aspect_ratio_info);
  172. else
  173. put_bits(&s->pb,4,2); /* Aspect ratio: CIF 12:11 (4:3) picture */
  174. put_bits(&s->pb,9,(s->width >> 2) - 1);
  175. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  176. put_bits(&s->pb,9,(s->height >> 2));
  177. if (s->aspect_ratio_info == FF_ASPECT_EXTENDED)
  178. {
  179. put_bits(&s->pb, 8, s->aspected_width);
  180. put_bits(&s->pb, 8, s->aspected_height);
  181. }
  182. }
  183. /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
  184. if (s->umvplus)
  185. put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
  186. put_bits(&s->pb, 5, s->qscale);
  187. }
  188. put_bits(&s->pb, 1, 0); /* no PEI */
  189. if(s->h263_aic){
  190. s->y_dc_scale_table=
  191. s->c_dc_scale_table= h263_aic_dc_scale_table;
  192. }else{
  193. s->y_dc_scale_table=
  194. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  195. }
  196. }
  197. int h263_encode_gob_header(MpegEncContext * s, int mb_line)
  198. {
  199. int pdif=0;
  200. /* Check to see if we need to put a new GBSC */
  201. /* for RTP packetization */
  202. if (s->rtp_mode) {
  203. pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
  204. if (pdif >= s->rtp_payload_size) {
  205. /* Bad luck, packet must be cut before */
  206. align_put_bits(&s->pb);
  207. flush_put_bits(&s->pb);
  208. /* Call the RTP callback to send the last GOB */
  209. if (s->rtp_callback) {
  210. pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
  211. s->rtp_callback(s->ptr_lastgob, pdif, s->gob_number);
  212. }
  213. s->ptr_lastgob = pbBufPtr(&s->pb);
  214. put_bits(&s->pb, 17, 1); /* GBSC */
  215. s->gob_number = mb_line / s->gob_index;
  216. put_bits(&s->pb, 5, s->gob_number); /* GN */
  217. put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
  218. put_bits(&s->pb, 5, s->qscale); /* GQUANT */
  219. //fprintf(stderr,"\nGOB: %2d size: %d", s->gob_number - 1, pdif);
  220. return pdif;
  221. } else if (pdif + s->mb_line_avgsize >= s->rtp_payload_size) {
  222. /* Cut the packet before we can't */
  223. align_put_bits(&s->pb);
  224. flush_put_bits(&s->pb);
  225. /* Call the RTP callback to send the last GOB */
  226. if (s->rtp_callback) {
  227. pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
  228. s->rtp_callback(s->ptr_lastgob, pdif, s->gob_number);
  229. }
  230. s->ptr_lastgob = pbBufPtr(&s->pb);
  231. put_bits(&s->pb, 17, 1); /* GBSC */
  232. s->gob_number = mb_line / s->gob_index;
  233. put_bits(&s->pb, 5, s->gob_number); /* GN */
  234. put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
  235. put_bits(&s->pb, 5, s->qscale); /* GQUANT */
  236. //fprintf(stderr,"\nGOB: %2d size: %d", s->gob_number - 1, pdif);
  237. return pdif;
  238. }
  239. }
  240. return 0;
  241. }
  242. static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int dir[6])
  243. {
  244. int score0=0, score1=0;
  245. int i, n;
  246. for(n=0; n<6; n++){
  247. INT16 *ac_val, *ac_val1;
  248. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  249. ac_val1= ac_val;
  250. if(dir[n]){
  251. const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width;
  252. /* top prediction */
  253. ac_val-= s->block_wrap[n]*16;
  254. if(s->mb_y==0 || s->qscale == s->qscale_table[xy] || n==2 || n==3){
  255. /* same qscale */
  256. for(i=1; i<8; i++){
  257. const int level= block[n][s->idct_permutation[i ]];
  258. score0+= ABS(level);
  259. score1+= ABS(level - ac_val[i+8]);
  260. ac_val1[i ]= block[n][s->idct_permutation[i<<3]];
  261. ac_val1[i+8]= level;
  262. }
  263. }else{
  264. /* different qscale, we must rescale */
  265. for(i=1; i<8; i++){
  266. const int level= block[n][s->idct_permutation[i ]];
  267. score0+= ABS(level);
  268. score1+= ABS(level - ROUNDED_DIV(ac_val[i + 8]*s->qscale_table[xy], s->qscale));
  269. ac_val1[i ]= block[n][s->idct_permutation[i<<3]];
  270. ac_val1[i+8]= level;
  271. }
  272. }
  273. }else{
  274. const int xy= s->mb_x-1 + s->mb_y*s->mb_width;
  275. /* left prediction */
  276. ac_val-= 16;
  277. if(s->mb_x==0 || s->qscale == s->qscale_table[xy] || n==1 || n==3){
  278. /* same qscale */
  279. for(i=1; i<8; i++){
  280. const int level= block[n][s->idct_permutation[i<<3]];
  281. score0+= ABS(level);
  282. score1+= ABS(level - ac_val[i]);
  283. ac_val1[i ]= level;
  284. ac_val1[i+8]= block[n][s->idct_permutation[i ]];
  285. }
  286. }else{
  287. /* different qscale, we must rescale */
  288. for(i=1; i<8; i++){
  289. const int level= block[n][s->idct_permutation[i<<3]];
  290. score0+= ABS(level);
  291. score1+= ABS(level - ROUNDED_DIV(ac_val[i]*s->qscale_table[xy], s->qscale));
  292. ac_val1[i ]= level;
  293. ac_val1[i+8]= block[n][s->idct_permutation[i ]];
  294. }
  295. }
  296. }
  297. }
  298. return score0 > score1 ? 1 : 0;
  299. }
  300. void ff_clean_h263_qscales(MpegEncContext *s){
  301. int i;
  302. for(i=1; i<s->mb_num; i++){
  303. if(s->qscale_table[i] - s->qscale_table[i-1] >2)
  304. s->qscale_table[i]= s->qscale_table[i-1]+2;
  305. }
  306. for(i=s->mb_num-2; i>=0; i--){
  307. if(s->qscale_table[i] - s->qscale_table[i+1] >2)
  308. s->qscale_table[i]= s->qscale_table[i+1]+2;
  309. }
  310. }
  311. void ff_clean_mpeg4_qscales(MpegEncContext *s){
  312. int i;
  313. ff_clean_h263_qscales(s);
  314. for(i=1; i<s->mb_num; i++){
  315. if(s->qscale_table[i] != s->qscale_table[i-1] && (s->mb_type[i]&MB_TYPE_INTER4V)){
  316. s->mb_type[i]&= ~MB_TYPE_INTER4V;
  317. s->mb_type[i]|= MB_TYPE_INTER;
  318. }
  319. }
  320. if(s->pict_type== B_TYPE){
  321. int odd=0;
  322. /* ok, come on, this isnt funny anymore, theres more code for handling this mpeg4 mess than
  323. for the actual adaptive quantization */
  324. for(i=0; i<s->mb_num; i++){
  325. odd += s->qscale_table[i]&1;
  326. }
  327. if(2*odd > s->mb_num) odd=1;
  328. else odd=0;
  329. for(i=0; i<s->mb_num; i++){
  330. if((s->qscale_table[i]&1) != odd)
  331. s->qscale_table[i]++;
  332. if(s->qscale_table[i] > 31)
  333. s->qscale_table[i]= 31;
  334. }
  335. for(i=1; i<s->mb_num; i++){
  336. if(s->qscale_table[i] != s->qscale_table[i-1] && (s->mb_type[i]&MB_TYPE_DIRECT)){
  337. s->mb_type[i]&= ~MB_TYPE_DIRECT;
  338. s->mb_type[i]|= MB_TYPE_BIDIR;
  339. }
  340. }
  341. }
  342. }
  343. void mpeg4_encode_mb(MpegEncContext * s,
  344. DCTELEM block[6][64],
  345. int motion_x, int motion_y)
  346. {
  347. int cbpc, cbpy, i, pred_x, pred_y;
  348. int bits;
  349. PutBitContext * const pb2 = s->data_partitioning ? &s->pb2 : &s->pb;
  350. PutBitContext * const tex_pb = s->data_partitioning && s->pict_type!=B_TYPE ? &s->tex_pb : &s->pb;
  351. PutBitContext * const dc_pb = s->data_partitioning && s->pict_type!=I_TYPE ? &s->pb2 : &s->pb;
  352. const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1) && !s->data_partitioning ? 1 : 0;
  353. const int dquant_code[5]= {1,0,9,2,3};
  354. // printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
  355. if (!s->mb_intra) {
  356. /* compute cbp */
  357. int cbp = 0;
  358. for (i = 0; i < 6; i++) {
  359. if (s->block_last_index[i] >= 0)
  360. cbp |= 1 << (5 - i);
  361. }
  362. if(s->pict_type==B_TYPE){
  363. static const int mb_type_table[8]= {-1, 2, 3, 1,-1,-1,-1, 0}; /* convert from mv_dir to type */
  364. int mb_type= mb_type_table[s->mv_dir];
  365. if(s->mb_x==0){
  366. s->last_mv[0][0][0]=
  367. s->last_mv[0][0][1]=
  368. s->last_mv[1][0][0]=
  369. s->last_mv[1][0][1]= 0;
  370. }
  371. assert(s->dquant>=-2 && s->dquant<=2);
  372. assert((s->dquant&1)==0);
  373. assert(mb_type>=0);
  374. /* nothing to do if this MB was skiped in the next P Frame */
  375. if(s->mbskip_table[s->mb_y * s->mb_width + s->mb_x]){ //FIXME avoid DCT & ...
  376. s->skip_count++;
  377. s->mv[0][0][0]=
  378. s->mv[0][0][1]=
  379. s->mv[1][0][0]=
  380. s->mv[1][0][1]= 0;
  381. s->mv_dir= MV_DIR_FORWARD; //doesnt matter
  382. s->qscale -= s->dquant;
  383. return;
  384. }
  385. if ((cbp | motion_x | motion_y | mb_type) ==0) {
  386. /* direct MB with MV={0,0} */
  387. assert(s->dquant==0);
  388. put_bits(&s->pb, 1, 1); /* mb not coded modb1=1 */
  389. if(interleaved_stats){
  390. s->misc_bits++;
  391. s->last_bits++;
  392. }
  393. s->skip_count++;
  394. return;
  395. }
  396. put_bits(&s->pb, 1, 0); /* mb coded modb1=0 */
  397. put_bits(&s->pb, 1, cbp ? 0 : 1); /* modb2 */ //FIXME merge
  398. put_bits(&s->pb, mb_type+1, 1); // this table is so simple that we dont need it :)
  399. if(cbp) put_bits(&s->pb, 6, cbp);
  400. if(cbp && mb_type){
  401. if(s->dquant)
  402. put_bits(&s->pb, 2, (s->dquant>>2)+3);
  403. else
  404. put_bits(&s->pb, 1, 0);
  405. }else
  406. s->qscale -= s->dquant;
  407. if(!s->progressive_sequence){
  408. if(cbp)
  409. put_bits(&s->pb, 1, s->interlaced_dct);
  410. if(mb_type) // not diect mode
  411. put_bits(&s->pb, 1, 0); // no interlaced ME yet
  412. }
  413. if(interleaved_stats){
  414. bits= get_bit_count(&s->pb);
  415. s->misc_bits+= bits - s->last_bits;
  416. s->last_bits=bits;
  417. }
  418. switch(mb_type)
  419. {
  420. case 0: /* direct */
  421. h263_encode_motion(s, motion_x, 1);
  422. h263_encode_motion(s, motion_y, 1);
  423. s->b_count++;
  424. s->f_count++;
  425. break;
  426. case 1: /* bidir */
  427. h263_encode_motion(s, s->mv[0][0][0] - s->last_mv[0][0][0], s->f_code);
  428. h263_encode_motion(s, s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code);
  429. h263_encode_motion(s, s->mv[1][0][0] - s->last_mv[1][0][0], s->b_code);
  430. h263_encode_motion(s, s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code);
  431. s->last_mv[0][0][0]= s->mv[0][0][0];
  432. s->last_mv[0][0][1]= s->mv[0][0][1];
  433. s->last_mv[1][0][0]= s->mv[1][0][0];
  434. s->last_mv[1][0][1]= s->mv[1][0][1];
  435. s->b_count++;
  436. s->f_count++;
  437. break;
  438. case 2: /* backward */
  439. h263_encode_motion(s, motion_x - s->last_mv[1][0][0], s->b_code);
  440. h263_encode_motion(s, motion_y - s->last_mv[1][0][1], s->b_code);
  441. s->last_mv[1][0][0]= motion_x;
  442. s->last_mv[1][0][1]= motion_y;
  443. s->b_count++;
  444. break;
  445. case 3: /* forward */
  446. h263_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code);
  447. h263_encode_motion(s, motion_y - s->last_mv[0][0][1], s->f_code);
  448. s->last_mv[0][0][0]= motion_x;
  449. s->last_mv[0][0][1]= motion_y;
  450. s->f_count++;
  451. break;
  452. default:
  453. printf("unknown mb type\n");
  454. return;
  455. }
  456. if(interleaved_stats){
  457. bits= get_bit_count(&s->pb);
  458. s->mv_bits+= bits - s->last_bits;
  459. s->last_bits=bits;
  460. }
  461. /* encode each block */
  462. for (i = 0; i < 6; i++) {
  463. mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, NULL, &s->pb);
  464. }
  465. if(interleaved_stats){
  466. bits= get_bit_count(&s->pb);
  467. s->p_tex_bits+= bits - s->last_bits;
  468. s->last_bits=bits;
  469. }
  470. }else{ /* s->pict_type==B_TYPE */
  471. if ((cbp | motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16) {
  472. /* check if the B frames can skip it too, as we must skip it if we skip here
  473. why didnt they just compress the skip-mb bits instead of reusing them ?! */
  474. if(s->max_b_frames>0){
  475. int i;
  476. int x,y, offset;
  477. uint8_t *p_pic;
  478. x= s->mb_x*16;
  479. y= s->mb_y*16;
  480. if(x+16 > s->width) x= s->width-16;
  481. if(y+16 > s->height) y= s->height-16;
  482. offset= x + y*s->linesize;
  483. p_pic= s->new_picture[0] + offset;
  484. s->mb_skiped=1;
  485. for(i=0; i<s->max_b_frames; i++){
  486. uint8_t *b_pic;
  487. int diff;
  488. if(s->coded_order[i+1].pict_type!=B_TYPE) break;
  489. b_pic= s->coded_order[i+1].picture[0] + offset;
  490. diff= pix_abs16x16(p_pic, b_pic, s->linesize);
  491. if(diff>s->qscale*70){ //FIXME check that 70 is optimal
  492. s->mb_skiped=0;
  493. break;
  494. }
  495. }
  496. }else
  497. s->mb_skiped=1;
  498. if(s->mb_skiped==1){
  499. /* skip macroblock */
  500. put_bits(&s->pb, 1, 1);
  501. if(interleaved_stats){
  502. s->misc_bits++;
  503. s->last_bits++;
  504. }
  505. s->skip_count++;
  506. return;
  507. }
  508. }
  509. put_bits(&s->pb, 1, 0); /* mb coded */
  510. if(s->mv_type==MV_TYPE_16X16){
  511. cbpc = cbp & 3;
  512. if(s->dquant) cbpc+= 8;
  513. put_bits(&s->pb,
  514. inter_MCBPC_bits[cbpc],
  515. inter_MCBPC_code[cbpc]);
  516. cbpy = cbp >> 2;
  517. cbpy ^= 0xf;
  518. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  519. if(s->dquant)
  520. put_bits(pb2, 2, dquant_code[s->dquant+2]);
  521. if(!s->progressive_sequence){
  522. if(cbp)
  523. put_bits(pb2, 1, s->interlaced_dct);
  524. put_bits(pb2, 1, 0); // no interlaced ME yet
  525. }
  526. if(interleaved_stats){
  527. bits= get_bit_count(&s->pb);
  528. s->misc_bits+= bits - s->last_bits;
  529. s->last_bits=bits;
  530. }
  531. /* motion vectors: 16x16 mode */
  532. h263_pred_motion(s, 0, &pred_x, &pred_y);
  533. h263_encode_motion(s, motion_x - pred_x, s->f_code);
  534. h263_encode_motion(s, motion_y - pred_y, s->f_code);
  535. }else{
  536. cbpc = (cbp & 3)+16;
  537. put_bits(&s->pb,
  538. inter_MCBPC_bits[cbpc],
  539. inter_MCBPC_code[cbpc]);
  540. cbpy = cbp >> 2;
  541. cbpy ^= 0xf;
  542. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  543. if(interleaved_stats){
  544. bits= get_bit_count(&s->pb);
  545. s->misc_bits+= bits - s->last_bits;
  546. s->last_bits=bits;
  547. }
  548. for(i=0; i<4; i++){
  549. /* motion vectors: 8x8 mode*/
  550. h263_pred_motion(s, i, &pred_x, &pred_y);
  551. h263_encode_motion(s, s->motion_val[ s->block_index[i] ][0] - pred_x, s->f_code);
  552. h263_encode_motion(s, s->motion_val[ s->block_index[i] ][1] - pred_y, s->f_code);
  553. }
  554. }
  555. if(interleaved_stats){
  556. bits= get_bit_count(&s->pb);
  557. s->mv_bits+= bits - s->last_bits;
  558. s->last_bits=bits;
  559. }
  560. /* encode each block */
  561. for (i = 0; i < 6; i++) {
  562. mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, NULL, tex_pb);
  563. }
  564. if(interleaved_stats){
  565. bits= get_bit_count(&s->pb);
  566. s->p_tex_bits+= bits - s->last_bits;
  567. s->last_bits=bits;
  568. }
  569. s->f_count++;
  570. }
  571. } else {
  572. int cbp;
  573. int dc_diff[6]; //dc values with the dc prediction subtracted
  574. int dir[6]; //prediction direction
  575. int zigzag_last_index[6];
  576. UINT8 *scan_table[6];
  577. for(i=0; i<6; i++){
  578. const int level= block[i][0];
  579. UINT16 *dc_ptr;
  580. dc_diff[i]= level - ff_mpeg4_pred_dc(s, i, &dc_ptr, &dir[i]);
  581. if (i < 4) {
  582. *dc_ptr = level * s->y_dc_scale;
  583. } else {
  584. *dc_ptr = level * s->c_dc_scale;
  585. }
  586. }
  587. s->ac_pred= decide_ac_pred(s, block, dir);
  588. if(s->ac_pred){
  589. for(i=0; i<6; i++){
  590. UINT8 *st;
  591. int last_index;
  592. mpeg4_inv_pred_ac(s, block[i], i, dir[i]);
  593. if (dir[i]==0) st = s->intra_v_scantable.permutated; /* left */
  594. else st = s->intra_h_scantable.permutated; /* top */
  595. for(last_index=63; last_index>=0; last_index--) //FIXME optimize
  596. if(block[i][st[last_index]]) break;
  597. zigzag_last_index[i]= s->block_last_index[i];
  598. s->block_last_index[i]= last_index;
  599. scan_table[i]= st;
  600. }
  601. }else{
  602. for(i=0; i<6; i++)
  603. scan_table[i]= s->intra_scantable.permutated;
  604. }
  605. /* compute cbp */
  606. cbp = 0;
  607. for (i = 0; i < 6; i++) {
  608. if (s->block_last_index[i] >= 1)
  609. cbp |= 1 << (5 - i);
  610. }
  611. cbpc = cbp & 3;
  612. if (s->pict_type == I_TYPE) {
  613. if(s->dquant) cbpc+=4;
  614. put_bits(&s->pb,
  615. intra_MCBPC_bits[cbpc],
  616. intra_MCBPC_code[cbpc]);
  617. } else {
  618. if(s->dquant) cbpc+=8;
  619. put_bits(&s->pb, 1, 0); /* mb coded */
  620. put_bits(&s->pb,
  621. inter_MCBPC_bits[cbpc + 4],
  622. inter_MCBPC_code[cbpc + 4]);
  623. }
  624. put_bits(pb2, 1, s->ac_pred);
  625. cbpy = cbp >> 2;
  626. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  627. if(s->dquant)
  628. put_bits(dc_pb, 2, dquant_code[s->dquant+2]);
  629. if(!s->progressive_sequence){
  630. put_bits(dc_pb, 1, s->interlaced_dct);
  631. }
  632. if(interleaved_stats){
  633. bits= get_bit_count(&s->pb);
  634. s->misc_bits+= bits - s->last_bits;
  635. s->last_bits=bits;
  636. }
  637. /* encode each block */
  638. for (i = 0; i < 6; i++) {
  639. mpeg4_encode_block(s, block[i], i, dc_diff[i], scan_table[i], dc_pb, tex_pb);
  640. }
  641. if(interleaved_stats){
  642. bits= get_bit_count(&s->pb);
  643. s->i_tex_bits+= bits - s->last_bits;
  644. s->last_bits=bits;
  645. }
  646. s->i_count++;
  647. /* restore ac coeffs & last_index stuff if we messed them up with the prediction */
  648. if(s->ac_pred){
  649. for(i=0; i<6; i++){
  650. int j;
  651. INT16 *ac_val;
  652. ac_val = s->ac_val[0][0] + s->block_index[i] * 16;
  653. if(dir[i]){
  654. for(j=1; j<8; j++)
  655. block[i][s->idct_permutation[j ]]= ac_val[j+8];
  656. }else{
  657. for(j=1; j<8; j++)
  658. block[i][s->idct_permutation[j<<3]]= ac_val[j ];
  659. }
  660. s->block_last_index[i]= zigzag_last_index[i];
  661. }
  662. }
  663. }
  664. }
  665. void h263_encode_mb(MpegEncContext * s,
  666. DCTELEM block[6][64],
  667. int motion_x, int motion_y)
  668. {
  669. int cbpc, cbpy, i, cbp, pred_x, pred_y;
  670. INT16 pred_dc;
  671. INT16 rec_intradc[6];
  672. UINT16 *dc_ptr[6];
  673. const int dquant_code[5]= {1,0,9,2,3};
  674. //printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
  675. if (!s->mb_intra) {
  676. /* compute cbp */
  677. cbp = 0;
  678. for (i = 0; i < 6; i++) {
  679. if (s->block_last_index[i] >= 0)
  680. cbp |= 1 << (5 - i);
  681. }
  682. if ((cbp | motion_x | motion_y | s->dquant) == 0) {
  683. /* skip macroblock */
  684. put_bits(&s->pb, 1, 1);
  685. return;
  686. }
  687. put_bits(&s->pb, 1, 0); /* mb coded */
  688. cbpc = cbp & 3;
  689. if(s->dquant) cbpc+= 8;
  690. put_bits(&s->pb,
  691. inter_MCBPC_bits[cbpc],
  692. inter_MCBPC_code[cbpc]);
  693. cbpy = cbp >> 2;
  694. cbpy ^= 0xf;
  695. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  696. if(s->dquant)
  697. put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
  698. /* motion vectors: 16x16 mode only now */
  699. h263_pred_motion(s, 0, &pred_x, &pred_y);
  700. if (!s->umvplus) {
  701. h263_encode_motion(s, motion_x - pred_x, s->f_code);
  702. h263_encode_motion(s, motion_y - pred_y, s->f_code);
  703. }
  704. else {
  705. h263p_encode_umotion(s, motion_x - pred_x);
  706. h263p_encode_umotion(s, motion_y - pred_y);
  707. if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
  708. /* To prevent Start Code emulation */
  709. put_bits(&s->pb,1,1);
  710. }
  711. } else {
  712. int li = s->h263_aic ? 0 : 1;
  713. cbp = 0;
  714. for(i=0; i<6; i++) {
  715. /* Predict DC */
  716. if (s->h263_aic && s->mb_intra) {
  717. INT16 level = block[i][0];
  718. pred_dc = h263_pred_dc(s, i, &dc_ptr[i]);
  719. level -= pred_dc;
  720. /* Quant */
  721. if (level < 0)
  722. level = (level + (s->qscale >> 1))/(s->y_dc_scale);
  723. else
  724. level = (level - (s->qscale >> 1))/(s->y_dc_scale);
  725. /* AIC can change CBP */
  726. if (level == 0 && s->block_last_index[i] == 0)
  727. s->block_last_index[i] = -1;
  728. else if (level < -127)
  729. level = -127;
  730. else if (level > 127)
  731. level = 127;
  732. block[i][0] = level;
  733. /* Reconstruction */
  734. rec_intradc[i] = (s->y_dc_scale*level) + pred_dc;
  735. /* Oddify */
  736. rec_intradc[i] |= 1;
  737. //if ((rec_intradc[i] % 2) == 0)
  738. // rec_intradc[i]++;
  739. /* Clipping */
  740. if (rec_intradc[i] < 0)
  741. rec_intradc[i] = 0;
  742. else if (rec_intradc[i] > 2047)
  743. rec_intradc[i] = 2047;
  744. /* Update AC/DC tables */
  745. *dc_ptr[i] = rec_intradc[i];
  746. }
  747. /* compute cbp */
  748. if (s->block_last_index[i] >= li)
  749. cbp |= 1 << (5 - i);
  750. }
  751. cbpc = cbp & 3;
  752. if (s->pict_type == I_TYPE) {
  753. if(s->dquant) cbpc+=4;
  754. put_bits(&s->pb,
  755. intra_MCBPC_bits[cbpc],
  756. intra_MCBPC_code[cbpc]);
  757. } else {
  758. if(s->dquant) cbpc+=8;
  759. put_bits(&s->pb, 1, 0); /* mb coded */
  760. put_bits(&s->pb,
  761. inter_MCBPC_bits[cbpc + 4],
  762. inter_MCBPC_code[cbpc + 4]);
  763. }
  764. if (s->h263_aic) {
  765. /* XXX: currently, we do not try to use ac prediction */
  766. put_bits(&s->pb, 1, 0); /* no AC prediction */
  767. }
  768. cbpy = cbp >> 2;
  769. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  770. if(s->dquant)
  771. put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
  772. }
  773. for(i=0; i<6; i++) {
  774. /* encode each block */
  775. h263_encode_block(s, block[i], i);
  776. /* Update INTRADC for decoding */
  777. if (s->h263_aic && s->mb_intra) {
  778. block[i][0] = rec_intradc[i];
  779. }
  780. }
  781. }
  782. static int h263_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr)
  783. {
  784. int x, y, wrap, a, c, pred_dc, scale;
  785. INT16 *dc_val, *ac_val;
  786. /* find prediction */
  787. if (n < 4) {
  788. x = 2 * s->mb_x + 1 + (n & 1);
  789. y = 2 * s->mb_y + 1 + ((n & 2) >> 1);
  790. wrap = s->mb_width * 2 + 2;
  791. dc_val = s->dc_val[0];
  792. ac_val = s->ac_val[0][0];
  793. scale = s->y_dc_scale;
  794. } else {
  795. x = s->mb_x + 1;
  796. y = s->mb_y + 1;
  797. wrap = s->mb_width + 2;
  798. dc_val = s->dc_val[n - 4 + 1];
  799. ac_val = s->ac_val[n - 4 + 1][0];
  800. scale = s->c_dc_scale;
  801. }
  802. /* B C
  803. * A X
  804. */
  805. a = dc_val[(x - 1) + (y) * wrap];
  806. c = dc_val[(x) + (y - 1) * wrap];
  807. /* No prediction outside GOB boundary */
  808. if (s->first_slice_line && ((n < 2) || (n > 3)))
  809. c = 1024;
  810. pred_dc = 1024;
  811. /* just DC prediction */
  812. if (a != 1024 && c != 1024)
  813. pred_dc = (a + c) >> 1;
  814. else if (a != 1024)
  815. pred_dc = a;
  816. else
  817. pred_dc = c;
  818. /* we assume pred is positive */
  819. //pred_dc = (pred_dc + (scale >> 1)) / scale;
  820. *dc_val_ptr = &dc_val[x + y * wrap];
  821. return pred_dc;
  822. }
  823. void h263_pred_acdc(MpegEncContext * s, INT16 *block, int n)
  824. {
  825. int x, y, wrap, a, c, pred_dc, scale, i;
  826. INT16 *dc_val, *ac_val, *ac_val1;
  827. /* find prediction */
  828. if (n < 4) {
  829. x = 2 * s->mb_x + 1 + (n & 1);
  830. y = 2 * s->mb_y + 1 + ((n & 2) >> 1);
  831. wrap = s->mb_width * 2 + 2;
  832. dc_val = s->dc_val[0];
  833. ac_val = s->ac_val[0][0];
  834. scale = s->y_dc_scale;
  835. } else {
  836. x = s->mb_x + 1;
  837. y = s->mb_y + 1;
  838. wrap = s->mb_width + 2;
  839. dc_val = s->dc_val[n - 4 + 1];
  840. ac_val = s->ac_val[n - 4 + 1][0];
  841. scale = s->c_dc_scale;
  842. }
  843. ac_val += ((y) * wrap + (x)) * 16;
  844. ac_val1 = ac_val;
  845. /* B C
  846. * A X
  847. */
  848. a = dc_val[(x - 1) + (y) * wrap];
  849. c = dc_val[(x) + (y - 1) * wrap];
  850. /* No prediction outside GOB boundary */
  851. if (s->first_slice_line && ((n < 2) || (n > 3)))
  852. c = 1024;
  853. pred_dc = 1024;
  854. if (s->ac_pred) {
  855. if (s->h263_aic_dir) {
  856. /* left prediction */
  857. if (a != 1024) {
  858. ac_val -= 16;
  859. for(i=1;i<8;i++) {
  860. block[s->idct_permutation[i<<3]] += ac_val[i];
  861. }
  862. pred_dc = a;
  863. }
  864. } else {
  865. /* top prediction */
  866. if (c != 1024) {
  867. ac_val -= 16 * wrap;
  868. for(i=1;i<8;i++) {
  869. block[s->idct_permutation[i ]] += ac_val[i + 8];
  870. }
  871. pred_dc = c;
  872. }
  873. }
  874. } else {
  875. /* just DC prediction */
  876. if (a != 1024 && c != 1024)
  877. pred_dc = (a + c) >> 1;
  878. else if (a != 1024)
  879. pred_dc = a;
  880. else
  881. pred_dc = c;
  882. }
  883. /* we assume pred is positive */
  884. block[0]=block[0]*scale + pred_dc;
  885. if (block[0] < 0)
  886. block[0] = 0;
  887. else if (!(block[0] & 1))
  888. block[0]++;
  889. /* Update AC/DC tables */
  890. dc_val[(x) + (y) * wrap] = block[0];
  891. /* left copy */
  892. for(i=1;i<8;i++)
  893. ac_val1[i ] = block[s->idct_permutation[i<<3]];
  894. /* top copy */
  895. for(i=1;i<8;i++)
  896. ac_val1[8 + i] = block[s->idct_permutation[i ]];
  897. }
  898. INT16 *h263_pred_motion(MpegEncContext * s, int block,
  899. int *px, int *py)
  900. {
  901. int xy, wrap;
  902. INT16 *A, *B, *C, *mot_val;
  903. static const int off[4]= {2, 1, 1, -1};
  904. wrap = s->block_wrap[0];
  905. xy = s->block_index[block];
  906. mot_val = s->motion_val[xy];
  907. A = s->motion_val[xy - 1];
  908. /* special case for first (slice) line */
  909. if ((s->mb_y == 0 || s->first_slice_line) && block<3) {
  910. // we cant just change some MVs to simulate that as we need them for the B frames (and ME)
  911. // and if we ever support non rectangular objects than we need to do a few ifs here anyway :(
  912. if(block==0){ //most common case
  913. if(s->mb_x == s->resync_mb_x){ //rare
  914. *px= *py = 0;
  915. }else if(s->mb_x + 1 == s->resync_mb_x){ //rare
  916. C = s->motion_val[xy + off[block] - wrap];
  917. if(s->mb_x==0){
  918. *px = C[0];
  919. *py = C[1];
  920. }else{
  921. *px = mid_pred(A[0], 0, C[0]);
  922. *py = mid_pred(A[1], 0, C[1]);
  923. }
  924. }else{
  925. *px = A[0];
  926. *py = A[1];
  927. }
  928. }else if(block==1){
  929. if(s->mb_x + 1 == s->resync_mb_x){ //rare
  930. C = s->motion_val[xy + off[block] - wrap];
  931. *px = mid_pred(A[0], 0, C[0]);
  932. *py = mid_pred(A[1], 0, C[1]);
  933. }else{
  934. *px = A[0];
  935. *py = A[1];
  936. }
  937. }else{ /* block==2*/
  938. B = s->motion_val[xy - wrap];
  939. C = s->motion_val[xy + off[block] - wrap];
  940. if(s->mb_x == s->resync_mb_x) //rare
  941. A[0]=A[1]=0;
  942. *px = mid_pred(A[0], B[0], C[0]);
  943. *py = mid_pred(A[1], B[1], C[1]);
  944. }
  945. } else {
  946. B = s->motion_val[xy - wrap];
  947. C = s->motion_val[xy + off[block] - wrap];
  948. *px = mid_pred(A[0], B[0], C[0]);
  949. *py = mid_pred(A[1], B[1], C[1]);
  950. }
  951. return mot_val;
  952. }
  953. static void h263_encode_motion(MpegEncContext * s, int val, int f_code)
  954. {
  955. int range, l, bit_size, sign, code, bits;
  956. if (val == 0) {
  957. /* zero vector */
  958. code = 0;
  959. put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
  960. } else {
  961. bit_size = f_code - 1;
  962. range = 1 << bit_size;
  963. /* modulo encoding */
  964. l = range * 32;
  965. #if 1
  966. val+= l;
  967. val&= 2*l-1;
  968. val-= l;
  969. sign = val>>31;
  970. val= (val^sign)-sign;
  971. sign&=1;
  972. #else
  973. if (val < -l) {
  974. val += 2*l;
  975. } else if (val >= l) {
  976. val -= 2*l;
  977. }
  978. assert(val>=-l && val<l);
  979. if (val >= 0) {
  980. sign = 0;
  981. } else {
  982. val = -val;
  983. sign = 1;
  984. }
  985. #endif
  986. val--;
  987. code = (val >> bit_size) + 1;
  988. bits = val & (range - 1);
  989. put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
  990. if (bit_size > 0) {
  991. put_bits(&s->pb, bit_size, bits);
  992. }
  993. }
  994. }
  995. /* Encode MV differences on H.263+ with Unrestricted MV mode */
  996. static void h263p_encode_umotion(MpegEncContext * s, int val)
  997. {
  998. short sval = 0;
  999. short i = 0;
  1000. short n_bits = 0;
  1001. short temp_val;
  1002. int code = 0;
  1003. int tcode;
  1004. if ( val == 0)
  1005. put_bits(&s->pb, 1, 1);
  1006. else if (val == 1)
  1007. put_bits(&s->pb, 3, 0);
  1008. else if (val == -1)
  1009. put_bits(&s->pb, 3, 2);
  1010. else {
  1011. sval = ((val < 0) ? (short)(-val):(short)val);
  1012. temp_val = sval;
  1013. while (temp_val != 0) {
  1014. temp_val = temp_val >> 1;
  1015. n_bits++;
  1016. }
  1017. i = n_bits - 1;
  1018. while (i > 0) {
  1019. tcode = (sval & (1 << (i-1))) >> (i-1);
  1020. tcode = (tcode << 1) | 1;
  1021. code = (code << 2) | tcode;
  1022. i--;
  1023. }
  1024. code = ((code << 1) | (val < 0)) << 1;
  1025. put_bits(&s->pb, (2*n_bits)+1, code);
  1026. //printf("\nVal = %d\tCode = %d", sval, code);
  1027. }
  1028. }
  1029. static void init_mv_penalty_and_fcode(MpegEncContext *s)
  1030. {
  1031. int f_code;
  1032. int mv;
  1033. for(f_code=1; f_code<=MAX_FCODE; f_code++){
  1034. for(mv=-MAX_MV; mv<=MAX_MV; mv++){
  1035. int len;
  1036. if(mv==0) len= mvtab[0][1];
  1037. else{
  1038. int val, bit_size, range, code;
  1039. bit_size = s->f_code - 1;
  1040. range = 1 << bit_size;
  1041. val=mv;
  1042. if (val < 0)
  1043. val = -val;
  1044. val--;
  1045. code = (val >> bit_size) + 1;
  1046. if(code<33){
  1047. len= mvtab[code][1] + 1 + bit_size;
  1048. }else{
  1049. len= mvtab[32][1] + 2 + bit_size;
  1050. }
  1051. }
  1052. mv_penalty[f_code][mv+MAX_MV]= len;
  1053. }
  1054. }
  1055. for(f_code=MAX_FCODE; f_code>0; f_code--){
  1056. for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
  1057. fcode_tab[mv+MAX_MV]= f_code;
  1058. }
  1059. }
  1060. for(mv=0; mv<MAX_MV*2+1; mv++){
  1061. umv_fcode_tab[mv]= 1;
  1062. }
  1063. }
  1064. static void init_uni_dc_tab(void)
  1065. {
  1066. int level, uni_code, uni_len;
  1067. for(level=-256; level<256; level++){
  1068. int size, v, l;
  1069. /* find number of bits */
  1070. size = 0;
  1071. v = abs(level);
  1072. while (v) {
  1073. v >>= 1;
  1074. size++;
  1075. }
  1076. if (level < 0)
  1077. l= (-level) ^ ((1 << size) - 1);
  1078. else
  1079. l= level;
  1080. /* luminance */
  1081. uni_code= DCtab_lum[size][0];
  1082. uni_len = DCtab_lum[size][1];
  1083. if (size > 0) {
  1084. uni_code<<=size; uni_code|=l;
  1085. uni_len+=size;
  1086. if (size > 8){
  1087. uni_code<<=1; uni_code|=1;
  1088. uni_len++;
  1089. }
  1090. }
  1091. uni_DCtab_lum[level+256][0]= uni_code;
  1092. uni_DCtab_lum[level+256][1]= uni_len;
  1093. /* chrominance */
  1094. uni_code= DCtab_chrom[size][0];
  1095. uni_len = DCtab_chrom[size][1];
  1096. if (size > 0) {
  1097. uni_code<<=size; uni_code|=l;
  1098. uni_len+=size;
  1099. if (size > 8){
  1100. uni_code<<=1; uni_code|=1;
  1101. uni_len++;
  1102. }
  1103. }
  1104. uni_DCtab_chrom[level+256][0]= uni_code;
  1105. uni_DCtab_chrom[level+256][1]= uni_len;
  1106. }
  1107. }
  1108. static void init_uni_mpeg4_rl_tab(RLTable *rl, UINT32 *bits_tab, UINT8 *len_tab){
  1109. int slevel, run, last;
  1110. assert(MAX_LEVEL >= 64);
  1111. assert(MAX_RUN >= 63);
  1112. for(slevel=-64; slevel<64; slevel++){
  1113. if(slevel==0) continue;
  1114. for(run=0; run<64; run++){
  1115. for(last=0; last<=1; last++){
  1116. const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
  1117. int level= slevel < 0 ? -slevel : slevel;
  1118. int sign= slevel < 0 ? 1 : 0;
  1119. int bits, len, code;
  1120. int level1, run1;
  1121. len_tab[index]= 100;
  1122. /* ESC0 */
  1123. code= get_rl_index(rl, last, run, level);
  1124. bits= rl->table_vlc[code][0];
  1125. len= rl->table_vlc[code][1];
  1126. bits=bits*2+sign; len++;
  1127. if(code!=rl->n && len < len_tab[index]){
  1128. bits_tab[index]= bits;
  1129. len_tab [index]= len;
  1130. }
  1131. #if 1
  1132. /* ESC1 */
  1133. bits= rl->table_vlc[rl->n][0];
  1134. len= rl->table_vlc[rl->n][1];
  1135. bits=bits*2; len++; //esc1
  1136. level1= level - rl->max_level[last][run];
  1137. if(level1>0){
  1138. code= get_rl_index(rl, last, run, level1);
  1139. bits<<= rl->table_vlc[code][1];
  1140. len += rl->table_vlc[code][1];
  1141. bits += rl->table_vlc[code][0];
  1142. bits=bits*2+sign; len++;
  1143. if(code!=rl->n && len < len_tab[index]){
  1144. bits_tab[index]= bits;
  1145. len_tab [index]= len;
  1146. }
  1147. }
  1148. #endif
  1149. #if 1
  1150. /* ESC2 */
  1151. bits= rl->table_vlc[rl->n][0];
  1152. len= rl->table_vlc[rl->n][1];
  1153. bits=bits*4+2; len+=2; //esc2
  1154. run1 = run - rl->max_run[last][level] - 1;
  1155. if(run1>=0){
  1156. code= get_rl_index(rl, last, run1, level);
  1157. bits<<= rl->table_vlc[code][1];
  1158. len += rl->table_vlc[code][1];
  1159. bits += rl->table_vlc[code][0];
  1160. bits=bits*2+sign; len++;
  1161. if(code!=rl->n && len < len_tab[index]){
  1162. bits_tab[index]= bits;
  1163. len_tab [index]= len;
  1164. }
  1165. }
  1166. #endif
  1167. /* ESC3 */
  1168. bits= rl->table_vlc[rl->n][0];
  1169. len = rl->table_vlc[rl->n][1];
  1170. bits=bits*4+3; len+=2; //esc3
  1171. bits=bits*2+last; len++;
  1172. bits=bits*64+run; len+=6;
  1173. bits=bits*2+1; len++; //marker
  1174. bits=bits*4096+(slevel&0xfff); len+=12;
  1175. bits=bits*2+1; len++; //marker
  1176. if(len < len_tab[index]){
  1177. bits_tab[index]= bits;
  1178. len_tab [index]= len;
  1179. }
  1180. }
  1181. }
  1182. }
  1183. }
  1184. void h263_encode_init(MpegEncContext *s)
  1185. {
  1186. static int done = 0;
  1187. if (!done) {
  1188. done = 1;
  1189. init_uni_dc_tab();
  1190. init_rl(&rl_inter);
  1191. init_rl(&rl_intra);
  1192. init_rl(&rl_intra_aic);
  1193. init_uni_mpeg4_rl_tab(&rl_intra, uni_mpeg4_intra_rl_bits, uni_mpeg4_intra_rl_len);
  1194. init_uni_mpeg4_rl_tab(&rl_inter, uni_mpeg4_inter_rl_bits, uni_mpeg4_inter_rl_len);
  1195. init_mv_penalty_and_fcode(s);
  1196. }
  1197. s->mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
  1198. // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
  1199. switch(s->codec_id){
  1200. case CODEC_ID_MPEG4:
  1201. s->fcode_tab= fcode_tab;
  1202. s->min_qcoeff= -2048;
  1203. s->max_qcoeff= 2047;
  1204. break;
  1205. case CODEC_ID_H263P:
  1206. s->fcode_tab= umv_fcode_tab;
  1207. s->min_qcoeff= -128;
  1208. s->max_qcoeff= 127;
  1209. break;
  1210. //Note for mpeg4 & h263 the dc-scale table will be set per frame as needed later
  1211. default: //nothing needed default table allready set in mpegvideo.c
  1212. s->min_qcoeff= -128;
  1213. s->max_qcoeff= 127;
  1214. s->y_dc_scale_table=
  1215. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  1216. }
  1217. if(s->mpeg_quant){
  1218. s->intra_quant_bias= 3<<(QUANT_BIAS_SHIFT-3); //(a + x*3/8)/x
  1219. s->inter_quant_bias= 0;
  1220. }else{
  1221. s->intra_quant_bias=0;
  1222. s->inter_quant_bias=-(1<<(QUANT_BIAS_SHIFT-2)); //(a - x/4)/x
  1223. }
  1224. }
  1225. static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
  1226. {
  1227. int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code;
  1228. RLTable *rl;
  1229. rl = &rl_inter;
  1230. if (s->mb_intra && !s->h263_aic) {
  1231. /* DC coef */
  1232. level = block[0];
  1233. /* 255 cannot be represented, so we clamp */
  1234. if (level > 254) {
  1235. level = 254;
  1236. block[0] = 254;
  1237. }
  1238. /* 0 cannot be represented also */
  1239. else if (!level) {
  1240. level = 1;
  1241. block[0] = 1;
  1242. }
  1243. if (level == 128)
  1244. put_bits(&s->pb, 8, 0xff);
  1245. else
  1246. put_bits(&s->pb, 8, level & 0xff);
  1247. i = 1;
  1248. } else {
  1249. i = 0;
  1250. if (s->h263_aic && s->mb_intra)
  1251. rl = &rl_intra_aic;
  1252. }
  1253. /* AC coefs */
  1254. last_index = s->block_last_index[n];
  1255. last_non_zero = i - 1;
  1256. for (; i <= last_index; i++) {
  1257. j = s->intra_scantable.permutated[i];
  1258. level = block[j];
  1259. if (level) {
  1260. run = i - last_non_zero - 1;
  1261. last = (i == last_index);
  1262. sign = 0;
  1263. slevel = level;
  1264. if (level < 0) {
  1265. sign = 1;
  1266. level = -level;
  1267. }
  1268. code = get_rl_index(rl, last, run, level);
  1269. put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1270. if (code == rl->n) {
  1271. put_bits(&s->pb, 1, last);
  1272. put_bits(&s->pb, 6, run);
  1273. put_bits(&s->pb, 8, slevel & 0xff);
  1274. } else {
  1275. put_bits(&s->pb, 1, sign);
  1276. }
  1277. last_non_zero = i;
  1278. }
  1279. }
  1280. }
  1281. /***************************************************/
  1282. void ff_mpeg4_stuffing(PutBitContext * pbc)
  1283. {
  1284. int length;
  1285. put_bits(pbc, 1, 0);
  1286. length= (-get_bit_count(pbc))&7;
  1287. if(length) put_bits(pbc, length, (1<<length)-1);
  1288. }
  1289. /* must be called before writing the header */
  1290. void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){
  1291. int time_div, time_mod;
  1292. if(s->pict_type==I_TYPE){ //we will encode a vol header
  1293. s->time_increment_resolution= s->frame_rate/ff_gcd(s->frame_rate, FRAME_RATE_BASE);
  1294. if(s->time_increment_resolution>=256*256) s->time_increment_resolution= 256*128;
  1295. s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1;
  1296. }
  1297. if(s->avctx->pts)
  1298. s->time= (s->avctx->pts*s->time_increment_resolution + 500*1000)/(1000*1000);
  1299. else
  1300. s->time= picture_number*(INT64)FRAME_RATE_BASE*s->time_increment_resolution/s->frame_rate;
  1301. time_div= s->time/s->time_increment_resolution;
  1302. time_mod= s->time%s->time_increment_resolution;
  1303. if(s->pict_type==B_TYPE){
  1304. s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
  1305. }else{
  1306. s->last_time_base= s->time_base;
  1307. s->time_base= time_div;
  1308. s->pp_time= s->time - s->last_non_b_time;
  1309. s->last_non_b_time= s->time;
  1310. }
  1311. }
  1312. static void mpeg4_encode_vol_header(MpegEncContext * s)
  1313. {
  1314. int vo_ver_id=1; //must be 2 if we want GMC or q-pel
  1315. char buf[255];
  1316. s->vo_type= s->has_b_frames ? CORE_VO_TYPE : SIMPLE_VO_TYPE;
  1317. put_bits(&s->pb, 16, 0);
  1318. put_bits(&s->pb, 16, 0x100); /* video obj */
  1319. put_bits(&s->pb, 16, 0);
  1320. put_bits(&s->pb, 16, 0x120); /* video obj layer */
  1321. put_bits(&s->pb, 1, 0); /* random access vol */
  1322. put_bits(&s->pb, 8, s->vo_type); /* video obj type indication */
  1323. put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
  1324. put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
  1325. put_bits(&s->pb, 3, 1); /* is obj layer priority */
  1326. if(s->aspect_ratio_info)
  1327. put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
  1328. else
  1329. put_bits(&s->pb, 4, 1); /* aspect ratio info= sqare pixel */
  1330. if (s->aspect_ratio_info == FF_ASPECT_EXTENDED)
  1331. {
  1332. put_bits(&s->pb, 8, s->aspected_width);
  1333. put_bits(&s->pb, 8, s->aspected_height);
  1334. }
  1335. if(s->low_delay){
  1336. put_bits(&s->pb, 1, 1); /* vol control parameters= yes */
  1337. put_bits(&s->pb, 2, 1); /* chroma format YUV 420/YV12 */
  1338. put_bits(&s->pb, 1, s->low_delay);
  1339. put_bits(&s->pb, 1, 0); /* vbv parameters= no */
  1340. }else{
  1341. put_bits(&s->pb, 1, 0); /* vol control parameters= no */
  1342. }
  1343. put_bits(&s->pb, 2, RECT_SHAPE); /* vol shape= rectangle */
  1344. put_bits(&s->pb, 1, 1); /* marker bit */
  1345. put_bits(&s->pb, 16, s->time_increment_resolution);
  1346. if (s->time_increment_bits < 1)
  1347. s->time_increment_bits = 1;
  1348. put_bits(&s->pb, 1, 1); /* marker bit */
  1349. put_bits(&s->pb, 1, 0); /* fixed vop rate=no */
  1350. put_bits(&s->pb, 1, 1); /* marker bit */
  1351. put_bits(&s->pb, 13, s->width); /* vol width */
  1352. put_bits(&s->pb, 1, 1); /* marker bit */
  1353. put_bits(&s->pb, 13, s->height); /* vol height */
  1354. put_bits(&s->pb, 1, 1); /* marker bit */
  1355. put_bits(&s->pb, 1, s->progressive_sequence ? 0 : 1);
  1356. put_bits(&s->pb, 1, 1); /* obmc disable */
  1357. if (vo_ver_id == 1) {
  1358. put_bits(&s->pb, 1, s->vol_sprite_usage=0); /* sprite enable */
  1359. }else{ /* vo_ver_id == 2 */
  1360. put_bits(&s->pb, 2, s->vol_sprite_usage=0); /* sprite enable */
  1361. }
  1362. put_bits(&s->pb, 1, 0); /* not 8 bit */
  1363. put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/
  1364. if(s->mpeg_quant) put_bits(&s->pb, 2, 0); /* no custom matrixes */
  1365. if (vo_ver_id != 1)
  1366. put_bits(&s->pb, 1, s->quarter_sample=0);
  1367. put_bits(&s->pb, 1, 1); /* complexity estimation disable */
  1368. s->resync_marker= s->rtp_mode;
  1369. put_bits(&s->pb, 1, s->resync_marker ? 0 : 1);/* resync marker disable */
  1370. put_bits(&s->pb, 1, s->data_partitioning ? 1 : 0);
  1371. if(s->data_partitioning){
  1372. put_bits(&s->pb, 1, 0); /* no rvlc */
  1373. }
  1374. if (vo_ver_id != 1){
  1375. put_bits(&s->pb, 1, 0); /* newpred */
  1376. put_bits(&s->pb, 1, 0); /* reduced res vop */
  1377. }
  1378. put_bits(&s->pb, 1, 0); /* scalability */
  1379. ff_mpeg4_stuffing(&s->pb);
  1380. /* user data */
  1381. if(!ff_bit_exact){
  1382. put_bits(&s->pb, 16, 0);
  1383. put_bits(&s->pb, 16, 0x1B2); /* user_data */
  1384. sprintf(buf, "FFmpeg%sb%s", FFMPEG_VERSION, LIBAVCODEC_BUILD_STR);
  1385. put_string(&s->pb, buf);
  1386. ff_mpeg4_stuffing(&s->pb);
  1387. }
  1388. }
  1389. /* write mpeg4 VOP header */
  1390. void mpeg4_encode_picture_header(MpegEncContext * s, int picture_number)
  1391. {
  1392. int time_incr;
  1393. int time_div, time_mod;
  1394. if(s->pict_type==I_TYPE){
  1395. s->no_rounding=0;
  1396. if(picture_number==0 || !s->strict_std_compliance)
  1397. mpeg4_encode_vol_header(s);
  1398. }
  1399. //printf("num:%d rate:%d base:%d\n", s->picture_number, s->frame_rate, FRAME_RATE_BASE);
  1400. put_bits(&s->pb, 16, 0); /* vop header */
  1401. put_bits(&s->pb, 16, 0x1B6); /* vop header */
  1402. put_bits(&s->pb, 2, s->pict_type - 1); /* pict type: I = 0 , P = 1 */
  1403. time_div= s->time/s->time_increment_resolution;
  1404. time_mod= s->time%s->time_increment_resolution;
  1405. time_incr= time_div - s->last_time_base;
  1406. while(time_incr--)
  1407. put_bits(&s->pb, 1, 1);
  1408. put_bits(&s->pb, 1, 0);
  1409. put_bits(&s->pb, 1, 1); /* marker */
  1410. put_bits(&s->pb, s->time_increment_bits, time_mod); /* time increment */
  1411. put_bits(&s->pb, 1, 1); /* marker */
  1412. put_bits(&s->pb, 1, 1); /* vop coded */
  1413. if ( s->pict_type == P_TYPE
  1414. || (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE)) {
  1415. s->no_rounding ^= 1;
  1416. put_bits(&s->pb, 1, s->no_rounding); /* rounding type */
  1417. }
  1418. put_bits(&s->pb, 3, 0); /* intra dc VLC threshold */
  1419. if(!s->progressive_sequence){
  1420. put_bits(&s->pb, 1, s->top_field_first);
  1421. put_bits(&s->pb, 1, s->alternate_scan);
  1422. }
  1423. //FIXME sprite stuff
  1424. put_bits(&s->pb, 5, s->qscale);
  1425. if (s->pict_type != I_TYPE)
  1426. put_bits(&s->pb, 3, s->f_code); /* fcode_for */
  1427. if (s->pict_type == B_TYPE)
  1428. put_bits(&s->pb, 3, s->b_code); /* fcode_back */
  1429. // printf("****frame %d\n", picture_number);
  1430. s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table; //FIXME add short header support
  1431. s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
  1432. s->h_edge_pos= s->width;
  1433. s->v_edge_pos= s->height;
  1434. }
  1435. static void change_qscale(MpegEncContext * s, int dquant)
  1436. {
  1437. s->qscale += dquant;
  1438. if (s->qscale < 1)
  1439. s->qscale = 1;
  1440. else if (s->qscale > 31)
  1441. s->qscale = 31;
  1442. s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
  1443. s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
  1444. }
  1445. inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr)
  1446. {
  1447. int a, b, c, wrap, pred, scale;
  1448. UINT16 *dc_val;
  1449. int dummy;
  1450. /* find prediction */
  1451. if (n < 4) {
  1452. scale = s->y_dc_scale;
  1453. } else {
  1454. scale = s->c_dc_scale;
  1455. }
  1456. wrap= s->block_wrap[n];
  1457. dc_val = s->dc_val[0] + s->block_index[n];
  1458. /* B C
  1459. * A X
  1460. */
  1461. a = dc_val[ - 1];
  1462. b = dc_val[ - 1 - wrap];
  1463. c = dc_val[ - wrap];
  1464. if (abs(a - b) < abs(b - c)) {
  1465. pred = c;
  1466. *dir_ptr = 1; /* top */
  1467. } else {
  1468. pred = a;
  1469. *dir_ptr = 0; /* left */
  1470. }
  1471. /* we assume pred is positive */
  1472. #ifdef ARCH_X86
  1473. asm volatile (
  1474. "xorl %%edx, %%edx \n\t"
  1475. "mul %%ecx \n\t"
  1476. : "=d" (pred), "=a"(dummy)
  1477. : "a" (pred + (scale >> 1)), "c" (inverse[scale])
  1478. );
  1479. #else
  1480. pred = (pred + (scale >> 1)) / scale;
  1481. #endif
  1482. /* prepare address for prediction update */
  1483. *dc_val_ptr = &dc_val[0];
  1484. return pred;
  1485. }
  1486. void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
  1487. int dir)
  1488. {
  1489. int i;
  1490. INT16 *ac_val, *ac_val1;
  1491. /* find prediction */
  1492. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  1493. ac_val1 = ac_val;
  1494. if (s->ac_pred) {
  1495. if (dir == 0) {
  1496. const int xy= s->mb_x-1 + s->mb_y*s->mb_width;
  1497. /* left prediction */
  1498. ac_val -= 16;
  1499. if(s->mb_x==0 || s->qscale == s->qscale_table[xy] || n==1 || n==3){
  1500. /* same qscale */
  1501. for(i=1;i<8;i++) {
  1502. block[s->idct_permutation[i<<3]] += ac_val[i];
  1503. }
  1504. }else{
  1505. /* different qscale, we must rescale */
  1506. for(i=1;i<8;i++) {
  1507. block[s->idct_permutation[i<<3]] += ROUNDED_DIV(ac_val[i]*s->qscale_table[xy], s->qscale);
  1508. }
  1509. }
  1510. } else {
  1511. const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width;
  1512. /* top prediction */
  1513. ac_val -= 16 * s->block_wrap[n];
  1514. if(s->mb_y==0 || s->qscale == s->qscale_table[xy] || n==2 || n==3){
  1515. /* same qscale */
  1516. for(i=1;i<8;i++) {
  1517. block[s->idct_permutation[i]] += ac_val[i + 8];
  1518. }
  1519. }else{
  1520. /* different qscale, we must rescale */
  1521. for(i=1;i<8;i++) {
  1522. block[s->idct_permutation[i]] += ROUNDED_DIV(ac_val[i + 8]*s->qscale_table[xy], s->qscale);
  1523. }
  1524. }
  1525. }
  1526. }
  1527. /* left copy */
  1528. for(i=1;i<8;i++)
  1529. ac_val1[i ] = block[s->idct_permutation[i<<3]];
  1530. /* top copy */
  1531. for(i=1;i<8;i++)
  1532. ac_val1[8 + i] = block[s->idct_permutation[i ]];
  1533. }
  1534. static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
  1535. int dir)
  1536. {
  1537. int i;
  1538. INT16 *ac_val;
  1539. /* find prediction */
  1540. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  1541. if (dir == 0) {
  1542. const int xy= s->mb_x-1 + s->mb_y*s->mb_width;
  1543. /* left prediction */
  1544. ac_val -= 16;
  1545. if(s->mb_x==0 || s->qscale == s->qscale_table[xy] || n==1 || n==3){
  1546. /* same qscale */
  1547. for(i=1;i<8;i++) {
  1548. block[s->idct_permutation[i<<3]] -= ac_val[i];
  1549. }
  1550. }else{
  1551. /* different qscale, we must rescale */
  1552. for(i=1;i<8;i++) {
  1553. block[s->idct_permutation[i<<3]] -= ROUNDED_DIV(ac_val[i]*s->qscale_table[xy], s->qscale);
  1554. }
  1555. }
  1556. } else {
  1557. const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width;
  1558. /* top prediction */
  1559. ac_val -= 16 * s->block_wrap[n];
  1560. if(s->mb_y==0 || s->qscale == s->qscale_table[xy] || n==2 || n==3){
  1561. /* same qscale */
  1562. for(i=1;i<8;i++) {
  1563. block[s->idct_permutation[i]] -= ac_val[i + 8];
  1564. }
  1565. }else{
  1566. /* different qscale, we must rescale */
  1567. for(i=1;i<8;i++) {
  1568. block[s->idct_permutation[i]] -= ROUNDED_DIV(ac_val[i + 8]*s->qscale_table[xy], s->qscale);
  1569. }
  1570. }
  1571. }
  1572. }
  1573. static inline void mpeg4_encode_dc(PutBitContext * s, int level, int n)
  1574. {
  1575. #if 1
  1576. // if(level<-255 || level>255) printf("dc overflow\n");
  1577. level+=256;
  1578. if (n < 4) {
  1579. /* luminance */
  1580. put_bits(s, uni_DCtab_lum[level][1], uni_DCtab_lum[level][0]);
  1581. } else {
  1582. /* chrominance */
  1583. put_bits(s, uni_DCtab_chrom[level][1], uni_DCtab_chrom[level][0]);
  1584. }
  1585. #else
  1586. int size, v;
  1587. /* find number of bits */
  1588. size = 0;
  1589. v = abs(level);
  1590. while (v) {
  1591. v >>= 1;
  1592. size++;
  1593. }
  1594. if (n < 4) {
  1595. /* luminance */
  1596. put_bits(&s->pb, DCtab_lum[size][1], DCtab_lum[size][0]);
  1597. } else {
  1598. /* chrominance */
  1599. put_bits(&s->pb, DCtab_chrom[size][1], DCtab_chrom[size][0]);
  1600. }
  1601. /* encode remaining bits */
  1602. if (size > 0) {
  1603. if (level < 0)
  1604. level = (-level) ^ ((1 << size) - 1);
  1605. put_bits(&s->pb, size, level);
  1606. if (size > 8)
  1607. put_bits(&s->pb, 1, 1);
  1608. }
  1609. #endif
  1610. }
  1611. static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
  1612. UINT8 *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
  1613. {
  1614. int last, i, last_non_zero, sign;
  1615. int code;
  1616. const RLTable *rl;
  1617. UINT32 *bits_tab;
  1618. UINT8 *len_tab;
  1619. const int last_index = s->block_last_index[n];
  1620. if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
  1621. /* mpeg4 based DC predictor */
  1622. mpeg4_encode_dc(dc_pb, intra_dc, n);
  1623. if(last_index<1) return;
  1624. i = 1;
  1625. rl = &rl_intra;
  1626. bits_tab= uni_mpeg4_intra_rl_bits;
  1627. len_tab = uni_mpeg4_intra_rl_len;
  1628. } else {
  1629. if(last_index<0) return;
  1630. i = 0;
  1631. rl = &rl_inter;
  1632. bits_tab= uni_mpeg4_inter_rl_bits;
  1633. len_tab = uni_mpeg4_inter_rl_len;
  1634. }
  1635. /* AC coefs */
  1636. last_non_zero = i - 1;
  1637. #if 1
  1638. for (; i < last_index; i++) {
  1639. int level = block[ scan_table[i] ];
  1640. if (level) {
  1641. int run = i - last_non_zero - 1;
  1642. level+=64;
  1643. if((level&(~127)) == 0){
  1644. const int index= UNI_MPEG4_ENC_INDEX(0, run, level);
  1645. put_bits(ac_pb, len_tab[index], bits_tab[index]);
  1646. }else{ //ESC3
  1647. put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(0<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
  1648. }
  1649. last_non_zero = i;
  1650. }
  1651. }
  1652. /*if(i<=last_index)*/{
  1653. int level = block[ scan_table[i] ];
  1654. int run = i - last_non_zero - 1;
  1655. level+=64;
  1656. if((level&(~127)) == 0){
  1657. const int index= UNI_MPEG4_ENC_INDEX(1, run, level);
  1658. put_bits(ac_pb, len_tab[index], bits_tab[index]);
  1659. }else{ //ESC3
  1660. put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(1<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
  1661. }
  1662. }
  1663. #else
  1664. for (; i <= last_index; i++) {
  1665. const int slevel = block[ scan_table[i] ];
  1666. if (slevel) {
  1667. int level;
  1668. int run = i - last_non_zero - 1;
  1669. last = (i == last_index);
  1670. sign = 0;
  1671. level = slevel;
  1672. if (level < 0) {
  1673. sign = 1;
  1674. level = -level;
  1675. }
  1676. code = get_rl_index(rl, last, run, level);
  1677. put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1678. if (code == rl->n) {
  1679. int level1, run1;
  1680. level1 = level - rl->max_level[last][run];
  1681. if (level1 < 1)
  1682. goto esc2;
  1683. code = get_rl_index(rl, last, run, level1);
  1684. if (code == rl->n) {
  1685. esc2:
  1686. put_bits(ac_pb, 1, 1);
  1687. if (level > MAX_LEVEL)
  1688. goto esc3;
  1689. run1 = run - rl->max_run[last][level] - 1;
  1690. if (run1 < 0)
  1691. goto esc3;
  1692. code = get_rl_index(rl, last, run1, level);
  1693. if (code == rl->n) {
  1694. esc3:
  1695. /* third escape */
  1696. put_bits(ac_pb, 1, 1);
  1697. put_bits(ac_pb, 1, last);
  1698. put_bits(ac_pb, 6, run);
  1699. put_bits(ac_pb, 1, 1);
  1700. put_bits(ac_pb, 12, slevel & 0xfff);
  1701. put_bits(ac_pb, 1, 1);
  1702. } else {
  1703. /* second escape */
  1704. put_bits(ac_pb, 1, 0);
  1705. put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1706. put_bits(ac_pb, 1, sign);
  1707. }
  1708. } else {
  1709. /* first escape */
  1710. put_bits(ac_pb, 1, 0);
  1711. put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1712. put_bits(ac_pb, 1, sign);
  1713. }
  1714. } else {
  1715. put_bits(ac_pb, 1, sign);
  1716. }
  1717. last_non_zero = i;
  1718. }
  1719. }
  1720. #endif
  1721. }
  1722. /***********************************************/
  1723. /* decoding */
  1724. static VLC intra_MCBPC_vlc;
  1725. static VLC inter_MCBPC_vlc;
  1726. static VLC cbpy_vlc;
  1727. static VLC mv_vlc;
  1728. static VLC dc_lum, dc_chrom;
  1729. static VLC sprite_trajectory;
  1730. static VLC mb_type_b_vlc;
  1731. void init_rl(RLTable *rl)
  1732. {
  1733. INT8 max_level[MAX_RUN+1], max_run[MAX_LEVEL+1];
  1734. UINT8 index_run[MAX_RUN+1];
  1735. int last, run, level, start, end, i;
  1736. /* compute max_level[], max_run[] and index_run[] */
  1737. for(last=0;last<2;last++) {
  1738. if (last == 0) {
  1739. start = 0;
  1740. end = rl->last;
  1741. } else {
  1742. start = rl->last;
  1743. end = rl->n;
  1744. }
  1745. memset(max_level, 0, MAX_RUN + 1);
  1746. memset(max_run, 0, MAX_LEVEL + 1);
  1747. memset(index_run, rl->n, MAX_RUN + 1);
  1748. for(i=start;i<end;i++) {
  1749. run = rl->table_run[i];
  1750. level = rl->table_level[i];
  1751. if (index_run[run] == rl->n)
  1752. index_run[run] = i;
  1753. if (level > max_level[run])
  1754. max_level[run] = level;
  1755. if (run > max_run[level])
  1756. max_run[level] = run;
  1757. }
  1758. rl->max_level[last] = av_malloc(MAX_RUN + 1);
  1759. memcpy(rl->max_level[last], max_level, MAX_RUN + 1);
  1760. rl->max_run[last] = av_malloc(MAX_LEVEL + 1);
  1761. memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1);
  1762. rl->index_run[last] = av_malloc(MAX_RUN + 1);
  1763. memcpy(rl->index_run[last], index_run, MAX_RUN + 1);
  1764. }
  1765. }
  1766. void init_vlc_rl(RLTable *rl)
  1767. {
  1768. int i, q;
  1769. init_vlc(&rl->vlc, 9, rl->n + 1,
  1770. &rl->table_vlc[0][1], 4, 2,
  1771. &rl->table_vlc[0][0], 4, 2);
  1772. for(q=0; q<32; q++){
  1773. int qmul= q*2;
  1774. int qadd= (q-1)|1;
  1775. if(q==0){
  1776. qmul=1;
  1777. qadd=0;
  1778. }
  1779. rl->rl_vlc[q]= av_malloc(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
  1780. for(i=0; i<rl->vlc.table_size; i++){
  1781. int code= rl->vlc.table[i][0];
  1782. int len = rl->vlc.table[i][1];
  1783. int level, run;
  1784. if(len==0){ // illegal code
  1785. run= 66;
  1786. level= MAX_LEVEL;
  1787. }else if(len<0){ //more bits needed
  1788. run= 0;
  1789. level= code;
  1790. }else{
  1791. if(code==rl->n){ //esc
  1792. run= 66;
  1793. level= 0;
  1794. }else{
  1795. run= rl->table_run [code] + 1;
  1796. level= rl->table_level[code] * qmul + qadd;
  1797. if(code >= rl->last) run+=192;
  1798. }
  1799. }
  1800. rl->rl_vlc[q][i].len= len;
  1801. rl->rl_vlc[q][i].level= level;
  1802. rl->rl_vlc[q][i].run= run;
  1803. }
  1804. }
  1805. }
  1806. /* init vlcs */
  1807. /* XXX: find a better solution to handle static init */
  1808. void h263_decode_init_vlc(MpegEncContext *s)
  1809. {
  1810. static int done = 0;
  1811. if (!done) {
  1812. done = 1;
  1813. init_vlc(&intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 8,
  1814. intra_MCBPC_bits, 1, 1,
  1815. intra_MCBPC_code, 1, 1);
  1816. init_vlc(&inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 25,
  1817. inter_MCBPC_bits, 1, 1,
  1818. inter_MCBPC_code, 1, 1);
  1819. init_vlc(&cbpy_vlc, CBPY_VLC_BITS, 16,
  1820. &cbpy_tab[0][1], 2, 1,
  1821. &cbpy_tab[0][0], 2, 1);
  1822. init_vlc(&mv_vlc, MV_VLC_BITS, 33,
  1823. &mvtab[0][1], 2, 1,
  1824. &mvtab[0][0], 2, 1);
  1825. init_rl(&rl_inter);
  1826. init_rl(&rl_intra);
  1827. init_rl(&rl_intra_aic);
  1828. init_vlc_rl(&rl_inter);
  1829. init_vlc_rl(&rl_intra);
  1830. init_vlc_rl(&rl_intra_aic);
  1831. init_vlc(&dc_lum, DC_VLC_BITS, 10 /* 13 */,
  1832. &DCtab_lum[0][1], 2, 1,
  1833. &DCtab_lum[0][0], 2, 1);
  1834. init_vlc(&dc_chrom, DC_VLC_BITS, 10 /* 13 */,
  1835. &DCtab_chrom[0][1], 2, 1,
  1836. &DCtab_chrom[0][0], 2, 1);
  1837. init_vlc(&sprite_trajectory, SPRITE_TRAJ_VLC_BITS, 15,
  1838. &sprite_trajectory_tab[0][1], 4, 2,
  1839. &sprite_trajectory_tab[0][0], 4, 2);
  1840. init_vlc(&mb_type_b_vlc, MB_TYPE_B_VLC_BITS, 4,
  1841. &mb_type_b_tab[0][1], 2, 1,
  1842. &mb_type_b_tab[0][0], 2, 1);
  1843. }
  1844. s->progressive_sequence=1; // set to most likely for the case of incomplete headers
  1845. }
  1846. int h263_decode_gob_header(MpegEncContext *s)
  1847. {
  1848. unsigned int val, gfid;
  1849. /* Check for GOB Start Code */
  1850. val = show_bits(&s->gb, 16);
  1851. if (val == 0) {
  1852. /* We have a GBSC probably with GSTUFF */
  1853. skip_bits(&s->gb, 16); /* Drop the zeros */
  1854. while (get_bits1(&s->gb) == 0); /* Seek the '1' bit */
  1855. #ifdef DEBUG
  1856. fprintf(stderr,"\nGOB Start Code at MB %d\n", (s->mb_y * s->mb_width) + s->mb_x);
  1857. #endif
  1858. s->gob_number = get_bits(&s->gb, 5); /* GN */
  1859. gfid = get_bits(&s->gb, 2); /* GFID */
  1860. s->qscale = get_bits(&s->gb, 5); /* GQUANT */
  1861. #ifdef DEBUG
  1862. fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale);
  1863. #endif
  1864. return 1;
  1865. }
  1866. return 0;
  1867. }
  1868. static inline void memsetw(short *tab, int val, int n)
  1869. {
  1870. int i;
  1871. for(i=0;i<n;i++)
  1872. tab[i] = val;
  1873. }
  1874. void ff_mpeg4_init_partitions(MpegEncContext *s)
  1875. {
  1876. init_put_bits(&s->tex_pb, s->tex_pb_buffer, PB_BUFFER_SIZE, NULL, NULL);
  1877. init_put_bits(&s->pb2 , s->pb2_buffer , PB_BUFFER_SIZE, NULL, NULL);
  1878. }
  1879. void ff_mpeg4_merge_partitions(MpegEncContext *s)
  1880. {
  1881. const int pb2_len = get_bit_count(&s->pb2 );
  1882. const int tex_pb_len= get_bit_count(&s->tex_pb);
  1883. const int bits= get_bit_count(&s->pb);
  1884. if(s->pict_type==I_TYPE){
  1885. put_bits(&s->pb, 19, DC_MARKER);
  1886. s->misc_bits+=19 + pb2_len + bits - s->last_bits;
  1887. s->i_tex_bits+= tex_pb_len;
  1888. }else{
  1889. put_bits(&s->pb, 17, MOTION_MARKER);
  1890. s->misc_bits+=17 + pb2_len;;
  1891. s->mv_bits+= bits - s->last_bits;
  1892. s->p_tex_bits+= tex_pb_len;
  1893. }
  1894. flush_put_bits(&s->pb2);
  1895. flush_put_bits(&s->tex_pb);
  1896. ff_copy_bits(&s->pb, s->pb2_buffer , pb2_len);
  1897. ff_copy_bits(&s->pb, s->tex_pb_buffer, tex_pb_len);
  1898. s->last_bits= get_bit_count(&s->pb);
  1899. }
  1900. void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
  1901. {
  1902. int mb_num_bits= av_log2(s->mb_num - 1) + 1;
  1903. ff_mpeg4_stuffing(&s->pb);
  1904. if(s->pict_type==I_TYPE)
  1905. put_bits(&s->pb, 16, 0);
  1906. else if(s->pict_type==B_TYPE)
  1907. put_bits(&s->pb, MAX(MAX(s->f_code, s->b_code)+15, 17), 0);
  1908. else /* S/P_TYPE */
  1909. put_bits(&s->pb, s->f_code+15, 0);
  1910. put_bits(&s->pb, 1, 1);
  1911. put_bits(&s->pb, mb_num_bits, s->mb_x + s->mb_y*s->mb_width);
  1912. put_bits(&s->pb, 5, s->qscale);
  1913. put_bits(&s->pb, 1, 0); /* no HEC */
  1914. }
  1915. /**
  1916. * decodes the next video packet and sets s->next_qscale
  1917. * returns mb_num of the next packet or <0 if something went wrong
  1918. */
  1919. static int decode_video_packet_header(MpegEncContext *s, GetBitContext *gb)
  1920. {
  1921. int bits;
  1922. int mb_num_bits= av_log2(s->mb_num - 1) + 1;
  1923. int header_extension=0, mb_num;
  1924. //printf("%X\n", show_bits(&gb, 24));
  1925. //printf("parse_video_packet_header\n");
  1926. // if(show_aligned_bits(gb, 1, 16) != 0) return -1;
  1927. /* is there enough space left for a video packet + header */
  1928. if( get_bits_count(gb) > gb->size*8-20) return -1;
  1929. //printf("resync at %d %d\n", s->mb_x, s->mb_y);
  1930. // skip_bits(gb, 1);
  1931. // align_get_bits(gb);
  1932. if(get_bits(gb, 16)!=0){
  1933. printf("internal error while decoding video packet header\n");
  1934. }
  1935. //printf("%X\n", show_bits(gb, 24));
  1936. bits=0;
  1937. while(!get_bits1(gb) && bits<30) bits++;
  1938. if((s->pict_type == P_TYPE || s->pict_type == S_TYPE) && bits != s->f_code-1){
  1939. printf("marker does not match f_code (is: %d should be: %d pos: %d end %d x: %d y: %d)\n",
  1940. bits+1, s->f_code, get_bits_count(gb), gb->size*8, s->mb_x, s->mb_y);
  1941. return -1;
  1942. }else if(s->pict_type == I_TYPE && bits != 0){
  1943. printf("marker too long\n");
  1944. return -1;
  1945. }else if(s->pict_type == B_TYPE && bits != MAX(MAX(s->f_code, s->b_code)-1, 1)){
  1946. printf("marker does not match f/b_code\n");
  1947. return -1;
  1948. }
  1949. //printf("%X\n", show_bits(gb, 24));
  1950. if(s->shape != RECT_SHAPE){
  1951. header_extension= get_bits1(gb);
  1952. //FIXME more stuff here
  1953. }
  1954. mb_num= get_bits(gb, mb_num_bits);
  1955. if(mb_num < s->mb_x + s->mb_y*s->mb_width || mb_num>=s->mb_num){
  1956. fprintf(stderr, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_x + s->mb_y*s->mb_width);
  1957. return -1;
  1958. }
  1959. if(s->shape != BIN_ONLY_SHAPE){
  1960. s->next_resync_qscale= get_bits(gb, 5);
  1961. if(s->next_resync_qscale==0)
  1962. s->next_resync_qscale= s->qscale;
  1963. if(s->next_resync_qscale==0){
  1964. fprintf(stderr, "qscale==0\n");
  1965. return -1;
  1966. }
  1967. }
  1968. if(s->shape == RECT_SHAPE){
  1969. header_extension= get_bits1(gb);
  1970. }
  1971. if(header_extension){
  1972. int time_increment;
  1973. int time_incr=0;
  1974. while (get_bits1(gb) != 0)
  1975. time_incr++;
  1976. check_marker(gb, "before time_increment in video packed header");
  1977. time_increment= get_bits(gb, s->time_increment_bits);
  1978. check_marker(gb, "before vop_coding_type in video packed header");
  1979. skip_bits(gb, 2); /* vop coding type */
  1980. //FIXME not rect stuff here
  1981. if(s->shape != BIN_ONLY_SHAPE){
  1982. skip_bits(gb, 3); /* intra dc vlc threshold */
  1983. if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE && s->num_sprite_warping_points){
  1984. mpeg4_decode_sprite_trajectory(s);
  1985. fprintf(stderr, "untested\n");
  1986. }
  1987. //FIXME reduced res stuff here
  1988. if (s->pict_type != I_TYPE) {
  1989. int f_code = get_bits(gb, 3); /* fcode_for */
  1990. if(f_code==0){
  1991. printf("Error, video packet header damaged (f_code=0)\n");
  1992. }
  1993. }
  1994. if (s->pict_type == B_TYPE) {
  1995. int b_code = get_bits(gb, 3);
  1996. if(b_code==0){
  1997. printf("Error, video packet header damaged (b_code=0)\n");
  1998. }
  1999. }
  2000. }
  2001. }
  2002. //FIXME new-pred stuff
  2003. //printf("parse ok %d %d %d %d\n", mb_num, s->mb_x + s->mb_y*s->mb_width, get_bits_count(gb), get_bits_count(&s->gb));
  2004. return mb_num;
  2005. }
  2006. void ff_mpeg4_clean_buffers(MpegEncContext *s)
  2007. {
  2008. int c_wrap, c_xy, l_wrap, l_xy;
  2009. l_wrap= s->block_wrap[0];
  2010. l_xy= s->mb_y*l_wrap*2 + s->mb_x*2;
  2011. c_wrap= s->block_wrap[4];
  2012. c_xy= s->mb_y*c_wrap + s->mb_x;
  2013. /* clean DC */
  2014. memsetw(s->dc_val[0] + l_xy, 1024, l_wrap*2+1);
  2015. memsetw(s->dc_val[1] + c_xy, 1024, c_wrap+1);
  2016. memsetw(s->dc_val[2] + c_xy, 1024, c_wrap+1);
  2017. /* clean AC */
  2018. memset(s->ac_val[0] + l_xy, 0, (l_wrap*2+1)*16*sizeof(INT16));
  2019. memset(s->ac_val[1] + c_xy, 0, (c_wrap +1)*16*sizeof(INT16));
  2020. memset(s->ac_val[2] + c_xy, 0, (c_wrap +1)*16*sizeof(INT16));
  2021. /* clean MV */
  2022. // we cant clear the MVs as they might be needed by a b frame
  2023. // memset(s->motion_val + l_xy, 0, (l_wrap*2+1)*2*sizeof(INT16));
  2024. // memset(s->motion_val, 0, 2*sizeof(INT16)*(2 + s->mb_width*2)*(2 + s->mb_height*2));
  2025. s->last_mv[0][0][0]=
  2026. s->last_mv[0][0][1]=
  2027. s->last_mv[1][0][0]=
  2028. s->last_mv[1][0][1]= 0;
  2029. }
  2030. /* searches for the next resync marker clears ac,dc,mc, and sets s->next_resync_gb, s->mb_num_left */
  2031. int ff_mpeg4_resync(MpegEncContext *s)
  2032. {
  2033. GetBitContext gb;
  2034. /* search & parse next resync marker */
  2035. gb= s->next_resync_gb;
  2036. align_get_bits(&gb);
  2037. //printf("mpeg4_resync %d next:%d \n", get_bits_count(&gb), get_bits_count(&s->next_resync_gb));
  2038. for(;;) {
  2039. int v= show_bits(&gb, 24);
  2040. if( get_bits_count(&gb) >= gb.size*8-24 || v == 1 /* start-code */){
  2041. s->mb_num_left= s->mb_num - s->mb_x - s->mb_y*s->mb_width;
  2042. //printf("mpeg4_resync end\n");
  2043. s->gb= s->next_resync_gb; //continue at the next resync marker
  2044. return -1;
  2045. }else if(v>>8 == 0){
  2046. int next;
  2047. s->next_resync_pos= get_bits_count(&gb);
  2048. next= decode_video_packet_header(s, &gb);
  2049. if(next >= 0){
  2050. s->mb_num_left= next - s->mb_x - s->mb_y*s->mb_width;
  2051. break;
  2052. }
  2053. align_get_bits(&gb);
  2054. }
  2055. skip_bits(&gb, 8);
  2056. }
  2057. s->next_resync_gb=gb;
  2058. return 0;
  2059. }
  2060. static inline void init_block_index(MpegEncContext *s)
  2061. {
  2062. s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1 + s->mb_x*2;
  2063. s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1) + s->mb_x*2;
  2064. s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1 + s->mb_x*2;
  2065. s->block_index[3]= s->block_wrap[0]*(s->mb_y*2 + 2) + s->mb_x*2;
  2066. s->block_index[4]= s->block_wrap[4]*(s->mb_y + 1) + s->block_wrap[0]*(s->mb_height*2 + 2) + s->mb_x;
  2067. s->block_index[5]= s->block_wrap[4]*(s->mb_y + 1 + s->mb_height + 2) + s->block_wrap[0]*(s->mb_height*2 + 2) + s->mb_x;
  2068. }
  2069. static inline void update_block_index(MpegEncContext *s)
  2070. {
  2071. s->block_index[0]+=2;
  2072. s->block_index[1]+=2;
  2073. s->block_index[2]+=2;
  2074. s->block_index[3]+=2;
  2075. s->block_index[4]++;
  2076. s->block_index[5]++;
  2077. }
  2078. /**
  2079. * decodes the first & second partition
  2080. * returns error type or 0 if no error
  2081. */
  2082. int ff_mpeg4_decode_partitions(MpegEncContext *s)
  2083. {
  2084. static const INT8 quant_tab[4] = { -1, -2, 1, 2 };
  2085. int mb_num;
  2086. /* decode first partition */
  2087. mb_num=0;
  2088. s->first_slice_line=1;
  2089. s->mb_x= s->resync_mb_x;
  2090. for(s->mb_y= s->resync_mb_y; mb_num < s->mb_num_left; s->mb_y++){
  2091. init_block_index(s);
  2092. for(; mb_num < s->mb_num_left && s->mb_x<s->mb_width; s->mb_x++){
  2093. const int xy= s->mb_x + s->mb_y*s->mb_width;
  2094. int cbpc;
  2095. int dir=0;
  2096. mb_num++;
  2097. update_block_index(s);
  2098. if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1)
  2099. s->first_slice_line=0;
  2100. if(s->mb_x==0) PRINT_MB_TYPE("\n");
  2101. if(s->pict_type==I_TYPE){
  2102. int i;
  2103. PRINT_MB_TYPE("I");
  2104. cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 1);
  2105. if (cbpc < 0){
  2106. fprintf(stderr, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y);
  2107. return DECODING_DESYNC;
  2108. }
  2109. s->cbp_table[xy]= cbpc & 3;
  2110. s->mb_type[xy]= MB_TYPE_INTRA;
  2111. s->mb_intra = 1;
  2112. if(cbpc & 4) {
  2113. change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
  2114. }
  2115. s->qscale_table[xy]= s->qscale;
  2116. s->mbintra_table[xy]= 1;
  2117. for(i=0; i<6; i++){
  2118. int dc_pred_dir;
  2119. int dc= mpeg4_decode_dc(s, i, &dc_pred_dir);
  2120. if(dc < 0){
  2121. fprintf(stderr, "DC corrupted at %d %d\n", s->mb_x, s->mb_y);
  2122. return DECODING_DESYNC;
  2123. }
  2124. dir<<=1;
  2125. if(dc_pred_dir) dir|=1;
  2126. }
  2127. s->pred_dir_table[xy]= dir;
  2128. }else{ /* P/S_TYPE */
  2129. int mx, my, pred_x, pred_y;
  2130. INT16 * const mot_val= s->motion_val[s->block_index[0]];
  2131. const int stride= s->block_wrap[0]*2;
  2132. if(get_bits1(&s->gb)){
  2133. /* skip mb */
  2134. s->mb_type[xy]= MB_TYPE_SKIPED;
  2135. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  2136. const int a= s->sprite_warping_accuracy;
  2137. PRINT_MB_TYPE("G");
  2138. if(s->divx_version==500 && s->divx_build==413){
  2139. mx = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
  2140. my = s->sprite_offset[0][1] / (1<<(a-s->quarter_sample));
  2141. }else{
  2142. mx = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
  2143. my = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
  2144. s->mb_type[xy]= MB_TYPE_GMC | MB_TYPE_SKIPED;
  2145. }
  2146. }else{
  2147. PRINT_MB_TYPE("S");
  2148. mx = 0;
  2149. my = 0;
  2150. }
  2151. mot_val[0 ]= mot_val[2 ]=
  2152. mot_val[0+stride]= mot_val[2+stride]= mx;
  2153. mot_val[1 ]= mot_val[3 ]=
  2154. mot_val[1+stride]= mot_val[3+stride]= my;
  2155. if(s->mbintra_table[xy])
  2156. ff_clean_intra_table_entries(s);
  2157. continue;
  2158. }
  2159. cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  2160. if (cbpc < 0){
  2161. fprintf(stderr, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y);
  2162. return DECODING_DESYNC;
  2163. }
  2164. if (cbpc > 20)
  2165. cbpc+=3;
  2166. else if (cbpc == 20)
  2167. fprintf(stderr, "Stuffing !");
  2168. s->cbp_table[xy]= cbpc&(8+3); //8 is dquant
  2169. s->mb_intra = ((cbpc & 4) != 0);
  2170. if(s->mb_intra){
  2171. PRINT_MB_TYPE("I");
  2172. s->mbintra_table[xy]= 1;
  2173. s->mb_type[xy]= MB_TYPE_INTRA;
  2174. mot_val[0 ]= mot_val[2 ]=
  2175. mot_val[0+stride]= mot_val[2+stride]= 0;
  2176. mot_val[1 ]= mot_val[3 ]=
  2177. mot_val[1+stride]= mot_val[3+stride]= 0;
  2178. }else{
  2179. if(s->mbintra_table[xy])
  2180. ff_clean_intra_table_entries(s);
  2181. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
  2182. s->mcsel= get_bits1(&s->gb);
  2183. else s->mcsel= 0;
  2184. if ((cbpc & 16) == 0) {
  2185. PRINT_MB_TYPE("P");
  2186. /* 16x16 motion prediction */
  2187. s->mb_type[xy]= MB_TYPE_INTER;
  2188. h263_pred_motion(s, 0, &pred_x, &pred_y);
  2189. if(!s->mcsel)
  2190. mx = h263_decode_motion(s, pred_x, s->f_code);
  2191. else {
  2192. const int a= s->sprite_warping_accuracy;
  2193. if(s->divx_version==500 && s->divx_build==413){
  2194. mx = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
  2195. }else{
  2196. mx = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
  2197. }
  2198. }
  2199. if (mx >= 0xffff)
  2200. return DECODING_DESYNC;
  2201. if(!s->mcsel)
  2202. my = h263_decode_motion(s, pred_y, s->f_code);
  2203. else{
  2204. const int a= s->sprite_warping_accuracy;
  2205. if(s->divx_version==500 && s->divx_build==413){
  2206. my = s->sprite_offset[0][1] / (1<<(a-s->quarter_sample));
  2207. }else{
  2208. my = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
  2209. }
  2210. }
  2211. if (my >= 0xffff)
  2212. return DECODING_DESYNC;
  2213. mot_val[0 ]= mot_val[2 ] =
  2214. mot_val[0+stride]= mot_val[2+stride]= mx;
  2215. mot_val[1 ]= mot_val[3 ]=
  2216. mot_val[1+stride]= mot_val[3+stride]= my;
  2217. } else {
  2218. int i;
  2219. PRINT_MB_TYPE("4");
  2220. s->mb_type[xy]= MB_TYPE_INTER4V;
  2221. for(i=0;i<4;i++) {
  2222. INT16 *mot_val= h263_pred_motion(s, i, &pred_x, &pred_y);
  2223. mx = h263_decode_motion(s, pred_x, s->f_code);
  2224. if (mx >= 0xffff)
  2225. return DECODING_DESYNC;
  2226. my = h263_decode_motion(s, pred_y, s->f_code);
  2227. if (my >= 0xffff)
  2228. return DECODING_DESYNC;
  2229. mot_val[0] = mx;
  2230. mot_val[1] = my;
  2231. }
  2232. }
  2233. }
  2234. }
  2235. }
  2236. s->mb_x= 0;
  2237. }
  2238. if (s->pict_type==I_TYPE && get_bits(&s->gb, 19)!=DC_MARKER ) s->decoding_error= DECODING_DESYNC;
  2239. else if(s->pict_type!=I_TYPE && get_bits(&s->gb, 17)!=MOTION_MARKER) s->decoding_error= DECODING_DESYNC;
  2240. if(s->decoding_error== DECODING_DESYNC){
  2241. fprintf(stderr, "marker missing after first partition at %d %d\n", s->mb_x, s->mb_y);
  2242. return DECODING_DESYNC;
  2243. }
  2244. /* decode second partition */
  2245. mb_num=0;
  2246. s->mb_x= s->resync_mb_x;
  2247. for(s->mb_y= s->resync_mb_y; mb_num < s->mb_num_left; s->mb_y++){
  2248. init_block_index(s);
  2249. for(; mb_num < s->mb_num_left && s->mb_x<s->mb_width; s->mb_x++){
  2250. const int xy= s->mb_x + s->mb_y*s->mb_width;
  2251. mb_num++;
  2252. update_block_index(s);
  2253. if(s->pict_type==I_TYPE){
  2254. int ac_pred= get_bits1(&s->gb);
  2255. int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  2256. if(cbpy<0){
  2257. fprintf(stderr, "cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
  2258. return DECODING_AC_LOST;
  2259. }
  2260. s->cbp_table[xy]|= cbpy<<2;
  2261. s->pred_dir_table[xy]|= ac_pred<<7;
  2262. }else{ /* P || S_TYPE */
  2263. if(s->mb_type[xy]&MB_TYPE_INTRA){
  2264. int dir=0,i;
  2265. int ac_pred = get_bits1(&s->gb);
  2266. int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  2267. if(cbpy<0){
  2268. fprintf(stderr, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
  2269. return DECODING_ACDC_LOST;
  2270. }
  2271. if(s->cbp_table[xy] & 8) {
  2272. change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
  2273. }
  2274. s->qscale_table[xy]= s->qscale;
  2275. for(i=0; i<6; i++){
  2276. int dc_pred_dir;
  2277. int dc= mpeg4_decode_dc(s, i, &dc_pred_dir);
  2278. if(dc < 0){
  2279. fprintf(stderr, "DC corrupted at %d %d\n", s->mb_x, s->mb_y);
  2280. return DECODING_ACDC_LOST;
  2281. }
  2282. dir<<=1;
  2283. if(dc_pred_dir) dir|=1;
  2284. }
  2285. s->cbp_table[xy]&= 3; //remove dquant
  2286. s->cbp_table[xy]|= cbpy<<2;
  2287. s->pred_dir_table[xy]= dir | (ac_pred<<7);
  2288. }else if(s->mb_type[xy]&MB_TYPE_SKIPED){
  2289. s->qscale_table[xy]= s->qscale;
  2290. s->cbp_table[xy]= 0;
  2291. }else{
  2292. int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  2293. if(cbpy<0){
  2294. fprintf(stderr, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
  2295. return DECODING_ACDC_LOST;
  2296. }
  2297. if(s->cbp_table[xy] & 8) {
  2298. change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
  2299. }
  2300. s->qscale_table[xy]= s->qscale;
  2301. s->cbp_table[xy]&= 3; //remove dquant
  2302. s->cbp_table[xy]|= (cbpy^0xf)<<2;
  2303. }
  2304. }
  2305. }
  2306. s->mb_x= 0;
  2307. }
  2308. return 0;
  2309. }
  2310. static int mpeg4_decode_partitioned_mb(MpegEncContext *s,
  2311. DCTELEM block[6][64])
  2312. {
  2313. int cbp, mb_type;
  2314. const int xy= s->mb_x + s->mb_y*s->mb_width;
  2315. if(s->mb_x==s->resync_mb_x && s->mb_y==s->resync_mb_y){ //Note resync_mb_{x,y}==0 at the start
  2316. int i;
  2317. int block_index_backup[6];
  2318. int qscale= s->qscale;
  2319. for(i=0; i<6; i++) block_index_backup[i]= s->block_index[i];
  2320. s->decoding_error= ff_mpeg4_decode_partitions(s);
  2321. for(i=0; i<6; i++) s->block_index[i]= block_index_backup[i];
  2322. s->first_slice_line=1;
  2323. s->mb_x= s->resync_mb_x;
  2324. s->mb_y= s->resync_mb_y;
  2325. s->qscale= qscale;
  2326. s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
  2327. s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
  2328. if(s->decoding_error==DECODING_DESYNC) return -1;
  2329. }
  2330. mb_type= s->mb_type[xy];
  2331. if(s->decoding_error)
  2332. cbp=0;
  2333. else
  2334. cbp = s->cbp_table[xy];
  2335. if(s->decoding_error!=DECODING_ACDC_LOST && s->qscale_table[xy] != s->qscale){
  2336. s->qscale= s->qscale_table[xy];
  2337. s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
  2338. s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
  2339. }
  2340. if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
  2341. int i;
  2342. for(i=0; i<4; i++){
  2343. s->mv[0][i][0] = s->motion_val[ s->block_index[i] ][0];
  2344. s->mv[0][i][1] = s->motion_val[ s->block_index[i] ][1];
  2345. }
  2346. s->mb_intra = mb_type&MB_TYPE_INTRA;
  2347. if (mb_type&MB_TYPE_SKIPED) {
  2348. /* skip mb */
  2349. for(i=0;i<6;i++)
  2350. s->block_last_index[i] = -1;
  2351. s->mv_dir = MV_DIR_FORWARD;
  2352. s->mv_type = MV_TYPE_16X16;
  2353. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  2354. s->mcsel=1;
  2355. s->mb_skiped = 0;
  2356. }else{
  2357. s->mcsel=0;
  2358. s->mb_skiped = 1;
  2359. }
  2360. return 0;
  2361. }else if(s->mb_intra && s->decoding_error!=DECODING_ACDC_LOST){
  2362. s->ac_pred = s->pred_dir_table[xy]>>7;
  2363. /* decode each block */
  2364. for (i = 0; i < 6; i++) {
  2365. int ret= mpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, 1);
  2366. if(ret==DECODING_AC_LOST){
  2367. fprintf(stderr, "texture corrupted at %d %d (trying to continue with mc/dc only)\n", s->mb_x, s->mb_y);
  2368. s->decoding_error=DECODING_AC_LOST;
  2369. cbp=0;
  2370. }else if(ret==DECODING_ACDC_LOST){
  2371. fprintf(stderr, "dc corrupted at %d %d (trying to continue with mc only)\n", s->mb_x, s->mb_y);
  2372. s->decoding_error=DECODING_ACDC_LOST;
  2373. break;
  2374. }
  2375. }
  2376. }else if(!s->mb_intra){
  2377. // s->mcsel= 0; //FIXME do we need to init that
  2378. s->mv_dir = MV_DIR_FORWARD;
  2379. if (mb_type&MB_TYPE_INTER4V) {
  2380. s->mv_type = MV_TYPE_8X8;
  2381. } else {
  2382. s->mv_type = MV_TYPE_16X16;
  2383. }
  2384. if(s->decoding_error==0 && cbp){
  2385. /* decode each block */
  2386. for (i = 0; i < 6; i++) {
  2387. int ret= mpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, 0);
  2388. if(ret==DECODING_AC_LOST){
  2389. fprintf(stderr, "texture corrupted at %d %d (trying to continue with mc/dc only)\n", s->mb_x, s->mb_y);
  2390. s->decoding_error=DECODING_AC_LOST;
  2391. break;
  2392. }
  2393. }
  2394. }
  2395. }
  2396. } else { /* I-Frame */
  2397. int i;
  2398. s->mb_intra = 1;
  2399. s->ac_pred = s->pred_dir_table[xy]>>7;
  2400. /* decode each block */
  2401. for (i = 0; i < 6; i++) {
  2402. int ret= mpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, 1);
  2403. if(ret==DECODING_AC_LOST){
  2404. fprintf(stderr, "texture corrupted at %d %d (trying to continue with dc only)\n", s->mb_x, s->mb_y);
  2405. s->decoding_error=DECODING_AC_LOST;
  2406. cbp=0;
  2407. }else if(ret==DECODING_ACDC_LOST){
  2408. fprintf(stderr, "dc corrupted at %d %d\n", s->mb_x, s->mb_y);
  2409. return -1;
  2410. }
  2411. }
  2412. }
  2413. return 0;
  2414. }
  2415. #if 0
  2416. static inline void decode_interlaced_info(MpegEncContext *s, int cbp, int mb_type){
  2417. s->mv_type= 0;
  2418. if(!s->progressive_sequence){
  2419. if(cbp || s->mb_intra)
  2420. s->interlaced_dct= get_bits1(&s->gb);
  2421. if(!s->mb_intra){
  2422. if( s->pict_type==P_TYPE //FIXME check that 4MV is forbidden
  2423. || (s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && !s->mcsel)
  2424. || (s->pict_type==B_TYPE && mb_type!=0) ){
  2425. if(get_bits1(&s->gb)){
  2426. s->mv_type= MV_TYPE_FIELD;
  2427. if( s->pict_type==P_TYPE
  2428. || (s->pict_type==B_TYPE && mb_type!=2)){
  2429. s->field_select[0][0]= get_bits1(&s->gb);
  2430. s->field_select[0][1]= get_bits1(&s->gb);
  2431. }
  2432. if(s->pict_type==B_TYPE && mb_type!=3){
  2433. s->field_select[1][0]= get_bits1(&s->gb);
  2434. s->field_select[1][1]= get_bits1(&s->gb);
  2435. }
  2436. }else
  2437. s->mv_type= 0;
  2438. }
  2439. }
  2440. }
  2441. }
  2442. #endif
  2443. int h263_decode_mb(MpegEncContext *s,
  2444. DCTELEM block[6][64])
  2445. {
  2446. int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
  2447. INT16 *mot_val;
  2448. static INT8 quant_tab[4] = { -1, -2, 1, 2 };
  2449. if(s->mb_x==0) PRINT_MB_TYPE("\n");
  2450. if(s->resync_marker){
  2451. if(s->resync_mb_x == s->mb_x && s->resync_mb_y+1 == s->mb_y){
  2452. s->first_slice_line=0;
  2453. }
  2454. }
  2455. if(s->data_partitioning && s->pict_type!=B_TYPE)
  2456. return mpeg4_decode_partitioned_mb(s, block);
  2457. if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
  2458. if (get_bits1(&s->gb)) {
  2459. /* skip mb */
  2460. s->mb_intra = 0;
  2461. for(i=0;i<6;i++)
  2462. s->block_last_index[i] = -1;
  2463. s->mv_dir = MV_DIR_FORWARD;
  2464. s->mv_type = MV_TYPE_16X16;
  2465. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  2466. const int a= s->sprite_warping_accuracy;
  2467. // int l = (1 << (s->f_code - 1)) * 32;
  2468. PRINT_MB_TYPE("G");
  2469. s->mcsel=1;
  2470. if(s->divx_version==500 && s->divx_build==413){
  2471. s->mv[0][0][0] = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
  2472. s->mv[0][0][1] = s->sprite_offset[0][1] / (1<<(a-s->quarter_sample));
  2473. }else{
  2474. s->mv[0][0][0] = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
  2475. s->mv[0][0][1] = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
  2476. }
  2477. /* if (s->mv[0][0][0] < -l) s->mv[0][0][0]= -l;
  2478. else if (s->mv[0][0][0] >= l) s->mv[0][0][0]= l-1;
  2479. if (s->mv[0][0][1] < -l) s->mv[0][0][1]= -l;
  2480. else if (s->mv[0][0][1] >= l) s->mv[0][0][1]= l-1;*/
  2481. s->mb_skiped = 0;
  2482. }else{
  2483. PRINT_MB_TYPE("S");
  2484. s->mcsel=0;
  2485. s->mv[0][0][0] = 0;
  2486. s->mv[0][0][1] = 0;
  2487. s->mb_skiped = 1;
  2488. }
  2489. return 0;
  2490. }
  2491. cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  2492. //fprintf(stderr, "\tCBPC: %d", cbpc);
  2493. if (cbpc < 0)
  2494. return -1;
  2495. if (cbpc > 20)
  2496. cbpc+=3;
  2497. else if (cbpc == 20)
  2498. fprintf(stderr, "Stuffing !");
  2499. dquant = cbpc & 8;
  2500. s->mb_intra = ((cbpc & 4) != 0);
  2501. if (s->mb_intra) goto intra;
  2502. if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
  2503. s->mcsel= get_bits1(&s->gb);
  2504. else s->mcsel= 0;
  2505. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  2506. cbp = (cbpc & 3) | ((cbpy ^ 0xf) << 2);
  2507. if (dquant) {
  2508. change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
  2509. }
  2510. if((!s->progressive_sequence) && (cbp || s->workaround_bugs==2))
  2511. s->interlaced_dct= get_bits1(&s->gb);
  2512. s->mv_dir = MV_DIR_FORWARD;
  2513. if ((cbpc & 16) == 0) {
  2514. if(s->mcsel){
  2515. const int a= s->sprite_warping_accuracy;
  2516. PRINT_MB_TYPE("G");
  2517. /* 16x16 global motion prediction */
  2518. s->mv_type = MV_TYPE_16X16;
  2519. // int l = (1 << (s->f_code - 1)) * 32;
  2520. if(s->divx_version==500 && s->divx_build==413){
  2521. mx = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
  2522. my = s->sprite_offset[0][1] / (1<<(a-s->quarter_sample));
  2523. }else{
  2524. mx = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
  2525. my = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
  2526. }
  2527. // int l = (1 << (s->f_code - 1)) * 32;
  2528. s->mv[0][0][0] = mx;
  2529. s->mv[0][0][1] = my;
  2530. }else if((!s->progressive_sequence) && get_bits1(&s->gb)){
  2531. PRINT_MB_TYPE("f");
  2532. /* 16x8 field motion prediction */
  2533. s->mv_type= MV_TYPE_FIELD;
  2534. s->field_select[0][0]= get_bits1(&s->gb);
  2535. s->field_select[0][1]= get_bits1(&s->gb);
  2536. h263_pred_motion(s, 0, &pred_x, &pred_y);
  2537. for(i=0; i<2; i++){
  2538. mx = h263_decode_motion(s, pred_x, s->f_code);
  2539. if (mx >= 0xffff)
  2540. return -1;
  2541. my = h263_decode_motion(s, pred_y/2, s->f_code);
  2542. if (my >= 0xffff)
  2543. return -1;
  2544. s->mv[0][i][0] = mx;
  2545. s->mv[0][i][1] = my;
  2546. }
  2547. }else{
  2548. PRINT_MB_TYPE("P");
  2549. /* 16x16 motion prediction */
  2550. s->mv_type = MV_TYPE_16X16;
  2551. h263_pred_motion(s, 0, &pred_x, &pred_y);
  2552. if (s->umvplus_dec)
  2553. mx = h263p_decode_umotion(s, pred_x);
  2554. else
  2555. mx = h263_decode_motion(s, pred_x, s->f_code);
  2556. if (mx >= 0xffff)
  2557. return -1;
  2558. if (s->umvplus_dec)
  2559. my = h263p_decode_umotion(s, pred_y);
  2560. else
  2561. my = h263_decode_motion(s, pred_y, s->f_code);
  2562. if (my >= 0xffff)
  2563. return -1;
  2564. s->mv[0][0][0] = mx;
  2565. s->mv[0][0][1] = my;
  2566. if (s->umvplus_dec && (mx - pred_x) == 1 && (my - pred_y) == 1)
  2567. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  2568. }
  2569. } else {
  2570. PRINT_MB_TYPE("4");
  2571. s->mv_type = MV_TYPE_8X8;
  2572. for(i=0;i<4;i++) {
  2573. mot_val = h263_pred_motion(s, i, &pred_x, &pred_y);
  2574. if (s->umvplus_dec)
  2575. mx = h263p_decode_umotion(s, pred_x);
  2576. else
  2577. mx = h263_decode_motion(s, pred_x, s->f_code);
  2578. if (mx >= 0xffff)
  2579. return -1;
  2580. if (s->umvplus_dec)
  2581. my = h263p_decode_umotion(s, pred_y);
  2582. else
  2583. my = h263_decode_motion(s, pred_y, s->f_code);
  2584. if (my >= 0xffff)
  2585. return -1;
  2586. s->mv[0][i][0] = mx;
  2587. s->mv[0][i][1] = my;
  2588. if (s->umvplus_dec && (mx - pred_x) == 1 && (my - pred_y) == 1)
  2589. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  2590. mot_val[0] = mx;
  2591. mot_val[1] = my;
  2592. }
  2593. }
  2594. } else if(s->pict_type==B_TYPE) {
  2595. int modb1; // first bit of modb
  2596. int modb2; // second bit of modb
  2597. int mb_type;
  2598. uint16_t time_pp;
  2599. uint16_t time_pb;
  2600. int xy;
  2601. s->mb_intra = 0; //B-frames never contain intra blocks
  2602. s->mcsel=0; // ... true gmc blocks
  2603. if(s->mb_x==0){
  2604. for(i=0; i<2; i++){
  2605. s->last_mv[i][0][0]=
  2606. s->last_mv[i][0][1]=
  2607. s->last_mv[i][1][0]=
  2608. s->last_mv[i][1][1]= 0;
  2609. }
  2610. }
  2611. /* if we skipped it in the future P Frame than skip it now too */
  2612. s->mb_skiped= s->mbskip_table[s->mb_y * s->mb_width + s->mb_x]; // Note, skiptab=0 if last was GMC
  2613. if(s->mb_skiped){
  2614. /* skip mb */
  2615. for(i=0;i<6;i++)
  2616. s->block_last_index[i] = -1;
  2617. s->mv_dir = MV_DIR_FORWARD;
  2618. s->mv_type = MV_TYPE_16X16;
  2619. s->mv[0][0][0] = 0;
  2620. s->mv[0][0][1] = 0;
  2621. s->mv[1][0][0] = 0;
  2622. s->mv[1][0][1] = 0;
  2623. PRINT_MB_TYPE("s");
  2624. return 0;
  2625. }
  2626. modb1= get_bits1(&s->gb);
  2627. if(modb1){
  2628. mb_type=4; //like MB_TYPE_B_DIRECT but no vectors coded
  2629. cbp=0;
  2630. }else{
  2631. int field_mv;
  2632. modb2= get_bits1(&s->gb);
  2633. mb_type= get_vlc2(&s->gb, mb_type_b_vlc.table, MB_TYPE_B_VLC_BITS, 1);
  2634. if(modb2) cbp= 0;
  2635. else cbp= get_bits(&s->gb, 6);
  2636. if (mb_type!=MB_TYPE_B_DIRECT && cbp) {
  2637. if(get_bits1(&s->gb)){
  2638. change_qscale(s, get_bits1(&s->gb)*4 - 2);
  2639. }
  2640. }
  2641. field_mv=0;
  2642. if(!s->progressive_sequence){
  2643. if(cbp)
  2644. s->interlaced_dct= get_bits1(&s->gb);
  2645. if(mb_type!=MB_TYPE_B_DIRECT && get_bits1(&s->gb)){
  2646. field_mv=1;
  2647. if(mb_type!=MB_TYPE_B_BACKW){
  2648. s->field_select[0][0]= get_bits1(&s->gb);
  2649. s->field_select[0][1]= get_bits1(&s->gb);
  2650. }
  2651. if(mb_type!=MB_TYPE_B_FORW){
  2652. s->field_select[1][0]= get_bits1(&s->gb);
  2653. s->field_select[1][1]= get_bits1(&s->gb);
  2654. }
  2655. }
  2656. }
  2657. s->mv_dir = 0;
  2658. if(mb_type!=MB_TYPE_B_DIRECT && !field_mv){
  2659. s->mv_type= MV_TYPE_16X16;
  2660. if(mb_type!=MB_TYPE_B_BACKW){
  2661. s->mv_dir = MV_DIR_FORWARD;
  2662. mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code);
  2663. my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
  2664. s->last_mv[0][1][0]= s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
  2665. s->last_mv[0][1][1]= s->last_mv[0][0][1]= s->mv[0][0][1] = my;
  2666. }
  2667. if(mb_type!=MB_TYPE_B_FORW){
  2668. s->mv_dir |= MV_DIR_BACKWARD;
  2669. mx = h263_decode_motion(s, s->last_mv[1][0][0], s->b_code);
  2670. my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
  2671. s->last_mv[1][1][0]= s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
  2672. s->last_mv[1][1][1]= s->last_mv[1][0][1]= s->mv[1][0][1] = my;
  2673. }
  2674. if(mb_type!=MB_TYPE_B_DIRECT)
  2675. PRINT_MB_TYPE(mb_type==MB_TYPE_B_FORW ? "F" : (mb_type==MB_TYPE_B_BACKW ? "B" : "T"));
  2676. }else if(mb_type!=MB_TYPE_B_DIRECT){
  2677. s->mv_type= MV_TYPE_FIELD;
  2678. if(mb_type!=MB_TYPE_B_BACKW){
  2679. s->mv_dir = MV_DIR_FORWARD;
  2680. for(i=0; i<2; i++){
  2681. mx = h263_decode_motion(s, s->last_mv[0][i][0] , s->f_code);
  2682. my = h263_decode_motion(s, s->last_mv[0][i][1]/2, s->f_code);
  2683. s->last_mv[0][i][0]= s->mv[0][i][0] = mx;
  2684. s->last_mv[0][i][1]= (s->mv[0][i][1] = my)*2;
  2685. }
  2686. }
  2687. if(mb_type!=MB_TYPE_B_FORW){
  2688. s->mv_dir |= MV_DIR_BACKWARD;
  2689. for(i=0; i<2; i++){
  2690. mx = h263_decode_motion(s, s->last_mv[1][i][0] , s->b_code);
  2691. my = h263_decode_motion(s, s->last_mv[1][i][1]/2, s->b_code);
  2692. s->last_mv[1][i][0]= s->mv[1][i][0] = mx;
  2693. s->last_mv[1][i][1]= (s->mv[1][i][1] = my)*2;
  2694. }
  2695. }
  2696. if(mb_type!=MB_TYPE_B_DIRECT)
  2697. PRINT_MB_TYPE(mb_type==MB_TYPE_B_FORW ? "f" : (mb_type==MB_TYPE_B_BACKW ? "b" : "t"));
  2698. }
  2699. }
  2700. if(mb_type==4 || mb_type==MB_TYPE_B_DIRECT){
  2701. int mb_index= s->mb_x + s->mb_y*s->mb_width;
  2702. int i;
  2703. if(mb_type==4)
  2704. mx=my=0;
  2705. else{
  2706. mx = h263_decode_motion(s, 0, 1);
  2707. my = h263_decode_motion(s, 0, 1);
  2708. }
  2709. s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
  2710. xy= s->block_index[0];
  2711. time_pp= s->pp_time;
  2712. time_pb= s->pb_time;
  2713. //FIXME avoid divides
  2714. switch(s->co_located_type_table[mb_index]){
  2715. case 0:
  2716. s->mv_type= MV_TYPE_16X16;
  2717. s->mv[0][0][0] = s->motion_val[xy][0]*time_pb/time_pp + mx;
  2718. s->mv[0][0][1] = s->motion_val[xy][1]*time_pb/time_pp + my;
  2719. s->mv[1][0][0] = mx ? s->mv[0][0][0] - s->motion_val[xy][0]
  2720. : s->motion_val[xy][0]*(time_pb - time_pp)/time_pp;
  2721. s->mv[1][0][1] = my ? s->mv[0][0][1] - s->motion_val[xy][1]
  2722. : s->motion_val[xy][1]*(time_pb - time_pp)/time_pp;
  2723. PRINT_MB_TYPE(mb_type==4 ? "D" : "S");
  2724. break;
  2725. case CO_LOCATED_TYPE_4MV:
  2726. s->mv_type = MV_TYPE_8X8;
  2727. for(i=0; i<4; i++){
  2728. xy= s->block_index[i];
  2729. s->mv[0][i][0] = s->motion_val[xy][0]*time_pb/time_pp + mx;
  2730. s->mv[0][i][1] = s->motion_val[xy][1]*time_pb/time_pp + my;
  2731. s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->motion_val[xy][0]
  2732. : s->motion_val[xy][0]*(time_pb - time_pp)/time_pp;
  2733. s->mv[1][i][1] = my ? s->mv[0][i][1] - s->motion_val[xy][1]
  2734. : s->motion_val[xy][1]*(time_pb - time_pp)/time_pp;
  2735. }
  2736. PRINT_MB_TYPE("4");
  2737. break;
  2738. case CO_LOCATED_TYPE_FIELDMV:
  2739. s->mv_type = MV_TYPE_FIELD;
  2740. for(i=0; i<2; i++){
  2741. if(s->top_field_first){
  2742. time_pp= s->pp_field_time - s->field_select_table[mb_index][i] + i;
  2743. time_pb= s->pb_field_time - s->field_select_table[mb_index][i] + i;
  2744. }else{
  2745. time_pp= s->pp_field_time + s->field_select_table[mb_index][i] - i;
  2746. time_pb= s->pb_field_time + s->field_select_table[mb_index][i] - i;
  2747. }
  2748. s->mv[0][i][0] = s->field_mv_table[mb_index][i][0]*time_pb/time_pp + mx;
  2749. s->mv[0][i][1] = s->field_mv_table[mb_index][i][1]*time_pb/time_pp + my;
  2750. s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->field_mv_table[mb_index][i][0]
  2751. : s->field_mv_table[mb_index][i][0]*(time_pb - time_pp)/time_pp;
  2752. s->mv[1][i][1] = my ? s->mv[0][i][1] - s->field_mv_table[mb_index][i][1]
  2753. : s->field_mv_table[mb_index][i][1]*(time_pb - time_pp)/time_pp;
  2754. }
  2755. PRINT_MB_TYPE("=");
  2756. break;
  2757. }
  2758. }
  2759. if(mb_type<0 || mb_type>4){
  2760. printf("illegal MB_type\n");
  2761. return -1;
  2762. }
  2763. } else { /* I-Frame */
  2764. cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 1);
  2765. if (cbpc < 0)
  2766. return -1;
  2767. dquant = cbpc & 4;
  2768. s->mb_intra = 1;
  2769. intra:
  2770. s->ac_pred = 0;
  2771. if (s->h263_pred || s->h263_aic) {
  2772. s->ac_pred = get_bits1(&s->gb);
  2773. if (s->ac_pred && s->h263_aic)
  2774. s->h263_aic_dir = get_bits1(&s->gb);
  2775. }
  2776. PRINT_MB_TYPE(s->ac_pred ? "A" : "I");
  2777. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  2778. if(cbpy<0) return -1;
  2779. cbp = (cbpc & 3) | (cbpy << 2);
  2780. if (dquant) {
  2781. change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
  2782. }
  2783. if(!s->progressive_sequence)
  2784. s->interlaced_dct= get_bits1(&s->gb);
  2785. /* decode each block */
  2786. if (s->h263_pred) {
  2787. for (i = 0; i < 6; i++) {
  2788. if (mpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, 1) < 0)
  2789. return -1;
  2790. }
  2791. } else {
  2792. for (i = 0; i < 6; i++) {
  2793. if (h263_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1) < 0)
  2794. return -1;
  2795. }
  2796. }
  2797. return 0;
  2798. }
  2799. /* decode each block */
  2800. if (s->h263_pred) {
  2801. for (i = 0; i < 6; i++) {
  2802. if (mpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, 0) < 0)
  2803. return -1;
  2804. }
  2805. } else {
  2806. for (i = 0; i < 6; i++) {
  2807. if (h263_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1) < 0)
  2808. return -1;
  2809. }
  2810. }
  2811. return 0;
  2812. }
  2813. static int h263_decode_motion(MpegEncContext * s, int pred, int f_code)
  2814. {
  2815. int code, val, sign, shift, l;
  2816. code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
  2817. if (code < 0)
  2818. return 0xffff;
  2819. if (code == 0)
  2820. return pred;
  2821. sign = get_bits1(&s->gb);
  2822. shift = f_code - 1;
  2823. val = (code - 1) << shift;
  2824. if (shift > 0)
  2825. val |= get_bits(&s->gb, shift);
  2826. val++;
  2827. if (sign)
  2828. val = -val;
  2829. val += pred;
  2830. /* modulo decoding */
  2831. if (!s->h263_long_vectors) {
  2832. l = 1 << (f_code + 4);
  2833. if (val < -l) {
  2834. val += l<<1;
  2835. } else if (val >= l) {
  2836. val -= l<<1;
  2837. }
  2838. } else {
  2839. /* horrible h263 long vector mode */
  2840. if (pred < -31 && val < -63)
  2841. val += 64;
  2842. if (pred > 32 && val > 63)
  2843. val -= 64;
  2844. }
  2845. return val;
  2846. }
  2847. /* Decodes RVLC of H.263+ UMV */
  2848. static int h263p_decode_umotion(MpegEncContext * s, int pred)
  2849. {
  2850. int code = 0, sign;
  2851. if (get_bits1(&s->gb)) /* Motion difference = 0 */
  2852. return pred;
  2853. code = 2 + get_bits1(&s->gb);
  2854. while (get_bits1(&s->gb))
  2855. {
  2856. code <<= 1;
  2857. code += get_bits1(&s->gb);
  2858. }
  2859. sign = code & 1;
  2860. code >>= 1;
  2861. code = (sign) ? (pred - code) : (pred + code);
  2862. #ifdef DEBUG
  2863. fprintf(stderr,"H.263+ UMV Motion = %d\n", code);
  2864. #endif
  2865. return code;
  2866. }
  2867. static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
  2868. int n, int coded)
  2869. {
  2870. int code, level, i, j, last, run;
  2871. RLTable *rl = &rl_inter;
  2872. const UINT8 *scan_table;
  2873. scan_table = s->intra_scantable.permutated;
  2874. if (s->h263_aic && s->mb_intra) {
  2875. rl = &rl_intra_aic;
  2876. i = 0;
  2877. if (s->ac_pred) {
  2878. if (s->h263_aic_dir)
  2879. scan_table = s->intra_v_scantable.permutated; /* left */
  2880. else
  2881. scan_table = s->intra_h_scantable.permutated; /* top */
  2882. }
  2883. } else if (s->mb_intra) {
  2884. /* DC coef */
  2885. if (s->h263_rv10 && s->rv10_version == 3 && s->pict_type == I_TYPE) {
  2886. int component, diff;
  2887. component = (n <= 3 ? 0 : n - 4 + 1);
  2888. level = s->last_dc[component];
  2889. if (s->rv10_first_dc_coded[component]) {
  2890. diff = rv_decode_dc(s, n);
  2891. if (diff == 0xffff)
  2892. return -1;
  2893. level += diff;
  2894. level = level & 0xff; /* handle wrap round */
  2895. s->last_dc[component] = level;
  2896. } else {
  2897. s->rv10_first_dc_coded[component] = 1;
  2898. }
  2899. } else {
  2900. level = get_bits(&s->gb, 8);
  2901. if (level == 255)
  2902. level = 128;
  2903. }
  2904. block[0] = level;
  2905. i = 1;
  2906. } else {
  2907. i = 0;
  2908. }
  2909. if (!coded) {
  2910. if (s->mb_intra && s->h263_aic)
  2911. goto not_coded;
  2912. s->block_last_index[n] = i - 1;
  2913. return 0;
  2914. }
  2915. for(;;) {
  2916. code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
  2917. if (code < 0)
  2918. return -1;
  2919. if (code == rl->n) {
  2920. /* escape */
  2921. last = get_bits1(&s->gb);
  2922. run = get_bits(&s->gb, 6);
  2923. level = (INT8)get_bits(&s->gb, 8);
  2924. if (s->h263_rv10 && level == -128) {
  2925. /* XXX: should patch encoder too */
  2926. level = get_bits(&s->gb, 12);
  2927. level= (level + ((-1)<<11)) ^ ((-1)<<11); //sign extension
  2928. }
  2929. } else {
  2930. run = rl->table_run[code];
  2931. level = rl->table_level[code];
  2932. last = code >= rl->last;
  2933. if (get_bits1(&s->gb))
  2934. level = -level;
  2935. }
  2936. i += run;
  2937. if (i >= 64)
  2938. return -1;
  2939. j = scan_table[i];
  2940. block[j] = level;
  2941. if (last)
  2942. break;
  2943. i++;
  2944. }
  2945. not_coded:
  2946. if (s->mb_intra && s->h263_aic) {
  2947. h263_pred_acdc(s, block, n);
  2948. i = 63;
  2949. }
  2950. s->block_last_index[n] = i;
  2951. return 0;
  2952. }
  2953. static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
  2954. {
  2955. int level, pred, code;
  2956. UINT16 *dc_val;
  2957. if (n < 4)
  2958. code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1);
  2959. else
  2960. code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1);
  2961. if (code < 0 || code > 9 /* && s->nbit<9 */){
  2962. fprintf(stderr, "illegal dc vlc\n");
  2963. return -1;
  2964. }
  2965. if (code == 0) {
  2966. level = 0;
  2967. } else {
  2968. level = get_bits(&s->gb, code);
  2969. if ((level >> (code - 1)) == 0) /* if MSB not set it is negative*/
  2970. level = - (level ^ ((1 << code) - 1));
  2971. if (code > 8){
  2972. if(get_bits1(&s->gb)==0){ /* marker */
  2973. fprintf(stderr, "dc marker bit missing\n");
  2974. return -1;
  2975. }
  2976. }
  2977. }
  2978. pred = ff_mpeg4_pred_dc(s, n, &dc_val, dir_ptr);
  2979. level += pred;
  2980. if (level < 0)
  2981. level = 0;
  2982. if (n < 4) {
  2983. *dc_val = level * s->y_dc_scale;
  2984. } else {
  2985. *dc_val = level * s->c_dc_scale;
  2986. }
  2987. return level;
  2988. }
  2989. /**
  2990. * decode a block
  2991. * returns 0 if everything went ok
  2992. * returns DECODING_AC_LOST if an error was detected during AC decoding
  2993. * returns DECODING_ACDC_LOST if an error was detected during DC decoding
  2994. */
  2995. static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
  2996. int n, int coded, int intra)
  2997. {
  2998. int level, i, last, run;
  2999. int dc_pred_dir;
  3000. RLTable * rl;
  3001. RL_VLC_ELEM * rl_vlc;
  3002. const UINT8 * scan_table;
  3003. int qmul, qadd;
  3004. if(intra) {
  3005. /* DC coef */
  3006. if(s->data_partitioning && s->pict_type!=B_TYPE){
  3007. level = s->dc_val[0][ s->block_index[n] ];
  3008. if(n<4) level= (level + (s->y_dc_scale>>1))/s->y_dc_scale; //FIXME optimizs
  3009. else level= (level + (s->c_dc_scale>>1))/s->c_dc_scale;
  3010. dc_pred_dir= (s->pred_dir_table[s->mb_x + s->mb_y*s->mb_width]<<n)&32;
  3011. }else{
  3012. level = mpeg4_decode_dc(s, n, &dc_pred_dir);
  3013. if (level < 0)
  3014. return DECODING_ACDC_LOST;
  3015. }
  3016. block[0] = level;
  3017. i = 0;
  3018. if (!coded)
  3019. goto not_coded;
  3020. rl = &rl_intra;
  3021. rl_vlc = rl_intra.rl_vlc[0];
  3022. if(s->alternate_scan)
  3023. scan_table = s->intra_v_scantable.permutated; /* left */
  3024. else if (s->ac_pred) {
  3025. if (dc_pred_dir == 0)
  3026. scan_table = s->intra_v_scantable.permutated; /* left */
  3027. else
  3028. scan_table = s->intra_h_scantable.permutated; /* top */
  3029. } else {
  3030. scan_table = s->intra_scantable.permutated;
  3031. }
  3032. qmul=1;
  3033. qadd=0;
  3034. } else {
  3035. i = -1;
  3036. if (!coded) {
  3037. s->block_last_index[n] = i;
  3038. return 0;
  3039. }
  3040. rl = &rl_inter;
  3041. if(s->alternate_scan)
  3042. scan_table = s->intra_v_scantable.permutated; /* left */
  3043. else
  3044. scan_table = s->intra_scantable.permutated;
  3045. if(s->mpeg_quant){
  3046. qmul=1;
  3047. qadd=0;
  3048. rl_vlc = rl_inter.rl_vlc[0];
  3049. }else{
  3050. qmul = s->qscale << 1;
  3051. qadd = (s->qscale - 1) | 1;
  3052. rl_vlc = rl_inter.rl_vlc[s->qscale];
  3053. }
  3054. }
  3055. {
  3056. OPEN_READER(re, &s->gb);
  3057. for(;;) {
  3058. UPDATE_CACHE(re, &s->gb);
  3059. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2);
  3060. if (level==0) {
  3061. int cache;
  3062. cache= GET_CACHE(re, &s->gb);
  3063. /* escape */
  3064. if (cache&0x80000000) {
  3065. if (cache&0x40000000) {
  3066. /* third escape */
  3067. SKIP_CACHE(re, &s->gb, 2);
  3068. last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
  3069. run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
  3070. SKIP_COUNTER(re, &s->gb, 2+1+6);
  3071. UPDATE_CACHE(re, &s->gb);
  3072. if(SHOW_UBITS(re, &s->gb, 1)==0){
  3073. fprintf(stderr, "1. marker bit missing in 3. esc\n");
  3074. return DECODING_AC_LOST;
  3075. }; SKIP_CACHE(re, &s->gb, 1);
  3076. level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12);
  3077. if(SHOW_UBITS(re, &s->gb, 1)==0){
  3078. fprintf(stderr, "2. marker bit missing in 3. esc\n");
  3079. return DECODING_AC_LOST;
  3080. }; LAST_SKIP_CACHE(re, &s->gb, 1);
  3081. SKIP_COUNTER(re, &s->gb, 1+12+1);
  3082. if(level*s->qscale>1024 || level*s->qscale<-1024){
  3083. fprintf(stderr, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
  3084. return DECODING_AC_LOST;
  3085. }
  3086. #if 1
  3087. {
  3088. const int abs_level= ABS(level);
  3089. if(abs_level<=MAX_LEVEL && run<=MAX_RUN && s->error_resilience>=0){
  3090. const int run1= run - rl->max_run[last][abs_level] - 1;
  3091. if(abs_level <= rl->max_level[last][run]){
  3092. fprintf(stderr, "illegal 3. esc, vlc encoding possible\n");
  3093. return DECODING_AC_LOST;
  3094. }
  3095. if(abs_level <= rl->max_level[last][run]*2){
  3096. fprintf(stderr, "illegal 3. esc, esc 1 encoding possible\n");
  3097. return DECODING_AC_LOST;
  3098. }
  3099. if(run1 >= 0 && abs_level <= rl->max_level[last][run1]){
  3100. fprintf(stderr, "illegal 3. esc, esc 2 encoding possible\n");
  3101. return DECODING_AC_LOST;
  3102. }
  3103. }
  3104. }
  3105. #endif
  3106. if (level>0) level= level * qmul + qadd;
  3107. else level= level * qmul - qadd;
  3108. i+= run + 1;
  3109. if(last) i+=192;
  3110. } else {
  3111. /* second escape */
  3112. #if MIN_CACHE_BITS < 20
  3113. LAST_SKIP_BITS(re, &s->gb, 2);
  3114. UPDATE_CACHE(re, &s->gb);
  3115. #else
  3116. SKIP_BITS(re, &s->gb, 2);
  3117. #endif
  3118. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2);
  3119. i+= run + rl->max_run[run>>7][level/qmul] +1; //FIXME opt indexing
  3120. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  3121. LAST_SKIP_BITS(re, &s->gb, 1);
  3122. }
  3123. } else {
  3124. /* first escape */
  3125. #if MIN_CACHE_BITS < 19
  3126. LAST_SKIP_BITS(re, &s->gb, 1);
  3127. UPDATE_CACHE(re, &s->gb);
  3128. #else
  3129. SKIP_BITS(re, &s->gb, 1);
  3130. #endif
  3131. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2);
  3132. i+= run;
  3133. level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
  3134. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  3135. LAST_SKIP_BITS(re, &s->gb, 1);
  3136. }
  3137. } else {
  3138. i+= run;
  3139. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  3140. LAST_SKIP_BITS(re, &s->gb, 1);
  3141. }
  3142. if (i > 62){
  3143. i-= 192;
  3144. if(i&(~63)){
  3145. fprintf(stderr, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
  3146. return DECODING_AC_LOST;
  3147. }
  3148. block[scan_table[i]] = level;
  3149. break;
  3150. }
  3151. block[scan_table[i]] = level;
  3152. }
  3153. CLOSE_READER(re, &s->gb);
  3154. }
  3155. not_coded:
  3156. if (s->mb_intra) {
  3157. mpeg4_pred_ac(s, block, n, dc_pred_dir);
  3158. if (s->ac_pred) {
  3159. i = 63; /* XXX: not optimal */
  3160. }
  3161. }
  3162. s->block_last_index[n] = i;
  3163. return 0;
  3164. }
  3165. /* most is hardcoded. should extend to handle all h263 streams */
  3166. int h263_decode_picture_header(MpegEncContext *s)
  3167. {
  3168. int format, width, height;
  3169. /* picture start code */
  3170. if (get_bits(&s->gb, 22) != 0x20) {
  3171. fprintf(stderr, "Bad picture start code\n");
  3172. return -1;
  3173. }
  3174. /* temporal reference */
  3175. s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
  3176. /* PTYPE starts here */
  3177. if (get_bits1(&s->gb) != 1) {
  3178. /* marker */
  3179. fprintf(stderr, "Bad marker\n");
  3180. return -1;
  3181. }
  3182. if (get_bits1(&s->gb) != 0) {
  3183. fprintf(stderr, "Bad H263 id\n");
  3184. return -1; /* h263 id */
  3185. }
  3186. skip_bits1(&s->gb); /* split screen off */
  3187. skip_bits1(&s->gb); /* camera off */
  3188. skip_bits1(&s->gb); /* freeze picture release off */
  3189. /* Reset GOB number */
  3190. s->gob_number = 0;
  3191. format = get_bits(&s->gb, 3);
  3192. /*
  3193. 0 forbidden
  3194. 1 sub-QCIF
  3195. 10 QCIF
  3196. 7 extended PTYPE (PLUSPTYPE)
  3197. */
  3198. if (format != 7 && format != 6) {
  3199. s->h263_plus = 0;
  3200. /* H.263v1 */
  3201. width = h263_format[format][0];
  3202. height = h263_format[format][1];
  3203. if (!width)
  3204. return -1;
  3205. s->width = width;
  3206. s->height = height;
  3207. s->pict_type = I_TYPE + get_bits1(&s->gb);
  3208. s->unrestricted_mv = get_bits1(&s->gb);
  3209. s->h263_long_vectors = s->unrestricted_mv;
  3210. if (get_bits1(&s->gb) != 0) {
  3211. fprintf(stderr, "H263 SAC not supported\n");
  3212. return -1; /* SAC: off */
  3213. }
  3214. if (get_bits1(&s->gb) != 0) {
  3215. s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */
  3216. }
  3217. if (get_bits1(&s->gb) != 0) {
  3218. fprintf(stderr, "H263 PB frame not supported\n");
  3219. return -1; /* not PB frame */
  3220. }
  3221. s->qscale = get_bits(&s->gb, 5);
  3222. skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
  3223. } else {
  3224. int ufep;
  3225. /* H.263v2 */
  3226. s->h263_plus = 1;
  3227. ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
  3228. /* ufep other than 0 and 1 are reserved */
  3229. if (ufep == 1) {
  3230. /* OPPTYPE */
  3231. format = get_bits(&s->gb, 3);
  3232. dprintf("ufep=1, format: %d\n", format);
  3233. skip_bits(&s->gb,1); /* Custom PCF */
  3234. s->umvplus_dec = get_bits(&s->gb, 1); /* Unrestricted Motion Vector */
  3235. skip_bits1(&s->gb); /* Syntax-based Arithmetic Coding (SAC) */
  3236. if (get_bits1(&s->gb) != 0) {
  3237. s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */
  3238. }
  3239. if (get_bits1(&s->gb) != 0) { /* Advanced Intra Coding (AIC) */
  3240. s->h263_aic = 1;
  3241. }
  3242. skip_bits(&s->gb, 7);
  3243. /* these are the 7 bits: (in order of appearence */
  3244. /* Deblocking Filter */
  3245. /* Slice Structured */
  3246. /* Reference Picture Selection */
  3247. /* Independent Segment Decoding */
  3248. /* Alternative Inter VLC */
  3249. /* Modified Quantization */
  3250. /* Prevent start code emulation */
  3251. skip_bits(&s->gb, 3); /* Reserved */
  3252. } else if (ufep != 0) {
  3253. fprintf(stderr, "Bad UFEP type (%d)\n", ufep);
  3254. return -1;
  3255. }
  3256. /* MPPTYPE */
  3257. s->pict_type = get_bits(&s->gb, 3) + I_TYPE;
  3258. dprintf("pict_type: %d\n", s->pict_type);
  3259. if (s->pict_type != I_TYPE &&
  3260. s->pict_type != P_TYPE)
  3261. return -1;
  3262. skip_bits(&s->gb, 2);
  3263. s->no_rounding = get_bits1(&s->gb);
  3264. dprintf("RTYPE: %d\n", s->no_rounding);
  3265. skip_bits(&s->gb, 4);
  3266. /* Get the picture dimensions */
  3267. if (ufep) {
  3268. if (format == 6) {
  3269. /* Custom Picture Format (CPFMT) */
  3270. s->aspect_ratio_info = get_bits(&s->gb, 4);
  3271. dprintf("aspect: %d\n", s->aspect_ratio_info);
  3272. /* aspect ratios:
  3273. 0 - forbidden
  3274. 1 - 1:1
  3275. 2 - 12:11 (CIF 4:3)
  3276. 3 - 10:11 (525-type 4:3)
  3277. 4 - 16:11 (CIF 16:9)
  3278. 5 - 40:33 (525-type 16:9)
  3279. 6-14 - reserved
  3280. */
  3281. width = (get_bits(&s->gb, 9) + 1) * 4;
  3282. skip_bits1(&s->gb);
  3283. height = get_bits(&s->gb, 9) * 4;
  3284. dprintf("\nH.263+ Custom picture: %dx%d\n",width,height);
  3285. if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) {
  3286. /* aspected dimensions */
  3287. s->aspected_width = get_bits(&s->gb, 8);
  3288. s->aspected_height = get_bits(&s->gb, 8);
  3289. }
  3290. } else {
  3291. width = h263_format[format][0];
  3292. height = h263_format[format][1];
  3293. }
  3294. if ((width == 0) || (height == 0))
  3295. return -1;
  3296. s->width = width;
  3297. s->height = height;
  3298. if (s->umvplus_dec) {
  3299. skip_bits1(&s->gb); /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
  3300. }
  3301. }
  3302. s->qscale = get_bits(&s->gb, 5);
  3303. }
  3304. /* PEI */
  3305. while (get_bits1(&s->gb) != 0) {
  3306. skip_bits(&s->gb, 8);
  3307. }
  3308. s->f_code = 1;
  3309. if(s->h263_aic){
  3310. s->y_dc_scale_table=
  3311. s->c_dc_scale_table= h263_aic_dc_scale_table;
  3312. }else{
  3313. s->y_dc_scale_table=
  3314. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  3315. }
  3316. return 0;
  3317. }
  3318. static void mpeg4_decode_sprite_trajectory(MpegEncContext * s)
  3319. {
  3320. int i;
  3321. int a= 2<<s->sprite_warping_accuracy;
  3322. int rho= 3-s->sprite_warping_accuracy;
  3323. int r=16/a;
  3324. const int vop_ref[4][2]= {{0,0}, {s->width,0}, {0, s->height}, {s->width, s->height}}; // only true for rectangle shapes
  3325. int d[4][2]={{0,0}, {0,0}, {0,0}, {0,0}};
  3326. int sprite_ref[4][2];
  3327. int virtual_ref[2][2];
  3328. int w2, h2;
  3329. int alpha=0, beta=0;
  3330. int w= s->width;
  3331. int h= s->height;
  3332. //printf("SP %d\n", s->sprite_warping_accuracy);
  3333. for(i=0; i<s->num_sprite_warping_points; i++){
  3334. int length;
  3335. int x=0, y=0;
  3336. length= get_vlc(&s->gb, &sprite_trajectory);
  3337. if(length){
  3338. x= get_bits(&s->gb, length);
  3339. //printf("lx %d %d\n", length, x);
  3340. if ((x >> (length - 1)) == 0) /* if MSB not set it is negative*/
  3341. x = - (x ^ ((1 << length) - 1));
  3342. }
  3343. if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(&s->gb); /* marker bit */
  3344. length= get_vlc(&s->gb, &sprite_trajectory);
  3345. if(length){
  3346. y=get_bits(&s->gb, length);
  3347. //printf("ly %d %d\n", length, y);
  3348. if ((y >> (length - 1)) == 0) /* if MSB not set it is negative*/
  3349. y = - (y ^ ((1 << length) - 1));
  3350. }
  3351. skip_bits1(&s->gb); /* marker bit */
  3352. //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy);
  3353. //if(i>0 && (x!=0 || y!=0)) printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
  3354. //x=y=0;
  3355. d[i][0]= x;
  3356. d[i][1]= y;
  3357. }
  3358. while((1<<alpha)<w) alpha++;
  3359. while((1<<beta )<h) beta++; // there seems to be a typo in the mpeg4 std for the definition of w' and h'
  3360. w2= 1<<alpha;
  3361. h2= 1<<beta;
  3362. // Note, the 4th point isnt used for GMC
  3363. if(s->divx_version==500 && s->divx_build==413){
  3364. sprite_ref[0][0]= a*vop_ref[0][0] + d[0][0];
  3365. sprite_ref[0][1]= a*vop_ref[0][1] + d[0][1];
  3366. sprite_ref[1][0]= a*vop_ref[1][0] + d[0][0] + d[1][0];
  3367. sprite_ref[1][1]= a*vop_ref[1][1] + d[0][1] + d[1][1];
  3368. sprite_ref[2][0]= a*vop_ref[2][0] + d[0][0] + d[2][0];
  3369. sprite_ref[2][1]= a*vop_ref[2][1] + d[0][1] + d[2][1];
  3370. } else {
  3371. sprite_ref[0][0]= (a>>1)*(2*vop_ref[0][0] + d[0][0]);
  3372. sprite_ref[0][1]= (a>>1)*(2*vop_ref[0][1] + d[0][1]);
  3373. sprite_ref[1][0]= (a>>1)*(2*vop_ref[1][0] + d[0][0] + d[1][0]);
  3374. sprite_ref[1][1]= (a>>1)*(2*vop_ref[1][1] + d[0][1] + d[1][1]);
  3375. sprite_ref[2][0]= (a>>1)*(2*vop_ref[2][0] + d[0][0] + d[2][0]);
  3376. sprite_ref[2][1]= (a>>1)*(2*vop_ref[2][1] + d[0][1] + d[2][1]);
  3377. }
  3378. /* sprite_ref[3][0]= (a>>1)*(2*vop_ref[3][0] + d[0][0] + d[1][0] + d[2][0] + d[3][0]);
  3379. sprite_ref[3][1]= (a>>1)*(2*vop_ref[3][1] + d[0][1] + d[1][1] + d[2][1] + d[3][1]); */
  3380. // this is mostly identical to the mpeg4 std (and is totally unreadable because of that ...)
  3381. // perhaps it should be reordered to be more readable ...
  3382. // the idea behind this virtual_ref mess is to be able to use shifts later per pixel instead of divides
  3383. // so the distance between points is converted from w&h based to w2&h2 based which are of the 2^x form
  3384. virtual_ref[0][0]= 16*(vop_ref[0][0] + w2)
  3385. + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + w2*(r*sprite_ref[1][0] - 16*vop_ref[1][0])),w);
  3386. virtual_ref[0][1]= 16*vop_ref[0][1]
  3387. + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + w2*(r*sprite_ref[1][1] - 16*vop_ref[1][1])),w);
  3388. virtual_ref[1][0]= 16*vop_ref[0][0]
  3389. + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + h2*(r*sprite_ref[2][0] - 16*vop_ref[2][0])),h);
  3390. virtual_ref[1][1]= 16*(vop_ref[0][1] + h2)
  3391. + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + h2*(r*sprite_ref[2][1] - 16*vop_ref[2][1])),h);
  3392. switch(s->num_sprite_warping_points)
  3393. {
  3394. case 0:
  3395. s->sprite_offset[0][0]= 0;
  3396. s->sprite_offset[0][1]= 0;
  3397. s->sprite_offset[1][0]= 0;
  3398. s->sprite_offset[1][1]= 0;
  3399. s->sprite_delta[0][0][0]= a;
  3400. s->sprite_delta[0][0][1]= 0;
  3401. s->sprite_delta[0][1][0]= 0;
  3402. s->sprite_delta[0][1][1]= a;
  3403. s->sprite_delta[1][0][0]= a;
  3404. s->sprite_delta[1][0][1]= 0;
  3405. s->sprite_delta[1][1][0]= 0;
  3406. s->sprite_delta[1][1][1]= a;
  3407. s->sprite_shift[0][0]= 0;
  3408. s->sprite_shift[0][1]= 0;
  3409. s->sprite_shift[1][0]= 0;
  3410. s->sprite_shift[1][1]= 0;
  3411. break;
  3412. case 1: //GMC only
  3413. s->sprite_offset[0][0]= sprite_ref[0][0] - a*vop_ref[0][0];
  3414. s->sprite_offset[0][1]= sprite_ref[0][1] - a*vop_ref[0][1];
  3415. s->sprite_offset[1][0]= ((sprite_ref[0][0]>>1)|(sprite_ref[0][0]&1)) - a*(vop_ref[0][0]/2);
  3416. s->sprite_offset[1][1]= ((sprite_ref[0][1]>>1)|(sprite_ref[0][1]&1)) - a*(vop_ref[0][1]/2);
  3417. s->sprite_delta[0][0][0]= a;
  3418. s->sprite_delta[0][0][1]= 0;
  3419. s->sprite_delta[0][1][0]= 0;
  3420. s->sprite_delta[0][1][1]= a;
  3421. s->sprite_delta[1][0][0]= a;
  3422. s->sprite_delta[1][0][1]= 0;
  3423. s->sprite_delta[1][1][0]= 0;
  3424. s->sprite_delta[1][1][1]= a;
  3425. s->sprite_shift[0][0]= 0;
  3426. s->sprite_shift[0][1]= 0;
  3427. s->sprite_shift[1][0]= 0;
  3428. s->sprite_shift[1][1]= 0;
  3429. break;
  3430. case 2:
  3431. case 3: //FIXME
  3432. s->sprite_offset[0][0]= (sprite_ref[0][0]<<(alpha+rho))
  3433. + ((-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][0])
  3434. +( r*sprite_ref[0][1] - virtual_ref[0][1])*(-vop_ref[0][1]));
  3435. s->sprite_offset[0][1]= (sprite_ref[0][1]<<(alpha+rho))
  3436. + ((-r*sprite_ref[0][1] + virtual_ref[0][1])*(-vop_ref[0][0])
  3437. +(-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][1]));
  3438. s->sprite_offset[1][0]= ((-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][0] + 1)
  3439. +( r*sprite_ref[0][1] - virtual_ref[0][1])*(-2*vop_ref[0][1] + 1)
  3440. +2*w2*r*sprite_ref[0][0] - 16*w2);
  3441. s->sprite_offset[1][1]= ((-r*sprite_ref[0][1] + virtual_ref[0][1])*(-2*vop_ref[0][0] + 1)
  3442. +(-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][1] + 1)
  3443. +2*w2*r*sprite_ref[0][1] - 16*w2);
  3444. s->sprite_delta[0][0][0]= (-r*sprite_ref[0][0] + virtual_ref[0][0]);
  3445. s->sprite_delta[0][0][1]= ( r*sprite_ref[0][1] - virtual_ref[0][1]);
  3446. s->sprite_delta[0][1][0]= (-r*sprite_ref[0][1] + virtual_ref[0][1]);
  3447. s->sprite_delta[0][1][1]= (-r*sprite_ref[0][0] + virtual_ref[0][0]);
  3448. s->sprite_delta[1][0][0]= 4*(-r*sprite_ref[0][0] + virtual_ref[0][0]);
  3449. s->sprite_delta[1][0][1]= 4*( r*sprite_ref[0][1] - virtual_ref[0][1]);
  3450. s->sprite_delta[1][1][0]= 4*(-r*sprite_ref[0][1] + virtual_ref[0][1]);
  3451. s->sprite_delta[1][1][1]= 4*(-r*sprite_ref[0][0] + virtual_ref[0][0]);
  3452. s->sprite_shift[0][0]= alpha+rho;
  3453. s->sprite_shift[0][1]= alpha+rho;
  3454. s->sprite_shift[1][0]= alpha+rho+2;
  3455. s->sprite_shift[1][1]= alpha+rho+2;
  3456. break;
  3457. // case 3:
  3458. break;
  3459. }
  3460. /*printf("%d %d\n", s->sprite_delta[0][0][0], a<<s->sprite_shift[0][0]);
  3461. printf("%d %d\n", s->sprite_delta[0][0][1], 0);
  3462. printf("%d %d\n", s->sprite_delta[0][1][0], 0);
  3463. printf("%d %d\n", s->sprite_delta[0][1][1], a<<s->sprite_shift[0][1]);
  3464. printf("%d %d\n", s->sprite_delta[1][0][0], a<<s->sprite_shift[1][0]);
  3465. printf("%d %d\n", s->sprite_delta[1][0][1], 0);
  3466. printf("%d %d\n", s->sprite_delta[1][1][0], 0);
  3467. printf("%d %d\n", s->sprite_delta[1][1][1], a<<s->sprite_shift[1][1]);*/
  3468. /* try to simplify the situation */
  3469. if( s->sprite_delta[0][0][0] == a<<s->sprite_shift[0][0]
  3470. && s->sprite_delta[0][0][1] == 0
  3471. && s->sprite_delta[0][1][0] == 0
  3472. && s->sprite_delta[0][1][1] == a<<s->sprite_shift[0][1]
  3473. && s->sprite_delta[1][0][0] == a<<s->sprite_shift[1][0]
  3474. && s->sprite_delta[1][0][1] == 0
  3475. && s->sprite_delta[1][1][0] == 0
  3476. && s->sprite_delta[1][1][1] == a<<s->sprite_shift[1][1])
  3477. {
  3478. s->sprite_offset[0][0]>>=s->sprite_shift[0][0];
  3479. s->sprite_offset[0][1]>>=s->sprite_shift[0][1];
  3480. s->sprite_offset[1][0]>>=s->sprite_shift[1][0];
  3481. s->sprite_offset[1][1]>>=s->sprite_shift[1][1];
  3482. s->sprite_delta[0][0][0]= a;
  3483. s->sprite_delta[0][0][1]= 0;
  3484. s->sprite_delta[0][1][0]= 0;
  3485. s->sprite_delta[0][1][1]= a;
  3486. s->sprite_delta[1][0][0]= a;
  3487. s->sprite_delta[1][0][1]= 0;
  3488. s->sprite_delta[1][1][0]= 0;
  3489. s->sprite_delta[1][1][1]= a;
  3490. s->sprite_shift[0][0]= 0;
  3491. s->sprite_shift[0][1]= 0;
  3492. s->sprite_shift[1][0]= 0;
  3493. s->sprite_shift[1][1]= 0;
  3494. s->real_sprite_warping_points=1;
  3495. }
  3496. else
  3497. s->real_sprite_warping_points= s->num_sprite_warping_points;
  3498. //printf("%d %d %d %d\n", d[0][0], d[0][1], s->sprite_offset[0][0], s->sprite_offset[0][1]);
  3499. }
  3500. /* decode mpeg4 VOP header */
  3501. int mpeg4_decode_picture_header(MpegEncContext * s)
  3502. {
  3503. int time_incr, startcode, state, v;
  3504. int time_increment;
  3505. redo:
  3506. /* search next start code */
  3507. align_get_bits(&s->gb);
  3508. state = 0xff;
  3509. for(;;) {
  3510. v = get_bits(&s->gb, 8);
  3511. if (state == 0x000001) {
  3512. state = ((state << 8) | v) & 0xffffff;
  3513. startcode = state;
  3514. break;
  3515. }
  3516. state = ((state << 8) | v) & 0xffffff;
  3517. if( get_bits_count(&s->gb) > s->gb.size*8-32){
  3518. if(s->gb.size>50){
  3519. printf("no VOP startcode found, frame size was=%d\n", s->gb.size);
  3520. return -1;
  3521. }else{
  3522. printf("frame skip\n");
  3523. return FRAME_SKIPED;
  3524. }
  3525. }
  3526. }
  3527. //printf("startcode %X %d\n", startcode, get_bits_count(&s->gb));
  3528. if (startcode == 0x120) { // Video Object Layer
  3529. int width, height, vo_ver_id;
  3530. /* vol header */
  3531. skip_bits(&s->gb, 1); /* random access */
  3532. s->vo_type= get_bits(&s->gb, 8);
  3533. if (get_bits1(&s->gb) != 0) { /* is_ol_id */
  3534. vo_ver_id = get_bits(&s->gb, 4); /* vo_ver_id */
  3535. skip_bits(&s->gb, 3); /* vo_priority */
  3536. } else {
  3537. vo_ver_id = 1;
  3538. }
  3539. //printf("vo type:%d\n",s->vo_type);
  3540. s->aspect_ratio_info= get_bits(&s->gb, 4);
  3541. if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
  3542. s->aspected_width = get_bits(&s->gb, 8); // par_width
  3543. s->aspected_height = get_bits(&s->gb, 8); // par_height
  3544. }
  3545. if ((s->vol_control_parameters=get_bits1(&s->gb))) { /* vol control parameter */
  3546. int chroma_format= get_bits(&s->gb, 2);
  3547. if(chroma_format!=1){
  3548. printf("illegal chroma format\n");
  3549. }
  3550. s->low_delay= get_bits1(&s->gb);
  3551. if(get_bits1(&s->gb)){ /* vbv parameters */
  3552. get_bits(&s->gb, 15); /* first_half_bitrate */
  3553. skip_bits1(&s->gb); /* marker */
  3554. get_bits(&s->gb, 15); /* latter_half_bitrate */
  3555. skip_bits1(&s->gb); /* marker */
  3556. get_bits(&s->gb, 15); /* first_half_vbv_buffer_size */
  3557. skip_bits1(&s->gb); /* marker */
  3558. get_bits(&s->gb, 3); /* latter_half_vbv_buffer_size */
  3559. get_bits(&s->gb, 11); /* first_half_vbv_occupancy */
  3560. skip_bits1(&s->gb); /* marker */
  3561. get_bits(&s->gb, 15); /* latter_half_vbv_occupancy */
  3562. skip_bits1(&s->gb); /* marker */
  3563. }
  3564. }else{
  3565. // set low delay flag only once so the smart? low delay detection wont be overriden
  3566. if(s->picture_number==0)
  3567. s->low_delay=0;
  3568. }
  3569. s->shape = get_bits(&s->gb, 2); /* vol shape */
  3570. if(s->shape != RECT_SHAPE) printf("only rectangular vol supported\n");
  3571. if(s->shape == GRAY_SHAPE && vo_ver_id != 1){
  3572. printf("Gray shape not supported\n");
  3573. skip_bits(&s->gb, 4); //video_object_layer_shape_extension
  3574. }
  3575. skip_bits1(&s->gb); /* marker */
  3576. s->time_increment_resolution = get_bits(&s->gb, 16);
  3577. s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1;
  3578. if (s->time_increment_bits < 1)
  3579. s->time_increment_bits = 1;
  3580. skip_bits1(&s->gb); /* marker */
  3581. if (get_bits1(&s->gb) != 0) { /* fixed_vop_rate */
  3582. skip_bits(&s->gb, s->time_increment_bits);
  3583. }
  3584. if (s->shape != BIN_ONLY_SHAPE) {
  3585. if (s->shape == RECT_SHAPE) {
  3586. skip_bits1(&s->gb); /* marker */
  3587. width = get_bits(&s->gb, 13);
  3588. skip_bits1(&s->gb); /* marker */
  3589. height = get_bits(&s->gb, 13);
  3590. skip_bits1(&s->gb); /* marker */
  3591. if(width && height){ /* they should be non zero but who knows ... */
  3592. s->width = width;
  3593. s->height = height;
  3594. // printf("width/height: %d %d\n", width, height);
  3595. }
  3596. }
  3597. s->progressive_sequence= get_bits1(&s->gb)^1;
  3598. if(!get_bits1(&s->gb)) printf("OBMC not supported (very likely buggy encoder)\n"); /* OBMC Disable */
  3599. if (vo_ver_id == 1) {
  3600. s->vol_sprite_usage = get_bits1(&s->gb); /* vol_sprite_usage */
  3601. } else {
  3602. s->vol_sprite_usage = get_bits(&s->gb, 2); /* vol_sprite_usage */
  3603. }
  3604. if(s->vol_sprite_usage==STATIC_SPRITE) printf("Static Sprites not supported\n");
  3605. if(s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE){
  3606. if(s->vol_sprite_usage==STATIC_SPRITE){
  3607. s->sprite_width = get_bits(&s->gb, 13);
  3608. skip_bits1(&s->gb); /* marker */
  3609. s->sprite_height= get_bits(&s->gb, 13);
  3610. skip_bits1(&s->gb); /* marker */
  3611. s->sprite_left = get_bits(&s->gb, 13);
  3612. skip_bits1(&s->gb); /* marker */
  3613. s->sprite_top = get_bits(&s->gb, 13);
  3614. skip_bits1(&s->gb); /* marker */
  3615. }
  3616. s->num_sprite_warping_points= get_bits(&s->gb, 6);
  3617. s->sprite_warping_accuracy = get_bits(&s->gb, 2);
  3618. s->sprite_brightness_change= get_bits1(&s->gb);
  3619. if(s->vol_sprite_usage==STATIC_SPRITE)
  3620. s->low_latency_sprite= get_bits1(&s->gb);
  3621. }
  3622. // FIXME sadct disable bit if verid!=1 && shape not rect
  3623. if (get_bits1(&s->gb) == 1) { /* not_8_bit */
  3624. s->quant_precision = get_bits(&s->gb, 4); /* quant_precision */
  3625. if(get_bits(&s->gb, 4)!=8) printf("N-bit not supported\n"); /* bits_per_pixel */
  3626. if(s->quant_precision!=5) printf("quant precission %d\n", s->quant_precision);
  3627. } else {
  3628. s->quant_precision = 5;
  3629. }
  3630. // FIXME a bunch of grayscale shape things
  3631. if((s->mpeg_quant=get_bits1(&s->gb))){ /* vol_quant_type */
  3632. int i, j, v;
  3633. /* load default matrixes */
  3634. for(i=0; i<64; i++){
  3635. int j= s->idct_permutation[i];
  3636. v= ff_mpeg4_default_intra_matrix[i];
  3637. s->intra_matrix[j]= v;
  3638. s->chroma_intra_matrix[j]= v;
  3639. v= ff_mpeg4_default_non_intra_matrix[i];
  3640. s->inter_matrix[j]= v;
  3641. s->chroma_inter_matrix[j]= v;
  3642. }
  3643. /* load custom intra matrix */
  3644. if(get_bits1(&s->gb)){
  3645. for(i=0; i<64; i++){
  3646. v= get_bits(&s->gb, 8);
  3647. if(v==0) break;
  3648. j= s->intra_scantable.permutated[i];
  3649. s->intra_matrix[j]= v;
  3650. s->chroma_intra_matrix[j]= v;
  3651. }
  3652. }
  3653. /* load custom non intra matrix */
  3654. if(get_bits1(&s->gb)){
  3655. for(i=0; i<64; i++){
  3656. v= get_bits(&s->gb, 8);
  3657. if(v==0) break;
  3658. j= s->intra_scantable.permutated[i];
  3659. s->inter_matrix[j]= v;
  3660. s->chroma_inter_matrix[j]= v;
  3661. }
  3662. /* replicate last value */
  3663. for(; i<64; i++){
  3664. j= s->intra_scantable.permutated[i];
  3665. s->inter_matrix[j]= v;
  3666. s->chroma_inter_matrix[j]= v;
  3667. }
  3668. }
  3669. // FIXME a bunch of grayscale shape things
  3670. }
  3671. if(vo_ver_id != 1)
  3672. s->quarter_sample= get_bits1(&s->gb);
  3673. else s->quarter_sample=0;
  3674. if(!get_bits1(&s->gb)) printf("Complexity estimation not supported\n");
  3675. s->resync_marker= !get_bits1(&s->gb); /* resync_marker_disabled */
  3676. s->data_partitioning= get_bits1(&s->gb);
  3677. if(s->data_partitioning){
  3678. s->rvlc= get_bits1(&s->gb);
  3679. if(s->rvlc){
  3680. printf("reversible vlc not supported\n");
  3681. }
  3682. }
  3683. if(vo_ver_id != 1) {
  3684. s->new_pred= get_bits1(&s->gb);
  3685. if(s->new_pred){
  3686. printf("new pred not supported\n");
  3687. skip_bits(&s->gb, 2); /* requested upstream message type */
  3688. skip_bits1(&s->gb); /* newpred segment type */
  3689. }
  3690. s->reduced_res_vop= get_bits1(&s->gb);
  3691. if(s->reduced_res_vop) printf("reduced resolution VOP not supported\n");
  3692. }
  3693. else{
  3694. s->new_pred=0;
  3695. s->reduced_res_vop= 0;
  3696. }
  3697. s->scalability= get_bits1(&s->gb);
  3698. if (s->scalability) {
  3699. GetBitContext bak= s->gb;
  3700. int dummy= s->hierachy_type= get_bits1(&s->gb);
  3701. int ref_layer_id= get_bits(&s->gb, 4);
  3702. int ref_layer_sampling_dir= get_bits1(&s->gb);
  3703. int h_sampling_factor_n= get_bits(&s->gb, 5);
  3704. int h_sampling_factor_m= get_bits(&s->gb, 5);
  3705. int v_sampling_factor_n= get_bits(&s->gb, 5);
  3706. int v_sampling_factor_m= get_bits(&s->gb, 5);
  3707. s->enhancement_type= get_bits1(&s->gb);
  3708. if( h_sampling_factor_n==0 || h_sampling_factor_m==0
  3709. || v_sampling_factor_n==0 || v_sampling_factor_m==0 || s->workaround_bugs==1){
  3710. // fprintf(stderr, "illegal scalability header (VERY broken encoder), trying to workaround\n");
  3711. s->scalability=0;
  3712. s->gb= bak;
  3713. goto redo;
  3714. }
  3715. // bin shape stuff FIXME
  3716. printf("scalability not supported\n");
  3717. }
  3718. }
  3719. //printf("end Data %X %d\n", show_bits(&s->gb, 32), get_bits_count(&s->gb)&0x7);
  3720. goto redo;
  3721. } else if (startcode == 0x1b2) { //userdata
  3722. char buf[256];
  3723. int i;
  3724. int e;
  3725. int ver, build;
  3726. //printf("user Data %X\n", show_bits(&s->gb, 32));
  3727. buf[0]= show_bits(&s->gb, 8);
  3728. for(i=1; i<256; i++){
  3729. buf[i]= show_bits(&s->gb, 16)&0xFF;
  3730. if(buf[i]==0) break;
  3731. skip_bits(&s->gb, 8);
  3732. }
  3733. buf[255]=0;
  3734. e=sscanf(buf, "DivX%dBuild%d", &ver, &build);
  3735. if(e!=2)
  3736. e=sscanf(buf, "DivX%db%d", &ver, &build);
  3737. if(e==2){
  3738. s->divx_version= ver;
  3739. s->divx_build= build;
  3740. if(s->picture_number==0){
  3741. printf("This file was encoded with DivX%d Build%d\n", ver, build);
  3742. if(ver==500 && build==413){
  3743. printf("WARNING: this version of DivX is not MPEG4 compatible, trying to workaround these bugs...\n");
  3744. }
  3745. }
  3746. }
  3747. //printf("User Data: %s\n", buf);
  3748. goto redo;
  3749. } else if (startcode != 0x1b6) { //VOP
  3750. goto redo;
  3751. }
  3752. s->pict_type = get_bits(&s->gb, 2) + I_TYPE; /* pict type: I = 0 , P = 1 */
  3753. //if(s->pict_type!=I_TYPE) return FRAME_SKIPED;
  3754. if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0){
  3755. printf("low_delay flag set, but shouldnt, clearing it\n");
  3756. s->low_delay=0;
  3757. }
  3758. // printf("pic: %d, qpel:%d part:%d resync:%d\n", s->pict_type, s->quarter_sample, s->data_partitioning, s->resync_marker);
  3759. if(s->time_increment_resolution==0){
  3760. s->time_increment_resolution=1;
  3761. // fprintf(stderr, "time_increment_resolution is illegal\n");
  3762. }
  3763. time_incr=0;
  3764. while (get_bits1(&s->gb) != 0)
  3765. time_incr++;
  3766. check_marker(&s->gb, "before time_increment");
  3767. time_increment= get_bits(&s->gb, s->time_increment_bits);
  3768. //printf(" type:%d modulo_time_base:%d increment:%d\n", s->pict_type, time_incr, time_increment);
  3769. if(s->pict_type!=B_TYPE){
  3770. s->last_time_base= s->time_base;
  3771. s->time_base+= time_incr;
  3772. s->time= s->time_base*s->time_increment_resolution + time_increment;
  3773. if(s->workaround_bugs==3 || s->avctx->fourcc == ff_get_fourcc("UMP4")){
  3774. if(s->time < s->last_non_b_time){
  3775. // fprintf(stderr, "header is not mpeg4 compatible, broken encoder, trying to workaround\n");
  3776. s->time_base++;
  3777. s->time+= s->time_increment_resolution;
  3778. }
  3779. }
  3780. s->pp_time= s->time - s->last_non_b_time;
  3781. s->last_non_b_time= s->time;
  3782. }else{
  3783. s->time= (s->last_time_base + time_incr)*s->time_increment_resolution + time_increment;
  3784. s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
  3785. if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
  3786. // printf("messed up order, seeking?, skiping current b frame\n");
  3787. return FRAME_SKIPED;
  3788. }
  3789. if(s->t_frame==0) s->t_frame= s->time - s->last_time_base;
  3790. if(s->t_frame==0) s->t_frame=1; // 1/0 protection
  3791. //printf("%Ld %Ld %d %d\n", s->last_non_b_time, s->time, s->pp_time, s->t_frame); fflush(stdout);
  3792. s->pp_field_time= ( ROUNDED_DIV(s->last_non_b_time, s->t_frame)
  3793. - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
  3794. s->pb_field_time= ( ROUNDED_DIV(s->time, s->t_frame)
  3795. - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
  3796. }
  3797. s->avctx->pts= s->time*1000LL*1000LL / s->time_increment_resolution;
  3798. if(check_marker(&s->gb, "before vop_coded")==0 && s->picture_number==0){
  3799. printf("hmm, seems the headers arnt complete, trying to guess time_increment_bits\n");
  3800. for(s->time_increment_bits++ ;s->time_increment_bits<16; s->time_increment_bits++){
  3801. if(get_bits1(&s->gb)) break;
  3802. }
  3803. printf("my guess is %d bits ;)\n",s->time_increment_bits);
  3804. }
  3805. /* vop coded */
  3806. if (get_bits1(&s->gb) != 1)
  3807. goto redo;
  3808. //printf("time %d %d %d || %Ld %Ld %Ld\n", s->time_increment_bits, s->time_increment_resolution, s->time_base,
  3809. //s->time, s->last_non_b_time, s->last_non_b_time - s->pp_time);
  3810. if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == P_TYPE
  3811. || (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE))) {
  3812. /* rounding type for motion estimation */
  3813. s->no_rounding = get_bits1(&s->gb);
  3814. } else {
  3815. s->no_rounding = 0;
  3816. }
  3817. //FIXME reduced res stuff
  3818. if (s->shape != RECT_SHAPE) {
  3819. if (s->vol_sprite_usage != 1 || s->pict_type != I_TYPE) {
  3820. int width, height, hor_spat_ref, ver_spat_ref;
  3821. width = get_bits(&s->gb, 13);
  3822. skip_bits1(&s->gb); /* marker */
  3823. height = get_bits(&s->gb, 13);
  3824. skip_bits1(&s->gb); /* marker */
  3825. hor_spat_ref = get_bits(&s->gb, 13); /* hor_spat_ref */
  3826. skip_bits1(&s->gb); /* marker */
  3827. ver_spat_ref = get_bits(&s->gb, 13); /* ver_spat_ref */
  3828. }
  3829. skip_bits1(&s->gb); /* change_CR_disable */
  3830. if (get_bits1(&s->gb) != 0) {
  3831. skip_bits(&s->gb, 8); /* constant_alpha_value */
  3832. }
  3833. }
  3834. //FIXME complexity estimation stuff
  3835. if (s->shape != BIN_ONLY_SHAPE) {
  3836. int t;
  3837. t=get_bits(&s->gb, 3); /* intra dc VLC threshold */
  3838. //printf("threshold %d\n", t);
  3839. if(!s->progressive_sequence){
  3840. s->top_field_first= get_bits1(&s->gb);
  3841. s->alternate_scan= get_bits1(&s->gb);
  3842. }else
  3843. s->alternate_scan= 0;
  3844. }
  3845. if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
  3846. if(s->num_sprite_warping_points){
  3847. mpeg4_decode_sprite_trajectory(s);
  3848. }
  3849. if(s->sprite_brightness_change) printf("sprite_brightness_change not supported\n");
  3850. if(s->vol_sprite_usage==STATIC_SPRITE) printf("static sprite not supported\n");
  3851. }
  3852. if (s->shape != BIN_ONLY_SHAPE) {
  3853. /* note: we do not use quant_precision to avoid problem if no
  3854. MPEG4 vol header as it is found on some old opendivx
  3855. movies */
  3856. s->qscale = get_bits(&s->gb, 5);
  3857. if(s->qscale==0){
  3858. printf("Error, header damaged or not MPEG4 header (qscale=0)\n");
  3859. return -1; // makes no sense to continue, as there is nothing left from the image then
  3860. }
  3861. if (s->pict_type != I_TYPE) {
  3862. s->f_code = get_bits(&s->gb, 3); /* fcode_for */
  3863. if(s->f_code==0){
  3864. printf("Error, header damaged or not MPEG4 header (f_code=0)\n");
  3865. return -1; // makes no sense to continue, as the MV decoding will break very quickly
  3866. }
  3867. }else
  3868. s->f_code=1;
  3869. if (s->pict_type == B_TYPE) {
  3870. s->b_code = get_bits(&s->gb, 3);
  3871. }else
  3872. s->b_code=1;
  3873. #if 0
  3874. printf("qp:%d fc:%d bc:%d type:%s size:%d pro:%d alt:%d top:%d qpel:%d part:%d resync:%d\n",
  3875. s->qscale, s->f_code, s->b_code,
  3876. s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")),
  3877. s->gb.size,s->progressive_sequence, s->alternate_scan, s->top_field_first,
  3878. s->quarter_sample, s->data_partitioning, s->resync_marker);
  3879. #endif
  3880. if(!s->scalability){
  3881. if (s->shape!=RECT_SHAPE && s->pict_type!=I_TYPE) {
  3882. skip_bits1(&s->gb); // vop shape coding type
  3883. }
  3884. }else{
  3885. if(s->enhancement_type){
  3886. int load_backward_shape= get_bits1(&s->gb);
  3887. if(load_backward_shape){
  3888. printf("load backward shape isnt supported\n");
  3889. }
  3890. }
  3891. skip_bits(&s->gb, 2); //ref_select_code
  3892. }
  3893. }
  3894. /* detect buggy encoders which dont set the low_delay flag (divx4/xvid/opendivx)*/
  3895. // note we cannot detect divx5 without b-frames easyly (allthough its buggy too)
  3896. if(s->vo_type==0 && s->vol_control_parameters==0 && s->divx_version==0 && s->picture_number==0){
  3897. printf("looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n");
  3898. s->low_delay=1;
  3899. }
  3900. s->picture_number++; // better than pic number==0 allways ;)
  3901. s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table; //FIXME add short header support
  3902. s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
  3903. if(s->divx_version==0 || s->divx_version < 500){
  3904. s->h_edge_pos= s->width;
  3905. s->v_edge_pos= s->height;
  3906. }
  3907. return 0;
  3908. }
  3909. /* don't understand why they choose a different header ! */
  3910. int intel_h263_decode_picture_header(MpegEncContext *s)
  3911. {
  3912. int format;
  3913. /* picture header */
  3914. if (get_bits(&s->gb, 22) != 0x20) {
  3915. fprintf(stderr, "Bad picture start code\n");
  3916. return -1;
  3917. }
  3918. s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
  3919. if (get_bits1(&s->gb) != 1) {
  3920. fprintf(stderr, "Bad marker\n");
  3921. return -1; /* marker */
  3922. }
  3923. if (get_bits1(&s->gb) != 0) {
  3924. fprintf(stderr, "Bad H263 id\n");
  3925. return -1; /* h263 id */
  3926. }
  3927. skip_bits1(&s->gb); /* split screen off */
  3928. skip_bits1(&s->gb); /* camera off */
  3929. skip_bits1(&s->gb); /* freeze picture release off */
  3930. format = get_bits(&s->gb, 3);
  3931. if (format != 7) {
  3932. fprintf(stderr, "Intel H263 free format not supported\n");
  3933. return -1;
  3934. }
  3935. s->h263_plus = 0;
  3936. s->pict_type = I_TYPE + get_bits1(&s->gb);
  3937. s->unrestricted_mv = get_bits1(&s->gb);
  3938. s->h263_long_vectors = s->unrestricted_mv;
  3939. if (get_bits1(&s->gb) != 0) {
  3940. fprintf(stderr, "SAC not supported\n");
  3941. return -1; /* SAC: off */
  3942. }
  3943. if (get_bits1(&s->gb) != 0) {
  3944. fprintf(stderr, "Advanced Prediction Mode not supported\n");
  3945. return -1; /* advanced prediction mode: off */
  3946. }
  3947. if (get_bits1(&s->gb) != 0) {
  3948. fprintf(stderr, "PB frame mode no supported\n");
  3949. return -1; /* PB frame mode */
  3950. }
  3951. /* skip unknown header garbage */
  3952. skip_bits(&s->gb, 41);
  3953. s->qscale = get_bits(&s->gb, 5);
  3954. skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
  3955. /* PEI */
  3956. while (get_bits1(&s->gb) != 0) {
  3957. skip_bits(&s->gb, 8);
  3958. }
  3959. s->f_code = 1;
  3960. return 0;
  3961. }