Mercurial > libavcodec.hg
comparison h263.c @ 1644:835cf346975e libavcodec
h263 loop filter
fixed h263 modified quantization
CODEC_FLAG_OBMC
author | michael |
---|---|
date | Mon, 01 Dec 2003 15:23:14 +0000 |
parents | 0226cad80fc2 |
children | c3c166ead03a |
comparison
equal
deleted
inserted
replaced
1643:9bb07bd315d9 | 1644:835cf346975e |
---|---|
235 put_bits(&s->pb,3,6); /* Custom Source Format */ | 235 put_bits(&s->pb,3,6); /* Custom Source Format */ |
236 else | 236 else |
237 put_bits(&s->pb, 3, format); | 237 put_bits(&s->pb, 3, format); |
238 | 238 |
239 put_bits(&s->pb,1,0); /* Custom PCF: off */ | 239 put_bits(&s->pb,1,0); /* Custom PCF: off */ |
240 s->umvplus = s->unrestricted_mv; | |
241 put_bits(&s->pb, 1, s->umvplus); /* Unrestricted Motion Vector */ | 240 put_bits(&s->pb, 1, s->umvplus); /* Unrestricted Motion Vector */ |
242 put_bits(&s->pb,1,0); /* SAC: off */ | 241 put_bits(&s->pb,1,0); /* SAC: off */ |
243 put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */ | 242 put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */ |
244 put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */ | 243 put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */ |
245 put_bits(&s->pb,1,0); /* Deblocking Filter: off */ | 244 put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */ |
246 put_bits(&s->pb,1,0); /* Slice Structured: off */ | 245 put_bits(&s->pb,1,0); /* Slice Structured: off */ |
247 put_bits(&s->pb,1,0); /* Reference Picture Selection: off */ | 246 put_bits(&s->pb,1,0); /* Reference Picture Selection: off */ |
248 put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */ | 247 put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */ |
249 put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */ | 248 put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */ |
250 put_bits(&s->pb,1,0); /* Modified Quantization: off */ | 249 put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */ |
251 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */ | 250 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */ |
252 put_bits(&s->pb,3,0); /* Reserved */ | 251 put_bits(&s->pb,3,0); /* Reserved */ |
253 | 252 |
254 put_bits(&s->pb, 3, s->pict_type == P_TYPE); | 253 put_bits(&s->pb, 3, s->pict_type == P_TYPE); |
255 | 254 |
277 } | 276 } |
278 | 277 |
279 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */ | 278 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */ |
280 if (s->umvplus) | 279 if (s->umvplus) |
281 // put_bits(&s->pb,1,1); /* Limited according tables of Annex D */ | 280 // put_bits(&s->pb,1,1); /* Limited according tables of Annex D */ |
281 //FIXME check actual requested range | |
282 put_bits(&s->pb,2,1); /* unlimited */ | 282 put_bits(&s->pb,2,1); /* unlimited */ |
283 | 283 |
284 put_bits(&s->pb, 5, s->qscale); | 284 put_bits(&s->pb, 5, s->qscale); |
285 } | 285 } |
286 | 286 |
1231 s->i_count++; | 1231 s->i_count++; |
1232 } | 1232 } |
1233 } | 1233 } |
1234 } | 1234 } |
1235 #endif | 1235 #endif |
1236 | |
1237 int ff_h263_loop_filter(MpegEncContext * s){ | |
1238 int qp_c; | |
1239 const int linesize = s->linesize; | |
1240 const int uvlinesize= s->uvlinesize; | |
1241 const int xy = s->mb_y * s->mb_stride + s->mb_x; | |
1242 uint8_t *dest_y = s->dest[0]; | |
1243 uint8_t *dest_cb= s->dest[1]; | |
1244 uint8_t *dest_cr= s->dest[2]; | |
1245 | |
1246 // if(s->pict_type==B_TYPE && !s->readable) return; | |
1247 | |
1248 /* | |
1249 Diag Top | |
1250 Left Center | |
1251 */ | |
1252 if(!IS_SKIP(s->current_picture.mb_type[xy])){ | |
1253 qp_c= s->qscale; | |
1254 s->dsp.h263_v_loop_filter(dest_y+8*linesize , linesize, qp_c); | |
1255 s->dsp.h263_v_loop_filter(dest_y+8*linesize+8, linesize, qp_c); | |
1256 }else | |
1257 qp_c= 0; | |
1258 | |
1259 if(s->mb_y){ | |
1260 int qp_dt, qp_t, qp_tc; | |
1261 | |
1262 if(IS_SKIP(s->current_picture.mb_type[xy-s->mb_stride])) | |
1263 qp_t=0; | |
1264 else | |
1265 qp_t= s->current_picture.qscale_table[xy-s->mb_stride]; | |
1266 | |
1267 if(qp_c) | |
1268 qp_tc= qp_c; | |
1269 else | |
1270 qp_tc= qp_t; | |
1271 | |
1272 if(qp_tc){ | |
1273 const int chroma_qp= s->chroma_qscale_table[qp_tc]; | |
1274 s->dsp.h263_v_loop_filter(dest_y , linesize, qp_tc); | |
1275 s->dsp.h263_v_loop_filter(dest_y+8, linesize, qp_tc); | |
1276 | |
1277 s->dsp.h263_v_loop_filter(dest_cb , uvlinesize, chroma_qp); | |
1278 s->dsp.h263_v_loop_filter(dest_cr , uvlinesize, chroma_qp); | |
1279 } | |
1280 | |
1281 if(qp_t) | |
1282 s->dsp.h263_h_loop_filter(dest_y-8*linesize+8 , linesize, qp_t); | |
1283 | |
1284 if(s->mb_x){ | |
1285 if(qp_t || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride])) | |
1286 qp_dt= qp_t; | |
1287 else | |
1288 qp_dt= s->current_picture.qscale_table[xy-1-s->mb_stride]; | |
1289 | |
1290 if(qp_dt){ | |
1291 const int chroma_qp= s->chroma_qscale_table[qp_dt]; | |
1292 s->dsp.h263_h_loop_filter(dest_y -8*linesize , linesize, qp_dt); | |
1293 s->dsp.h263_h_loop_filter(dest_cb-8*uvlinesize, uvlinesize, chroma_qp); | |
1294 s->dsp.h263_h_loop_filter(dest_cb-8*uvlinesize, uvlinesize, chroma_qp); | |
1295 } | |
1296 } | |
1297 } | |
1298 | |
1299 if(qp_c){ | |
1300 s->dsp.h263_h_loop_filter(dest_y +8, linesize, qp_c); | |
1301 if(s->mb_y + 1 == s->mb_height) | |
1302 s->dsp.h263_h_loop_filter(dest_y+8*linesize+8, linesize, qp_c); | |
1303 } | |
1304 | |
1305 if(s->mb_x){ | |
1306 int qp_lc; | |
1307 if(qp_c || IS_SKIP(s->current_picture.mb_type[xy-1])) | |
1308 qp_lc= qp_c; | |
1309 else | |
1310 qp_lc= s->current_picture.qscale_table[xy-1]; | |
1311 | |
1312 if(qp_lc){ | |
1313 s->dsp.h263_h_loop_filter(dest_y, linesize, qp_lc); | |
1314 if(s->mb_y + 1 == s->mb_height){ | |
1315 const int chroma_qp= s->chroma_qscale_table[qp_lc]; | |
1316 s->dsp.h263_h_loop_filter(dest_y +8* linesize, linesize, qp_lc); | |
1317 s->dsp.h263_h_loop_filter(dest_cb , uvlinesize, chroma_qp); | |
1318 s->dsp.h263_h_loop_filter(dest_cr , uvlinesize, chroma_qp); | |
1319 } | |
1320 } | |
1321 } | |
1322 } | |
1236 | 1323 |
1237 static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr) | 1324 static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr) |
1238 { | 1325 { |
1239 int x, y, wrap, a, c, pred_dc, scale; | 1326 int x, y, wrap, a, c, pred_dc, scale; |
1240 int16_t *dc_val, *ac_val; | 1327 int16_t *dc_val, *ac_val; |
2160 | 2247 |
2161 if (s->qscale < 1) | 2248 if (s->qscale < 1) |
2162 s->qscale = 1; | 2249 s->qscale = 1; |
2163 else if (s->qscale > 31) | 2250 else if (s->qscale > 31) |
2164 s->qscale = 31; | 2251 s->qscale = 31; |
2252 | |
2253 s->chroma_qscale= s->chroma_qscale_table[s->qscale]; | |
2165 | 2254 |
2166 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; | 2255 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; |
2167 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ]; | 2256 s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; |
2168 } | 2257 } |
2169 | 2258 |
2170 /** | 2259 /** |
2171 * predicts the dc. | 2260 * predicts the dc. |
2172 * @param n block index (0-3 are luma, 4-5 are chroma) | 2261 * @param n block index (0-3 are luma, 4-5 are chroma) |
2655 s->gob_number = get_bits(&s->gb, 5); /* GN */ | 2744 s->gob_number = get_bits(&s->gb, 5); /* GN */ |
2656 gfid = get_bits(&s->gb, 2); /* GFID */ | 2745 gfid = get_bits(&s->gb, 2); /* GFID */ |
2657 s->qscale = get_bits(&s->gb, 5); /* GQUANT */ | 2746 s->qscale = get_bits(&s->gb, 5); /* GQUANT */ |
2658 if(s->qscale==0) | 2747 if(s->qscale==0) |
2659 return -1; | 2748 return -1; |
2749 s->chroma_qscale= s->chroma_qscale_table[s->qscale]; | |
2750 | |
2660 s->mb_x= 0; | 2751 s->mb_x= 0; |
2661 s->mb_y= s->gob_index* s->gob_number; | 2752 s->mb_y= s->gob_index* s->gob_number; |
2662 if(s->mb_y >= s->mb_height) | 2753 if(s->mb_y >= s->mb_height) |
2663 return -1; | 2754 return -1; |
2664 #ifdef DEBUG | 2755 #ifdef DEBUG |
2818 s->mb_y= mb_num / s->mb_width; | 2909 s->mb_y= mb_num / s->mb_width; |
2819 | 2910 |
2820 if(s->shape != BIN_ONLY_SHAPE){ | 2911 if(s->shape != BIN_ONLY_SHAPE){ |
2821 int qscale= get_bits(&s->gb, s->quant_precision); | 2912 int qscale= get_bits(&s->gb, s->quant_precision); |
2822 if(qscale) | 2913 if(qscale) |
2823 s->qscale= qscale; | 2914 s->chroma_qscale=s->qscale= qscale; |
2824 } | 2915 } |
2825 | 2916 |
2826 if(s->shape == RECT_SHAPE){ | 2917 if(s->shape == RECT_SHAPE){ |
2827 header_extension= get_bits1(&s->gb); | 2918 header_extension= get_bits1(&s->gb); |
2828 } | 2919 } |
3300 | 3391 |
3301 mb_type= s->current_picture.mb_type[xy]; | 3392 mb_type= s->current_picture.mb_type[xy]; |
3302 cbp = s->cbp_table[xy]; | 3393 cbp = s->cbp_table[xy]; |
3303 | 3394 |
3304 if(s->current_picture.qscale_table[xy] != s->qscale){ | 3395 if(s->current_picture.qscale_table[xy] != s->qscale){ |
3305 s->qscale= s->current_picture.qscale_table[xy]; | 3396 s->chroma_qscale=s->qscale= s->current_picture.qscale_table[xy]; |
3306 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; | 3397 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; |
3307 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ]; | 3398 s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; |
3308 } | 3399 } |
3309 | 3400 |
3310 if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) { | 3401 if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) { |
3311 int i; | 3402 int i; |
3312 for(i=0; i<4; i++){ | 3403 for(i=0; i<4; i++){ |
3493 }else{ | 3584 }else{ |
3494 s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0; | 3585 s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0; |
3495 s->mcsel=0; | 3586 s->mcsel=0; |
3496 s->mv[0][0][0] = 0; | 3587 s->mv[0][0][0] = 0; |
3497 s->mv[0][0][1] = 0; | 3588 s->mv[0][0][1] = 0; |
3498 s->mb_skiped = !s->obmc; | 3589 s->mb_skiped = !(s->obmc | s->loop_filter); |
3499 } | 3590 } |
3500 goto end; | 3591 goto end; |
3501 } | 3592 } |
3502 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); | 3593 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); |
3503 //fprintf(stderr, "\tCBPC: %d", cbpc); | 3594 //fprintf(stderr, "\tCBPC: %d", cbpc); |
4438 | 4529 |
4439 if (get_bits1(&s->gb) != 0) { | 4530 if (get_bits1(&s->gb) != 0) { |
4440 av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n"); | 4531 av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n"); |
4441 return -1; /* not PB frame */ | 4532 return -1; /* not PB frame */ |
4442 } | 4533 } |
4443 s->qscale = get_bits(&s->gb, 5); | 4534 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); |
4444 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ | 4535 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ |
4445 | 4536 |
4446 s->width = width; | 4537 s->width = width; |
4447 s->height = height; | 4538 s->height = height; |
4448 } else { | 4539 } else { |
4457 /* OPPTYPE */ | 4548 /* OPPTYPE */ |
4458 format = get_bits(&s->gb, 3); | 4549 format = get_bits(&s->gb, 3); |
4459 dprintf("ufep=1, format: %d\n", format); | 4550 dprintf("ufep=1, format: %d\n", format); |
4460 skip_bits(&s->gb,1); /* Custom PCF */ | 4551 skip_bits(&s->gb,1); /* Custom PCF */ |
4461 s->umvplus = get_bits(&s->gb, 1); /* Unrestricted Motion Vector */ | 4552 s->umvplus = get_bits(&s->gb, 1); /* Unrestricted Motion Vector */ |
4462 skip_bits1(&s->gb); /* Syntax-based Arithmetic Coding (SAC) */ | 4553 if (get_bits1(&s->gb) != 0) { |
4554 av_log(s->avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n"); | |
4555 } | |
4463 s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */ | 4556 s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */ |
4464 s->unrestricted_mv = s->umvplus || s->obmc; | |
4465 s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */ | 4557 s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */ |
4466 | 4558 s->loop_filter= get_bits1(&s->gb); |
4467 if (get_bits1(&s->gb) != 0) { | 4559 s->unrestricted_mv = s->umvplus || s->obmc || s->loop_filter; |
4468 av_log(s->avctx, AV_LOG_ERROR, "Deblocking Filter not supported\n"); | 4560 |
4469 } | |
4470 if (get_bits1(&s->gb) != 0) { | 4561 if (get_bits1(&s->gb) != 0) { |
4471 av_log(s->avctx, AV_LOG_ERROR, "Slice Structured not supported\n"); | 4562 av_log(s->avctx, AV_LOG_ERROR, "Slice Structured not supported\n"); |
4472 } | 4563 } |
4473 if (get_bits1(&s->gb) != 0) { | 4564 if (get_bits1(&s->gb) != 0) { |
4474 av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n"); | 4565 av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n"); |
4476 if (get_bits1(&s->gb) != 0) { | 4567 if (get_bits1(&s->gb) != 0) { |
4477 av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n"); | 4568 av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n"); |
4478 } | 4569 } |
4479 s->alt_inter_vlc= get_bits1(&s->gb); | 4570 s->alt_inter_vlc= get_bits1(&s->gb); |
4480 s->modified_quant= get_bits1(&s->gb); | 4571 s->modified_quant= get_bits1(&s->gb); |
4572 if(s->modified_quant) | |
4573 s->chroma_qscale_table= ff_h263_chroma_qscale_table; | |
4481 | 4574 |
4482 skip_bits(&s->gb, 1); /* Prevent start code emulation */ | 4575 skip_bits(&s->gb, 1); /* Prevent start code emulation */ |
4483 | 4576 |
4484 skip_bits(&s->gb, 3); /* Reserved */ | 4577 skip_bits(&s->gb, 3); /* Reserved */ |
4485 } else if (ufep != 0) { | 4578 } else if (ufep != 0) { |
4537 skip_bits1(&s->gb); | 4630 skip_bits1(&s->gb); |
4538 } | 4631 } |
4539 } | 4632 } |
4540 | 4633 |
4541 s->qscale = get_bits(&s->gb, 5); | 4634 s->qscale = get_bits(&s->gb, 5); |
4635 s->chroma_qscale= s->chroma_qscale_table[s->qscale]; | |
4542 } | 4636 } |
4543 /* PEI */ | 4637 /* PEI */ |
4544 while (get_bits1(&s->gb) != 0) { | 4638 while (get_bits1(&s->gb) != 0) { |
4545 skip_bits(&s->gb, 8); | 4639 skip_bits(&s->gb, 8); |
4546 } | 4640 } |
4553 s->y_dc_scale_table= | 4647 s->y_dc_scale_table= |
4554 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; | 4648 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; |
4555 } | 4649 } |
4556 | 4650 |
4557 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ | 4651 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ |
4558 av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s\n", | 4652 av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s\n", |
4559 s->qscale, av_get_pict_type_char(s->pict_type), | 4653 s->qscale, av_get_pict_type_char(s->pict_type), |
4560 s->gb.size_in_bits, 1-s->no_rounding, | 4654 s->gb.size_in_bits, 1-s->no_rounding, |
4561 s->obmc ? " AP" : "", | 4655 s->obmc ? " AP" : "", |
4562 s->umvplus ? " UMV" : "", | 4656 s->umvplus ? " UMV" : "", |
4563 s->h263_long_vectors ? " LONG" : "", | 4657 s->h263_long_vectors ? " LONG" : "", |
4564 s->h263_plus ? " +" : "", | 4658 s->h263_plus ? " +" : "", |
4565 s->h263_aic ? " AIC" : "", | 4659 s->h263_aic ? " AIC" : "", |
4566 s->alt_inter_vlc ? " AIV" : "", | 4660 s->alt_inter_vlc ? " AIV" : "", |
4567 s->modified_quant ? " MQ" : "" | 4661 s->modified_quant ? " MQ" : "", |
4662 s->loop_filter ? " LOOP" : "" | |
4568 ); | 4663 ); |
4569 } | 4664 } |
4570 #if 1 | 4665 #if 1 |
4571 if (s->pict_type == I_TYPE && s->avctx->codec_tag == ff_get_fourcc("ZYGO")){ | 4666 if (s->pict_type == I_TYPE && s->avctx->codec_tag == ff_get_fourcc("ZYGO")){ |
4572 int i,j; | 4667 int i,j; |
4893 } | 4988 } |
4894 } | 4989 } |
4895 | 4990 |
4896 s->progressive_sequence= get_bits1(gb)^1; | 4991 s->progressive_sequence= get_bits1(gb)^1; |
4897 if(!get_bits1(gb) && (s->avctx->debug & FF_DEBUG_PICT_INFO)) | 4992 if(!get_bits1(gb) && (s->avctx->debug & FF_DEBUG_PICT_INFO)) |
4898 av_log(s->avctx, AV_LOG_ERROR, "OBMC not supported (very likely buggy encoder)\n"); /* OBMC Disable */ | 4993 av_log(s->avctx, AV_LOG_INFO, "MPEG4 OBMC not supported (very likely buggy encoder)\n"); /* OBMC Disable */ |
4899 if (vo_ver_id == 1) { | 4994 if (vo_ver_id == 1) { |
4900 s->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */ | 4995 s->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */ |
4901 } else { | 4996 } else { |
4902 s->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */ | 4997 s->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */ |
4903 } | 4998 } |
5249 if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n"); | 5344 if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n"); |
5250 if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n"); | 5345 if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n"); |
5251 } | 5346 } |
5252 | 5347 |
5253 if (s->shape != BIN_ONLY_SHAPE) { | 5348 if (s->shape != BIN_ONLY_SHAPE) { |
5254 s->qscale = get_bits(gb, s->quant_precision); | 5349 s->chroma_qscale= s->qscale = get_bits(gb, s->quant_precision); |
5255 if(s->qscale==0){ | 5350 if(s->qscale==0){ |
5256 av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (qscale=0)\n"); | 5351 av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (qscale=0)\n"); |
5257 return -1; // makes no sense to continue, as there is nothing left from the image then | 5352 return -1; // makes no sense to continue, as there is nothing left from the image then |
5258 } | 5353 } |
5259 | 5354 |
5443 } | 5538 } |
5444 | 5539 |
5445 /* skip unknown header garbage */ | 5540 /* skip unknown header garbage */ |
5446 skip_bits(&s->gb, 41); | 5541 skip_bits(&s->gb, 41); |
5447 | 5542 |
5448 s->qscale = get_bits(&s->gb, 5); | 5543 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); |
5449 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ | 5544 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ |
5450 | 5545 |
5451 /* PEI */ | 5546 /* PEI */ |
5452 while (get_bits1(&s->gb) != 0) { | 5547 while (get_bits1(&s->gb) != 0) { |
5453 skip_bits(&s->gb, 8); | 5548 skip_bits(&s->gb, 8); |
5517 | 5612 |
5518 s->pict_type = I_TYPE + get_bits(&s->gb, 2); | 5613 s->pict_type = I_TYPE + get_bits(&s->gb, 2); |
5519 if (s->pict_type > P_TYPE) | 5614 if (s->pict_type > P_TYPE) |
5520 s->pict_type = P_TYPE; | 5615 s->pict_type = P_TYPE; |
5521 skip_bits1(&s->gb); /* deblocking flag */ | 5616 skip_bits1(&s->gb); /* deblocking flag */ |
5522 s->qscale = get_bits(&s->gb, 5); | 5617 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); |
5523 | 5618 |
5524 s->h263_plus = 0; | 5619 s->h263_plus = 0; |
5525 | 5620 |
5526 s->unrestricted_mv = 1; | 5621 s->unrestricted_mv = 1; |
5527 s->h263_long_vectors = 0; | 5622 s->h263_long_vectors = 0; |