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