comparison mpegvideo.c @ 297:a1234c032636 libavcodec

force frame type for 2-pass encoding
author michaelni
date Thu, 28 Mar 2002 22:50:22 +0000
parents 6622b0fd036c
children e20de99b6295
comparison
equal deleted inserted replaced
296:c1a8a1b4a24b 297:a1234c032636
512 if (s->fixed_qscale) 512 if (s->fixed_qscale)
513 s->qscale = avctx->quality; 513 s->qscale = avctx->quality;
514 514
515 init_put_bits(&s->pb, buf, buf_size, NULL, NULL); 515 init_put_bits(&s->pb, buf, buf_size, NULL, NULL);
516 516
517 s->force_type= avctx->force_type;
517 if (!s->intra_only) { 518 if (!s->intra_only) {
518 /* first picture of GOP is intra */ 519 /* first picture of GOP is intra */
519 if (s->picture_in_gop_number % s->gop_size==0){ 520 if (s->picture_in_gop_number % s->gop_size==0 || s->force_type==I_TYPE){
520 s->picture_in_gop_number=0; 521 s->picture_in_gop_number=0;
521 s->pict_type = I_TYPE; 522 s->pict_type = I_TYPE;
522 }else 523 }else
523 s->pict_type = P_TYPE; 524 s->pict_type = P_TYPE;
524 } else { 525 } else {
1311 memset(s->mv_table[0] , 0, sizeof(INT16)*s->mb_width*s->mb_height); 1312 memset(s->mv_table[0] , 0, sizeof(INT16)*s->mb_width*s->mb_height);
1312 memset(s->mv_table[1] , 0, sizeof(INT16)*s->mb_width*s->mb_height); 1313 memset(s->mv_table[1] , 0, sizeof(INT16)*s->mb_width*s->mb_height);
1313 memset(s->mb_type , MB_TYPE_INTRA, sizeof(UINT8)*s->mb_width*s->mb_height); 1314 memset(s->mb_type , MB_TYPE_INTRA, sizeof(UINT8)*s->mb_width*s->mb_height);
1314 } 1315 }
1315 1316
1316 if(s->avg_mb_var < s->mc_mb_var && s->pict_type != B_TYPE){ //FIXME subtract MV bits 1317 if(s->avg_mb_var < s->mc_mb_var && s->pict_type != B_TYPE && (!s->force_type)){ //FIXME subtract MV bits
1317 s->pict_type= I_TYPE; 1318 s->pict_type= I_TYPE;
1318 s->picture_in_gop_number=0; 1319 s->picture_in_gop_number=0;
1319 memset(s->mb_type , MB_TYPE_INTRA, sizeof(UINT8)*s->mb_width*s->mb_height); 1320 memset(s->mb_type , MB_TYPE_INTRA, sizeof(UINT8)*s->mb_width*s->mb_height);
1320 //printf("Scene change detected, encoding as I Frame\n"); 1321 //printf("Scene change detected, encoding as I Frame\n");
1321 } 1322 }
1953 double long_term_q; 1954 double long_term_q;
1954 int last_qscale= s->qscale; 1955 int last_qscale= s->qscale;
1955 double fps; 1956 double fps;
1956 INT64 wanted_bits; 1957 INT64 wanted_bits;
1957 emms_c(); 1958 emms_c();
1958 1959
1959 fps= (double)s->frame_rate / FRAME_RATE_BASE; 1960 fps= (double)s->frame_rate / FRAME_RATE_BASE;
1960 wanted_bits= s->bit_rate*(double)s->picture_number/fps; 1961 wanted_bits= s->bit_rate*(double)s->picture_number/fps;
1961 1962
1962 1963
1963 if(s->picture_number>2){ 1964 if(s->picture_number>2){