Mercurial > libavcodec.hg
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); |