Mercurial > libavcodec.hg
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 */ |