comparison h263.c @ 295:6622b0fd036c libavcodec

mpeg4 4MV encoding
author michaelni
date Thu, 28 Mar 2002 04:25:35 +0000
parents 944632089814
children d7f71eb89558
comparison
equal deleted inserted replaced
294:944632089814 295:6622b0fd036c
261 cbp = 0; 261 cbp = 0;
262 for (i = 0; i < 6; i++) { 262 for (i = 0; i < 6; i++) {
263 if (s->block_last_index[i] >= 0) 263 if (s->block_last_index[i] >= 0)
264 cbp |= 1 << (5 - i); 264 cbp |= 1 << (5 - i);
265 } 265 }
266 if ((cbp | motion_x | motion_y) == 0) { 266 if ((cbp | motion_x | motion_y) == 0 && s->mv_type==MV_TYPE_16X16) {
267 /* skip macroblock */ 267 /* skip macroblock */
268 put_bits(&s->pb, 1, 1); 268 put_bits(&s->pb, 1, 1);
269 s->misc_bits++; 269 s->misc_bits++;
270 s->last_bits++; 270 s->last_bits++;
271 s->skip_count++; 271 s->skip_count++;
272 return; 272 return;
273 } 273 }
274 put_bits(&s->pb, 1, 0); /* mb coded */ 274 put_bits(&s->pb, 1, 0); /* mb coded */
275 cbpc = cbp & 3; 275 if(s->mv_type==MV_TYPE_16X16){
276 put_bits(&s->pb, 276 cbpc = cbp & 3;
277 inter_MCBPC_bits[cbpc], 277 put_bits(&s->pb,
278 inter_MCBPC_code[cbpc]); 278 inter_MCBPC_bits[cbpc],
279 cbpy = cbp >> 2; 279 inter_MCBPC_code[cbpc]);
280 cbpy ^= 0xf; 280 cbpy = cbp >> 2;
281 put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]); 281 cbpy ^= 0xf;
282 282 put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
283 bits= get_bit_count(&s->pb); 283
284 s->misc_bits+= bits - s->last_bits; 284 bits= get_bit_count(&s->pb);
285 s->last_bits=bits; 285 s->misc_bits+= bits - s->last_bits;
286 286 s->last_bits=bits;
287 /* motion vectors: 16x16 mode only now */ 287
288 h263_pred_motion(s, 0, &pred_x, &pred_y); 288 /* motion vectors: 16x16 mode */
289 289 h263_pred_motion(s, 0, &pred_x, &pred_y);
290 h263_encode_motion(s, motion_x - pred_x); 290
291 h263_encode_motion(s, motion_y - pred_y); 291 h263_encode_motion(s, motion_x - pred_x);
292 292 h263_encode_motion(s, motion_y - pred_y);
293 }else{
294 cbpc = (cbp & 3)+16;
295 put_bits(&s->pb,
296 inter_MCBPC_bits[cbpc],
297 inter_MCBPC_code[cbpc]);
298 cbpy = cbp >> 2;
299 cbpy ^= 0xf;
300 put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
301
302 bits= get_bit_count(&s->pb);
303 s->misc_bits+= bits - s->last_bits;
304 s->last_bits=bits;
305
306 for(i=0; i<4; i++){
307 /* motion vectors: 8x8 mode*/
308 h263_pred_motion(s, i, &pred_x, &pred_y);
309
310 h263_encode_motion(s, s->motion_val[ s->block_index[i] ][0] - pred_x);
311 h263_encode_motion(s, s->motion_val[ s->block_index[i] ][1] - pred_y);
312 }
313 }
293 bits= get_bit_count(&s->pb); 314 bits= get_bit_count(&s->pb);
294 s->mv_bits+= bits - s->last_bits; 315 s->mv_bits+= bits - s->last_bits;
295 s->last_bits=bits; 316 s->last_bits=bits;
296 317
297 /* encode each block */ 318 /* encode each block */