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 = {