Mercurial > libavcodec.hg
comparison mpegvideo.c @ 248:56ee684c48bb libavcodec
- H.263+ decoder support for Advanded INTRA Coding (buggy)
author | pulento |
---|---|
date | Mon, 18 Feb 2002 19:33:27 +0000 |
parents | 3860331a1ecb |
children | 42a0b7b16738 |
comparison
equal
deleted
inserted
replaced
247:6f48cacd9ed9 | 248:56ee684c48bb |
---|---|
179 if (s->motion_val == NULL) | 179 if (s->motion_val == NULL) |
180 goto fail; | 180 goto fail; |
181 memset(s->motion_val, 0, size * 2 * sizeof(INT16)); | 181 memset(s->motion_val, 0, size * 2 * sizeof(INT16)); |
182 } | 182 } |
183 | 183 |
184 if (s->h263_pred) { | 184 if (s->h263_pred || s->h263_plus) { |
185 int y_size, c_size, i, size; | 185 int y_size, c_size, i, size; |
186 | 186 |
187 /* dc values */ | 187 /* dc values */ |
188 | 188 |
189 y_size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2); | 189 y_size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2); |
1060 sub_pixels_2(s->block[4], ptr, s->linesize >> 1, dxy); | 1060 sub_pixels_2(s->block[4], ptr, s->linesize >> 1, dxy); |
1061 ptr = s->last_picture[2] + offset; | 1061 ptr = s->last_picture[2] + offset; |
1062 sub_pixels_2(s->block[5], ptr, s->linesize >> 1, dxy); | 1062 sub_pixels_2(s->block[5], ptr, s->linesize >> 1, dxy); |
1063 } | 1063 } |
1064 emms_c(); | 1064 emms_c(); |
1065 //if (s->avg_mb_var) | 1065 |
1066 // printf("\nqscale=%2d dquant=%2d var=%4d avgvar=%4d", s->qscale, | 1066 #if 0 |
1067 // s->qscale*(s->mb_var[s->mb_width*mb_y+mb_x]/s->avg_mb_var), | 1067 { |
1068 // s->mb_var[s->mb_width*mb_y+mb_x], s->avg_mb_var); | 1068 float adap_parm; |
1069 | |
1070 adap_parm = ((s->avg_mb_var << 1) + s->mb_var[s->mb_width*mb_y+mb_x] + 1.0) / | |
1071 ((s->mb_var[s->mb_width*mb_y+mb_x] << 1) + s->avg_mb_var + 1.0); | |
1072 | |
1073 printf("\ntype=%c qscale=%2d adap=%0.2f dquant=%4.2f var=%4d avgvar=%4d", | |
1074 (s->mb_type[s->mb_width*mb_y+mb_x] > 0) ? 'I' : 'P', | |
1075 s->qscale, adap_parm, s->qscale*adap_parm, | |
1076 s->mb_var[s->mb_width*mb_y+mb_x], s->avg_mb_var); | |
1077 } | |
1078 #endif | |
1069 /* DCT & quantize */ | 1079 /* DCT & quantize */ |
1070 if (s->h263_msmpeg4) { | 1080 if (s->h263_msmpeg4) { |
1071 msmpeg4_dc_scale(s); | 1081 msmpeg4_dc_scale(s); |
1072 } else if (s->h263_pred) { | 1082 } else if (s->h263_pred) { |
1073 h263_dc_scale(s); | 1083 h263_dc_scale(s); |
1329 i = 0; | 1339 i = 0; |
1330 nCoeffs= zigzag_end[ s->block_last_index[n] ]; | 1340 nCoeffs= zigzag_end[ s->block_last_index[n] ]; |
1331 } | 1341 } |
1332 | 1342 |
1333 qmul = s->qscale << 1; | 1343 qmul = s->qscale << 1; |
1334 qadd = (s->qscale - 1) | 1; | 1344 if (s->h263_aic && s->mb_intra) |
1345 qadd = 0; | |
1346 else | |
1347 qadd = (s->qscale - 1) | 1; | |
1335 | 1348 |
1336 for(;i<nCoeffs;i++) { | 1349 for(;i<nCoeffs;i++) { |
1337 level = block[i]; | 1350 level = block[i]; |
1338 if (level) { | 1351 if (level) { |
1339 if (level < 0) { | 1352 if (level < 0) { |
1405 q = qmin; | 1418 q = qmin; |
1406 else if (q > 31) | 1419 else if (q > 31) |
1407 q = 31; | 1420 q = 31; |
1408 qscale = (int)(q + 0.5); | 1421 qscale = (int)(q + 0.5); |
1409 #if defined(DEBUG) | 1422 #if defined(DEBUG) |
1410 printf("%d: total=%0.0f br=%0.1f diff=%d qest=%0.1f\n", | 1423 printf("\n%d: total=%0.0f wanted=%0.0f br=%0.1f diff=%d qest=%2.1f\n", |
1411 s->picture_number, | 1424 s->picture_number, |
1412 (double)total_bits, | 1425 (double)total_bits, |
1426 (double)s->wanted_bits, | |
1413 (float)s->frame_rate / FRAME_RATE_BASE * | 1427 (float)s->frame_rate / FRAME_RATE_BASE * |
1414 total_bits / s->picture_number, | 1428 total_bits / s->picture_number, |
1415 diff, q); | 1429 (int)diff, q); |
1416 #endif | 1430 #endif |
1417 return qscale; | 1431 return qscale; |
1418 } | 1432 } |
1419 | 1433 |
1420 AVCodec mpeg1video_encoder = { | 1434 AVCodec mpeg1video_encoder = { |