comparison mpegvideo.c @ 286:91f7c38f5f37 libavcodec

statistics for 2-pass encoding
author michaelni
date Sat, 23 Mar 2002 17:43:30 +0000
parents 1fc96b02142e
children 32a3dcce2e9b
comparison
equal deleted inserted replaced
285:39b78867b71f 286:91f7c38f5f37
540 } 540 }
541 } 541 }
542 542
543 encode_picture(s, s->picture_number); 543 encode_picture(s, s->picture_number);
544 avctx->key_frame = (s->pict_type == I_TYPE); 544 avctx->key_frame = (s->pict_type == I_TYPE);
545 545 avctx->header_bits = s->header_bits;
546 avctx->mv_bits = s->mv_bits;
547 avctx->misc_bits = s->misc_bits;
548 avctx->i_tex_bits = s->i_tex_bits;
549 avctx->p_tex_bits = s->p_tex_bits;
550 avctx->i_count = s->i_count;
551 avctx->p_count = s->p_count;
552 avctx->skip_count = s->skip_count;
553
546 MPV_frame_end(s); 554 MPV_frame_end(s);
547 s->picture_number++; 555 s->picture_number++;
548 s->picture_in_gop_number++; 556 s->picture_in_gop_number++;
549 557
550 if (s->out_format == FMT_MJPEG) 558 if (s->out_format == FMT_MJPEG)
552 560
553 flush_put_bits(&s->pb); 561 flush_put_bits(&s->pb);
554 s->last_frame_bits= s->frame_bits; 562 s->last_frame_bits= s->frame_bits;
555 s->frame_bits = (pbBufPtr(&s->pb) - s->pb.buf) * 8; 563 s->frame_bits = (pbBufPtr(&s->pb) - s->pb.buf) * 8;
556 s->total_bits += s->frame_bits; 564 s->total_bits += s->frame_bits;
565 avctx->frame_bits = s->frame_bits;
566 //printf("fcode: %d, type: %d, head: %d, mv: %d, misc: %d, frame: %d, itex: %d, ptex: %d\n",
567 //s->f_code, avctx->key_frame, s->header_bits, s->mv_bits, s->misc_bits, s->frame_bits, s->i_tex_bits, s->p_tex_bits);
557 568
558 avctx->quality = s->qscale; 569 avctx->quality = s->qscale;
559 if (avctx->get_psnr) { 570 if (avctx->get_psnr) {
560 /* At this point pict->data should have the original frame */ 571 /* At this point pict->data should have the original frame */
561 /* an s->current_picture should have the coded/decoded frame */ 572 /* an s->current_picture should have the coded/decoded frame */
1069 static void encode_picture(MpegEncContext *s, int picture_number) 1080 static void encode_picture(MpegEncContext *s, int picture_number)
1070 { 1081 {
1071 int mb_x, mb_y, wrap, last_gob, pdif = 0; 1082 int mb_x, mb_y, wrap, last_gob, pdif = 0;
1072 UINT8 *ptr; 1083 UINT8 *ptr;
1073 int i, motion_x, motion_y; 1084 int i, motion_x, motion_y;
1085 int bits;
1074 1086
1075 s->picture_number = picture_number; 1087 s->picture_number = picture_number;
1076 1088
1077 s->last_mc_mb_var = s->mc_mb_var; 1089 s->last_mc_mb_var = s->mc_mb_var;
1078 /* Reset the average MB variance */ 1090 /* Reset the average MB variance */
1132 //else printf("I"); 1144 //else printf("I");
1133 } 1145 }
1134 1146
1135 for(i=MAX_FCODE; i>1; i--){ 1147 for(i=MAX_FCODE; i>1; i--){
1136 loose+= mv_num[i]; 1148 loose+= mv_num[i];
1137 if(loose > 4) break; //FIXME this is pretty ineffective 1149 if(loose > 10) break; //FIXME this is pretty ineffective
1138 } 1150 }
1139 s->f_code= i; 1151 s->f_code= i;
1140 }else{ 1152 }else{
1141 s->f_code= 1; 1153 s->f_code= 1;
1142 } 1154 }
1177 } else { 1189 } else {
1178 convert_matrix(s->q_intra_matrix, s->q_intra_matrix16, s->intra_matrix, s->qscale); 1190 convert_matrix(s->q_intra_matrix, s->q_intra_matrix16, s->intra_matrix, s->qscale);
1179 convert_matrix(s->q_non_intra_matrix, s->q_non_intra_matrix16, s->non_intra_matrix, s->qscale); 1191 convert_matrix(s->q_non_intra_matrix, s->q_non_intra_matrix16, s->non_intra_matrix, s->qscale);
1180 } 1192 }
1181 1193
1194 s->last_bits= get_bit_count(&s->pb);
1182 switch(s->out_format) { 1195 switch(s->out_format) {
1183 case FMT_MJPEG: 1196 case FMT_MJPEG:
1184 mjpeg_picture_header(s); 1197 mjpeg_picture_header(s);
1185 break; 1198 break;
1186 case FMT_H263: 1199 case FMT_H263:
1195 break; 1208 break;
1196 case FMT_MPEG1: 1209 case FMT_MPEG1:
1197 mpeg1_encode_picture_header(s, picture_number); 1210 mpeg1_encode_picture_header(s, picture_number);
1198 break; 1211 break;
1199 } 1212 }
1200 1213 bits= get_bit_count(&s->pb);
1214 s->header_bits= bits - s->last_bits;
1215 s->last_bits= bits;
1216 s->mv_bits=0;
1217 s->misc_bits=0;
1218 s->i_tex_bits=0;
1219 s->p_tex_bits=0;
1220 s->i_count=0;
1221 s->p_count=0;
1222 s->skip_count=0;
1223
1201 /* init last dc values */ 1224 /* init last dc values */
1202 /* note: quant matrix value (8) is implied here */ 1225 /* note: quant matrix value (8) is implied here */
1203 s->last_dc[0] = 128; 1226 s->last_dc[0] = 128;
1204 s->last_dc[1] = 128; 1227 s->last_dc[1] = 128;
1205 s->last_dc[2] = 128; 1228 s->last_dc[2] = 128;
1370 break; 1393 break;
1371 case FMT_MJPEG: 1394 case FMT_MJPEG:
1372 mjpeg_encode_mb(s, s->block); 1395 mjpeg_encode_mb(s, s->block);
1373 break; 1396 break;
1374 } 1397 }
1375 1398
1376 /* decompress blocks so that we keep the state of the decoder */ 1399 /* decompress blocks so that we keep the state of the decoder */
1377 s->mv[0][0][0] = motion_x; 1400 s->mv[0][0][0] = motion_x;
1378 s->mv[0][0][1] = motion_y; 1401 s->mv[0][0][1] = motion_y;
1379 1402
1380 MPV_decode_mb(s, s->block); 1403 MPV_decode_mb(s, s->block);
1392 //fprintf(stderr, "\nMB line: %d\tSize: %u\tAvg. Size: %u", s->mb_y, 1415 //fprintf(stderr, "\nMB line: %d\tSize: %u\tAvg. Size: %u", s->mb_y,
1393 // (s->pb.buf_ptr - s->ptr_last_mb_line), s->mb_line_avgsize); 1416 // (s->pb.buf_ptr - s->ptr_last_mb_line), s->mb_line_avgsize);
1394 s->first_gob_line = 0; 1417 s->first_gob_line = 0;
1395 } 1418 }
1396 } 1419 }
1397 1420
1398 if (s->h263_msmpeg4 && s->pict_type == I_TYPE) 1421 if (s->h263_msmpeg4 && s->pict_type == I_TYPE)
1399 msmpeg4_encode_ext_header(s); 1422 msmpeg4_encode_ext_header(s);
1400 1423
1401 //if (s->gob_number) 1424 //if (s->gob_number)
1402 // fprintf(stderr,"\nNumber of GOB: %d", s->gob_number); 1425 // fprintf(stderr,"\nNumber of GOB: %d", s->gob_number);